mirror of
https://github.com/MacPass/MacPass.git
synced 2026-01-31 18:58:24 +00:00
Compare commits
20 Commits
master
...
feature/ed
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
72718274b0 | ||
|
|
200e4e259a | ||
|
|
217d1adca9 | ||
|
|
14b9fd8d8f | ||
|
|
36ad08ba25 | ||
|
|
9bb1d3e38c | ||
|
|
5547aad7c3 | ||
|
|
d746fdd5c8 | ||
|
|
ae59557407 | ||
|
|
7b24e4cbde | ||
|
|
ce24b1b57c | ||
|
|
7113b9f355 | ||
|
|
401d0d1b2f | ||
|
|
cea10e83b1 | ||
|
|
0572431a51 | ||
|
|
0be721aec8 | ||
|
|
7eca854b8d | ||
|
|
f761eb7c13 | ||
|
|
a790103cd2 | ||
|
|
101cf7f6bd |
14
.github/workflows/nightly.yml
vendored
14
.github/workflows/nightly.yml
vendored
@@ -6,22 +6,20 @@ on:
|
|||||||
#pull_request:
|
#pull_request:
|
||||||
# branches: [ master ]
|
# branches: [ master ]
|
||||||
schedule:
|
schedule:
|
||||||
- cron: "0 23 * * *"
|
- cron: '0 23 * * *'
|
||||||
|
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
nightly:
|
nightly:
|
||||||
runs-on: macos-latest
|
runs-on: macos-10.15
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v2
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
|
|
||||||
- name: Bootstrap Carthage
|
- name: Bootstrap Carthage
|
||||||
env:
|
|
||||||
GITHUB_ACCESS_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
run: carthage bootstrap --platform macOS
|
run: carthage bootstrap --platform macOS
|
||||||
|
|
||||||
- name: Install xcpretty
|
- name: Install xcpretty
|
||||||
@@ -31,7 +29,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
set -o pipefail
|
set -o pipefail
|
||||||
xcodebuild clean
|
xcodebuild clean
|
||||||
xcodebuild build -configuration release -project MacPass.xcodeproj -scheme MacPass CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGN_ENTITLEMENTS="" -derivedDataPath ./build | xcpretty -c
|
xcodebuild build -configuration release -project MacPass.xcodeproj -scheme MacPass CODE_SIGNING_REQUIRED=NO -derivedDataPath ./build | xcpretty -c
|
||||||
|
|
||||||
- name: Export Localizations
|
- name: Export Localizations
|
||||||
run: |
|
run: |
|
||||||
@@ -53,7 +51,7 @@ jobs:
|
|||||||
cd ./build/Build/Products/Release
|
cd ./build/Build/Products/Release
|
||||||
zip -9ry MacPass-continuous.zip MacPass.app
|
zip -9ry MacPass-continuous.zip MacPass.app
|
||||||
|
|
||||||
- name: Create SHA256 Hash
|
- name: Create MD5 Hash
|
||||||
run: |
|
run: |
|
||||||
cd ./build/Build/Products/Release
|
cd ./build/Build/Products/Release
|
||||||
shasum -a 256 MacPass-continuous.zip > MacPass-continuous.zip.sha256
|
shasum -a 256 MacPass-continuous.zip > MacPass-continuous.zip.sha256
|
||||||
@@ -69,7 +67,7 @@ jobs:
|
|||||||
# ./build/Build/Products/Release/MacPass-continuous.zip.sha256
|
# ./build/Build/Products/Release/MacPass-continuous.zip.sha256
|
||||||
|
|
||||||
- name: Release
|
- name: Release
|
||||||
uses: softprops/action-gh-release@v2
|
uses: softprops/action-gh-release@v1
|
||||||
if: startsWith(github.ref, 'refs/tags/')
|
if: startsWith(github.ref, 'refs/tags/')
|
||||||
with:
|
with:
|
||||||
tag_name: continuous
|
tag_name: continuous
|
||||||
|
|||||||
Binary file not shown.
15
AutotypeOverlay/AOAppDelegate.h
Normal file
15
AutotypeOverlay/AOAppDelegate.h
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
//
|
||||||
|
// AppDelegate.h
|
||||||
|
// AutotypeOverlay
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 09.03.22.
|
||||||
|
// Copyright © 2022 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
|
@interface AOAppDelegate : NSObject <NSApplicationDelegate>
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
80
AutotypeOverlay/AOAppDelegate.m
Normal file
80
AutotypeOverlay/AOAppDelegate.m
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
//
|
||||||
|
// AppDelegate.m
|
||||||
|
// AutotypeOverlay
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 09.03.22.
|
||||||
|
// Copyright © 2022 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "AOAppDelegate.h"
|
||||||
|
#import <ApplicationServices/ApplicationServices.h>
|
||||||
|
|
||||||
|
@interface AOAppDelegate ()
|
||||||
|
|
||||||
|
@property (strong) IBOutlet NSWindow *window;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation AOAppDelegate
|
||||||
|
|
||||||
|
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
|
||||||
|
// Insert code here to initialize your application
|
||||||
|
|
||||||
|
if(!AXIsProcessTrusted()) {
|
||||||
|
NSString *name = [NSBundle.mainBundle.infoDictionary[@"CFBundleName"] copy];
|
||||||
|
NSLog(@"%@ requires Accessibilty Permissions to work.", name);
|
||||||
|
}
|
||||||
|
|
||||||
|
[NSWorkspace.sharedWorkspace.notificationCenter addObserver:self selector:@selector(_didDeactivateApplication:) name:NSWorkspaceDidDeactivateApplicationNotification object:nil];
|
||||||
|
[NSWorkspace.sharedWorkspace.notificationCenter addObserver:self selector:@selector(_didActivateApplication:) name:NSWorkspaceDidActivateApplicationNotification object:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (void)applicationWillTerminate:(NSNotification *)aNotification {
|
||||||
|
// Insert code here to tear down your application
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (BOOL)applicationSupportsSecureRestorableState:(NSApplication *)app {
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)_didDeactivateApplication:(NSNotification *)notification {
|
||||||
|
//[self.window orderOut:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)_didActivateApplication:(NSNotification *)notification {
|
||||||
|
AXUIElementRef systemWide = AXUIElementCreateSystemWide();
|
||||||
|
if(NULL == systemWide) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
CFTypeRef elementRef;
|
||||||
|
AXError error = AXUIElementCopyAttributeValue(systemWide, kAXFocusedUIElementAttribute, &elementRef);
|
||||||
|
if(error == kAXErrorSuccess) {
|
||||||
|
[self _updateFocusedElement:elementRef];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)_updateFocusedElement:(AXUIElementRef)element {
|
||||||
|
if(CFGetTypeID(element) != AXUIElementGetTypeID()) {
|
||||||
|
return; // wrong type or NULL
|
||||||
|
}
|
||||||
|
CFTypeRef positionRef;
|
||||||
|
AXError error = AXUIElementCopyAttributeValue(element, kAXPositionAttribute, &positionRef);
|
||||||
|
if(error != kAXErrorSuccess || kAXValueTypeCGPoint != AXValueGetType(positionRef)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
CGPoint position;
|
||||||
|
AXValueGetValue(positionRef, kAXValueTypeCGPoint, &position);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[self.window orderFront:self];
|
||||||
|
[self.window setFrameTopLeftPoint:position];
|
||||||
|
NSLog(@"Setting position to %@", NSStringFromPoint(position));
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"colors" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "mac",
|
||||||
|
"scale" : "1x",
|
||||||
|
"size" : "16x16"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "mac",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "16x16"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "mac",
|
||||||
|
"scale" : "1x",
|
||||||
|
"size" : "32x32"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "mac",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "32x32"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "mac",
|
||||||
|
"scale" : "1x",
|
||||||
|
"size" : "128x128"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "mac",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "128x128"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "mac",
|
||||||
|
"scale" : "1x",
|
||||||
|
"size" : "256x256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "mac",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "256x256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "mac",
|
||||||
|
"scale" : "1x",
|
||||||
|
"size" : "512x512"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "mac",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "512x512"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
6
AutotypeOverlay/Assets.xcassets/Contents.json
Normal file
6
AutotypeOverlay/Assets.xcassets/Contents.json
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
5
AutotypeOverlay/AutotypeOverlay.entitlements
Normal file
5
AutotypeOverlay/AutotypeOverlay.entitlements
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict/>
|
||||||
|
</plist>
|
||||||
696
AutotypeOverlay/Base.lproj/MainMenu.xib
Normal file
696
AutotypeOverlay/Base.lproj/MainMenu.xib
Normal file
@@ -0,0 +1,696 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19529" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||||
|
<dependencies>
|
||||||
|
<deployment identifier="macosx"/>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19529"/>
|
||||||
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
|
</dependencies>
|
||||||
|
<objects>
|
||||||
|
<customObject id="-2" userLabel="File's Owner" customClass="NSApplication">
|
||||||
|
<connections>
|
||||||
|
<outlet property="delegate" destination="Voe-Tx-rLC" id="GzC-gU-4Uq"/>
|
||||||
|
</connections>
|
||||||
|
</customObject>
|
||||||
|
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||||
|
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||||
|
<customObject id="Voe-Tx-rLC" customClass="AOAppDelegate">
|
||||||
|
<connections>
|
||||||
|
<outlet property="window" destination="QvC-M9-y7g" id="gIp-Ho-8D9"/>
|
||||||
|
</connections>
|
||||||
|
</customObject>
|
||||||
|
<customObject id="YLy-65-1bz" customClass="NSFontManager"/>
|
||||||
|
<menu title="Main Menu" systemMenu="main" id="AYu-sK-qS6">
|
||||||
|
<items>
|
||||||
|
<menuItem title="AutotypeOverlay" id="1Xt-HY-uBw">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="AutotypeOverlay" systemMenu="apple" id="uQy-DD-JDr">
|
||||||
|
<items>
|
||||||
|
<menuItem title="About AutotypeOverlay" id="5kV-Vb-QxS">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="orderFrontStandardAboutPanel:" target="-1" id="Exp-CZ-Vem"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem isSeparatorItem="YES" id="VOq-y0-SEH"/>
|
||||||
|
<menuItem title="Preferences…" keyEquivalent="," id="BOF-NM-1cW"/>
|
||||||
|
<menuItem isSeparatorItem="YES" id="wFC-TO-SCJ"/>
|
||||||
|
<menuItem title="Services" id="NMo-om-nkz">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="Services" systemMenu="services" id="hz9-B4-Xy5"/>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem isSeparatorItem="YES" id="4je-JR-u6R"/>
|
||||||
|
<menuItem title="Hide AutotypeOverlay" keyEquivalent="h" id="Olw-nP-bQN">
|
||||||
|
<connections>
|
||||||
|
<action selector="hide:" target="-1" id="PnN-Uc-m68"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Hide Others" keyEquivalent="h" id="Vdr-fp-XzO">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="hideOtherApplications:" target="-1" id="VT4-aY-XCT"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Show All" id="Kd2-mp-pUS">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="unhideAllApplications:" target="-1" id="Dhg-Le-xox"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem isSeparatorItem="YES" id="kCx-OE-vgT"/>
|
||||||
|
<menuItem title="Quit AutotypeOverlay" keyEquivalent="q" id="4sb-4s-VLi">
|
||||||
|
<connections>
|
||||||
|
<action selector="terminate:" target="-1" id="Te7-pn-YzF"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="File" id="dMs-cI-mzQ">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="File" id="bib-Uj-vzu">
|
||||||
|
<items>
|
||||||
|
<menuItem title="New" keyEquivalent="n" id="Was-JA-tGl">
|
||||||
|
<connections>
|
||||||
|
<action selector="newDocument:" target="-1" id="4Si-XN-c54"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Open…" keyEquivalent="o" id="IAo-SY-fd9">
|
||||||
|
<connections>
|
||||||
|
<action selector="openDocument:" target="-1" id="bVn-NM-KNZ"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Open Recent" id="tXI-mr-wws">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="Open Recent" systemMenu="recentDocuments" id="oas-Oc-fiZ">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Clear Menu" id="vNY-rz-j42">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="clearRecentDocuments:" target="-1" id="Daa-9d-B3U"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem isSeparatorItem="YES" id="m54-Is-iLE"/>
|
||||||
|
<menuItem title="Close" keyEquivalent="w" id="DVo-aG-piG">
|
||||||
|
<connections>
|
||||||
|
<action selector="performClose:" target="-1" id="HmO-Ls-i7Q"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Save…" keyEquivalent="s" id="pxx-59-PXV">
|
||||||
|
<connections>
|
||||||
|
<action selector="saveDocument:" target="-1" id="teZ-XB-qJY"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Save As…" keyEquivalent="S" id="Bw7-FT-i3A">
|
||||||
|
<connections>
|
||||||
|
<action selector="saveDocumentAs:" target="-1" id="mDf-zr-I0C"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Revert to Saved" keyEquivalent="r" id="KaW-ft-85H">
|
||||||
|
<connections>
|
||||||
|
<action selector="revertDocumentToSaved:" target="-1" id="iJ3-Pv-kwq"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem isSeparatorItem="YES" id="aJh-i4-bef"/>
|
||||||
|
<menuItem title="Page Setup…" keyEquivalent="P" id="qIS-W8-SiK">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="runPageLayout:" target="-1" id="Din-rz-gC5"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Print…" keyEquivalent="p" id="aTl-1u-JFS">
|
||||||
|
<connections>
|
||||||
|
<action selector="print:" target="-1" id="qaZ-4w-aoO"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Edit" id="5QF-Oa-p0T">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="Edit" id="W48-6f-4Dl">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Undo" keyEquivalent="z" id="dRJ-4n-Yzg">
|
||||||
|
<connections>
|
||||||
|
<action selector="undo:" target="-1" id="M6e-cu-g7V"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Redo" keyEquivalent="Z" id="6dh-zS-Vam">
|
||||||
|
<connections>
|
||||||
|
<action selector="redo:" target="-1" id="oIA-Rs-6OD"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem isSeparatorItem="YES" id="WRV-NI-Exz"/>
|
||||||
|
<menuItem title="Cut" keyEquivalent="x" id="uRl-iY-unG">
|
||||||
|
<connections>
|
||||||
|
<action selector="cut:" target="-1" id="YJe-68-I9s"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Copy" keyEquivalent="c" id="x3v-GG-iWU">
|
||||||
|
<connections>
|
||||||
|
<action selector="copy:" target="-1" id="G1f-GL-Joy"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Paste" keyEquivalent="v" id="gVA-U4-sdL">
|
||||||
|
<connections>
|
||||||
|
<action selector="paste:" target="-1" id="UvS-8e-Qdg"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Paste and Match Style" keyEquivalent="V" id="WeT-3V-zwk">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="pasteAsPlainText:" target="-1" id="cEh-KX-wJQ"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Delete" id="pa3-QI-u2k">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="delete:" target="-1" id="0Mk-Ml-PaM"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Select All" keyEquivalent="a" id="Ruw-6m-B2m">
|
||||||
|
<connections>
|
||||||
|
<action selector="selectAll:" target="-1" id="VNm-Mi-diN"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem isSeparatorItem="YES" id="uyl-h8-XO2"/>
|
||||||
|
<menuItem title="Find" id="4EN-yA-p0u">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="Find" id="1b7-l0-nxx">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Find…" tag="1" keyEquivalent="f" id="Xz5-n4-O0W">
|
||||||
|
<connections>
|
||||||
|
<action selector="performFindPanelAction:" target="-1" id="cD7-Qs-BN4"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Find and Replace…" tag="12" keyEquivalent="f" id="YEy-JH-Tfz">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="performFindPanelAction:" target="-1" id="WD3-Gg-5AJ"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Find Next" tag="2" keyEquivalent="g" id="q09-fT-Sye">
|
||||||
|
<connections>
|
||||||
|
<action selector="performFindPanelAction:" target="-1" id="NDo-RZ-v9R"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Find Previous" tag="3" keyEquivalent="G" id="OwM-mh-QMV">
|
||||||
|
<connections>
|
||||||
|
<action selector="performFindPanelAction:" target="-1" id="HOh-sY-3ay"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Use Selection for Find" tag="7" keyEquivalent="e" id="buJ-ug-pKt">
|
||||||
|
<connections>
|
||||||
|
<action selector="performFindPanelAction:" target="-1" id="U76-nv-p5D"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Jump to Selection" keyEquivalent="j" id="S0p-oC-mLd">
|
||||||
|
<connections>
|
||||||
|
<action selector="centerSelectionInVisibleArea:" target="-1" id="IOG-6D-g5B"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Spelling and Grammar" id="Dv1-io-Yv7">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="Spelling" id="3IN-sU-3Bg">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Show Spelling and Grammar" keyEquivalent=":" id="HFo-cy-zxI">
|
||||||
|
<connections>
|
||||||
|
<action selector="showGuessPanel:" target="-1" id="vFj-Ks-hy3"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Check Document Now" keyEquivalent=";" id="hz2-CU-CR7">
|
||||||
|
<connections>
|
||||||
|
<action selector="checkSpelling:" target="-1" id="fz7-VC-reM"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem isSeparatorItem="YES" id="bNw-od-mp5"/>
|
||||||
|
<menuItem title="Check Spelling While Typing" id="rbD-Rh-wIN">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleContinuousSpellChecking:" target="-1" id="7w6-Qz-0kB"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Check Grammar With Spelling" id="mK6-2p-4JG">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleGrammarChecking:" target="-1" id="muD-Qn-j4w"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Correct Spelling Automatically" id="78Y-hA-62v">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleAutomaticSpellingCorrection:" target="-1" id="2lM-Qi-WAP"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Substitutions" id="9ic-FL-obx">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="Substitutions" id="FeM-D8-WVr">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Show Substitutions" id="z6F-FW-3nz">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="orderFrontSubstitutionsPanel:" target="-1" id="oku-mr-iSq"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem isSeparatorItem="YES" id="gPx-C9-uUO"/>
|
||||||
|
<menuItem title="Smart Copy/Paste" id="9yt-4B-nSM">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleSmartInsertDelete:" target="-1" id="3IJ-Se-DZD"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Smart Quotes" id="hQb-2v-fYv">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleAutomaticQuoteSubstitution:" target="-1" id="ptq-xd-QOA"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Smart Dashes" id="rgM-f4-ycn">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleAutomaticDashSubstitution:" target="-1" id="oCt-pO-9gS"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Smart Links" id="cwL-P1-jid">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleAutomaticLinkDetection:" target="-1" id="Gip-E3-Fov"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Data Detectors" id="tRr-pd-1PS">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleAutomaticDataDetection:" target="-1" id="R1I-Nq-Kbl"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Text Replacement" id="HFQ-gK-NFA">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleAutomaticTextReplacement:" target="-1" id="DvP-Fe-Py6"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Transformations" id="2oI-Rn-ZJC">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="Transformations" id="c8a-y6-VQd">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Make Upper Case" id="vmV-6d-7jI">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="uppercaseWord:" target="-1" id="sPh-Tk-edu"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Make Lower Case" id="d9M-CD-aMd">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="lowercaseWord:" target="-1" id="iUZ-b5-hil"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Capitalize" id="UEZ-Bs-lqG">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="capitalizeWord:" target="-1" id="26H-TL-nsh"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Speech" id="xrE-MZ-jX0">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="Speech" id="3rS-ZA-NoH">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Start Speaking" id="Ynk-f8-cLZ">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="startSpeaking:" target="-1" id="654-Ng-kyl"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Stop Speaking" id="Oyz-dy-DGm">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="stopSpeaking:" target="-1" id="dX8-6p-jy9"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Format" id="jxT-CU-nIS">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="Format" id="GEO-Iw-cKr">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Font" id="Gi5-1S-RQB">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="Font" systemMenu="font" id="aXa-aM-Jaq">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Show Fonts" keyEquivalent="t" id="Q5e-8K-NDq">
|
||||||
|
<connections>
|
||||||
|
<action selector="orderFrontFontPanel:" target="YLy-65-1bz" id="WHr-nq-2xA"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Bold" tag="2" keyEquivalent="b" id="GB9-OM-e27">
|
||||||
|
<connections>
|
||||||
|
<action selector="addFontTrait:" target="YLy-65-1bz" id="hqk-hr-sYV"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Italic" tag="1" keyEquivalent="i" id="Vjx-xi-njq">
|
||||||
|
<connections>
|
||||||
|
<action selector="addFontTrait:" target="YLy-65-1bz" id="IHV-OB-c03"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Underline" keyEquivalent="u" id="WRG-CD-K1S">
|
||||||
|
<connections>
|
||||||
|
<action selector="underline:" target="-1" id="FYS-2b-JAY"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem isSeparatorItem="YES" id="5gT-KC-WSO"/>
|
||||||
|
<menuItem title="Bigger" tag="3" keyEquivalent="+" id="Ptp-SP-VEL">
|
||||||
|
<connections>
|
||||||
|
<action selector="modifyFont:" target="YLy-65-1bz" id="Uc7-di-UnL"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Smaller" tag="4" keyEquivalent="-" id="i1d-Er-qST">
|
||||||
|
<connections>
|
||||||
|
<action selector="modifyFont:" target="YLy-65-1bz" id="HcX-Lf-eNd"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem isSeparatorItem="YES" id="kx3-Dk-x3B"/>
|
||||||
|
<menuItem title="Kern" id="jBQ-r6-VK2">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="Kern" id="tlD-Oa-oAM">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Use Default" id="GUa-eO-cwY">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="useStandardKerning:" target="-1" id="6dk-9l-Ckg"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Use None" id="cDB-IK-hbR">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="turnOffKerning:" target="-1" id="U8a-gz-Maa"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Tighten" id="46P-cB-AYj">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="tightenKerning:" target="-1" id="hr7-Nz-8ro"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Loosen" id="ogc-rX-tC1">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="loosenKerning:" target="-1" id="8i4-f9-FKE"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Ligatures" id="o6e-r0-MWq">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="Ligatures" id="w0m-vy-SC9">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Use Default" id="agt-UL-0e3">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="useStandardLigatures:" target="-1" id="7uR-wd-Dx6"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Use None" id="J7y-lM-qPV">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="turnOffLigatures:" target="-1" id="iX2-gA-Ilz"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Use All" id="xQD-1f-W4t">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="useAllLigatures:" target="-1" id="KcB-kA-TuK"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Baseline" id="OaQ-X3-Vso">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="Baseline" id="ijk-EB-dga">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Use Default" id="3Om-Ey-2VK">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="unscript:" target="-1" id="0vZ-95-Ywn"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Superscript" id="Rqc-34-cIF">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="superscript:" target="-1" id="3qV-fo-wpU"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Subscript" id="I0S-gh-46l">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="subscript:" target="-1" id="Q6W-4W-IGz"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Raise" id="2h7-ER-AoG">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="raiseBaseline:" target="-1" id="4sk-31-7Q9"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Lower" id="1tx-W0-xDw">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="lowerBaseline:" target="-1" id="OF1-bc-KW4"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem isSeparatorItem="YES" id="Ndw-q3-faq"/>
|
||||||
|
<menuItem title="Show Colors" keyEquivalent="C" id="bgn-CT-cEk">
|
||||||
|
<connections>
|
||||||
|
<action selector="orderFrontColorPanel:" target="-1" id="mSX-Xz-DV3"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem isSeparatorItem="YES" id="iMs-zA-UFJ"/>
|
||||||
|
<menuItem title="Copy Style" keyEquivalent="c" id="5Vv-lz-BsD">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="copyFont:" target="-1" id="GJO-xA-L4q"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Paste Style" keyEquivalent="v" id="vKC-jM-MkH">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="pasteFont:" target="-1" id="JfD-CL-leO"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Text" id="Fal-I4-PZk">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="Text" id="d9c-me-L2H">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Align Left" keyEquivalent="{" id="ZM1-6Q-yy1">
|
||||||
|
<connections>
|
||||||
|
<action selector="alignLeft:" target="-1" id="zUv-R1-uAa"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Center" keyEquivalent="|" id="VIY-Ag-zcb">
|
||||||
|
<connections>
|
||||||
|
<action selector="alignCenter:" target="-1" id="spX-mk-kcS"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Justify" id="J5U-5w-g23">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="alignJustified:" target="-1" id="ljL-7U-jND"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Align Right" keyEquivalent="}" id="wb2-vD-lq4">
|
||||||
|
<connections>
|
||||||
|
<action selector="alignRight:" target="-1" id="r48-bG-YeY"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem isSeparatorItem="YES" id="4s2-GY-VfK"/>
|
||||||
|
<menuItem title="Writing Direction" id="H1b-Si-o9J">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="Writing Direction" id="8mr-sm-Yjd">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Paragraph" enabled="NO" id="ZvO-Gk-QUH">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem id="YGs-j5-SAR">
|
||||||
|
<string key="title"> Default</string>
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="makeBaseWritingDirectionNatural:" target="-1" id="qtV-5e-UBP"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem id="Lbh-J2-qVU">
|
||||||
|
<string key="title"> Left to Right</string>
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="makeBaseWritingDirectionLeftToRight:" target="-1" id="S0X-9S-QSf"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem id="jFq-tB-4Kx">
|
||||||
|
<string key="title"> Right to Left</string>
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="makeBaseWritingDirectionRightToLeft:" target="-1" id="5fk-qB-AqJ"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem isSeparatorItem="YES" id="swp-gr-a21"/>
|
||||||
|
<menuItem title="Selection" enabled="NO" id="cqv-fj-IhA">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem id="Nop-cj-93Q">
|
||||||
|
<string key="title"> Default</string>
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="makeTextWritingDirectionNatural:" target="-1" id="lPI-Se-ZHp"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem id="BgM-ve-c93">
|
||||||
|
<string key="title"> Left to Right</string>
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="makeTextWritingDirectionLeftToRight:" target="-1" id="caW-Bv-w94"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem id="RB4-Sm-HuC">
|
||||||
|
<string key="title"> Right to Left</string>
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="makeTextWritingDirectionRightToLeft:" target="-1" id="EXD-6r-ZUu"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem isSeparatorItem="YES" id="fKy-g9-1gm"/>
|
||||||
|
<menuItem title="Show Ruler" id="vLm-3I-IUL">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleRuler:" target="-1" id="FOx-HJ-KwY"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Copy Ruler" keyEquivalent="c" id="MkV-Pr-PK5">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="copyRuler:" target="-1" id="71i-fW-3W2"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Paste Ruler" keyEquivalent="v" id="LVM-kO-fVI">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="pasteRuler:" target="-1" id="cSh-wd-qM2"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="View" id="H8h-7b-M4v">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="View" id="HyV-fh-RgO">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Show Toolbar" keyEquivalent="t" id="snW-S8-Cw5">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleToolbarShown:" target="-1" id="BXY-wc-z0C"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Customize Toolbar…" id="1UK-8n-QPP">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="runToolbarCustomizationPalette:" target="-1" id="pQI-g3-MTW"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem isSeparatorItem="YES" id="hB3-LF-h0Y"/>
|
||||||
|
<menuItem title="Show Sidebar" keyEquivalent="s" id="kIP-vf-haE">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleSidebar:" target="-1" id="iwa-gc-5KM"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Enter Full Screen" keyEquivalent="f" id="4J7-dP-txa">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleFullScreen:" target="-1" id="dU3-MA-1Rq"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Window" id="aUF-d1-5bR">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="Window" systemMenu="window" id="Td7-aD-5lo">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Minimize" keyEquivalent="m" id="OY7-WF-poV">
|
||||||
|
<connections>
|
||||||
|
<action selector="performMiniaturize:" target="-1" id="VwT-WD-YPe"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Zoom" id="R4o-n2-Eq4">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="performZoom:" target="-1" id="DIl-cC-cCs"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem isSeparatorItem="YES" id="eu3-7i-yIM"/>
|
||||||
|
<menuItem title="Bring All to Front" id="LE2-aR-0XJ">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="arrangeInFront:" target="-1" id="DRN-fu-gQh"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Help" id="wpr-3q-Mcd">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="Help" systemMenu="help" id="F2S-fz-NVQ">
|
||||||
|
<items>
|
||||||
|
<menuItem title="AutotypeOverlay Help" keyEquivalent="?" id="FKE-Sm-Kum">
|
||||||
|
<connections>
|
||||||
|
<action selector="showHelp:" target="-1" id="y7X-2Q-9no"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
<point key="canvasLocation" x="200" y="121"/>
|
||||||
|
</menu>
|
||||||
|
<window title="AutotypeOverlay" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="QvC-M9-y7g">
|
||||||
|
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
|
||||||
|
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
||||||
|
<rect key="contentRect" x="335" y="390" width="480" height="360"/>
|
||||||
|
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1415"/>
|
||||||
|
<view key="contentView" id="EiT-Mj-1SZ">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="480" height="360"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
</view>
|
||||||
|
<point key="canvasLocation" x="200" y="400"/>
|
||||||
|
</window>
|
||||||
|
</objects>
|
||||||
|
</document>
|
||||||
8
AutotypeOverlay/Info.plist
Normal file
8
AutotypeOverlay/Info.plist
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>LSUIElement</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
16
AutotypeOverlay/main.m
Normal file
16
AutotypeOverlay/main.m
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
//
|
||||||
|
// main.m
|
||||||
|
// AutotypeOverlay
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 09.03.22.
|
||||||
|
// Copyright © 2022 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
|
int main(int argc, const char * argv[]) {
|
||||||
|
@autoreleasepool {
|
||||||
|
// Setup code that might create autoreleased objects goes here.
|
||||||
|
}
|
||||||
|
return NSApplicationMain(argc, argv);
|
||||||
|
}
|
||||||
8
Cartfile
8
Cartfile
@@ -1,4 +1,4 @@
|
|||||||
binary "https://sparkle-project.org/Carthage/Sparkle.json"
|
github "sparkle-project/Sparkle" ~> 1.22
|
||||||
github "MacPass/TransformerKit" "3232b04c568df7f98b33ceb21a2090a9ccbc2065"
|
github "MacPass/TransformerKit" "a8b5bb73cc327ec6798569b865c32fec5eb2289f"
|
||||||
github "MacPass/KeePassKit" ~> 3.3.2
|
github "MacPass/KeePassKit" ~> 3.2.0
|
||||||
github "mstarke/HNHUi" ~> 6.0.1
|
github "mstarke/HNHUi" ~> 6.0
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
binary "https://sparkle-project.org/Carthage/Sparkle.json" "2.6.4"
|
github "MacPass/KeePassKit" "3.2.1"
|
||||||
github "MacPass/KeePassKit" "3.3.2"
|
github "MacPass/KissXML" "933f04fe5ad95c2be07ec0c2f801e140007f20fa"
|
||||||
github "MacPass/KissXML" "503fc012b73a4507965019720cbf1c157e849657"
|
github "MacPass/TransformerKit" "a8b5bb73cc327ec6798569b865c32fec5eb2289f"
|
||||||
github "MacPass/TransformerKit" "3232b04c568df7f98b33ceb21a2090a9ccbc2065"
|
|
||||||
github "mstarke/HNHUi" "6.0.1"
|
github "mstarke/HNHUi" "6.0.1"
|
||||||
|
github "sparkle-project/Sparkle" "1.27.1"
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
archiveVersion = 1;
|
archiveVersion = 1;
|
||||||
classes = {
|
classes = {
|
||||||
};
|
};
|
||||||
objectVersion = 54;
|
objectVersion = 46;
|
||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
@@ -28,7 +28,6 @@
|
|||||||
4C0F647B17B6BC9C00D9522A /* MPSavePanelAccessoryViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C0F647A17B6BC9C00D9522A /* MPSavePanelAccessoryViewController.m */; };
|
4C0F647B17B6BC9C00D9522A /* MPSavePanelAccessoryViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C0F647A17B6BC9C00D9522A /* MPSavePanelAccessoryViewController.m */; };
|
||||||
4C10207F1B750E2F00BFCD59 /* MPTestAutotype.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C10207E1B750E2F00BFCD59 /* MPTestAutotype.m */; };
|
4C10207F1B750E2F00BFCD59 /* MPTestAutotype.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C10207E1B750E2F00BFCD59 /* MPTestAutotype.m */; };
|
||||||
4C10412C178CDD44001B5239 /* NSDate+Humanized.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C10412B178CDD44001B5239 /* NSDate+Humanized.m */; };
|
4C10412C178CDD44001B5239 /* NSDate+Humanized.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C10412B178CDD44001B5239 /* NSDate+Humanized.m */; };
|
||||||
4C11BE6928B3B54900E2DAEA /* MPDocument+BiometricEncryptionSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C11BE6828B3B54900E2DAEA /* MPDocument+BiometricEncryptionSupport.m */; };
|
|
||||||
4C15B74618BCA3B1003F8008 /* MPDocument+Search.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C15B74518BCA3B1003F8008 /* MPDocument+Search.m */; };
|
4C15B74618BCA3B1003F8008 /* MPDocument+Search.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C15B74518BCA3B1003F8008 /* MPDocument+Search.m */; };
|
||||||
4C17D11E2250EFBC00C650C4 /* SavePanelAccessoryView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C17D1202250EFBC00C650C4 /* SavePanelAccessoryView.xib */; };
|
4C17D11E2250EFBC00C650C4 /* SavePanelAccessoryView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C17D1202250EFBC00C650C4 /* SavePanelAccessoryView.xib */; };
|
||||||
4C17D8E517A1C780006C8C1E /* MPDocumentWindowDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C17D8E417A1C780006C8C1E /* MPDocumentWindowDelegate.m */; };
|
4C17D8E517A1C780006C8C1E /* MPDocumentWindowDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C17D8E417A1C780006C8C1E /* MPDocumentWindowDelegate.m */; };
|
||||||
@@ -130,6 +129,10 @@
|
|||||||
4C4BE0C8257E9B91000AEA8C /* MPNotificationPreferencesController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C4BE0C6257E9B91000AEA8C /* MPNotificationPreferencesController.m */; };
|
4C4BE0C8257E9B91000AEA8C /* MPNotificationPreferencesController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C4BE0C6257E9B91000AEA8C /* MPNotificationPreferencesController.m */; };
|
||||||
4C4BE0C9257E9B91000AEA8C /* MPNotificationPreferencesController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C4BE0C7257E9B91000AEA8C /* MPNotificationPreferencesController.xib */; };
|
4C4BE0C9257E9B91000AEA8C /* MPNotificationPreferencesController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C4BE0C7257E9B91000AEA8C /* MPNotificationPreferencesController.xib */; };
|
||||||
4C4DC0A61C3AD17500DE9DCF /* KeePassKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C7B63791C0CB55600D7038C /* KeePassKit.framework */; };
|
4C4DC0A61C3AD17500DE9DCF /* KeePassKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C7B63791C0CB55600D7038C /* KeePassKit.framework */; };
|
||||||
|
4C4F120027D9055300ED5495 /* AOAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C4F11FF27D9055300ED5495 /* AOAppDelegate.m */; };
|
||||||
|
4C4F120227D9055600ED5495 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4C4F120127D9055600ED5495 /* Assets.xcassets */; };
|
||||||
|
4C4F120527D9055600ED5495 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C4F120327D9055600ED5495 /* MainMenu.xib */; };
|
||||||
|
4C4F120727D9055600ED5495 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C4F120627D9055600ED5495 /* main.m */; };
|
||||||
4C4F72D118DF704400E8D378 /* DDHotKeyTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C4F72CF18DF704400E8D378 /* DDHotKeyTextField.m */; };
|
4C4F72D118DF704400E8D378 /* DDHotKeyTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C4F72CF18DF704400E8D378 /* DDHotKeyTextField.m */; };
|
||||||
4C4FCE15177CFE6B00BBF7AE /* MPCustomFieldTableCellView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C4FCE14177CFE6B00BBF7AE /* MPCustomFieldTableCellView.m */; };
|
4C4FCE15177CFE6B00BBF7AE /* MPCustomFieldTableCellView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C4FCE14177CFE6B00BBF7AE /* MPCustomFieldTableCellView.m */; };
|
||||||
4C50CC041F6C18830095629D /* MPCollectionViewItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C50CC031F6C18830095629D /* MPCollectionViewItem.m */; };
|
4C50CC041F6C18830095629D /* MPCollectionViewItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C50CC031F6C18830095629D /* MPCollectionViewItem.m */; };
|
||||||
@@ -198,8 +201,6 @@
|
|||||||
4C7B637F1C0CB57300D7038C /* KeePassKit.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4C7B63791C0CB55600D7038C /* KeePassKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, 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 = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
4C7B63801C0CB57300D7038C /* Sparkle.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4C7B637A1C0CB55600D7038C /* Sparkle.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||||
4C7BD07619FE94C900C7AA5C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4C7BD07519FE94C900C7AA5C /* Assets.xcassets */; };
|
4C7BD07619FE94C900C7AA5C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4C7BD07519FE94C900C7AA5C /* Assets.xcassets */; };
|
||||||
4C7D4BE52DA91C1C00B04C10 /* MPSecurityPreferencesController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C7D4BE32DA91C1C00B04C10 /* MPSecurityPreferencesController.m */; };
|
|
||||||
4C7D4BE62DA91C1C00B04C10 /* MPSecurityPreferencesController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C7D4BE42DA91C1C00B04C10 /* MPSecurityPreferencesController.xib */; };
|
|
||||||
4C7D9D5424ABE6FD00907034 /* MPTabViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C7D9D5324ABE6FD00907034 /* MPTabViewController.m */; };
|
4C7D9D5424ABE6FD00907034 /* MPTabViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C7D9D5324ABE6FD00907034 /* MPTabViewController.m */; };
|
||||||
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 */; };
|
||||||
@@ -225,6 +226,8 @@
|
|||||||
4C9328C8273E6A38000DCBEE /* MPTOTPSetupViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C9328CA273E6A38000DCBEE /* MPTOTPSetupViewController.xib */; };
|
4C9328C8273E6A38000DCBEE /* MPTOTPSetupViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C9328CA273E6A38000DCBEE /* MPTOTPSetupViewController.xib */; };
|
||||||
4C9328D0273E6A83000DCBEE /* MPTOTPViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C9328D2273E6A83000DCBEE /* MPTOTPViewController.xib */; };
|
4C9328D0273E6A83000DCBEE /* MPTOTPViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C9328D2273E6A83000DCBEE /* MPTOTPViewController.xib */; };
|
||||||
4C978E0D19AE54AB003067DF /* MPFlagsHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C978E0C19AE54AB003067DF /* MPFlagsHelper.m */; };
|
4C978E0D19AE54AB003067DF /* MPFlagsHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C978E0C19AE54AB003067DF /* MPFlagsHelper.m */; };
|
||||||
|
4C98A6CC27CFAB1900CD912F /* MPNodeIconViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C98A6CA27CFAB1900CD912F /* MPNodeIconViewController.m */; };
|
||||||
|
4C98A6CD27CFAB1900CD912F /* MPNodeIconViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C98A6CB27CFAB1900CD912F /* MPNodeIconViewController.xib */; };
|
||||||
4C9BFFFB1FD19B5400264B16 /* MPPrettyPasswordTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C9BFFFA1FD19B5400264B16 /* MPPrettyPasswordTransformer.m */; };
|
4C9BFFFB1FD19B5400264B16 /* MPPrettyPasswordTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C9BFFFA1FD19B5400264B16 /* MPPrettyPasswordTransformer.m */; };
|
||||||
4CA08DA017A831B200A6544B /* MPAddEntryContextMenuDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CA08D9F17A831B200A6544B /* MPAddEntryContextMenuDelegate.m */; };
|
4CA08DA017A831B200A6544B /* MPAddEntryContextMenuDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CA08D9F17A831B200A6544B /* MPAddEntryContextMenuDelegate.m */; };
|
||||||
4CA0B2ED15BCADAC00654E32 /* PreferencesWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4CA0B2EC15BCADAC00654E32 /* PreferencesWindow.xib */; };
|
4CA0B2ED15BCADAC00654E32 /* PreferencesWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4CA0B2EC15BCADAC00654E32 /* PreferencesWindow.xib */; };
|
||||||
@@ -258,6 +261,7 @@
|
|||||||
4CC59C2721AF0893005E8D6B /* MPPathControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CC59C2621AF0893005E8D6B /* MPPathControl.m */; };
|
4CC59C2721AF0893005E8D6B /* MPPathControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CC59C2621AF0893005E8D6B /* MPPathControl.m */; };
|
||||||
4CC663E7216F7A7100E33965 /* MPPluginRepositoryBrowserViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CC663E5216F7A7100E33965 /* MPPluginRepositoryBrowserViewController.m */; };
|
4CC663E7216F7A7100E33965 /* MPPluginRepositoryBrowserViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CC663E5216F7A7100E33965 /* MPPluginRepositoryBrowserViewController.m */; };
|
||||||
4CC6DB7A17D23719002C6091 /* KPKNode+IconImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6DB7917D23719002C6091 /* KPKNode+IconImage.m */; };
|
4CC6DB7A17D23719002C6091 /* KPKNode+IconImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6DB7917D23719002C6091 /* KPKNode+IconImage.m */; };
|
||||||
|
4CC91B6B27D7E7E6001E9517 /* MPInspectorEditorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CC91B6A27D7E7E6001E9517 /* MPInspectorEditorView.m */; };
|
||||||
4CCA8E9B18D91ED9001A6754 /* Quartz.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4CCA8E9A18D91ED9001A6754 /* Quartz.framework */; };
|
4CCA8E9B18D91ED9001A6754 /* Quartz.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4CCA8E9A18D91ED9001A6754 /* Quartz.framework */; };
|
||||||
4CCCE8011D75CA48006AA951 /* MPArrayController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CCCE8001D75CA48006AA951 /* MPArrayController.m */; };
|
4CCCE8011D75CA48006AA951 /* MPArrayController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CCCE8001D75CA48006AA951 /* MPArrayController.m */; };
|
||||||
4CCEDE2A179F203B008402BE /* MPOutlineView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CCEDE29179F203B008402BE /* MPOutlineView.m */; };
|
4CCEDE2A179F203B008402BE /* MPOutlineView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CCEDE29179F203B008402BE /* MPOutlineView.m */; };
|
||||||
@@ -298,11 +302,11 @@
|
|||||||
4CE5B54B173AFBA700207B39 /* MPDocument.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE5B549173AFBA700207B39 /* MPDocument.m */; };
|
4CE5B54B173AFBA700207B39 /* MPDocument.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE5B549173AFBA700207B39 /* MPDocument.m */; };
|
||||||
4CE8246F16E2E93400573141 /* MPOverlayWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE8246E16E2E93400573141 /* MPOverlayWindowController.m */; };
|
4CE8246F16E2E93400573141 /* MPOverlayWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE8246E16E2E93400573141 /* MPOverlayWindowController.m */; };
|
||||||
4CE8247516E2F2B900573141 /* MPOverlayView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE8247416E2F2B900573141 /* MPOverlayView.m */; };
|
4CE8247516E2F2B900573141 /* MPOverlayView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE8247416E2F2B900573141 /* MPOverlayView.m */; };
|
||||||
4CE84903271E10AC00EBAB0C /* MPEntryPasswordAttributeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE84901271E10AC00EBAB0C /* MPEntryPasswordAttributeViewController.m */; };
|
|
||||||
4CE84904271E10AC00EBAB0C /* MPEntryPasswordAttributeViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4CE84902271E10AC00EBAB0C /* MPEntryPasswordAttributeViewController.xib */; };
|
|
||||||
4CE88B9717BA651C0042E078 /* contextTriangleTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4CE88B9617BA651C0042E078 /* contextTriangleTemplate.pdf */; };
|
4CE88B9717BA651C0042E078 /* contextTriangleTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4CE88B9617BA651C0042E078 /* contextTriangleTemplate.pdf */; };
|
||||||
4CEE46DD181C301D006BF1E5 /* MPAutotypeDaemon.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CEE46DC181C301D006BF1E5 /* MPAutotypeDaemon.m */; };
|
4CEE46DD181C301D006BF1E5 /* MPAutotypeDaemon.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CEE46DC181C301D006BF1E5 /* MPAutotypeDaemon.m */; };
|
||||||
4CEED1C617D7BD0E007180F1 /* NSError+Messages.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CEED1C517D7BD0E007180F1 /* NSError+Messages.m */; };
|
4CEED1C617D7BD0E007180F1 /* NSError+Messages.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CEED1C517D7BD0E007180F1 /* NSError+Messages.m */; };
|
||||||
|
4CF13A9727E0D5D800E3297A /* MPNodeTagViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CF13A9527E0D5D800E3297A /* MPNodeTagViewController.m */; };
|
||||||
|
4CF13A9827E0D5D800E3297A /* MPNodeTagViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4CF13A9627E0D5D800E3297A /* MPNodeTagViewController.xib */; };
|
||||||
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 */; };
|
||||||
@@ -322,7 +326,6 @@
|
|||||||
6021FE9818E1650F00C3BC51 /* DatabaseSettingsWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6021FE9A18E1650F00C3BC51 /* DatabaseSettingsWindow.xib */; };
|
6021FE9818E1650F00C3BC51 /* DatabaseSettingsWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6021FE9A18E1650F00C3BC51 /* DatabaseSettingsWindow.xib */; };
|
||||||
7837112C225540D1009BD28D /* PluginRepositoryBrowserView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7837112E225540D1009BD28D /* PluginRepositoryBrowserView.xib */; };
|
7837112C225540D1009BD28D /* PluginRepositoryBrowserView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7837112E225540D1009BD28D /* PluginRepositoryBrowserView.xib */; };
|
||||||
78E1F8B022E3A5D600E738AE /* AutotypeDoctorReportViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 78E1F8B222E3A5D600E738AE /* AutotypeDoctorReportViewController.xib */; };
|
78E1F8B022E3A5D600E738AE /* AutotypeDoctorReportViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 78E1F8B222E3A5D600E738AE /* AutotypeDoctorReportViewController.xib */; };
|
||||||
AF105CF325FE5B2000C4FD3C /* MPTouchIdCompositeKeyStore.m in Sources */ = {isa = PBXBuildFile; fileRef = AF105CF125FE5B2000C4FD3C /* MPTouchIdCompositeKeyStore.m */; };
|
|
||||||
FA13910C1F9CD9EB0033D256 /* Localizable.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = FA13910A1F9CD9EB0033D256 /* Localizable.stringsdict */; };
|
FA13910C1F9CD9EB0033D256 /* Localizable.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = FA13910A1F9CD9EB0033D256 /* Localizable.stringsdict */; };
|
||||||
FA9FD3271FB5E8F4003CEDD6 /* AutotypeCandidateSelectionView.xib in Resources */ = {isa = PBXBuildFile; fileRef = FA9FD3291FB5E8F4003CEDD6 /* AutotypeCandidateSelectionView.xib */; };
|
FA9FD3271FB5E8F4003CEDD6 /* AutotypeCandidateSelectionView.xib in Resources */ = {isa = PBXBuildFile; fileRef = FA9FD3291FB5E8F4003CEDD6 /* AutotypeCandidateSelectionView.xib */; };
|
||||||
FA9FD32C1FB5EDD3003CEDD6 /* AutotypeBuilderView.xib in Resources */ = {isa = PBXBuildFile; fileRef = FA9FD32E1FB5EDD3003CEDD6 /* AutotypeBuilderView.xib */; };
|
FA9FD32C1FB5EDD3003CEDD6 /* AutotypeBuilderView.xib in Resources */ = {isa = PBXBuildFile; fileRef = FA9FD32E1FB5EDD3003CEDD6 /* AutotypeBuilderView.xib */; };
|
||||||
@@ -404,8 +407,6 @@
|
|||||||
4C10207E1B750E2F00BFCD59 /* MPTestAutotype.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPTestAutotype.m; sourceTree = "<group>"; };
|
4C10207E1B750E2F00BFCD59 /* MPTestAutotype.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPTestAutotype.m; sourceTree = "<group>"; };
|
||||||
4C10412A178CDD44001B5239 /* NSDate+Humanized.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDate+Humanized.h"; sourceTree = "<group>"; };
|
4C10412A178CDD44001B5239 /* NSDate+Humanized.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDate+Humanized.h"; sourceTree = "<group>"; };
|
||||||
4C10412B178CDD44001B5239 /* NSDate+Humanized.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDate+Humanized.m"; sourceTree = "<group>"; };
|
4C10412B178CDD44001B5239 /* NSDate+Humanized.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDate+Humanized.m"; sourceTree = "<group>"; };
|
||||||
4C11BE6728B3B54900E2DAEA /* MPDocument+BiometricEncryptionSupport.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "MPDocument+BiometricEncryptionSupport.h"; sourceTree = "<group>"; };
|
|
||||||
4C11BE6828B3B54900E2DAEA /* MPDocument+BiometricEncryptionSupport.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "MPDocument+BiometricEncryptionSupport.m"; sourceTree = "<group>"; };
|
|
||||||
4C15B74518BCA3B1003F8008 /* MPDocument+Search.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MPDocument+Search.m"; sourceTree = "<group>"; };
|
4C15B74518BCA3B1003F8008 /* MPDocument+Search.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MPDocument+Search.m"; sourceTree = "<group>"; };
|
||||||
4C17D11F2250EFBC00C650C4 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/SavePanelAccessoryView.xib; sourceTree = "<group>"; };
|
4C17D11F2250EFBC00C650C4 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/SavePanelAccessoryView.xib; sourceTree = "<group>"; };
|
||||||
4C17D1222250EFBF00C650C4 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/SavePanelAccessoryView.strings; sourceTree = "<group>"; };
|
4C17D1222250EFBF00C650C4 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/SavePanelAccessoryView.strings; sourceTree = "<group>"; };
|
||||||
@@ -587,6 +588,14 @@
|
|||||||
4C4BE0C5257E9B91000AEA8C /* MPNotificationPreferencesController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPNotificationPreferencesController.h; sourceTree = "<group>"; };
|
4C4BE0C5257E9B91000AEA8C /* MPNotificationPreferencesController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPNotificationPreferencesController.h; sourceTree = "<group>"; };
|
||||||
4C4BE0C6257E9B91000AEA8C /* MPNotificationPreferencesController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPNotificationPreferencesController.m; sourceTree = "<group>"; };
|
4C4BE0C6257E9B91000AEA8C /* MPNotificationPreferencesController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPNotificationPreferencesController.m; sourceTree = "<group>"; };
|
||||||
4C4BE0C7257E9B91000AEA8C /* MPNotificationPreferencesController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MPNotificationPreferencesController.xib; sourceTree = "<group>"; };
|
4C4BE0C7257E9B91000AEA8C /* MPNotificationPreferencesController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MPNotificationPreferencesController.xib; sourceTree = "<group>"; };
|
||||||
|
4C4F11FC27D9055300ED5495 /* AutotypeOverlay.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AutotypeOverlay.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
4C4F11FE27D9055300ED5495 /* AOAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AOAppDelegate.h; sourceTree = "<group>"; };
|
||||||
|
4C4F11FF27D9055300ED5495 /* AOAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AOAppDelegate.m; sourceTree = "<group>"; };
|
||||||
|
4C4F120127D9055600ED5495 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||||
|
4C4F120427D9055600ED5495 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; };
|
||||||
|
4C4F120627D9055600ED5495 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
|
||||||
|
4C4F120827D9055600ED5495 /* AutotypeOverlay.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = AutotypeOverlay.entitlements; sourceTree = "<group>"; };
|
||||||
|
4C4F120C27D905CE00ED5495 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
|
||||||
4C4F72CF18DF704400E8D378 /* DDHotKeyTextField.m */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.objc; name = DDHotKeyTextField.m; path = DDHotKey/DDHotKeyTextField.m; sourceTree = "<group>"; tabWidth = 4; };
|
4C4F72CF18DF704400E8D378 /* DDHotKeyTextField.m */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.objc; name = DDHotKeyTextField.m; path = DDHotKey/DDHotKeyTextField.m; sourceTree = "<group>"; tabWidth = 4; };
|
||||||
4C4F72D018DF704400E8D378 /* DDHotKeyTextField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DDHotKeyTextField.h; path = DDHotKey/DDHotKeyTextField.h; sourceTree = "<group>"; };
|
4C4F72D018DF704400E8D378 /* DDHotKeyTextField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DDHotKeyTextField.h; path = DDHotKey/DDHotKeyTextField.h; sourceTree = "<group>"; };
|
||||||
4C4FCE13177CFE6B00BBF7AE /* MPCustomFieldTableCellView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPCustomFieldTableCellView.h; sourceTree = "<group>"; };
|
4C4FCE13177CFE6B00BBF7AE /* MPCustomFieldTableCellView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPCustomFieldTableCellView.h; sourceTree = "<group>"; };
|
||||||
@@ -716,9 +725,6 @@
|
|||||||
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>"; };
|
||||||
4C7D4BE22DA91C1C00B04C10 /* MPSecurityPreferencesController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPSecurityPreferencesController.h; sourceTree = "<group>"; };
|
|
||||||
4C7D4BE32DA91C1C00B04C10 /* MPSecurityPreferencesController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPSecurityPreferencesController.m; sourceTree = "<group>"; };
|
|
||||||
4C7D4BE42DA91C1C00B04C10 /* MPSecurityPreferencesController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MPSecurityPreferencesController.xib; sourceTree = "<group>"; };
|
|
||||||
4C7D9D5224ABE6FD00907034 /* MPTabViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPTabViewController.h; sourceTree = "<group>"; };
|
4C7D9D5224ABE6FD00907034 /* MPTabViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPTabViewController.h; sourceTree = "<group>"; };
|
||||||
4C7D9D5324ABE6FD00907034 /* MPTabViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPTabViewController.m; sourceTree = "<group>"; };
|
4C7D9D5324ABE6FD00907034 /* MPTabViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPTabViewController.m; sourceTree = "<group>"; };
|
||||||
4C7F8B691A10B68400CCB83D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/WelcomeView.xib; sourceTree = "<group>"; };
|
4C7F8B691A10B68400CCB83D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/WelcomeView.xib; sourceTree = "<group>"; };
|
||||||
@@ -788,6 +794,9 @@
|
|||||||
4C9328D6273E6A85000DCBEE /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/MPTOTPViewController.strings; sourceTree = "<group>"; };
|
4C9328D6273E6A85000DCBEE /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/MPTOTPViewController.strings; sourceTree = "<group>"; };
|
||||||
4C978E0C19AE54AB003067DF /* MPFlagsHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPFlagsHelper.m; sourceTree = "<group>"; };
|
4C978E0C19AE54AB003067DF /* MPFlagsHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPFlagsHelper.m; sourceTree = "<group>"; };
|
||||||
4C97CCEF1FA727DC00E58F8C /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
|
4C97CCEF1FA727DC00E58F8C /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||||
|
4C98A6C927CFAB1800CD912F /* MPNodeIconViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPNodeIconViewController.h; sourceTree = "<group>"; };
|
||||||
|
4C98A6CA27CFAB1900CD912F /* MPNodeIconViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPNodeIconViewController.m; sourceTree = "<group>"; };
|
||||||
|
4C98A6CB27CFAB1900CD912F /* MPNodeIconViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MPNodeIconViewController.xib; 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>"; };
|
4C9FE47423703DA50096A5EA /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
@@ -852,6 +861,8 @@
|
|||||||
4CC663E5216F7A7100E33965 /* MPPluginRepositoryBrowserViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPPluginRepositoryBrowserViewController.m; sourceTree = "<group>"; };
|
4CC663E5216F7A7100E33965 /* MPPluginRepositoryBrowserViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPPluginRepositoryBrowserViewController.m; sourceTree = "<group>"; };
|
||||||
4CC6DB7817D23719002C6091 /* KPKNode+IconImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "KPKNode+IconImage.h"; sourceTree = "<group>"; };
|
4CC6DB7817D23719002C6091 /* KPKNode+IconImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "KPKNode+IconImage.h"; sourceTree = "<group>"; };
|
||||||
4CC6DB7917D23719002C6091 /* KPKNode+IconImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "KPKNode+IconImage.m"; sourceTree = "<group>"; };
|
4CC6DB7917D23719002C6091 /* KPKNode+IconImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "KPKNode+IconImage.m"; sourceTree = "<group>"; };
|
||||||
|
4CC91B6927D7E7E6001E9517 /* MPInspectorEditorView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPInspectorEditorView.h; sourceTree = "<group>"; };
|
||||||
|
4CC91B6A27D7E7E6001E9517 /* MPInspectorEditorView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPInspectorEditorView.m; sourceTree = "<group>"; };
|
||||||
4CCA7EEC1797866F00B0B55E /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/GeneralPreferences.strings; sourceTree = "<group>"; };
|
4CCA7EEC1797866F00B0B55E /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/GeneralPreferences.strings; sourceTree = "<group>"; };
|
||||||
4CCA8E9A18D91ED9001A6754 /* Quartz.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quartz.framework; path = System/Library/Frameworks/Quartz.framework; sourceTree = SDKROOT; };
|
4CCA8E9A18D91ED9001A6754 /* Quartz.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quartz.framework; path = System/Library/Frameworks/Quartz.framework; sourceTree = SDKROOT; };
|
||||||
4CCCE7FF1D75CA48006AA951 /* MPArrayController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPArrayController.h; sourceTree = "<group>"; };
|
4CCCE7FF1D75CA48006AA951 /* MPArrayController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPArrayController.h; sourceTree = "<group>"; };
|
||||||
@@ -918,9 +929,6 @@
|
|||||||
4CE8246E16E2E93400573141 /* MPOverlayWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPOverlayWindowController.m; sourceTree = "<group>"; };
|
4CE8246E16E2E93400573141 /* MPOverlayWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPOverlayWindowController.m; sourceTree = "<group>"; };
|
||||||
4CE8247316E2F2B900573141 /* MPOverlayView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPOverlayView.h; sourceTree = "<group>"; };
|
4CE8247316E2F2B900573141 /* MPOverlayView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPOverlayView.h; sourceTree = "<group>"; };
|
||||||
4CE8247416E2F2B900573141 /* MPOverlayView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPOverlayView.m; sourceTree = "<group>"; };
|
4CE8247416E2F2B900573141 /* MPOverlayView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPOverlayView.m; sourceTree = "<group>"; };
|
||||||
4CE84900271E10AC00EBAB0C /* MPEntryPasswordAttributeViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPEntryPasswordAttributeViewController.h; sourceTree = "<group>"; };
|
|
||||||
4CE84901271E10AC00EBAB0C /* MPEntryPasswordAttributeViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPEntryPasswordAttributeViewController.m; sourceTree = "<group>"; };
|
|
||||||
4CE84902271E10AC00EBAB0C /* MPEntryPasswordAttributeViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MPEntryPasswordAttributeViewController.xib; sourceTree = "<group>"; };
|
|
||||||
4CE88B9617BA651C0042E078 /* contextTriangleTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = contextTriangleTemplate.pdf; sourceTree = "<group>"; };
|
4CE88B9617BA651C0042E078 /* contextTriangleTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = contextTriangleTemplate.pdf; sourceTree = "<group>"; };
|
||||||
4CE88C2417C163FE00BFD195 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; };
|
4CE88C2417C163FE00BFD195 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; };
|
||||||
4CE88C3317C1647400BFD195 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
|
4CE88C3317C1647400BFD195 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
|
||||||
@@ -928,6 +936,9 @@
|
|||||||
4CEE46DC181C301D006BF1E5 /* MPAutotypeDaemon.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAutotypeDaemon.m; sourceTree = "<group>"; };
|
4CEE46DC181C301D006BF1E5 /* MPAutotypeDaemon.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAutotypeDaemon.m; sourceTree = "<group>"; };
|
||||||
4CEED1C417D7BD0E007180F1 /* NSError+Messages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSError+Messages.h"; sourceTree = "<group>"; };
|
4CEED1C417D7BD0E007180F1 /* NSError+Messages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSError+Messages.h"; sourceTree = "<group>"; };
|
||||||
4CEED1C517D7BD0E007180F1 /* NSError+Messages.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSError+Messages.m"; sourceTree = "<group>"; };
|
4CEED1C517D7BD0E007180F1 /* NSError+Messages.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSError+Messages.m"; sourceTree = "<group>"; };
|
||||||
|
4CF13A9427E0D5D800E3297A /* MPNodeTagViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPNodeTagViewController.h; sourceTree = "<group>"; };
|
||||||
|
4CF13A9527E0D5D800E3297A /* MPNodeTagViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPNodeTagViewController.m; sourceTree = "<group>"; };
|
||||||
|
4CF13A9627E0D5D800E3297A /* MPNodeTagViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MPNodeTagViewController.xib; sourceTree = "<group>"; };
|
||||||
4CF14962224B623700D1CE1C /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = Base; path = Base.lproj/Credits.rtf; sourceTree = "<group>"; };
|
4CF14962224B623700D1CE1C /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = Base; path = Base.lproj/Credits.rtf; sourceTree = "<group>"; };
|
||||||
4CF29BF317879D0000851B60 /* 26_FileSaveTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = 26_FileSaveTemplate.pdf; sourceTree = "<group>"; };
|
4CF29BF317879D0000851B60 /* 26_FileSaveTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = 26_FileSaveTemplate.pdf; sourceTree = "<group>"; };
|
||||||
4CF5BE6B1BF33E3000048505 /* NSApplication+MPAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSApplication+MPAdditions.h"; sourceTree = "<group>"; };
|
4CF5BE6B1BF33E3000048505 /* NSApplication+MPAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSApplication+MPAdditions.h"; sourceTree = "<group>"; };
|
||||||
@@ -1123,8 +1134,6 @@
|
|||||||
ABE8662E2316617500201125 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.stringsdict"; sourceTree = "<group>"; };
|
ABE8662E2316617500201125 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.stringsdict"; sourceTree = "<group>"; };
|
||||||
ABE8662F2316617500201125 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/AutotypeDoctorReportViewController.strings"; sourceTree = "<group>"; };
|
ABE8662F2316617500201125 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/AutotypeDoctorReportViewController.strings"; sourceTree = "<group>"; };
|
||||||
ABE86630231662D200201125 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/PluginDataView.strings"; sourceTree = "<group>"; };
|
ABE86630231662D200201125 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/PluginDataView.strings"; sourceTree = "<group>"; };
|
||||||
AF105CF125FE5B2000C4FD3C /* MPTouchIdCompositeKeyStore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPTouchIdCompositeKeyStore.m; sourceTree = "<group>"; };
|
|
||||||
AF105CF225FE5B2000C4FD3C /* MPTouchIdCompositeKeyStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPTouchIdCompositeKeyStore.h; sourceTree = "<group>"; };
|
|
||||||
BB3E050C1FE9D1CA00F0B46F /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/AutotypeCandidateSelectionView.strings; sourceTree = "<group>"; };
|
BB3E050C1FE9D1CA00F0B46F /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/AutotypeCandidateSelectionView.strings; sourceTree = "<group>"; };
|
||||||
BB3E050D1FE9D1CB00F0B46F /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = nl; path = nl.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
BB3E050D1FE9D1CB00F0B46F /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = nl; path = nl.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
||||||
BB3E050E1FE9D1CC00F0B46F /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/ReferenceBuilderView.strings; sourceTree = "<group>"; };
|
BB3E050E1FE9D1CC00F0B46F /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/ReferenceBuilderView.strings; sourceTree = "<group>"; };
|
||||||
@@ -1221,6 +1230,13 @@
|
|||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
4C4F11F927D9055300ED5495 /* Frameworks */ = {
|
||||||
|
isa = PBXFrameworksBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
4C77E35F15B84A240093A587 /* Frameworks */ = {
|
4C77E35F15B84A240093A587 /* Frameworks */ = {
|
||||||
isa = PBXFrameworksBuildPhase;
|
isa = PBXFrameworksBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
@@ -1281,6 +1297,8 @@
|
|||||||
4CFC53BE16E94729007396BE /* MPShadowBox.m */,
|
4CFC53BE16E94729007396BE /* MPShadowBox.m */,
|
||||||
4C4A100D176286FD00BBF2CA /* MPTableView.h */,
|
4C4A100D176286FD00BBF2CA /* MPTableView.h */,
|
||||||
4C4A100E176286FD00BBF2CA /* MPTableView.m */,
|
4C4A100E176286FD00BBF2CA /* MPTableView.m */,
|
||||||
|
4CC91B6927D7E7E6001E9517 /* MPInspectorEditorView.h */,
|
||||||
|
4CC91B6A27D7E7E6001E9517 /* MPInspectorEditorView.m */,
|
||||||
);
|
);
|
||||||
name = Views;
|
name = Views;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -1380,8 +1398,6 @@
|
|||||||
4C4B7EF717A4B335000234C7 /* MPUniqueCharactersFormatter.m */,
|
4C4B7EF717A4B335000234C7 /* MPUniqueCharactersFormatter.m */,
|
||||||
4C3C4EAD18D7039300153127 /* MPValueTransformerHelper.h */,
|
4C3C4EAD18D7039300153127 /* MPValueTransformerHelper.h */,
|
||||||
4C3C4EAE18D7039300153127 /* MPValueTransformerHelper.m */,
|
4C3C4EAE18D7039300153127 /* MPValueTransformerHelper.m */,
|
||||||
AF105CF225FE5B2000C4FD3C /* MPTouchIdCompositeKeyStore.h */,
|
|
||||||
AF105CF125FE5B2000C4FD3C /* MPTouchIdCompositeKeyStore.m */,
|
|
||||||
4C52197F273D192C00C719D3 /* MPOpenURLHandler.h */,
|
4C52197F273D192C00C719D3 /* MPOpenURLHandler.h */,
|
||||||
4C521980273D192C00C719D3 /* MPOpenURLHandler.m */,
|
4C521980273D192C00C719D3 /* MPOpenURLHandler.m */,
|
||||||
);
|
);
|
||||||
@@ -1431,8 +1447,6 @@
|
|||||||
6E719715172058BA00E4C5FC /* MPDatabaseVersion.h */,
|
6E719715172058BA00E4C5FC /* MPDatabaseVersion.h */,
|
||||||
4CE5B548173AFBA700207B39 /* MPDocument.h */,
|
4CE5B548173AFBA700207B39 /* MPDocument.h */,
|
||||||
4CE5B549173AFBA700207B39 /* MPDocument.m */,
|
4CE5B549173AFBA700207B39 /* MPDocument.m */,
|
||||||
4C11BE6728B3B54900E2DAEA /* MPDocument+BiometricEncryptionSupport.h */,
|
|
||||||
4C11BE6828B3B54900E2DAEA /* MPDocument+BiometricEncryptionSupport.m */,
|
|
||||||
4C3666401787327E00B249F1 /* MPDocument+Attachments.m */,
|
4C3666401787327E00B249F1 /* MPDocument+Attachments.m */,
|
||||||
4C1FA07A18231900003A3F8C /* MPDocument+Autotype.m */,
|
4C1FA07A18231900003A3F8C /* MPDocument+Autotype.m */,
|
||||||
4C6B7C7C18BE7EB0001D5D77 /* MPDocument+History.m */,
|
4C6B7C7C18BE7EB0001D5D77 /* MPDocument+History.m */,
|
||||||
@@ -1502,9 +1516,6 @@
|
|||||||
4C4BE0C5257E9B91000AEA8C /* MPNotificationPreferencesController.h */,
|
4C4BE0C5257E9B91000AEA8C /* MPNotificationPreferencesController.h */,
|
||||||
4C4BE0C6257E9B91000AEA8C /* MPNotificationPreferencesController.m */,
|
4C4BE0C6257E9B91000AEA8C /* MPNotificationPreferencesController.m */,
|
||||||
4C4BE0C7257E9B91000AEA8C /* MPNotificationPreferencesController.xib */,
|
4C4BE0C7257E9B91000AEA8C /* MPNotificationPreferencesController.xib */,
|
||||||
4C7D4BE22DA91C1C00B04C10 /* MPSecurityPreferencesController.h */,
|
|
||||||
4C7D4BE32DA91C1C00B04C10 /* MPSecurityPreferencesController.m */,
|
|
||||||
4C7D4BE42DA91C1C00B04C10 /* MPSecurityPreferencesController.xib */,
|
|
||||||
);
|
);
|
||||||
name = Preferences;
|
name = Preferences;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -1527,16 +1538,33 @@
|
|||||||
4CC0192B271836CD00459789 /* MPEntryAttributeViewController.h */,
|
4CC0192B271836CD00459789 /* MPEntryAttributeViewController.h */,
|
||||||
4CC0192C271836CD00459789 /* MPEntryAttributeViewController.m */,
|
4CC0192C271836CD00459789 /* MPEntryAttributeViewController.m */,
|
||||||
4CC0192D271836CD00459789 /* MPEntryAttributeViewController.xib */,
|
4CC0192D271836CD00459789 /* MPEntryAttributeViewController.xib */,
|
||||||
4CE84900271E10AC00EBAB0C /* MPEntryPasswordAttributeViewController.h */,
|
|
||||||
4CE84901271E10AC00EBAB0C /* MPEntryPasswordAttributeViewController.m */,
|
|
||||||
4CE84902271E10AC00EBAB0C /* MPEntryPasswordAttributeViewController.xib */,
|
|
||||||
4C59AC9A2722C12200F54B20 /* MPNodeExpirationViewController.h */,
|
4C59AC9A2722C12200F54B20 /* MPNodeExpirationViewController.h */,
|
||||||
4C59AC9B2722C12200F54B20 /* MPNodeExpirationViewController.m */,
|
4C59AC9B2722C12200F54B20 /* MPNodeExpirationViewController.m */,
|
||||||
4C59AC9C2722C12200F54B20 /* MPNodeExpirationViewController.xib */,
|
4C59AC9C2722C12200F54B20 /* MPNodeExpirationViewController.xib */,
|
||||||
|
4C98A6C927CFAB1800CD912F /* MPNodeIconViewController.h */,
|
||||||
|
4C98A6CA27CFAB1900CD912F /* MPNodeIconViewController.m */,
|
||||||
|
4C98A6CB27CFAB1900CD912F /* MPNodeIconViewController.xib */,
|
||||||
|
4CF13A9427E0D5D800E3297A /* MPNodeTagViewController.h */,
|
||||||
|
4CF13A9527E0D5D800E3297A /* MPNodeTagViewController.m */,
|
||||||
|
4CF13A9627E0D5D800E3297A /* MPNodeTagViewController.xib */,
|
||||||
);
|
);
|
||||||
name = Inspector;
|
name = Inspector;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
4C4F11FD27D9055300ED5495 /* AutotypeOverlay */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
4C4F120C27D905CE00ED5495 /* Info.plist */,
|
||||||
|
4C4F11FE27D9055300ED5495 /* AOAppDelegate.h */,
|
||||||
|
4C4F11FF27D9055300ED5495 /* AOAppDelegate.m */,
|
||||||
|
4C4F120127D9055600ED5495 /* Assets.xcassets */,
|
||||||
|
4C4F120327D9055600ED5495 /* MainMenu.xib */,
|
||||||
|
4C4F120627D9055600ED5495 /* main.m */,
|
||||||
|
4C4F120827D9055600ED5495 /* AutotypeOverlay.entitlements */,
|
||||||
|
);
|
||||||
|
path = AutotypeOverlay;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
4C5133861FA0C32C00C94C73 /* Accessory */ = {
|
4C5133861FA0C32C00C94C73 /* Accessory */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
@@ -1655,6 +1683,7 @@
|
|||||||
4C00E33917D8FA3B00F37192 /* DDHotKey */,
|
4C00E33917D8FA3B00F37192 /* DDHotKey */,
|
||||||
4C77E36C15B84A240093A587 /* MacPass */,
|
4C77E36C15B84A240093A587 /* MacPass */,
|
||||||
4C45FB1E178E09ED0010007D /* MacPassTests */,
|
4C45FB1E178E09ED0010007D /* MacPassTests */,
|
||||||
|
4C4F11FD27D9055300ED5495 /* AutotypeOverlay */,
|
||||||
4C77E36515B84A240093A587 /* Frameworks */,
|
4C77E36515B84A240093A587 /* Frameworks */,
|
||||||
4C77E36315B84A240093A587 /* Products */,
|
4C77E36315B84A240093A587 /* Products */,
|
||||||
);
|
);
|
||||||
@@ -1667,6 +1696,7 @@
|
|||||||
children = (
|
children = (
|
||||||
4C77E36215B84A240093A587 /* MacPass.app */,
|
4C77E36215B84A240093A587 /* MacPass.app */,
|
||||||
4C45FB1A178E09ED0010007D /* MacPassTests.xctest */,
|
4C45FB1A178E09ED0010007D /* MacPassTests.xctest */,
|
||||||
|
4C4F11FC27D9055300ED5495 /* AutotypeOverlay.app */,
|
||||||
);
|
);
|
||||||
name = Products;
|
name = Products;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -2014,15 +2044,32 @@
|
|||||||
productReference = 4C45FB1A178E09ED0010007D /* MacPassTests.xctest */;
|
productReference = 4C45FB1A178E09ED0010007D /* MacPassTests.xctest */;
|
||||||
productType = "com.apple.product-type.bundle.unit-test";
|
productType = "com.apple.product-type.bundle.unit-test";
|
||||||
};
|
};
|
||||||
|
4C4F11FB27D9055300ED5495 /* AutotypeOverlay */ = {
|
||||||
|
isa = PBXNativeTarget;
|
||||||
|
buildConfigurationList = 4C4F120B27D9055600ED5495 /* Build configuration list for PBXNativeTarget "AutotypeOverlay" */;
|
||||||
|
buildPhases = (
|
||||||
|
4C4F11F827D9055300ED5495 /* Sources */,
|
||||||
|
4C4F11F927D9055300ED5495 /* Frameworks */,
|
||||||
|
4C4F11FA27D9055300ED5495 /* Resources */,
|
||||||
|
);
|
||||||
|
buildRules = (
|
||||||
|
);
|
||||||
|
dependencies = (
|
||||||
|
);
|
||||||
|
name = AutotypeOverlay;
|
||||||
|
productName = AutotypeOverlay;
|
||||||
|
productReference = 4C4F11FC27D9055300ED5495 /* AutotypeOverlay.app */;
|
||||||
|
productType = "com.apple.product-type.application";
|
||||||
|
};
|
||||||
4C77E36115B84A240093A587 /* MacPass */ = {
|
4C77E36115B84A240093A587 /* MacPass */ = {
|
||||||
isa = PBXNativeTarget;
|
isa = PBXNativeTarget;
|
||||||
buildConfigurationList = 4C77E38015B84A240093A587 /* Build configuration list for PBXNativeTarget "MacPass" */;
|
buildConfigurationList = 4C77E38015B84A240093A587 /* Build configuration list for PBXNativeTarget "MacPass" */;
|
||||||
buildPhases = (
|
buildPhases = (
|
||||||
4CC5D36618A1332000AF7FA8 /* CopyFiles */,
|
|
||||||
4C77E35E15B84A240093A587 /* Sources */,
|
4C77E35E15B84A240093A587 /* Sources */,
|
||||||
4C77E35F15B84A240093A587 /* Frameworks */,
|
4C77E35F15B84A240093A587 /* Frameworks */,
|
||||||
4C77E36015B84A240093A587 /* Resources */,
|
4C77E36015B84A240093A587 /* Resources */,
|
||||||
4C44DB1B1C08999F00774EB3 /* Versioning */,
|
4C44DB1B1C08999F00774EB3 /* Versioning */,
|
||||||
|
4CC5D36618A1332000AF7FA8 /* CopyFiles */,
|
||||||
);
|
);
|
||||||
buildRules = (
|
buildRules = (
|
||||||
);
|
);
|
||||||
@@ -2039,14 +2086,17 @@
|
|||||||
4C77E35915B84A240093A587 /* Project object */ = {
|
4C77E35915B84A240093A587 /* Project object */ = {
|
||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
BuildIndependentTargetsInParallel = YES;
|
|
||||||
CLASSPREFIX = MP;
|
CLASSPREFIX = MP;
|
||||||
LastUpgradeCheck = 1430;
|
LastUpgradeCheck = 1250;
|
||||||
ORGANIZATIONNAME = "HicknHack Software GmbH";
|
ORGANIZATIONNAME = "HicknHack Software GmbH";
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
4C77E36115B84A240093A587 = {
|
4C4F11FB27D9055300ED5495 = {
|
||||||
|
CreatedOnToolsVersion = 13.2.1;
|
||||||
ProvisioningStyle = Automatic;
|
ProvisioningStyle = Automatic;
|
||||||
};
|
};
|
||||||
|
4C77E36115B84A240093A587 = {
|
||||||
|
DevelopmentTeam = 55SM4L4Z97;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
buildConfigurationList = 4C77E35C15B84A240093A587 /* Build configuration list for PBXProject "MacPass" */;
|
buildConfigurationList = 4C77E35C15B84A240093A587 /* Build configuration list for PBXProject "MacPass" */;
|
||||||
@@ -2076,6 +2126,7 @@
|
|||||||
targets = (
|
targets = (
|
||||||
4C77E36115B84A240093A587 /* MacPass */,
|
4C77E36115B84A240093A587 /* MacPass */,
|
||||||
4C45FB19178E09ED0010007D /* MacPassTests */,
|
4C45FB19178E09ED0010007D /* MacPassTests */,
|
||||||
|
4C4F11FB27D9055300ED5495 /* AutotypeOverlay */,
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
/* End PBXProject section */
|
/* End PBXProject section */
|
||||||
@@ -2091,6 +2142,15 @@
|
|||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
4C4F11FA27D9055300ED5495 /* Resources */ = {
|
||||||
|
isa = PBXResourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
4C4F120227D9055600ED5495 /* Assets.xcassets in Resources */,
|
||||||
|
4C4F120527D9055600ED5495 /* MainMenu.xib in Resources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
4C77E36015B84A240093A587 /* Resources */ = {
|
4C77E36015B84A240093A587 /* Resources */ = {
|
||||||
isa = PBXResourcesBuildPhase;
|
isa = PBXResourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
@@ -2123,6 +2183,7 @@
|
|||||||
4C586F9E16D07ABD00E7DB57 /* 00_PasswordTemplate.pdf in Resources */,
|
4C586F9E16D07ABD00E7DB57 /* 00_PasswordTemplate.pdf in Resources */,
|
||||||
FA13910C1F9CD9EB0033D256 /* Localizable.stringsdict in Resources */,
|
FA13910C1F9CD9EB0033D256 /* Localizable.stringsdict in Resources */,
|
||||||
4C586FA016D07D7200E7DB57 /* 01_PackageNetworkTemplate.pdf in Resources */,
|
4C586FA016D07D7200E7DB57 /* 01_PackageNetworkTemplate.pdf in Resources */,
|
||||||
|
4C98A6CD27CFAB1900CD912F /* MPNodeIconViewController.xib in Resources */,
|
||||||
4CE4FFAD2746956F00789F75 /* MPGeneralDatabaseSettingsViewController.xib in Resources */,
|
4CE4FFAD2746956F00789F75 /* MPGeneralDatabaseSettingsViewController.xib in Resources */,
|
||||||
4C3826CB1AD04D8E007D7D67 /* 64_AppleTemplate.pdf in Resources */,
|
4C3826CB1AD04D8E007D7D67 /* 64_AppleTemplate.pdf in Resources */,
|
||||||
4C3826AA1AD04D8E007D7D67 /* 27_NFSUnmountTemplate.pdf in Resources */,
|
4C3826AA1AD04D8E007D7D67 /* 27_NFSUnmountTemplate.pdf in Resources */,
|
||||||
@@ -2145,7 +2206,6 @@
|
|||||||
4C3826721AD04B51007D7D67 /* addFolderTemplate.pdf in Resources */,
|
4C3826721AD04B51007D7D67 /* addFolderTemplate.pdf in Resources */,
|
||||||
4C0B533F205C1561003D277E /* PickfieldView.xib in Resources */,
|
4C0B533F205C1561003D277E /* PickfieldView.xib in Resources */,
|
||||||
4C3826C21AD04D8E007D7D67 /* 55_ThumbnailTemplate.pdf in Resources */,
|
4C3826C21AD04D8E007D7D67 /* 55_ThumbnailTemplate.pdf in Resources */,
|
||||||
4C7D4BE62DA91C1C00B04C10 /* MPSecurityPreferencesController.xib in Resources */,
|
|
||||||
4C3826A61AD04D8E007D7D67 /* 22_ASCIITemplate.pdf in Resources */,
|
4C3826A61AD04D8E007D7D67 /* 22_ASCIITemplate.pdf in Resources */,
|
||||||
4CD78ABC16D155FF00768A1D /* 07_NotepadTemplate.pdf in Resources */,
|
4CD78ABC16D155FF00768A1D /* 07_NotepadTemplate.pdf in Resources */,
|
||||||
4C3826C11AD04D8E007D7D67 /* 54_SignatureTemplate.pdf in Resources */,
|
4C3826C11AD04D8E007D7D67 /* 54_SignatureTemplate.pdf in Resources */,
|
||||||
@@ -2188,11 +2248,11 @@
|
|||||||
4C701CBC178618A000581B88 /* 12_RemoteTemplate.pdf in Resources */,
|
4C701CBC178618A000581B88 /* 12_RemoteTemplate.pdf in Resources */,
|
||||||
4CF29BF417879D0000851B60 /* 26_FileSaveTemplate.pdf in Resources */,
|
4CF29BF417879D0000851B60 /* 26_FileSaveTemplate.pdf in Resources */,
|
||||||
4C7BD07619FE94C900C7AA5C /* Assets.xcassets in Resources */,
|
4C7BD07619FE94C900C7AA5C /* Assets.xcassets in Resources */,
|
||||||
4CE84904271E10AC00EBAB0C /* MPEntryPasswordAttributeViewController.xib in Resources */,
|
|
||||||
4CA182781F96523600DD4A4A /* DuplicateEntryOptionsWindow.xib in Resources */,
|
4CA182781F96523600DD4A4A /* DuplicateEntryOptionsWindow.xib in Resources */,
|
||||||
4C52A88E1788628B00868229 /* 06_BlockDeviceTemplate.pdf in Resources */,
|
4C52A88E1788628B00868229 /* 06_BlockDeviceTemplate.pdf in Resources */,
|
||||||
4C52A88F1788628B00868229 /* 13_KeysTemplate.pdf in Resources */,
|
4C52A88F1788628B00868229 /* 13_KeysTemplate.pdf in Resources */,
|
||||||
4C3826C61AD04D8E007D7D67 /* 59_DevelopmentTemplate.pdf in Resources */,
|
4C3826C61AD04D8E007D7D67 /* 59_DevelopmentTemplate.pdf in Resources */,
|
||||||
|
4CF13A9827E0D5D800E3297A /* MPNodeTagViewController.xib in Resources */,
|
||||||
4C52A8901788628B00868229 /* 18_DisplayTemplate.pdf in Resources */,
|
4C52A8901788628B00868229 /* 18_DisplayTemplate.pdf in Resources */,
|
||||||
4C52A892178863B000868229 /* 68_PhoneTemplate.pdf in Resources */,
|
4C52A892178863B000868229 /* 68_PhoneTemplate.pdf in Resources */,
|
||||||
6021FE7718E15FF300C3BC51 /* DatePickingView.xib in Resources */,
|
6021FE7718E15FF300C3BC51 /* DatePickingView.xib in Resources */,
|
||||||
@@ -2232,7 +2292,6 @@
|
|||||||
/* Begin PBXShellScriptBuildPhase section */
|
/* Begin PBXShellScriptBuildPhase section */
|
||||||
4C44DB1B1C08999F00774EB3 /* Versioning */ = {
|
4C44DB1B1C08999F00774EB3 /* Versioning */ = {
|
||||||
isa = PBXShellScriptBuildPhase;
|
isa = PBXShellScriptBuildPhase;
|
||||||
alwaysOutOfDate = 1;
|
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
);
|
);
|
||||||
@@ -2268,6 +2327,15 @@
|
|||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
4C4F11F827D9055300ED5495 /* Sources */ = {
|
||||||
|
isa = PBXSourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
4C4F120727D9055600ED5495 /* main.m in Sources */,
|
||||||
|
4C4F120027D9055300ED5495 /* AOAppDelegate.m in Sources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
4C77E35E15B84A240093A587 /* Sources */ = {
|
4C77E35E15B84A240093A587 /* Sources */ = {
|
||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
@@ -2278,6 +2346,7 @@
|
|||||||
4CBA2ABA17074C07006D8139 /* MPSettingsHelper.m in Sources */,
|
4CBA2ABA17074C07006D8139 /* MPSettingsHelper.m in Sources */,
|
||||||
4C77E37A15B84A240093A587 /* MPAppDelegate.m in Sources */,
|
4C77E37A15B84A240093A587 /* MPAppDelegate.m in Sources */,
|
||||||
3C0CDED821D28BF700B2A10B /* MPTouchBarButtonCreator.m in Sources */,
|
3C0CDED821D28BF700B2A10B /* MPTouchBarButtonCreator.m in Sources */,
|
||||||
|
4CC91B6B27D7E7E6001E9517 /* MPInspectorEditorView.m in Sources */,
|
||||||
4C37A84015B8B474005EF8EE /* MPOutlineDataSource.m in Sources */,
|
4C37A84015B8B474005EF8EE /* MPOutlineDataSource.m in Sources */,
|
||||||
4CA0B2F915BCAF6700654E32 /* MPGeneralPreferencesController.m in Sources */,
|
4CA0B2F915BCAF6700654E32 /* MPGeneralPreferencesController.m in Sources */,
|
||||||
4C8F0C791FD05A6A00BE157F /* NSString+MPPrettyPasswordDisplay.m in Sources */,
|
4C8F0C791FD05A6A00BE157F /* NSString+MPPrettyPasswordDisplay.m in Sources */,
|
||||||
@@ -2334,6 +2403,7 @@
|
|||||||
4C569DA117652BFE00595B62 /* MPEntryTableDataSource.m in Sources */,
|
4C569DA117652BFE00595B62 /* MPEntryTableDataSource.m in Sources */,
|
||||||
4CD034AA1BFE113B003C002C /* MPPlugin.m in Sources */,
|
4CD034AA1BFE113B003C002C /* MPPlugin.m in Sources */,
|
||||||
4CA2335A176DBFE100F0B6AC /* MPLockDaemon.m in Sources */,
|
4CA2335A176DBFE100F0B6AC /* MPLockDaemon.m in Sources */,
|
||||||
|
4CF13A9727E0D5D800E3297A /* MPNodeTagViewController.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 */,
|
||||||
@@ -2345,7 +2415,6 @@
|
|||||||
4C978E0D19AE54AB003067DF /* MPFlagsHelper.m in Sources */,
|
4C978E0D19AE54AB003067DF /* MPFlagsHelper.m in Sources */,
|
||||||
4C6F228919A4A7F90012310C /* MPAutotypeClear.m in Sources */,
|
4C6F228919A4A7F90012310C /* MPAutotypeClear.m in Sources */,
|
||||||
4C0B038C18E36DA400B9F9C9 /* MPFixAutotypeWindowController.m in Sources */,
|
4C0B038C18E36DA400B9F9C9 /* MPFixAutotypeWindowController.m in Sources */,
|
||||||
AF105CF325FE5B2000C4FD3C /* MPTouchIdCompositeKeyStore.m in Sources */,
|
|
||||||
4C7679BF1D76D6D8001F33D6 /* MPErrorRecoveryAttempter.m in Sources */,
|
4C7679BF1D76D6D8001F33D6 /* MPErrorRecoveryAttempter.m in Sources */,
|
||||||
4CAD338F205169D30068587E /* MPPluginRepositoryItem.m in Sources */,
|
4CAD338F205169D30068587E /* MPPluginRepositoryItem.m in Sources */,
|
||||||
4C9BFFFB1FD19B5400264B16 /* MPPrettyPasswordTransformer.m in Sources */,
|
4C9BFFFB1FD19B5400264B16 /* MPPrettyPasswordTransformer.m in Sources */,
|
||||||
@@ -2390,7 +2459,6 @@
|
|||||||
4CCEDE2A179F203B008402BE /* MPOutlineView.m in Sources */,
|
4CCEDE2A179F203B008402BE /* MPOutlineView.m in Sources */,
|
||||||
4CB33F861EAF54A000C9341E /* KPKNode+MPIsHistory.m in Sources */,
|
4CB33F861EAF54A000C9341E /* KPKNode+MPIsHistory.m in Sources */,
|
||||||
4CCEDE2E179F213B008402BE /* MPNotifications.m in Sources */,
|
4CCEDE2E179F213B008402BE /* MPNotifications.m in Sources */,
|
||||||
4CE84903271E10AC00EBAB0C /* MPEntryPasswordAttributeViewController.m in Sources */,
|
|
||||||
4C17D8E517A1C780006C8C1E /* MPDocumentWindowDelegate.m in Sources */,
|
4C17D8E517A1C780006C8C1E /* MPDocumentWindowDelegate.m in Sources */,
|
||||||
4C63B8FB17A3154D0091BD72 /* MPContextButton.m in Sources */,
|
4C63B8FB17A3154D0091BD72 /* MPContextButton.m in Sources */,
|
||||||
4C1E9885185F71A800943563 /* MPContextBarViewController.m in Sources */,
|
4C1E9885185F71A800943563 /* MPContextBarViewController.m in Sources */,
|
||||||
@@ -2399,11 +2467,9 @@
|
|||||||
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 */,
|
||||||
4C11BE6928B3B54900E2DAEA /* MPDocument+BiometricEncryptionSupport.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 */,
|
||||||
4C7D4BE52DA91C1C00B04C10 /* MPSecurityPreferencesController.m in Sources */,
|
|
||||||
4C8B36AB17A6ED4B005E1FF1 /* MPOutlineContextMenuDelegate.m in Sources */,
|
4C8B36AB17A6ED4B005E1FF1 /* MPOutlineContextMenuDelegate.m in Sources */,
|
||||||
4CD7223B17A7CB0700F5A1E1 /* MPWorkflowPreferencesController.m in Sources */,
|
4CD7223B17A7CB0700F5A1E1 /* MPWorkflowPreferencesController.m in Sources */,
|
||||||
4CA08DA017A831B200A6544B /* MPAddEntryContextMenuDelegate.m in Sources */,
|
4CA08DA017A831B200A6544B /* MPAddEntryContextMenuDelegate.m in Sources */,
|
||||||
@@ -2420,6 +2486,7 @@
|
|||||||
4C57AE1417BA422B00CA4F34 /* MPSegmentedContextCell.m in Sources */,
|
4C57AE1417BA422B00CA4F34 /* MPSegmentedContextCell.m in Sources */,
|
||||||
4CE2961518429AA5005F01CE /* MPAutotypeKeyPress.m in Sources */,
|
4CE2961518429AA5005F01CE /* MPAutotypeKeyPress.m in Sources */,
|
||||||
4CE4FFAC2746956F00789F75 /* MPGeneralDatabaseSettingsViewController.m in Sources */,
|
4CE4FFAC2746956F00789F75 /* MPGeneralDatabaseSettingsViewController.m in Sources */,
|
||||||
|
4C98A6CC27CFAB1900CD912F /* MPNodeIconViewController.m in Sources */,
|
||||||
4C32B0E71A1D4436007E12F1 /* KPKFormat+MPUTIDetection.m in Sources */,
|
4C32B0E71A1D4436007E12F1 /* KPKFormat+MPUTIDetection.m in Sources */,
|
||||||
4C5807781C64F67000E7171F /* NSString+MPHash.m in Sources */,
|
4C5807781C64F67000E7171F /* NSString+MPHash.m in Sources */,
|
||||||
4CAAA8271D787B8B00CDE977 /* MPAutotypeBuilderViewController.m in Sources */,
|
4CAAA8271D787B8B00CDE977 /* MPAutotypeBuilderViewController.m in Sources */,
|
||||||
@@ -2551,6 +2618,14 @@
|
|||||||
name = InfoPlist.strings;
|
name = InfoPlist.strings;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
4C4F120327D9055600ED5495 /* MainMenu.xib */ = {
|
||||||
|
isa = PBXVariantGroup;
|
||||||
|
children = (
|
||||||
|
4C4F120427D9055600ED5495 /* Base */,
|
||||||
|
);
|
||||||
|
name = MainMenu.xib;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
4C6DCC471FA2457900C8AD3F /* ContextBar.xib */ = {
|
4C6DCC471FA2457900C8AD3F /* ContextBar.xib */ = {
|
||||||
isa = PBXVariantGroup;
|
isa = PBXVariantGroup;
|
||||||
children = (
|
children = (
|
||||||
@@ -3106,7 +3181,6 @@
|
|||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
CLANG_WARN_EMPTY_BODY = YES;
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(DEVELOPER_FRAMEWORKS_DIR)",
|
"$(DEVELOPER_FRAMEWORKS_DIR)",
|
||||||
@@ -3132,7 +3206,6 @@
|
|||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
CLANG_WARN_EMPTY_BODY = YES;
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(DEVELOPER_FRAMEWORKS_DIR)",
|
"$(DEVELOPER_FRAMEWORKS_DIR)",
|
||||||
@@ -3148,6 +3221,97 @@
|
|||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
|
4C4F120927D9055600ED5495 /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||||
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
|
||||||
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||||
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
|
CODE_SIGN_ENTITLEMENTS = AutotypeOverlay/AutotypeOverlay.entitlements;
|
||||||
|
CODE_SIGN_IDENTITY = "-";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||||
|
DEVELOPMENT_TEAM = "";
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||||
|
"DEBUG=1",
|
||||||
|
"$(inherited)",
|
||||||
|
);
|
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
INFOPLIST_FILE = AutotypeOverlay/Info.plist;
|
||||||
|
INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2022 HicknHack Software GmbH. All rights reserved.";
|
||||||
|
INFOPLIST_KEY_NSMainNibFile = MainMenu;
|
||||||
|
INFOPLIST_KEY_NSPrincipalClass = NSApplication;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
|
||||||
|
MACOSX_DEPLOYMENT_TARGET = 11.6;
|
||||||
|
MARKETING_VERSION = 1.0;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||||
|
MTL_FAST_MATH = YES;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = com.hicknhacksoftware.AutotypeOverlay;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
|
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
4C4F120A27D9055600ED5495 /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||||
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
|
||||||
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||||
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
|
CODE_SIGN_ENTITLEMENTS = AutotypeOverlay/AutotypeOverlay.entitlements;
|
||||||
|
CODE_SIGN_IDENTITY = "-";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
|
COPY_PHASE_STRIP = NO;
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
DEVELOPMENT_TEAM = "";
|
||||||
|
ENABLE_NS_ASSERTIONS = NO;
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
INFOPLIST_FILE = AutotypeOverlay/Info.plist;
|
||||||
|
INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2022 HicknHack Software GmbH. All rights reserved.";
|
||||||
|
INFOPLIST_KEY_NSMainNibFile = MainMenu;
|
||||||
|
INFOPLIST_KEY_NSPrincipalClass = NSApplication;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
|
||||||
|
MACOSX_DEPLOYMENT_TARGET = 11.6;
|
||||||
|
MARKETING_VERSION = 1.0;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
|
MTL_FAST_MATH = YES;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = com.hicknhacksoftware.AutotypeOverlay;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
|
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
4C77E37E15B84A240093A587 /* Debug */ = {
|
4C77E37E15B84A240093A587 /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
@@ -3175,7 +3339,6 @@
|
|||||||
CODE_SIGN_IDENTITY = "";
|
CODE_SIGN_IDENTITY = "";
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
CURRENT_PROJECT_VERSION = 0.8.1;
|
CURRENT_PROJECT_VERSION = 0.8.1;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
|
||||||
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;
|
||||||
@@ -3232,7 +3395,6 @@
|
|||||||
CODE_SIGN_IDENTITY = "";
|
CODE_SIGN_IDENTITY = "";
|
||||||
COPY_PHASE_STRIP = YES;
|
COPY_PHASE_STRIP = YES;
|
||||||
CURRENT_PROJECT_VERSION = 0.8.1;
|
CURRENT_PROJECT_VERSION = 0.8.1;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
|
||||||
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;
|
||||||
@@ -3260,14 +3422,9 @@
|
|||||||
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_ENTITLEMENTS = MacPass/MacPass.entitlements;
|
CODE_SIGN_IDENTITY = "-";
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
CURRENT_PROJECT_VERSION = "${CURRENT_PROJECT_VERSION}";
|
CURRENT_PROJECT_VERSION = "${CURRENT_PROJECT_VERSION}";
|
||||||
DEAD_CODE_STRIPPING = YES;
|
|
||||||
DEVELOPMENT_TEAM = 55SM4L4Z97;
|
|
||||||
ENABLE_HARDENED_RUNTIME = YES;
|
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(PROJECT_DIR)/Carthage/Build/Mac",
|
"$(PROJECT_DIR)/Carthage/Build/Mac",
|
||||||
@@ -3275,10 +3432,7 @@
|
|||||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
GCC_PREFIX_HEADER = "MacPass/MacPass-Prefix.pch";
|
GCC_PREFIX_HEADER = "MacPass/MacPass-Prefix.pch";
|
||||||
INFOPLIST_FILE = "MacPass/MacPass-Info.plist";
|
INFOPLIST_FILE = "MacPass/MacPass-Info.plist";
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
|
||||||
"$(inherited)",
|
|
||||||
"@executable_path/../Frameworks",
|
|
||||||
);
|
|
||||||
OTHER_LDFLAGS = (
|
OTHER_LDFLAGS = (
|
||||||
"-lxml2",
|
"-lxml2",
|
||||||
"-Wl,-rpath,@loader_path/../Frameworks",
|
"-Wl,-rpath,@loader_path/../Frameworks",
|
||||||
@@ -3286,8 +3440,8 @@
|
|||||||
PRODUCT_BUNDLE_IDENTIFIER = "com.hicknhacksoftware.${PRODUCT_NAME:rfc1034identifier}";
|
PRODUCT_BUNDLE_IDENTIFIER = "com.hicknhacksoftware.${PRODUCT_NAME:rfc1034identifier}";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE = "";
|
PROVISIONING_PROFILE = "";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
|
STRIP_STYLE = debugging;
|
||||||
WRAPPER_EXTENSION = app;
|
WRAPPER_EXTENSION = app;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
@@ -3298,14 +3452,9 @@
|
|||||||
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_ENTITLEMENTS = MacPass/MacPass.entitlements;
|
CODE_SIGN_IDENTITY = "-";
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
CURRENT_PROJECT_VERSION = "${CURRENT_PROJECT_VERSION}";
|
CURRENT_PROJECT_VERSION = "${CURRENT_PROJECT_VERSION}";
|
||||||
DEAD_CODE_STRIPPING = YES;
|
|
||||||
DEVELOPMENT_TEAM = 55SM4L4Z97;
|
|
||||||
ENABLE_HARDENED_RUNTIME = YES;
|
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(PROJECT_DIR)/Carthage/Build/Mac",
|
"$(PROJECT_DIR)/Carthage/Build/Mac",
|
||||||
@@ -3314,10 +3463,7 @@
|
|||||||
GCC_PREFIX_HEADER = "MacPass/MacPass-Prefix.pch";
|
GCC_PREFIX_HEADER = "MacPass/MacPass-Prefix.pch";
|
||||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||||
INFOPLIST_FILE = "MacPass/MacPass-Info.plist";
|
INFOPLIST_FILE = "MacPass/MacPass-Info.plist";
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
|
||||||
"$(inherited)",
|
|
||||||
"@executable_path/../Frameworks",
|
|
||||||
);
|
|
||||||
OTHER_LDFLAGS = (
|
OTHER_LDFLAGS = (
|
||||||
"-lxml2",
|
"-lxml2",
|
||||||
"-Wl,-rpath,@loader_path/../Frameworks",
|
"-Wl,-rpath,@loader_path/../Frameworks",
|
||||||
@@ -3325,8 +3471,8 @@
|
|||||||
PRODUCT_BUNDLE_IDENTIFIER = "com.hicknhacksoftware.${PRODUCT_NAME:rfc1034identifier}";
|
PRODUCT_BUNDLE_IDENTIFIER = "com.hicknhacksoftware.${PRODUCT_NAME:rfc1034identifier}";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE = "";
|
PROVISIONING_PROFILE = "";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
|
STRIP_STYLE = debugging;
|
||||||
WRAPPER_EXTENSION = app;
|
WRAPPER_EXTENSION = app;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
@@ -3343,6 +3489,15 @@
|
|||||||
defaultConfigurationIsVisible = 0;
|
defaultConfigurationIsVisible = 0;
|
||||||
defaultConfigurationName = Release;
|
defaultConfigurationName = Release;
|
||||||
};
|
};
|
||||||
|
4C4F120B27D9055600ED5495 /* Build configuration list for PBXNativeTarget "AutotypeOverlay" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
4C4F120927D9055600ED5495 /* Debug */,
|
||||||
|
4C4F120A27D9055600ED5495 /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
4C77E35C15B84A240093A587 /* Build configuration list for PBXProject "MacPass" */ = {
|
4C77E35C15B84A240093A587 /* Build configuration list for PBXProject "MacPass" */ = {
|
||||||
isa = XCConfigurationList;
|
isa = XCConfigurationList;
|
||||||
buildConfigurations = (
|
buildConfigurations = (
|
||||||
|
|||||||
@@ -0,0 +1,78 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Scheme
|
||||||
|
LastUpgradeVersion = "1320"
|
||||||
|
version = "1.3">
|
||||||
|
<BuildAction
|
||||||
|
parallelizeBuildables = "YES"
|
||||||
|
buildImplicitDependencies = "YES">
|
||||||
|
<BuildActionEntries>
|
||||||
|
<BuildActionEntry
|
||||||
|
buildForTesting = "YES"
|
||||||
|
buildForRunning = "YES"
|
||||||
|
buildForProfiling = "YES"
|
||||||
|
buildForArchiving = "YES"
|
||||||
|
buildForAnalyzing = "YES">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "4C4F11FB27D9055300ED5495"
|
||||||
|
BuildableName = "AutotypeOverlay.app"
|
||||||
|
BlueprintName = "AutotypeOverlay"
|
||||||
|
ReferencedContainer = "container:MacPass.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildActionEntry>
|
||||||
|
</BuildActionEntries>
|
||||||
|
</BuildAction>
|
||||||
|
<TestAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||||
|
<Testables>
|
||||||
|
</Testables>
|
||||||
|
</TestAction>
|
||||||
|
<LaunchAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
launchStyle = "0"
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
|
debugDocumentVersioning = "YES"
|
||||||
|
debugServiceExtension = "internal"
|
||||||
|
allowLocationSimulation = "YES">
|
||||||
|
<BuildableProductRunnable
|
||||||
|
runnableDebuggingMode = "0">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "4C4F11FB27D9055300ED5495"
|
||||||
|
BuildableName = "AutotypeOverlay.app"
|
||||||
|
BlueprintName = "AutotypeOverlay"
|
||||||
|
ReferencedContainer = "container:MacPass.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildableProductRunnable>
|
||||||
|
</LaunchAction>
|
||||||
|
<ProfileAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
savedToolIdentifier = ""
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
debugDocumentVersioning = "YES">
|
||||||
|
<BuildableProductRunnable
|
||||||
|
runnableDebuggingMode = "0">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "4C4F11FB27D9055300ED5495"
|
||||||
|
BuildableName = "AutotypeOverlay.app"
|
||||||
|
BlueprintName = "AutotypeOverlay"
|
||||||
|
ReferencedContainer = "container:MacPass.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildableProductRunnable>
|
||||||
|
</ProfileAction>
|
||||||
|
<AnalyzeAction
|
||||||
|
buildConfiguration = "Debug">
|
||||||
|
</AnalyzeAction>
|
||||||
|
<ArchiveAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
revealArchiveInOrganizer = "YES">
|
||||||
|
</ArchiveAction>
|
||||||
|
</Scheme>
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "1430"
|
LastUpgradeVersion = "1250"
|
||||||
version = "2.0">
|
version = "2.0">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"info" : {
|
"info" : {
|
||||||
"author" : "xcode",
|
"version" : 1,
|
||||||
"version" : 1
|
"author" : "xcode"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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="17156" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19529" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
<deployment identifier="macosx"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="17156"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19529"/>
|
||||||
<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>
|
||||||
@@ -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="321" width="236" height="32"/>
|
<rect key="frame" x="37" y="322" width="230" 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,20 +54,20 @@
|
|||||||
</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="283" width="16" height="16"/>
|
<rect key="frame" x="20" y="284" 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="177" width="340" height="98"/>
|
<rect key="frame" x="42" y="164" width="340" height="112"/>
|
||||||
<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 Autotype or 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>
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<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="283" width="112" height="16"/>
|
<rect key="frame" x="42" y="284" 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="305" width="360" height="5"/>
|
<rect key="frame" x="20" y="306" 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="129" width="177" height="32"/>
|
<rect key="frame" x="37" y="117" width="172" 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="86" width="340" height="42"/>
|
<rect key="frame" x="42" y="74" 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="50" width="271" height="32"/>
|
<rect key="frame" x="37" y="39" width="266" 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,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="21701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19529" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
<deployment identifier="macosx"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19529"/>
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<objects>
|
<objects>
|
||||||
@@ -37,7 +37,6 @@
|
|||||||
<outlet property="historyMaximumSizeTextField" destination="1273" id="5Fo-Pp-8dY"/>
|
<outlet property="historyMaximumSizeTextField" destination="1273" id="5Fo-Pp-8dY"/>
|
||||||
<outlet property="keyDerivationPopupButton" destination="2cq-R3-Ksh" id="p3N-lu-r4C"/>
|
<outlet property="keyDerivationPopupButton" destination="2cq-R3-Ksh" id="p3N-lu-r4C"/>
|
||||||
<outlet property="keyDerivationSettingsTabView" destination="2MY-PW-kzL" id="1iZ-jt-nxi"/>
|
<outlet property="keyDerivationSettingsTabView" destination="2MY-PW-kzL" id="1iZ-jt-nxi"/>
|
||||||
<outlet property="lastKeyChangeTextField" destination="vkL-2N-0Hi" id="wm3-aR-U8m"/>
|
|
||||||
<outlet property="recommendKeyChangeCheckButton" destination="Hqc-B0-xyz" id="3CK-D7-b8S"/>
|
<outlet property="recommendKeyChangeCheckButton" destination="Hqc-B0-xyz" id="3CK-D7-b8S"/>
|
||||||
<outlet property="recommendKeyChangeIntervalStepper" destination="GUO-6H-UI2" id="gIQ-c2-pkx"/>
|
<outlet property="recommendKeyChangeIntervalStepper" destination="GUO-6H-UI2" id="gIQ-c2-pkx"/>
|
||||||
<outlet property="recommendKeyChangeIntervalTextField" destination="19r-LE-7X5" id="c5C-1h-LpD"/>
|
<outlet property="recommendKeyChangeIntervalTextField" destination="19r-LE-7X5" id="c5C-1h-LpD"/>
|
||||||
@@ -52,14 +51,14 @@
|
|||||||
<window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="1">
|
<window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="1">
|
||||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
|
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
|
||||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
||||||
<rect key="contentRect" x="196" y="240" width="546" height="395"/>
|
<rect key="contentRect" x="196" y="240" width="500" height="360"/>
|
||||||
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1415"/>
|
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1415"/>
|
||||||
<view key="contentView" misplaced="YES" id="2">
|
<view key="contentView" misplaced="YES" id="2">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="546" height="395"/>
|
<rect key="frame" x="0.0" y="0.0" width="500" height="380"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="288">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="288">
|
||||||
<rect key="frame" x="479" y="13" width="54" height="32"/>
|
<rect key="frame" x="433" y="13" width="54" height="32"/>
|
||||||
<buttonCell key="cell" type="push" title="OK" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="289">
|
<buttonCell key="cell" type="push" title="OK" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="289">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@@ -72,7 +71,7 @@ DQ
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="956">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="956">
|
||||||
<rect key="frame" x="405" y="13" width="76" height="32"/>
|
<rect key="frame" x="359" y="13" width="76" height="32"/>
|
||||||
<buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="957">
|
<buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="957">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@@ -85,16 +84,16 @@ Gw
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<tabView translatesAutoresizingMaskIntoConstraints="NO" id="357">
|
<tabView translatesAutoresizingMaskIntoConstraints="NO" id="357">
|
||||||
<rect key="frame" x="13" y="40" width="520" height="421"/>
|
<rect key="frame" x="13" y="40" width="474" height="334"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<tabViewItems>
|
<tabViewItems>
|
||||||
<tabViewItem label="General" identifier="1" id="358">
|
<tabViewItem label="General" identifier="1" id="358">
|
||||||
<view key="view" id="361">
|
<view key="view" id="361">
|
||||||
<rect key="frame" x="10" y="33" width="500" height="264"/>
|
<rect key="frame" x="10" y="33" width="454" height="264"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="231">
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="231">
|
||||||
<rect key="frame" x="200" y="223" width="280" height="21"/>
|
<rect key="frame" x="154" y="223" width="280" height="21"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="width" constant="280" id="cra-uC-nCv"/>
|
<constraint firstAttribute="width" constant="280" id="cra-uC-nCv"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
@@ -105,7 +104,7 @@ Gw
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="256">
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="256">
|
||||||
<rect key="frame" x="116" y="200" width="78" height="16"/>
|
<rect key="frame" x="70" y="200" width="78" height="16"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Description:" id="257">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Description:" id="257">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
@@ -113,7 +112,7 @@ Gw
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="189">
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="189">
|
||||||
<rect key="frame" x="92" y="227" width="102" height="16"/>
|
<rect key="frame" x="46" y="227" width="102" height="16"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Database name:" id="190">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Database name:" id="190">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
@@ -121,7 +120,7 @@ Gw
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1394">
|
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1394">
|
||||||
<rect key="frame" x="197" y="71" width="72" height="25"/>
|
<rect key="frame" x="151" y="71" width="72" height="25"/>
|
||||||
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="1395">
|
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="1395">
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="menu"/>
|
<font key="font" metaFont="menu"/>
|
||||||
@@ -134,7 +133,7 @@ Gw
|
|||||||
</popUpButtonCell>
|
</popUpButtonCell>
|
||||||
</popUpButton>
|
</popUpButton>
|
||||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1404">
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1404">
|
||||||
<rect key="frame" x="106" y="77" width="88" height="16"/>
|
<rect key="frame" x="60" y="77" width="88" height="16"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Compression:" id="1405">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Compression:" id="1405">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
@@ -142,7 +141,7 @@ Gw
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1434">
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1434">
|
||||||
<rect key="frame" x="153" y="48" width="41" height="16"/>
|
<rect key="frame" x="107" y="48" width="41" height="16"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Color:" id="1435">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Color:" id="1435">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
@@ -150,7 +149,7 @@ Gw
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<colorWell translatesAutoresizingMaskIntoConstraints="NO" id="1439" customClass="HNHUIColorWell">
|
<colorWell translatesAutoresizingMaskIntoConstraints="NO" id="1439" customClass="HNHUIColorWell">
|
||||||
<rect key="frame" x="197" y="42" width="50" height="27"/>
|
<rect key="frame" x="154" y="44" width="44" height="23"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="width" constant="44" id="XBF-V3-71G"/>
|
<constraint firstAttribute="width" constant="44" id="XBF-V3-71G"/>
|
||||||
<constraint firstAttribute="height" constant="23" id="fgN-h5-Mr8"/>
|
<constraint firstAttribute="height" constant="23" id="fgN-h5-Mr8"/>
|
||||||
@@ -158,7 +157,7 @@ Gw
|
|||||||
<color key="color" red="0.05813049898" green="0.055541899059999997" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="color" red="0.05813049898" green="0.055541899059999997" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
</colorWell>
|
</colorWell>
|
||||||
<scrollView horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1530">
|
<scrollView horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1530">
|
||||||
<rect key="frame" x="200" y="115" width="280" height="100"/>
|
<rect key="frame" x="154" y="115" width="280" height="100"/>
|
||||||
<clipView key="contentView" drawsBackground="NO" id="WOI-1v-RCe">
|
<clipView key="contentView" drawsBackground="NO" id="WOI-1v-RCe">
|
||||||
<rect key="frame" x="1" y="1" width="278" height="98"/>
|
<rect key="frame" x="1" y="1" width="278" height="98"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
@@ -188,7 +187,7 @@ Gw
|
|||||||
</scroller>
|
</scroller>
|
||||||
</scrollView>
|
</scrollView>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="RhU-5I-S5l">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="RhU-5I-S5l">
|
||||||
<rect key="frame" x="121" y="20" width="73" height="16"/>
|
<rect key="frame" x="75" y="20" width="73" height="16"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="File format:" id="bTk-YZ-x0G">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="File format:" id="bTk-YZ-x0G">
|
||||||
<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"/>
|
||||||
@@ -196,7 +195,7 @@ Gw
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1Ci-0B-yV5">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1Ci-0B-yV5">
|
||||||
<rect key="frame" x="198" y="20" width="72" height="16"/>
|
<rect key="frame" x="152" y="20" width="72" height="16"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="VersionInfo" id="Ush-4r-A1A">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="VersionInfo" id="Ush-4r-A1A">
|
||||||
<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"/>
|
||||||
@@ -238,11 +237,11 @@ Gw
|
|||||||
</tabViewItem>
|
</tabViewItem>
|
||||||
<tabViewItem label="Security" identifier="" id="370">
|
<tabViewItem label="Security" identifier="" id="370">
|
||||||
<view key="view" id="371">
|
<view key="view" id="371">
|
||||||
<rect key="frame" x="10" y="33" width="765" height="238"/>
|
<rect key="frame" x="10" y="33" width="454" height="288"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="3ek-Rg-w82">
|
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="3ek-Rg-w82">
|
||||||
<rect key="frame" x="305" y="194" width="157" height="25"/>
|
<rect key="frame" x="149" y="244" width="157" height="25"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="150" id="F8Y-Uw-4mL"/>
|
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="150" id="F8Y-Uw-4mL"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
@@ -253,7 +252,7 @@ Gw
|
|||||||
</popUpButtonCell>
|
</popUpButtonCell>
|
||||||
</popUpButton>
|
</popUpButton>
|
||||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="vH7-5a-52C">
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="vH7-5a-52C">
|
||||||
<rect key="frame" x="229" y="201" width="73" height="16"/>
|
<rect key="frame" x="73" y="251" width="73" height="16"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Encryption:" id="gxY-UL-bEG">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Encryption:" id="gxY-UL-bEG">
|
||||||
<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"/>
|
||||||
@@ -261,13 +260,13 @@ Gw
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<box title="Key derivation" translatesAutoresizingMaskIntoConstraints="NO" id="pbl-Mb-r8V">
|
<box title="Key derivation" translatesAutoresizingMaskIntoConstraints="NO" id="pbl-Mb-r8V">
|
||||||
<rect key="frame" x="17" y="16" width="731" height="174"/>
|
<rect key="frame" x="17" y="16" width="420" height="224"/>
|
||||||
<view key="contentView" id="hkT-SX-Te1">
|
<view key="contentView" id="hkT-SX-Te1">
|
||||||
<rect key="frame" x="4" y="5" width="723" height="154"/>
|
<rect key="frame" x="3" y="3" width="414" height="206"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="P98-Cu-Tha">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="P98-Cu-Tha">
|
||||||
<rect key="frame" x="558" y="15" width="146" height="23"/>
|
<rect key="frame" x="249" y="17" width="146" height="23"/>
|
||||||
<buttonCell key="cell" type="roundTextured" title="Generate Parameters" bezelStyle="texturedRounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="PoI-Er-Y8P">
|
<buttonCell key="cell" type="roundTextured" title="Generate Parameters" bezelStyle="texturedRounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="PoI-Er-Y8P">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@@ -277,16 +276,16 @@ Gw
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<tabView drawsBackground="NO" type="noTabsNoBorder" translatesAutoresizingMaskIntoConstraints="NO" id="2MY-PW-kzL">
|
<tabView drawsBackground="NO" type="noTabsNoBorder" translatesAutoresizingMaskIntoConstraints="NO" id="2MY-PW-kzL">
|
||||||
<rect key="frame" x="11" y="45" width="701" height="61"/>
|
<rect key="frame" x="12" y="47" width="390" height="111"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<tabViewItems>
|
<tabViewItems>
|
||||||
<tabViewItem label="Aes" identifier="1" id="ft1-pl-lpO">
|
<tabViewItem label="Aes" identifier="1" id="ft1-pl-lpO">
|
||||||
<view key="view" id="88i-IZ-Yev">
|
<view key="view" id="88i-IZ-Yev">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="701" height="61"/>
|
<rect key="frame" x="0.0" y="0.0" width="390" height="61"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ztz-iY-hWV">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ztz-iY-hWV">
|
||||||
<rect key="frame" x="220" y="23" width="50" height="16"/>
|
<rect key="frame" x="64" y="23" width="50" height="16"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Rounds" id="uUQ-9s-M5E">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Rounds" id="uUQ-9s-M5E">
|
||||||
<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"/>
|
||||||
@@ -294,7 +293,7 @@ Gw
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="8aq-34-rcd">
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="8aq-34-rcd">
|
||||||
<rect key="frame" x="276" y="20" width="150" height="21"/>
|
<rect key="frame" x="120" y="20" width="150" height="21"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="width" constant="150" id="cdb-ED-zB3"/>
|
<constraint firstAttribute="width" constant="150" id="cdb-ED-zB3"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
@@ -514,7 +513,7 @@ Gw
|
|||||||
</tabViewItems>
|
</tabViewItems>
|
||||||
</tabView>
|
</tabView>
|
||||||
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2cq-R3-Ksh">
|
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2cq-R3-Ksh">
|
||||||
<rect key="frame" x="284" y="110" width="157" height="25"/>
|
<rect key="frame" x="129" y="162" width="157" height="25"/>
|
||||||
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="Pb9-YV-rYe">
|
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="Pb9-YV-rYe">
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="menu"/>
|
<font key="font" metaFont="menu"/>
|
||||||
@@ -525,7 +524,7 @@ Gw
|
|||||||
</connections>
|
</connections>
|
||||||
</popUpButton>
|
</popUpButton>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="4el-r1-iRL">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="4el-r1-iRL">
|
||||||
<rect key="frame" x="218" y="117" width="63" height="16"/>
|
<rect key="frame" x="63" y="169" width="63" height="16"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Algorithm" id="GVd-KH-pHc">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Algorithm" id="GVd-KH-pHc">
|
||||||
<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"/>
|
||||||
@@ -570,61 +569,21 @@ Gw
|
|||||||
</tabViewItem>
|
</tabViewItem>
|
||||||
<tabViewItem label="Advanced" identifier="" id="368">
|
<tabViewItem label="Advanced" identifier="" id="368">
|
||||||
<view key="view" id="369">
|
<view key="view" id="369">
|
||||||
<rect key="frame" x="10" y="33" width="500" height="375"/>
|
<rect key="frame" x="10" y="33" width="513" height="393"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<gridView xPlacement="leading" yPlacement="bottom" rowAlignment="firstBaseline" columnSpacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="9qm-jk-6rC">
|
<button verticalHuggingPriority="1000" translatesAutoresizingMaskIntoConstraints="NO" id="531">
|
||||||
<rect key="frame" x="20" y="26" width="460" height="329"/>
|
<rect key="frame" x="184" y="356" width="149" height="18"/>
|
||||||
<constraints>
|
|
||||||
<constraint firstItem="593" firstAttribute="top" secondItem="1273" secondAttribute="bottom" constant="10" symbolic="YES" id="hQY-2D-fsW"/>
|
|
||||||
</constraints>
|
|
||||||
<rows>
|
|
||||||
<gridRow id="s07-ih-7VI"/>
|
|
||||||
<gridRow id="os2-7m-aVp"/>
|
|
||||||
<gridRow id="sfy-Q8-exC"/>
|
|
||||||
<gridRow id="ljf-cP-vpU"/>
|
|
||||||
<gridRow id="MfD-4k-iaA"/>
|
|
||||||
<gridRow id="KPg-u4-okO"/>
|
|
||||||
<gridRow id="6xb-2P-Cvu"/>
|
|
||||||
<gridRow id="Kew-Bj-DCg"/>
|
|
||||||
<gridRow id="2Of-0A-Vfl"/>
|
|
||||||
<gridRow id="L3e-om-Ic8"/>
|
|
||||||
<gridRow id="4hp-Px-ZS4"/>
|
|
||||||
<gridRow id="FDr-78-Xps"/>
|
|
||||||
<gridRow id="izZ-sN-q4t"/>
|
|
||||||
<gridRow id="PKM-81-EQp"/>
|
|
||||||
<gridRow id="hna-iA-5aC"/>
|
|
||||||
</rows>
|
|
||||||
<columns>
|
|
||||||
<gridColumn xPlacement="trailing" id="Qql-Lo-f3g"/>
|
|
||||||
<gridColumn xPlacement="fill" id="PlK-JJ-sPq"/>
|
|
||||||
<gridColumn id="1uH-Gp-dwg"/>
|
|
||||||
</columns>
|
|
||||||
<gridCells>
|
|
||||||
<gridCell row="s07-ih-7VI" column="Qql-Lo-f3g" id="nJh-2X-IpD"/>
|
|
||||||
<gridCell row="s07-ih-7VI" column="PlK-JJ-sPq" id="M9z-JP-ppd">
|
|
||||||
<button key="contentView" verticalHuggingPriority="1000" translatesAutoresizingMaskIntoConstraints="NO" id="531">
|
|
||||||
<rect key="frame" x="166" y="312" width="261" height="18"/>
|
|
||||||
<buttonCell key="cell" type="check" title="Enable Entry History" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="532">
|
<buttonCell key="cell" type="check" title="Enable Entry History" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="532">
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
</button>
|
</button>
|
||||||
</gridCell>
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1273">
|
||||||
<gridCell row="s07-ih-7VI" column="1uH-Gp-dwg" id="UgG-ZX-SWI"/>
|
<rect key="frame" x="186" y="328" width="64" height="21"/>
|
||||||
<gridCell row="os2-7m-aVp" column="Qql-Lo-f3g" xPlacement="trailing" id="X92-9J-0Cg">
|
<constraints>
|
||||||
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1268">
|
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="64" id="PRg-vx-8QK"/>
|
||||||
<rect key="frame" x="21" y="289" width="139" height="16"/>
|
</constraints>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" enabled="NO" sendsActionOnEndEditing="YES" title="Maximum history size:" id="1269">
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
</gridCell>
|
|
||||||
<gridCell row="os2-7m-aVp" column="PlK-JJ-sPq" id="PKf-K7-AsJ">
|
|
||||||
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1273">
|
|
||||||
<rect key="frame" x="168" y="286" width="259" height="21"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="1275">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="1275">
|
||||||
<byteCountFormatter key="formatter" countStyle="binary" allowsNonnumericFormatting="NO" id="q0Y-Ri-l1A"/>
|
<byteCountFormatter key="formatter" countStyle="binary" allowsNonnumericFormatting="NO" id="q0Y-Ri-l1A"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@@ -632,151 +591,85 @@ Gw
|
|||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
</gridCell>
|
<stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1294">
|
||||||
<gridCell row="os2-7m-aVp" column="1uH-Gp-dwg" id="EFp-x4-VeA">
|
<rect key="frame" x="255" y="325" width="19" height="28"/>
|
||||||
<stepper key="contentView" horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1294">
|
|
||||||
<rect key="frame" x="434" y="283" width="19" height="28"/>
|
|
||||||
<stepperCell key="cell" continuous="YES" alignment="left" maxValue="100" id="1295"/>
|
<stepperCell key="cell" continuous="YES" alignment="left" maxValue="100" id="1295"/>
|
||||||
</stepper>
|
</stepper>
|
||||||
</gridCell>
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1268">
|
||||||
<gridCell row="sfy-Q8-exC" column="Qql-Lo-f3g" id="Vns-Oj-BSD">
|
<rect key="frame" x="41" y="331" width="139" height="16"/>
|
||||||
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="557">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" enabled="NO" sendsActionOnEndEditing="YES" title="Maximum history size:" id="1269">
|
||||||
<rect key="frame" x="-2" y="258" width="162" height="16"/>
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="557">
|
||||||
|
<rect key="frame" x="18" y="304" width="162" height="16"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" enabled="NO" sendsActionOnEndEditing="YES" title="Maximum items in history:" id="558">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" enabled="NO" sendsActionOnEndEditing="YES" title="Maximum items in history:" id="558">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
</gridCell>
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="593">
|
||||||
<gridCell row="sfy-Q8-exC" column="PlK-JJ-sPq" id="Z22-Zw-KLo">
|
<rect key="frame" x="186" y="301" width="64" height="21"/>
|
||||||
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="593">
|
|
||||||
<rect key="frame" x="168" y="255" width="259" height="21"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="594">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="594">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
</gridCell>
|
<stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="599">
|
||||||
<gridCell row="sfy-Q8-exC" column="1uH-Gp-dwg" id="4WU-Rb-7mI">
|
<rect key="frame" x="255" y="298" width="19" height="28"/>
|
||||||
<stepper key="contentView" horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="599">
|
|
||||||
<rect key="frame" x="434" y="252" width="19" height="28"/>
|
|
||||||
<stepperCell key="cell" continuous="YES" alignment="left" maxValue="100" id="600"/>
|
<stepperCell key="cell" continuous="YES" alignment="left" maxValue="100" id="600"/>
|
||||||
</stepper>
|
</stepper>
|
||||||
</gridCell>
|
<button translatesAutoresizingMaskIntoConstraints="NO" id="535">
|
||||||
<gridCell row="ljf-cP-vpU" column="Qql-Lo-f3g" xPlacement="fill" id="Hu0-Gi-fjN"/>
|
<rect key="frame" x="184" y="268" width="141" height="18"/>
|
||||||
<gridCell row="ljf-cP-vpU" column="PlK-JJ-sPq" id="UHJ-5t-yfD">
|
|
||||||
<box key="contentView" verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="U7M-MH-EFw">
|
|
||||||
<rect key="frame" x="168" y="246" width="259" height="5"/>
|
|
||||||
</box>
|
|
||||||
</gridCell>
|
|
||||||
<gridCell row="ljf-cP-vpU" column="1uH-Gp-dwg" id="Aq7-ZC-tkG"/>
|
|
||||||
<gridCell row="MfD-4k-iaA" column="Qql-Lo-f3g" id="RuO-oP-DuO"/>
|
|
||||||
<gridCell row="MfD-4k-iaA" column="PlK-JJ-sPq" id="Imr-83-2M9">
|
|
||||||
<button key="contentView" translatesAutoresizingMaskIntoConstraints="NO" id="535">
|
|
||||||
<rect key="frame" x="166" y="225" width="261" height="18"/>
|
|
||||||
<buttonCell key="cell" type="check" title="Enable Recycle Bin" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="536">
|
<buttonCell key="cell" type="check" title="Enable Recycle Bin" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="536">
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
</button>
|
</button>
|
||||||
</gridCell>
|
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="678">
|
||||||
<gridCell row="MfD-4k-iaA" column="1uH-Gp-dwg" id="tS6-3i-0YK"/>
|
<rect key="frame" x="183" y="237" width="39" height="25"/>
|
||||||
<gridCell row="KPg-u4-okO" column="Qql-Lo-f3g" id="kya-ZG-GNN">
|
|
||||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="NPm-5h-2Mz">
|
|
||||||
<rect key="frame" x="45" y="203" width="115" height="16"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Recyclebin Group:" id="kI5-Kp-byE">
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
</gridCell>
|
|
||||||
<gridCell row="KPg-u4-okO" column="PlK-JJ-sPq" id="r55-ea-Eyd">
|
|
||||||
<popUpButton key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="678">
|
|
||||||
<rect key="frame" x="165" y="196" width="266" height="25"/>
|
|
||||||
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="679">
|
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="679">
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="menu"/>
|
<font key="font" metaFont="menu"/>
|
||||||
<menu key="menu" title="OtherViews" id="680"/>
|
<menu key="menu" title="OtherViews" id="680"/>
|
||||||
</popUpButtonCell>
|
</popUpButtonCell>
|
||||||
</popUpButton>
|
</popUpButton>
|
||||||
</gridCell>
|
<box verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="U7M-MH-EFw">
|
||||||
<gridCell row="KPg-u4-okO" column="1uH-Gp-dwg" id="Lw7-ly-vmB"/>
|
<rect key="frame" x="20" y="291" width="473" height="5"/>
|
||||||
<gridCell row="6xb-2P-Cvu" column="Qql-Lo-f3g" id="Xi5-LE-kit">
|
</box>
|
||||||
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1582">
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1582">
|
||||||
<rect key="frame" x="43" y="176" width="117" height="16"/>
|
<rect key="frame" x="63" y="203" width="117" height="16"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Default Username:" id="1591">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Default Username:" id="1591">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
</gridCell>
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1730">
|
||||||
<gridCell row="6xb-2P-Cvu" column="PlK-JJ-sPq" id="kiF-fs-5IE">
|
<rect key="frame" x="186" y="200" width="307" height="21"/>
|
||||||
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1730">
|
|
||||||
<rect key="frame" x="168" y="173" width="259" height="21"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="1731">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="1731">
|
||||||
<font key="font" metaFont="system"/>
|
<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="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
</gridCell>
|
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1738">
|
||||||
<gridCell row="6xb-2P-Cvu" column="1uH-Gp-dwg" id="nGR-Qd-LcH"/>
|
<rect key="frame" x="183" y="156" width="39" height="25"/>
|
||||||
<gridCell row="Kew-Bj-DCg" column="Qql-Lo-f3g" id="ilR-QJ-uFr">
|
|
||||||
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1584">
|
|
||||||
<rect key="frame" x="55" y="150" width="105" height="16"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Template Group:" id="1588">
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
</gridCell>
|
|
||||||
<gridCell row="Kew-Bj-DCg" column="PlK-JJ-sPq" id="d7c-Vq-hsu">
|
|
||||||
<popUpButton key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1738">
|
|
||||||
<rect key="frame" x="165" y="143" width="266" height="25"/>
|
|
||||||
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="1739">
|
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="1739">
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="menu"/>
|
<font key="font" metaFont="menu"/>
|
||||||
<menu key="menu" title="OtherViews" id="1740"/>
|
<menu key="menu" title="OtherViews" id="1740"/>
|
||||||
</popUpButtonCell>
|
</popUpButtonCell>
|
||||||
</popUpButton>
|
</popUpButton>
|
||||||
</gridCell>
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="19r-LE-7X5">
|
||||||
<gridCell row="Kew-Bj-DCg" column="1uH-Gp-dwg" id="fpk-Be-TQD"/>
|
<rect key="frame" x="186" y="98" width="128" height="21"/>
|
||||||
<gridCell row="2Of-0A-Vfl" column="Qql-Lo-f3g" xPlacement="fill" id="650-gg-Qbs"/>
|
<constraints>
|
||||||
<gridCell row="2Of-0A-Vfl" column="PlK-JJ-sPq" id="Arn-1Z-3GQ">
|
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="128" id="COb-0V-OmT"/>
|
||||||
<box key="contentView" verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="I0d-r2-ySf">
|
</constraints>
|
||||||
<rect key="frame" x="168" y="138" width="259" height="5"/>
|
|
||||||
</box>
|
|
||||||
</gridCell>
|
|
||||||
<gridCell row="2Of-0A-Vfl" column="1uH-Gp-dwg" id="P4D-Tm-sbJ"/>
|
|
||||||
<gridCell row="L3e-om-Ic8" column="Qql-Lo-f3g" id="kzo-zz-hYh"/>
|
|
||||||
<gridCell row="L3e-om-Ic8" column="PlK-JJ-sPq" id="XXL-yj-FBs">
|
|
||||||
<button key="contentView" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Hqc-B0-xyz">
|
|
||||||
<rect key="frame" x="166" y="117" width="261" height="18"/>
|
|
||||||
<buttonCell key="cell" type="check" title="Recommend key change" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="CtU-Eq-dgy">
|
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
</button>
|
|
||||||
</gridCell>
|
|
||||||
<gridCell row="L3e-om-Ic8" column="1uH-Gp-dwg" id="xTv-nk-F9D"/>
|
|
||||||
<gridCell row="4hp-Px-ZS4" column="Qql-Lo-f3g" id="ZI0-zQ-gg8">
|
|
||||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="OmP-GD-2nA">
|
|
||||||
<rect key="frame" x="7" y="94" width="153" height="16"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Recommend key change" id="Xib-Fn-sqx">
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
</gridCell>
|
|
||||||
<gridCell row="4hp-Px-ZS4" column="PlK-JJ-sPq" id="gAl-mU-rhC">
|
|
||||||
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="19r-LE-7X5">
|
|
||||||
<rect key="frame" x="168" y="91" width="259" height="21"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="Nca-aw-6rR">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="Nca-aw-6rR">
|
||||||
<customFormatter key="formatter" id="fXZ-RM-4M7" customClass="MPDayCountFormatter"/>
|
<customFormatter key="formatter" id="fXZ-RM-4M7" customClass="MPDayCountFormatter"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@@ -784,37 +677,26 @@ Gw
|
|||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
</gridCell>
|
<stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="GUO-6H-UI2">
|
||||||
<gridCell row="4hp-Px-ZS4" column="1uH-Gp-dwg" id="JeN-68-oQb">
|
<rect key="frame" x="319" y="94" width="19" height="28"/>
|
||||||
<stepper key="contentView" horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="GUO-6H-UI2">
|
|
||||||
<rect key="frame" x="434" y="88" width="19" height="28"/>
|
|
||||||
<stepperCell key="cell" continuous="YES" alignment="left" maxValue="100" id="qQV-3d-GpK"/>
|
<stepperCell key="cell" continuous="YES" alignment="left" maxValue="100" id="qQV-3d-GpK"/>
|
||||||
</stepper>
|
</stepper>
|
||||||
</gridCell>
|
<button verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Hqc-B0-xyz">
|
||||||
<gridCell row="FDr-78-Xps" column="Qql-Lo-f3g" id="jFb-MI-vz6"/>
|
<rect key="frame" x="184" y="126" width="175" height="18"/>
|
||||||
<gridCell row="FDr-78-Xps" column="PlK-JJ-sPq" id="EdL-ZX-dSC">
|
<buttonCell key="cell" type="check" title="Recommend key change" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="CtU-Eq-dgy">
|
||||||
<button key="contentView" translatesAutoresizingMaskIntoConstraints="NO" id="upv-b3-vCc">
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
<rect key="frame" x="166" y="68" width="261" height="18"/>
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
</button>
|
||||||
|
<button translatesAutoresizingMaskIntoConstraints="NO" id="upv-b3-vCc">
|
||||||
|
<rect key="frame" x="184" y="73" width="133" height="18"/>
|
||||||
<buttonCell key="cell" type="check" title="Force key change" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="z6u-YT-7LE">
|
<buttonCell key="cell" type="check" title="Force key change" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="z6u-YT-7LE">
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
</button>
|
</button>
|
||||||
</gridCell>
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="VYh-cm-fix">
|
||||||
<gridCell row="FDr-78-Xps" column="1uH-Gp-dwg" id="lEW-cO-ZwS"/>
|
<rect key="frame" x="186" y="45" width="128" height="21"/>
|
||||||
<gridCell row="izZ-sN-q4t" column="Qql-Lo-f3g" id="rqh-02-I8g">
|
|
||||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="S0c-4E-42z">
|
|
||||||
<rect key="frame" x="37" y="45" width="123" height="16"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Enforce key change" id="5QH-N1-FHK">
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
</gridCell>
|
|
||||||
<gridCell row="izZ-sN-q4t" column="PlK-JJ-sPq" id="68v-f4-5wW">
|
|
||||||
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="VYh-cm-fix">
|
|
||||||
<rect key="frame" x="168" y="42" width="259" height="21"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="M9G-Yy-1s4">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="M9G-Yy-1s4">
|
||||||
<customFormatter key="formatter" id="3Ax-U4-Ofb" customClass="MPDayCountFormatter"/>
|
<customFormatter key="formatter" id="3Ax-U4-Ofb" customClass="MPDayCountFormatter"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@@ -822,44 +704,132 @@ Gw
|
|||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
</gridCell>
|
<stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="lH4-xp-5QF">
|
||||||
<gridCell row="izZ-sN-q4t" column="1uH-Gp-dwg" id="DfF-Dc-hEE">
|
<rect key="frame" x="319" y="41" width="19" height="28"/>
|
||||||
<stepper key="contentView" horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="lH4-xp-5QF">
|
|
||||||
<rect key="frame" x="434" y="39" width="19" height="28"/>
|
|
||||||
<stepperCell key="cell" continuous="YES" alignment="left" maxValue="100" id="7Hw-Qf-zWf"/>
|
<stepperCell key="cell" continuous="YES" alignment="left" maxValue="100" id="7Hw-Qf-zWf"/>
|
||||||
</stepper>
|
</stepper>
|
||||||
</gridCell>
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1584">
|
||||||
<gridCell row="PKM-81-EQp" column="Qql-Lo-f3g" id="aOP-9Y-xja"/>
|
<rect key="frame" x="75" y="163" width="105" height="16"/>
|
||||||
<gridCell row="PKM-81-EQp" column="PlK-JJ-sPq" id="xtX-MJ-Trd">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Template Group:" id="1588">
|
||||||
<button key="contentView" translatesAutoresizingMaskIntoConstraints="NO" id="VMc-Qg-eCr">
|
<font key="font" metaFont="system"/>
|
||||||
<rect key="frame" x="166" y="19" width="261" height="18"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<box verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="I0d-r2-ySf">
|
||||||
|
<rect key="frame" x="20" y="149" width="473" height="5"/>
|
||||||
|
</box>
|
||||||
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="NPm-5h-2Mz">
|
||||||
|
<rect key="frame" x="65" y="244" width="115" height="16"/>
|
||||||
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Recyclebin Group:" id="kI5-Kp-byE">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="OmP-GD-2nA">
|
||||||
|
<rect key="frame" x="27" y="101" width="153" height="16"/>
|
||||||
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Recommend key change" id="Xib-Fn-sqx">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="S0c-4E-42z">
|
||||||
|
<rect key="frame" x="57" y="48" width="123" height="16"/>
|
||||||
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Enforce key change" id="5QH-N1-FHK">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<button translatesAutoresizingMaskIntoConstraints="NO" id="VMc-Qg-eCr">
|
||||||
|
<rect key="frame" x="184" y="20" width="261" height="18"/>
|
||||||
<buttonCell key="cell" type="check" title="Force key change once after unlocking" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="pA1-aL-KjT">
|
<buttonCell key="cell" type="check" title="Force key change once after unlocking" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="pA1-aL-KjT">
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
</button>
|
</button>
|
||||||
</gridCell>
|
|
||||||
<gridCell row="PKM-81-EQp" column="1uH-Gp-dwg" id="D60-xt-9Bt"/>
|
|
||||||
<gridCell row="hna-iA-5aC" column="Qql-Lo-f3g" id="zlc-o1-Fvg"/>
|
|
||||||
<gridCell row="hna-iA-5aC" column="PlK-JJ-sPq" id="btx-7k-Xdx">
|
|
||||||
<textField key="contentView" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="vkL-2N-0Hi">
|
|
||||||
<rect key="frame" x="166" y="0.0" width="263" height="14"/>
|
|
||||||
<textFieldCell key="cell" selectable="YES" title="Last key change was at: DATE" id="KL5-Q0-xoF">
|
|
||||||
<font key="font" metaFont="smallSystem"/>
|
|
||||||
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
</gridCell>
|
|
||||||
<gridCell row="hna-iA-5aC" column="1uH-Gp-dwg" id="jjM-Wc-cGN"/>
|
|
||||||
</gridCells>
|
|
||||||
</gridView>
|
|
||||||
</subviews>
|
</subviews>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstItem="9qm-jk-6rC" firstAttribute="top" secondItem="369" secondAttribute="top" constant="20" symbolic="YES" id="5IF-9q-g5e"/>
|
<constraint firstItem="1273" firstAttribute="leading" secondItem="531" secondAttribute="leading" id="1oM-2t-AOv"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="9qm-jk-6rC" secondAttribute="trailing" constant="20" symbolic="YES" id="Tgr-FZ-G2x"/>
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="535" secondAttribute="trailing" constant="20" symbolic="YES" id="21A-KW-N4v"/>
|
||||||
<constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="9qm-jk-6rC" secondAttribute="bottom" constant="20" symbolic="YES" id="rO7-wN-hSW"/>
|
<constraint firstItem="GUO-6H-UI2" firstAttribute="leading" secondItem="19r-LE-7X5" secondAttribute="trailing" constant="8" symbolic="YES" id="2PV-sa-5h6"/>
|
||||||
<constraint firstItem="9qm-jk-6rC" firstAttribute="leading" secondItem="369" secondAttribute="leading" constant="20" symbolic="YES" id="vim-At-bJf"/>
|
<constraint firstItem="VYh-cm-fix" firstAttribute="leading" secondItem="531" secondAttribute="leading" id="2Xr-j4-fRh"/>
|
||||||
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="GUO-6H-UI2" secondAttribute="trailing" constant="20" symbolic="YES" id="3y6-lK-yT4"/>
|
||||||
|
<constraint firstItem="593" firstAttribute="width" secondItem="1273" secondAttribute="width" id="4Ee-i1-ZVV"/>
|
||||||
|
<constraint firstItem="U7M-MH-EFw" firstAttribute="leading" secondItem="369" secondAttribute="leading" constant="20" symbolic="YES" id="4vC-yz-H7O"/>
|
||||||
|
<constraint firstItem="VYh-cm-fix" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="369" secondAttribute="leading" constant="20" symbolic="YES" id="5FH-au-cde"/>
|
||||||
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="Hqc-B0-xyz" secondAttribute="trailing" constant="20" symbolic="YES" id="5c0-xg-zUq"/>
|
||||||
|
<constraint firstItem="531" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="369" secondAttribute="leading" constant="181" id="6zN-79-Qnu"/>
|
||||||
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="678" secondAttribute="trailing" constant="20" symbolic="YES" id="7i3-v0-KzW"/>
|
||||||
|
<constraint firstItem="1730" firstAttribute="leading" secondItem="531" secondAttribute="leading" id="8U5-xL-RFD"/>
|
||||||
|
<constraint firstItem="1294" firstAttribute="centerY" secondItem="1273" secondAttribute="centerY" id="9N2-YI-gkU"/>
|
||||||
|
<constraint firstItem="upv-b3-vCc" firstAttribute="top" secondItem="19r-LE-7X5" secondAttribute="bottom" constant="8" symbolic="YES" id="9b8-i8-WsG"/>
|
||||||
|
<constraint firstItem="593" firstAttribute="leading" secondItem="1273" secondAttribute="leading" id="BEV-US-Ovh"/>
|
||||||
|
<constraint firstItem="19r-LE-7X5" firstAttribute="leading" secondItem="531" secondAttribute="leading" id="Bxq-DB-Mdf"/>
|
||||||
|
<constraint firstItem="OmP-GD-2nA" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="369" secondAttribute="leading" constant="20" symbolic="YES" id="Bxq-ck-lhy"/>
|
||||||
|
<constraint firstItem="I0d-r2-ySf" firstAttribute="top" secondItem="1738" secondAttribute="bottom" constant="8" symbolic="YES" id="D8h-V2-rF2"/>
|
||||||
|
<constraint firstItem="Hqc-B0-xyz" firstAttribute="leading" secondItem="531" secondAttribute="leading" id="DVO-fh-dB8"/>
|
||||||
|
<constraint firstItem="531" firstAttribute="top" secondItem="369" secondAttribute="top" constant="20" symbolic="YES" id="DZt-k3-wht"/>
|
||||||
|
<constraint firstItem="1294" firstAttribute="leading" secondItem="1273" secondAttribute="trailing" constant="8" symbolic="YES" id="EAc-QN-Zdi"/>
|
||||||
|
<constraint firstItem="678" firstAttribute="top" secondItem="535" secondAttribute="bottom" constant="8" id="EUL-Ub-Kzl"/>
|
||||||
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="599" secondAttribute="trailing" constant="20" symbolic="YES" id="Gsp-ax-sWf"/>
|
||||||
|
<constraint firstItem="1273" firstAttribute="leading" secondItem="1268" secondAttribute="trailing" constant="8" symbolic="YES" id="H0a-Pl-w3M"/>
|
||||||
|
<constraint firstItem="lH4-xp-5QF" firstAttribute="leading" secondItem="VYh-cm-fix" secondAttribute="trailing" constant="8" symbolic="YES" id="Ii9-vL-bAG"/>
|
||||||
|
<constraint firstItem="19r-LE-7X5" firstAttribute="top" secondItem="Hqc-B0-xyz" secondAttribute="bottom" constant="8" symbolic="YES" id="KaF-Ep-rjY"/>
|
||||||
|
<constraint firstItem="1584" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="369" secondAttribute="leading" constant="20" symbolic="YES" id="LT1-en-ksN"/>
|
||||||
|
<constraint firstItem="1268" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="369" secondAttribute="leading" constant="20" symbolic="YES" id="MRP-DE-PpY"/>
|
||||||
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="1294" secondAttribute="trailing" constant="20" symbolic="YES" id="Mod-SI-3xF"/>
|
||||||
|
<constraint firstItem="1730" firstAttribute="leading" secondItem="1582" secondAttribute="trailing" constant="8" symbolic="YES" id="NFN-Hh-fQu"/>
|
||||||
|
<constraint firstItem="678" firstAttribute="leading" secondItem="531" secondAttribute="leading" id="NKj-ux-wRY"/>
|
||||||
|
<constraint firstItem="VMc-Qg-eCr" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="369" secondAttribute="leading" constant="20" symbolic="YES" id="Nbn-lS-NER"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="1730" secondAttribute="trailing" constant="20" symbolic="YES" id="OrK-k9-PSF"/>
|
||||||
|
<constraint firstItem="1273" firstAttribute="baseline" secondItem="1268" secondAttribute="baseline" id="Q5P-hq-kp1"/>
|
||||||
|
<constraint firstItem="1730" firstAttribute="top" secondItem="678" secondAttribute="bottom" constant="20" id="ROp-qW-SeX"/>
|
||||||
|
<constraint firstItem="VMc-Qg-eCr" firstAttribute="leading" secondItem="531" secondAttribute="leading" id="SIP-kd-jaM"/>
|
||||||
|
<constraint firstItem="1273" firstAttribute="top" secondItem="531" secondAttribute="bottom" constant="8" id="SjI-0M-mxU"/>
|
||||||
|
<constraint firstItem="535" firstAttribute="leading" secondItem="531" secondAttribute="leading" id="TB6-AF-4H6"/>
|
||||||
|
<constraint firstItem="S0c-4E-42z" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="369" secondAttribute="leading" constant="20" symbolic="YES" id="Tuc-bZ-dwc"/>
|
||||||
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="upv-b3-vCc" secondAttribute="trailing" constant="20" symbolic="YES" id="U7O-Ai-LSM"/>
|
||||||
|
<constraint firstItem="535" firstAttribute="top" secondItem="U7M-MH-EFw" secondAttribute="bottom" constant="8" symbolic="YES" id="Uvh-5Q-ELd"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="U7M-MH-EFw" secondAttribute="trailing" constant="20" symbolic="YES" id="V98-nM-gJb"/>
|
||||||
|
<constraint firstItem="599" firstAttribute="centerY" secondItem="593" secondAttribute="centerY" id="Wc5-zI-ZEb"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="I0d-r2-ySf" secondAttribute="trailing" constant="20" symbolic="YES" id="YKf-bh-TK9"/>
|
||||||
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="lH4-xp-5QF" secondAttribute="trailing" constant="20" symbolic="YES" id="YeE-Vn-DiZ"/>
|
||||||
|
<constraint firstItem="VMc-Qg-eCr" firstAttribute="top" secondItem="VYh-cm-fix" secondAttribute="bottom" constant="8" symbolic="YES" id="abg-f4-KyH"/>
|
||||||
|
<constraint firstItem="Hqc-B0-xyz" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="369" secondAttribute="leading" constant="20" symbolic="YES" id="b0w-yr-yRd"/>
|
||||||
|
<constraint firstItem="599" firstAttribute="leading" secondItem="593" secondAttribute="trailing" constant="8" symbolic="YES" id="bJC-wD-1tr"/>
|
||||||
|
<constraint firstItem="557" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="369" secondAttribute="leading" constant="20" symbolic="YES" id="cS1-DC-wqY"/>
|
||||||
|
<constraint firstItem="1582" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="369" secondAttribute="leading" constant="20" symbolic="YES" id="cwk-hq-VzW"/>
|
||||||
|
<constraint firstItem="VYh-cm-fix" firstAttribute="leading" secondItem="S0c-4E-42z" secondAttribute="trailing" constant="8" symbolic="YES" id="dT6-1H-A6Y"/>
|
||||||
|
<constraint firstItem="NPm-5h-2Mz" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="369" secondAttribute="leading" constant="20" symbolic="YES" id="fET-L3-Q98"/>
|
||||||
|
<constraint firstItem="593" firstAttribute="leading" secondItem="557" secondAttribute="trailing" constant="8" symbolic="YES" id="gRs-a5-bni"/>
|
||||||
|
<constraint firstItem="1738" firstAttribute="baseline" secondItem="1584" secondAttribute="baseline" id="gqn-vB-VZp"/>
|
||||||
|
<constraint firstItem="1738" firstAttribute="leading" secondItem="531" secondAttribute="leading" id="gwj-YC-hxN"/>
|
||||||
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="1738" secondAttribute="trailing" constant="20" symbolic="YES" id="hac-jI-arI"/>
|
||||||
|
<constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="VMc-Qg-eCr" secondAttribute="bottom" constant="20" symbolic="YES" id="he9-J0-S1u"/>
|
||||||
|
<constraint firstItem="VYh-cm-fix" firstAttribute="top" secondItem="upv-b3-vCc" secondAttribute="bottom" constant="8" symbolic="YES" id="hjn-Jx-hqk"/>
|
||||||
|
<constraint firstItem="upv-b3-vCc" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="369" secondAttribute="leading" constant="20" symbolic="YES" id="hy0-Dk-mgY"/>
|
||||||
|
<constraint firstItem="lH4-xp-5QF" firstAttribute="centerY" secondItem="VYh-cm-fix" secondAttribute="centerY" id="kBr-F4-JCu"/>
|
||||||
|
<constraint firstItem="678" firstAttribute="baseline" secondItem="NPm-5h-2Mz" secondAttribute="baseline" id="lG3-Ah-hgg"/>
|
||||||
|
<constraint firstItem="19r-LE-7X5" firstAttribute="leading" secondItem="OmP-GD-2nA" secondAttribute="trailing" constant="8" symbolic="YES" id="my4-Br-O00"/>
|
||||||
|
<constraint firstItem="1738" firstAttribute="leading" secondItem="1584" secondAttribute="trailing" constant="8" symbolic="YES" id="p8Q-8i-dgy"/>
|
||||||
|
<constraint firstItem="678" firstAttribute="leading" secondItem="NPm-5h-2Mz" secondAttribute="trailing" constant="8" symbolic="YES" id="pLt-Cf-KAV"/>
|
||||||
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="VMc-Qg-eCr" secondAttribute="trailing" constant="20" symbolic="YES" id="qpu-zJ-eEc"/>
|
||||||
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="531" secondAttribute="trailing" constant="180" id="rrS-VQ-gvR"/>
|
||||||
|
<constraint firstItem="upv-b3-vCc" firstAttribute="leading" secondItem="531" secondAttribute="leading" id="rsd-1J-hnh"/>
|
||||||
|
<constraint firstItem="I0d-r2-ySf" firstAttribute="leading" secondItem="369" secondAttribute="leading" constant="20" symbolic="YES" id="s3y-lW-Y2J"/>
|
||||||
|
<constraint firstItem="593" firstAttribute="baseline" secondItem="557" secondAttribute="baseline" id="s4p-cI-vbY"/>
|
||||||
|
<constraint firstItem="1738" firstAttribute="top" secondItem="1730" secondAttribute="bottom" constant="20" symbolic="YES" id="sb5-r3-XLt"/>
|
||||||
|
<constraint firstItem="Hqc-B0-xyz" firstAttribute="top" secondItem="I0d-r2-ySf" secondAttribute="bottom" constant="8" symbolic="YES" id="t5k-Eh-ADF"/>
|
||||||
|
<constraint firstItem="U7M-MH-EFw" firstAttribute="top" secondItem="599" secondAttribute="bottom" constant="8" symbolic="YES" id="t7y-8s-Nio"/>
|
||||||
|
<constraint firstItem="VYh-cm-fix" firstAttribute="width" secondItem="19r-LE-7X5" secondAttribute="width" id="tg1-z9-11D"/>
|
||||||
|
<constraint firstItem="19r-LE-7X5" firstAttribute="baseline" secondItem="OmP-GD-2nA" secondAttribute="baseline" id="uXa-9r-cOg"/>
|
||||||
|
<constraint firstItem="VYh-cm-fix" firstAttribute="baseline" secondItem="S0c-4E-42z" secondAttribute="baseline" id="upv-Da-KSz"/>
|
||||||
|
<constraint firstItem="1730" firstAttribute="baseline" secondItem="1582" secondAttribute="baseline" id="wvt-QO-HZ4"/>
|
||||||
|
<constraint firstItem="GUO-6H-UI2" firstAttribute="centerY" secondItem="19r-LE-7X5" secondAttribute="centerY" id="yQu-gw-reJ"/>
|
||||||
|
<constraint firstItem="593" firstAttribute="top" secondItem="1273" secondAttribute="bottom" constant="6" id="yTD-oa-Y1Q"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
</view>
|
</view>
|
||||||
</tabViewItem>
|
</tabViewItem>
|
||||||
@@ -878,7 +848,7 @@ Gw
|
|||||||
<constraint firstItem="956" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="2" secondAttribute="leading" constant="20" symbolic="YES" id="Yla-YR-bgz"/>
|
<constraint firstItem="956" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="2" secondAttribute="leading" constant="20" symbolic="YES" id="Yla-YR-bgz"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
</view>
|
</view>
|
||||||
<point key="canvasLocation" x="-2114" y="-801"/>
|
<point key="canvasLocation" x="-2020.5" y="-860.5"/>
|
||||||
</window>
|
</window>
|
||||||
</objects>
|
</objects>
|
||||||
</document>
|
</document>
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
<objects>
|
<objects>
|
||||||
<customObject id="-2" userLabel="File's Owner" customClass="MPEntryInspectorViewController">
|
<customObject id="-2" userLabel="File's Owner" customClass="MPEntryInspectorViewController">
|
||||||
<connections>
|
<connections>
|
||||||
<outlet property="URLTextField" destination="56" id="262"/>
|
|
||||||
<outlet property="addAttachmentButton" destination="177" id="w3F-U0-Rpk"/>
|
<outlet property="addAttachmentButton" destination="177" id="w3F-U0-Rpk"/>
|
||||||
<outlet property="addCustomFieldButton" destination="G9J-nn-2bu" id="vco-Lt-hkc"/>
|
<outlet property="addCustomFieldButton" destination="G9J-nn-2bu" id="vco-Lt-hkc"/>
|
||||||
<outlet property="addWindowAssociationButton" destination="Iy9-9L-Aev" id="kDA-Mm-lah"/>
|
<outlet property="addWindowAssociationButton" destination="Iy9-9L-Aev" id="kDA-Mm-lah"/>
|
||||||
@@ -18,23 +17,16 @@
|
|||||||
<outlet property="customEntrySequenceTextField" destination="cDK-DM-F5z" id="CDU-Oq-AHP"/>
|
<outlet property="customEntrySequenceTextField" destination="cDK-DM-F5z" id="CDU-Oq-AHP"/>
|
||||||
<outlet property="customFieldsTableView" destination="193" id="266"/>
|
<outlet property="customFieldsTableView" destination="193" id="266"/>
|
||||||
<outlet property="enableAutotypeCheckButton" destination="kdV-Xa-8p3" id="vlC-HP-lBv"/>
|
<outlet property="enableAutotypeCheckButton" destination="kdV-Xa-8p3" id="vlC-HP-lBv"/>
|
||||||
<outlet property="expiresCheckButton" destination="7" id="286"/>
|
|
||||||
<outlet property="fieldsStackView" destination="dx3-E2-FFt" id="GbY-9q-iEy"/>
|
<outlet property="fieldsStackView" destination="dx3-E2-FFt" id="GbY-9q-iEy"/>
|
||||||
<outlet property="generalView" destination="4" id="270"/>
|
<outlet property="generalView" destination="4" id="270"/>
|
||||||
<outlet property="generatePasswordButton" destination="59" id="282"/>
|
|
||||||
<outlet property="infoTabControl" destination="82" id="264"/>
|
<outlet property="infoTabControl" destination="82" id="264"/>
|
||||||
<outlet property="obfuscateAutotypeCheckButton" destination="I7L-Am-Qpa" id="hwa-zl-24W"/>
|
<outlet property="obfuscateAutotypeCheckButton" destination="I7L-Am-Qpa" id="hwa-zl-24W"/>
|
||||||
<outlet property="passwordTextField" destination="60" id="263"/>
|
|
||||||
<outlet property="pickExpireDateButton" destination="8" id="cJg-5V-AL6"/>
|
|
||||||
<outlet property="removeWindowAssociationButton" destination="AAj-Ak-z46" id="KJD-It-16t"/>
|
<outlet property="removeWindowAssociationButton" destination="AAj-Ak-z46" id="KJD-It-16t"/>
|
||||||
<outlet property="showCustomAssociationSequenceAutotypeBuilderButton" destination="m1C-m8-BKR" id="B3I-AG-TCJ"/>
|
<outlet property="showCustomAssociationSequenceAutotypeBuilderButton" destination="m1C-m8-BKR" id="B3I-AG-TCJ"/>
|
||||||
<outlet property="showCustomDataButton" destination="QSX-Xo-tcH" id="bqq-Rh-GOb"/>
|
<outlet property="showCustomDataButton" destination="QSX-Xo-tcH" id="bqq-Rh-GOb"/>
|
||||||
<outlet property="showCustomEntrySequenceAutotypeBuilderButton" destination="HDS-Bz-jrr" id="7u1-17-oMK"/>
|
<outlet property="showCustomEntrySequenceAutotypeBuilderButton" destination="HDS-Bz-jrr" id="7u1-17-oMK"/>
|
||||||
<outlet property="tabView" destination="83" id="269"/>
|
<outlet property="tabView" destination="83" id="269"/>
|
||||||
<outlet property="tagsTokenField" destination="5" id="287"/>
|
<outlet property="tagsTokenField" destination="5" id="287"/>
|
||||||
<outlet property="titleTextField" destination="53" id="260"/>
|
|
||||||
<outlet property="togglePassword" destination="61" id="268"/>
|
|
||||||
<outlet property="usernameTextField" destination="55" id="261"/>
|
|
||||||
<outlet property="uuidTextField" destination="IpW-b2-jWu" id="dP6-qA-jJm"/>
|
<outlet property="uuidTextField" destination="IpW-b2-jWu" id="dP6-qA-jJm"/>
|
||||||
<outlet property="view" destination="3" id="250"/>
|
<outlet property="view" destination="3" id="250"/>
|
||||||
<outlet property="windowAssociationsTableView" destination="caM-L6-UHC" id="n5M-f8-z24"/>
|
<outlet property="windowAssociationsTableView" destination="caM-L6-UHC" id="n5M-f8-z24"/>
|
||||||
@@ -254,15 +246,15 @@
|
|||||||
<constraint firstItem="83" firstAttribute="trailing" secondItem="3" secondAttribute="trailing" id="86"/>
|
<constraint firstItem="83" firstAttribute="trailing" secondItem="3" secondAttribute="trailing" id="86"/>
|
||||||
<constraint firstItem="82" firstAttribute="top" secondItem="3" secondAttribute="top" constant="5" id="89"/>
|
<constraint firstItem="82" firstAttribute="top" secondItem="3" secondAttribute="top" constant="5" id="89"/>
|
||||||
<constraint firstAttribute="centerX" secondItem="82" secondAttribute="centerX" id="90"/>
|
<constraint firstAttribute="centerX" secondItem="82" secondAttribute="centerX" id="90"/>
|
||||||
<constraint firstItem="83" firstAttribute="bottom" secondItem="3" secondAttribute="bottom" id="254"/>
|
|
||||||
<constraint firstItem="83" firstAttribute="top" secondItem="3" secondAttribute="top" constant="26" id="279"/>
|
<constraint firstItem="83" firstAttribute="top" secondItem="3" secondAttribute="top" constant="26" id="279"/>
|
||||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="82" secondAttribute="trailing" constant="20" symbolic="YES" id="4df-0Y-ggz"/>
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="82" secondAttribute="trailing" constant="20" symbolic="YES" id="4df-0Y-ggz"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="83" secondAttribute="bottom" id="Lc3-ap-AJQ"/>
|
||||||
<constraint firstItem="82" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="3" secondAttribute="leading" constant="20" symbolic="YES" id="zU6-5h-Swa"/>
|
<constraint firstItem="82" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="3" secondAttribute="leading" constant="20" symbolic="YES" id="zU6-5h-Swa"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<point key="canvasLocation" x="-680" y="-1408"/>
|
<point key="canvasLocation" x="-239" y="-1954"/>
|
||||||
</view>
|
</view>
|
||||||
<customView translatesAutoresizingMaskIntoConstraints="NO" id="4" customClass="HNHUIScrollDocumentViewAdapter">
|
<customView translatesAutoresizingMaskIntoConstraints="NO" id="4" customClass="HNHUIScrollDocumentViewAdapter">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="291" height="484"/>
|
<rect key="frame" x="0.0" y="0.0" width="291" height="840"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="0U8-TS-giU">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="0U8-TS-giU">
|
||||||
<rect key="frame" x="18" y="77" width="32" height="14"/>
|
<rect key="frame" x="18" y="77" width="32" height="14"/>
|
||||||
@@ -291,7 +283,6 @@
|
|||||||
</buttonCell>
|
</buttonCell>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="showPluginData:" target="-1" id="yGe-GL-mcW"/>
|
<action selector="showPluginData:" target="-1" id="yGe-GL-mcW"/>
|
||||||
<outlet property="nextKeyView" destination="53" id="HTB-dl-8aH"/>
|
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<segmentedControl verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="G9J-nn-2bu" customClass="MPContextButton">
|
<segmentedControl verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="G9J-nn-2bu" customClass="MPContextButton">
|
||||||
@@ -309,162 +300,8 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</segmentedControl>
|
</segmentedControl>
|
||||||
<stackView distribution="fill" orientation="vertical" alignment="leading" horizontalStackHuggingPriority="250" verticalStackHuggingPriority="250" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="dx3-E2-FFt">
|
<stackView distribution="fill" orientation="vertical" alignment="leading" horizontalStackHuggingPriority="250" verticalStackHuggingPriority="250" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="dx3-E2-FFt">
|
||||||
<rect key="frame" x="20" y="135" width="251" height="329"/>
|
<rect key="frame" x="20" y="721" width="251" height="99"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<textField horizontalHuggingPriority="249" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="52">
|
|
||||||
<rect key="frame" x="-2" y="315" width="255" height="14"/>
|
|
||||||
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Title" id="71">
|
|
||||||
<font key="font" metaFont="smallSystem"/>
|
|
||||||
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<textField horizontalHuggingPriority="249" verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="53" customClass="HNHUITextField">
|
|
||||||
<rect key="frame" x="0.0" y="286" width="251" height="21"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" truncatesLastVisibleLine="YES" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="70">
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
<connections>
|
|
||||||
<outlet property="delegate" destination="-2" id="pQH-Xf-3pz"/>
|
|
||||||
<outlet property="nextKeyView" destination="55" id="FgE-cj-E5Z"/>
|
|
||||||
</connections>
|
|
||||||
</textField>
|
|
||||||
<textField horizontalHuggingPriority="249" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="54">
|
|
||||||
<rect key="frame" x="-2" y="264" width="255" height="14"/>
|
|
||||||
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Username" id="69">
|
|
||||||
<font key="font" metaFont="smallSystem"/>
|
|
||||||
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<textField horizontalHuggingPriority="249" verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="55" customClass="HNHUITextField">
|
|
||||||
<rect key="frame" x="0.0" y="236" width="251" height="20"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" truncatesLastVisibleLine="YES" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="68">
|
|
||||||
<font key="font" size="13" name="Menlo-Regular"/>
|
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
<connections>
|
|
||||||
<outlet property="delegate" destination="-2" id="22y-I8-aaG"/>
|
|
||||||
<outlet property="nextKeyView" destination="60" id="ZPp-lg-TBS"/>
|
|
||||||
</connections>
|
|
||||||
</textField>
|
|
||||||
<textField horizontalHuggingPriority="249" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="58">
|
|
||||||
<rect key="frame" x="-2" y="214" width="255" height="14"/>
|
|
||||||
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Password" id="65">
|
|
||||||
<font key="font" metaFont="smallSystem"/>
|
|
||||||
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<stackView distribution="fill" orientation="horizontal" alignment="centerY" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" horizontalHuggingPriority="249" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="C4J-K4-QBG">
|
|
||||||
<rect key="frame" x="0.0" y="186" width="251" height="20"/>
|
|
||||||
<subviews>
|
|
||||||
<secureTextField horizontalHuggingPriority="249" verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" allowsCharacterPickerTouchBarItem="YES" contentType="oneTimeCode" translatesAutoresizingMaskIntoConstraints="NO" id="60" customClass="HNHUISecureTextField">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="123" height="20"/>
|
|
||||||
<secureTextFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" truncatesLastVisibleLine="YES" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" id="63" customClass="HNHUISecureTextFieldCell">
|
|
||||||
<font key="font" size="13" name="Menlo-Regular"/>
|
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<allowedInputSourceLocales>
|
|
||||||
<string>NSAllRomanInputSourcesLocaleIdentifier</string>
|
|
||||||
</allowedInputSourceLocales>
|
|
||||||
</secureTextFieldCell>
|
|
||||||
<connections>
|
|
||||||
<outlet property="delegate" destination="-2" id="RBf-26-U9y"/>
|
|
||||||
<outlet property="nextKeyView" destination="61" id="5yc-GS-oVG"/>
|
|
||||||
</connections>
|
|
||||||
</secureTextField>
|
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="61">
|
|
||||||
<rect key="frame" x="124" y="-7" width="50" height="32"/>
|
|
||||||
<buttonCell key="cell" type="push" bezelStyle="rounded" image="NSQuickLookTemplate" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="62">
|
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
<connections>
|
|
||||||
<outlet property="nextKeyView" destination="59" id="ZRe-l9-kNq"/>
|
|
||||||
</connections>
|
|
||||||
</button>
|
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="59">
|
|
||||||
<rect key="frame" x="168" y="-7" width="90" height="32"/>
|
|
||||||
<buttonCell key="cell" type="push" title="Generate" bezelStyle="rounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="64">
|
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
<connections>
|
|
||||||
<action selector="showPasswordGenerator:" target="-2" id="xxV-lD-L1K"/>
|
|
||||||
<outlet property="nextKeyView" destination="56" id="rY0-PH-WBT"/>
|
|
||||||
</connections>
|
|
||||||
</button>
|
|
||||||
</subviews>
|
|
||||||
<visibilityPriorities>
|
|
||||||
<integer value="1000"/>
|
|
||||||
<integer value="1000"/>
|
|
||||||
<integer value="1000"/>
|
|
||||||
</visibilityPriorities>
|
|
||||||
<customSpacing>
|
|
||||||
<real value="3.4028234663852886e+38"/>
|
|
||||||
<real value="3.4028234663852886e+38"/>
|
|
||||||
<real value="3.4028234663852886e+38"/>
|
|
||||||
</customSpacing>
|
|
||||||
</stackView>
|
|
||||||
<textField horizontalHuggingPriority="249" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="57">
|
|
||||||
<rect key="frame" x="-2" y="164" width="255" height="14"/>
|
|
||||||
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="URL" id="66">
|
|
||||||
<font key="font" metaFont="smallSystem"/>
|
|
||||||
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="56" customClass="HNHUITextField">
|
|
||||||
<rect key="frame" x="0.0" y="135" width="251" height="21"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" truncatesLastVisibleLine="YES" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="67">
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
<connections>
|
|
||||||
<outlet property="delegate" destination="-2" id="LzV-u6-mkP"/>
|
|
||||||
<outlet property="nextKeyView" destination="7" id="8Vo-ZR-aWE"/>
|
|
||||||
</connections>
|
|
||||||
</textField>
|
|
||||||
<stackView distribution="fill" orientation="horizontal" alignment="centerY" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" horizontalHuggingPriority="248" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="buA-UH-XId">
|
|
||||||
<rect key="frame" x="0.0" y="107" width="251" height="20"/>
|
|
||||||
<subviews>
|
|
||||||
<button horizontalHuggingPriority="249" horizontalCompressionResistancePriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="7">
|
|
||||||
<rect key="frame" x="-2" y="1" width="214" height="18"/>
|
|
||||||
<buttonCell key="cell" type="check" title="Expires" bezelStyle="regularSquare" imagePosition="left" lineBreakMode="truncatingMiddle" state="on" inset="2" id="78">
|
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
<connections>
|
|
||||||
<action selector="toggleExpire:" target="-2" id="EBe-2q-ASh"/>
|
|
||||||
<outlet property="nextKeyView" destination="8" id="SbJ-ZA-mXZ"/>
|
|
||||||
</connections>
|
|
||||||
</button>
|
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="8">
|
|
||||||
<rect key="frame" x="213" y="-7" width="45" height="32"/>
|
|
||||||
<buttonCell key="cell" type="push" bezelStyle="rounded" image="NSActionTemplate" imagePosition="only" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="77">
|
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
<connections>
|
|
||||||
<action selector="pickExpiryDate:" target="-1" id="DQK-sp-SIL"/>
|
|
||||||
<outlet property="nextKeyView" destination="5" id="cVg-qt-OBX"/>
|
|
||||||
</connections>
|
|
||||||
</button>
|
|
||||||
</subviews>
|
|
||||||
<visibilityPriorities>
|
|
||||||
<integer value="1000"/>
|
|
||||||
<integer value="1000"/>
|
|
||||||
</visibilityPriorities>
|
|
||||||
<customSpacing>
|
|
||||||
<real value="3.4028234663852886e+38"/>
|
|
||||||
<real value="3.4028234663852886e+38"/>
|
|
||||||
</customSpacing>
|
|
||||||
</stackView>
|
|
||||||
<textField horizontalHuggingPriority="249" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="6">
|
<textField horizontalHuggingPriority="249" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="6">
|
||||||
<rect key="frame" x="-2" y="85" width="255" height="14"/>
|
<rect key="frame" x="-2" y="85" width="255" height="14"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Tags" id="79">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Tags" id="79">
|
||||||
@@ -491,28 +328,10 @@
|
|||||||
<visibilityPriorities>
|
<visibilityPriorities>
|
||||||
<integer value="1000"/>
|
<integer value="1000"/>
|
||||||
<integer value="1000"/>
|
<integer value="1000"/>
|
||||||
<integer value="1000"/>
|
|
||||||
<integer value="1000"/>
|
|
||||||
<integer value="1000"/>
|
|
||||||
<integer value="1000"/>
|
|
||||||
<integer value="1000"/>
|
|
||||||
<integer value="1000"/>
|
|
||||||
<integer value="1000"/>
|
|
||||||
<integer value="1000"/>
|
|
||||||
<integer value="1000"/>
|
|
||||||
</visibilityPriorities>
|
</visibilityPriorities>
|
||||||
<customSpacing>
|
<customSpacing>
|
||||||
<real value="3.4028234663852886e+38"/>
|
<real value="3.4028234663852886e+38"/>
|
||||||
<real value="3.4028234663852886e+38"/>
|
<real value="3.4028234663852886e+38"/>
|
||||||
<real value="3.4028234663852886e+38"/>
|
|
||||||
<real value="3.4028234663852886e+38"/>
|
|
||||||
<real value="3.4028234663852886e+38"/>
|
|
||||||
<real value="3.4028234663852886e+38"/>
|
|
||||||
<real value="3.4028234663852886e+38"/>
|
|
||||||
<real value="3.4028234663852886e+38"/>
|
|
||||||
<real value="3.4028234663852886e+38"/>
|
|
||||||
<real value="3.4028234663852886e+38"/>
|
|
||||||
<real value="3.4028234663852886e+38"/>
|
|
||||||
</customSpacing>
|
</customSpacing>
|
||||||
</stackView>
|
</stackView>
|
||||||
</subviews>
|
</subviews>
|
||||||
@@ -533,7 +352,7 @@
|
|||||||
<constraint firstItem="dx3-E2-FFt" firstAttribute="leading" secondItem="4" secondAttribute="leading" constant="20" symbolic="YES" id="sjr-Xo-zxh"/>
|
<constraint firstItem="dx3-E2-FFt" firstAttribute="leading" secondItem="4" secondAttribute="leading" constant="20" symbolic="YES" id="sjr-Xo-zxh"/>
|
||||||
<constraint firstItem="G9J-nn-2bu" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="4" secondAttribute="leading" constant="20" symbolic="YES" id="z4K-PB-Qfb"/>
|
<constraint firstItem="G9J-nn-2bu" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="4" secondAttribute="leading" constant="20" symbolic="YES" id="z4K-PB-Qfb"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<point key="canvasLocation" x="-310" y="-1413"/>
|
<point key="canvasLocation" x="91" y="-1780"/>
|
||||||
</customView>
|
</customView>
|
||||||
<view translatesAutoresizingMaskIntoConstraints="NO" id="zv7-wE-Bmg" customClass="HNHUIScrollDocumentViewAdapter">
|
<view translatesAutoresizingMaskIntoConstraints="NO" id="zv7-wE-Bmg" customClass="HNHUIScrollDocumentViewAdapter">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="301" height="424"/>
|
<rect key="frame" x="0.0" y="0.0" width="301" height="424"/>
|
||||||
@@ -764,7 +583,7 @@
|
|||||||
<constraint firstAttribute="trailing" secondItem="45R-v4-ywl" secondAttribute="trailing" constant="20" symbolic="YES" id="uUm-S5-cxM"/>
|
<constraint firstAttribute="trailing" secondItem="45R-v4-ywl" secondAttribute="trailing" constant="20" symbolic="YES" id="uUm-S5-cxM"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="z03-zW-GN3" secondAttribute="trailing" constant="20" symbolic="YES" id="wiq-pY-TG8"/>
|
<constraint firstAttribute="trailing" secondItem="z03-zW-GN3" secondAttribute="trailing" constant="20" symbolic="YES" id="wiq-pY-TG8"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<point key="canvasLocation" x="145.5" y="-1275"/>
|
<point key="canvasLocation" x="418" y="-1988"/>
|
||||||
</view>
|
</view>
|
||||||
<scrollView borderType="line" autohidesScrollers="YES" horizontalLineScroll="56" horizontalPageScroll="10" verticalLineScroll="56" verticalPageScroll="10" usesPredominantAxisScrolling="NO" horizontalScrollElasticity="none" translatesAutoresizingMaskIntoConstraints="NO" id="180" customClass="HNHUIScrollView">
|
<scrollView borderType="line" autohidesScrollers="YES" horizontalLineScroll="56" horizontalPageScroll="10" verticalLineScroll="56" verticalPageScroll="10" usesPredominantAxisScrolling="NO" horizontalScrollElasticity="none" translatesAutoresizingMaskIntoConstraints="NO" id="180" customClass="HNHUIScrollView">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="290" height="268"/>
|
<rect key="frame" x="0.0" y="0.0" width="290" height="268"/>
|
||||||
@@ -878,7 +697,6 @@
|
|||||||
<image name="NSActionTemplate" width="15" height="15"/>
|
<image name="NSActionTemplate" width="15" height="15"/>
|
||||||
<image name="NSAddTemplate" width="14" height="13"/>
|
<image name="NSAddTemplate" width="14" height="13"/>
|
||||||
<image name="NSLockLockedTemplate" width="14" height="15"/>
|
<image name="NSLockLockedTemplate" width="14" height="15"/>
|
||||||
<image name="NSQuickLookTemplate" width="21" height="13"/>
|
|
||||||
<image name="NSRemoveTemplate" width="14" height="4"/>
|
<image name="NSRemoveTemplate" width="14" height="4"/>
|
||||||
</resources>
|
</resources>
|
||||||
</document>
|
</document>
|
||||||
|
|||||||
@@ -1,16 +1,24 @@
|
|||||||
<?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="32700.99.1234" 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="22690"/>
|
<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>
|
||||||
<customObject id="-2" userLabel="File's Owner" customClass="MPGeneralPreferencesController">
|
<customObject id="-2" userLabel="File's Owner" customClass="MPGeneralPreferencesController">
|
||||||
<connections>
|
<connections>
|
||||||
|
<outlet property="clearPasteboardOnQuitCheckButton" destination="447" id="520"/>
|
||||||
|
<outlet property="clearPasteboardTimeoutPopup" destination="419" id="521"/>
|
||||||
<outlet property="enableAutosaveCheckButton" destination="lz3-4U-UMI" id="L5y-58-IgH"/>
|
<outlet property="enableAutosaveCheckButton" destination="lz3-4U-UMI" id="L5y-58-IgH"/>
|
||||||
<outlet property="faviconDownloadMethodPopup" destination="OfU-6f-oTU" id="OfU-6f-oTU-outlet"/>
|
<outlet property="faviconDownloadMethodPopup" destination="OfU-6f-oTU" id="OfU-6f-oTU-outlet"/>
|
||||||
<outlet property="fileChangeStrategyPopup" destination="wIu-Sh-2a2" id="oJo-dA-lEE"/>
|
<outlet property="fileChangeStrategyPopup" destination="wIu-Sh-2a2" id="oJo-dA-lEE"/>
|
||||||
|
<outlet property="idleTimeOutPopup" destination="584" id="809"/>
|
||||||
|
<outlet property="lockOnLogoutCheckButton" destination="5SP-Vi-1sn" id="yaI-LH-R5A"/>
|
||||||
|
<outlet property="lockOnScreenSleepCheckButton" destination="nRe-7S-HwK" id="0IB-5B-pfw"/>
|
||||||
|
<outlet property="lockOnSleepCheckButton" destination="630" id="810"/>
|
||||||
|
<outlet property="preventUniversalClipboardSupportCheckButton" destination="nqZ-rB-mFS" id="sbx-rl-reT"/>
|
||||||
|
<outlet property="rememberKeyFileCheckButton" destination="bSt-Wf-FNZ" id="aQm-EA-yAN"/>
|
||||||
<outlet property="reopenLastDatabase" destination="530" id="878"/>
|
<outlet property="reopenLastDatabase" destination="530" id="878"/>
|
||||||
<outlet property="view" destination="1" id="82"/>
|
<outlet property="view" destination="1" id="82"/>
|
||||||
</connections>
|
</connections>
|
||||||
@@ -18,38 +26,218 @@
|
|||||||
<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="406" height="300"/>
|
<rect key="frame" x="0.0" y="0.0" width="406" height="679"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
|
<box autoresizesSubviews="NO" verticalHuggingPriority="500" borderType="line" title="Security" translatesAutoresizingMaskIntoConstraints="NO" id="465">
|
||||||
|
<rect key="frame" x="17" y="146" width="372" height="381"/>
|
||||||
|
<view key="contentView" id="mNh-3L-Z6E">
|
||||||
|
<rect key="frame" x="3" y="3" width="366" height="363"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="431">
|
||||||
|
<rect key="frame" x="14" y="335" width="120" height="17"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="17" id="803"/>
|
||||||
|
</constraints>
|
||||||
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Clear Copied Items" id="432">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="419">
|
||||||
|
<rect key="frame" x="138" y="332" width="143" height="21"/>
|
||||||
|
<popUpButtonCell key="cell" type="push" title="Never" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="429" id="420">
|
||||||
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="menu"/>
|
||||||
|
<menu key="menu" title="ClipboardClearInterval" id="421">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Never" state="on" id="429">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="after 10 Seconds" tag="10" id="422"/>
|
||||||
|
<menuItem title="after 30 Seconds" tag="30" id="423"/>
|
||||||
|
<menuItem title="after 1 Minute" tag="60" id="424"/>
|
||||||
|
<menuItem title="after 5 Minutes" tag="300" id="5gh-b6-cmG"/>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</popUpButtonCell>
|
||||||
|
</popUpButton>
|
||||||
|
<button verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="447">
|
||||||
|
<rect key="frame" x="29" y="311" width="164" height="18"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="14" id="773"/>
|
||||||
|
</constraints>
|
||||||
|
<buttonCell key="cell" type="check" title="Clear Clipboard on Quit" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="448">
|
||||||
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
</button>
|
||||||
|
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="584">
|
||||||
|
<rect key="frame" x="111" y="192" width="125" height="25"/>
|
||||||
|
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="585">
|
||||||
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="menu"/>
|
||||||
|
<menu key="menu" title="LockTimes" id="586">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Never" id="804"/>
|
||||||
|
<menuItem title="for 1 Minute" tag="60" id="588"/>
|
||||||
|
<menuItem title="for 5 Minutes" tag="300" id="589"/>
|
||||||
|
<menuItem title="for 15 Minutes" tag="900" id="603">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</popUpButtonCell>
|
||||||
|
</popUpButton>
|
||||||
|
<button translatesAutoresizingMaskIntoConstraints="NO" id="630">
|
||||||
|
<rect key="frame" x="29" y="173" width="119" height="18"/>
|
||||||
|
<buttonCell key="cell" type="check" title="Lock after sleep" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="631">
|
||||||
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
</button>
|
||||||
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="805">
|
||||||
|
<rect key="frame" x="14" y="197" width="93" height="16"/>
|
||||||
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Lock while idle" id="806">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<button verticalHuggingPriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="bSt-Wf-FNZ">
|
||||||
|
<rect key="frame" x="14" y="104" width="220" height="18"/>
|
||||||
|
<buttonCell key="cell" type="check" title="Remember Keyfile for Databases" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="r6q-He-nYU">
|
||||||
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
</button>
|
||||||
|
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="5cV-xX-SUU">
|
||||||
|
<rect key="frame" x="18" y="41" width="330" height="56"/>
|
||||||
|
<textFieldCell key="cell" sendsActionOnEndEditing="YES" id="ACh-7H-42N">
|
||||||
|
<font key="font" metaFont="smallSystem"/>
|
||||||
|
<string key="title">Enabling this compromises security. If enabled, your preferences will contain mappings from database to keyfile. Key locations for databases without a password will not be saved.</string>
|
||||||
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="oQr-FC-HkN">
|
||||||
|
<rect key="frame" x="166" y="5" width="190" height="32"/>
|
||||||
|
<buttonCell key="cell" type="push" title="Clear all stored locations" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="8Ri-2s-c39">
|
||||||
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="clearRememberdKeyFiles:" target="-1" id="Vlr-aK-ikW"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button translatesAutoresizingMaskIntoConstraints="NO" id="5SP-Vi-1sn">
|
||||||
|
<rect key="frame" x="29" y="151" width="129" height="18"/>
|
||||||
|
<buttonCell key="cell" type="check" title="Lock after log out" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="Dzn-9R-JjE">
|
||||||
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
</button>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="nqZ-rB-mFS">
|
||||||
|
<rect key="frame" x="14" y="286" width="242" height="18"/>
|
||||||
|
<buttonCell key="cell" type="check" title="Prevent Universal Clipboard support" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="fNy-mS-phi">
|
||||||
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
</button>
|
||||||
|
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="hy4-RL-dAa">
|
||||||
|
<rect key="frame" x="18" y="224" width="330" height="56"/>
|
||||||
|
<textFieldCell key="cell" sendsActionOnEndEditing="YES" id="JGX-Tp-KJk">
|
||||||
|
<font key="font" metaFont="smallSystem"/>
|
||||||
|
<string key="title">Disabling this compromises security. If enabled, anything copied to the Clipboard in MacPass will be available on your connected iOS devices. You should clear the clipboard on those devices manually.</string>
|
||||||
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="nRe-7S-HwK">
|
||||||
|
<rect key="frame" x="29" y="129" width="164" height="18"/>
|
||||||
|
<buttonCell key="cell" type="check" title="Lock after screen sleep" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="l3t-og-mJd">
|
||||||
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
</button>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="5cV-xX-SUU" firstAttribute="leading" secondItem="mNh-3L-Z6E" secondAttribute="leading" constant="20" symbolic="YES" id="1jw-nb-bAB"/>
|
||||||
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="630" secondAttribute="trailing" constant="20" symbolic="YES" id="7cd-1e-eRD"/>
|
||||||
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="nqZ-rB-mFS" secondAttribute="trailing" constant="20" symbolic="YES" id="CL9-fA-GTJ"/>
|
||||||
|
<constraint firstItem="bSt-Wf-FNZ" firstAttribute="top" secondItem="nRe-7S-HwK" secondAttribute="bottom" constant="11" id="MkJ-O0-qYd"/>
|
||||||
|
<constraint firstItem="nRe-7S-HwK" firstAttribute="leading" secondItem="447" secondAttribute="leading" id="Mrg-k2-soG"/>
|
||||||
|
<constraint firstItem="584" firstAttribute="top" secondItem="hy4-RL-dAa" secondAttribute="bottom" constant="8" symbolic="YES" id="SV7-PD-nId"/>
|
||||||
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="bSt-Wf-FNZ" secondAttribute="trailing" constant="20" symbolic="YES" id="VQY-eq-fCM"/>
|
||||||
|
<constraint firstItem="nRe-7S-HwK" firstAttribute="top" secondItem="5SP-Vi-1sn" secondAttribute="bottom" constant="8" id="YZv-Dp-CrZ"/>
|
||||||
|
<constraint firstItem="5SP-Vi-1sn" firstAttribute="leading" secondItem="447" secondAttribute="leading" id="Ylr-aA-jaD"/>
|
||||||
|
<constraint firstItem="hy4-RL-dAa" firstAttribute="top" secondItem="nqZ-rB-mFS" secondAttribute="bottom" constant="8" symbolic="YES" id="a3i-tc-gUU"/>
|
||||||
|
<constraint firstItem="5SP-Vi-1sn" firstAttribute="top" secondItem="630" secondAttribute="bottom" constant="8" id="acg-vp-LeB"/>
|
||||||
|
<constraint firstItem="584" firstAttribute="leading" secondItem="805" secondAttribute="trailing" constant="8" symbolic="YES" id="aoz-sS-O0n"/>
|
||||||
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="447" secondAttribute="trailing" constant="20" symbolic="YES" id="i8H-ad-IKb"/>
|
||||||
|
<constraint firstItem="419" firstAttribute="leading" secondItem="431" secondAttribute="trailing" constant="8" symbolic="YES" id="pN3-pB-Z5I"/>
|
||||||
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="nRe-7S-HwK" secondAttribute="trailing" constant="20" symbolic="YES" id="pgB-km-W16"/>
|
||||||
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="5SP-Vi-1sn" secondAttribute="trailing" constant="20" symbolic="YES" id="q0v-Wo-mHx"/>
|
||||||
|
<constraint firstItem="nqZ-rB-mFS" firstAttribute="top" secondItem="447" secondAttribute="bottom" constant="11" id="qLm-ih-A04"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="5cV-xX-SUU" secondAttribute="trailing" constant="20" symbolic="YES" id="qY0-io-RZ0"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="hy4-RL-dAa" secondAttribute="trailing" constant="20" symbolic="YES" id="r5c-KT-eh0"/>
|
||||||
|
<constraint firstItem="hy4-RL-dAa" firstAttribute="leading" secondItem="mNh-3L-Z6E" secondAttribute="leading" constant="20" symbolic="YES" id="s4M-8w-cOl"/>
|
||||||
|
<constraint firstItem="nqZ-rB-mFS" firstAttribute="leading" secondItem="431" secondAttribute="leading" id="ufQ-bW-0gn"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="419" secondAttribute="trailing" constant="16" id="1de-jU-TAq"/>
|
||||||
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="584" secondAttribute="trailing" constant="16" id="GAz-Mn-Z2y"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="oQr-FC-HkN" secondAttribute="bottom" constant="11" id="M71-WV-WFc"/>
|
||||||
|
<constraint firstItem="5cV-xX-SUU" firstAttribute="top" secondItem="bSt-Wf-FNZ" secondAttribute="bottom" constant="9" id="NYW-dJ-CHg"/>
|
||||||
|
<constraint firstItem="805" firstAttribute="centerY" secondItem="584" secondAttribute="centerY" id="OOq-TD-dmj"/>
|
||||||
|
<constraint firstItem="431" firstAttribute="leading" secondItem="465" secondAttribute="leading" constant="16" id="ReO-OI-Maf"/>
|
||||||
|
<constraint firstItem="431" firstAttribute="top" secondItem="465" secondAttribute="top" constant="26" id="WxW-xY-3SP"/>
|
||||||
|
<constraint firstItem="630" firstAttribute="top" secondItem="805" secondAttribute="bottom" constant="8" id="X2A-sm-F0H"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="oQr-FC-HkN" secondAttribute="trailing" constant="16" id="X6r-Gh-Egi"/>
|
||||||
|
<constraint firstItem="419" firstAttribute="bottom" secondItem="431" secondAttribute="bottom" id="a3n-fr-qcx"/>
|
||||||
|
<constraint firstItem="419" firstAttribute="top" secondItem="431" secondAttribute="top" id="cP7-6K-axf"/>
|
||||||
|
<constraint firstItem="bSt-Wf-FNZ" firstAttribute="leading" secondItem="805" secondAttribute="leading" id="e3K-Go-QUp"/>
|
||||||
|
<constraint firstItem="805" firstAttribute="leading" secondItem="465" secondAttribute="leading" constant="16" id="g88-lI-fu4"/>
|
||||||
|
<constraint firstItem="447" firstAttribute="leading" secondItem="465" secondAttribute="leading" constant="31" id="gpR-Rg-VAw"/>
|
||||||
|
<constraint firstItem="oQr-FC-HkN" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="465" secondAttribute="leading" constant="16" id="kZ7-HL-y2Q"/>
|
||||||
|
<constraint firstItem="oQr-FC-HkN" firstAttribute="top" secondItem="5cV-xX-SUU" secondAttribute="bottom" constant="8" id="qsT-Cs-vVj"/>
|
||||||
|
<constraint firstItem="447" firstAttribute="top" secondItem="419" secondAttribute="bottom" constant="8" symbolic="YES" id="u35-aE-Ui9"/>
|
||||||
|
<constraint firstItem="630" firstAttribute="leading" secondItem="447" secondAttribute="leading" id="ybt-cQ-JwG"/>
|
||||||
|
<constraint firstItem="447" firstAttribute="top" secondItem="431" secondAttribute="bottom" constant="8" symbolic="YES" id="zkd-Hf-09b"/>
|
||||||
|
</constraints>
|
||||||
|
</box>
|
||||||
<box autoresizesSubviews="NO" verticalHuggingPriority="500" borderType="line" title="File Handling" translatesAutoresizingMaskIntoConstraints="NO" id="888">
|
<box autoresizesSubviews="NO" verticalHuggingPriority="500" borderType="line" title="File Handling" translatesAutoresizingMaskIntoConstraints="NO" id="888">
|
||||||
<rect key="frame" x="17" y="146" width="372" height="134"/>
|
<rect key="frame" x="17" y="531" width="372" height="128"/>
|
||||||
<view key="contentView" id="cpg-tt-SHE">
|
<view key="contentView" id="cpg-tt-SHE">
|
||||||
<rect key="frame" x="4" y="5" width="364" height="114"/>
|
<rect key="frame" x="3" y="3" width="366" 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="13" y="87" width="238" 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="126" 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 focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="3Bo-Ml-1KB">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="3Bo-Ml-1KB">
|
||||||
<rect key="frame" x="18" y="44" width="328" height="14"/>
|
<rect key="frame" x="18" y="44" width="330" 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"/>
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<textField focusRingType="none" 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="13" y="20" width="93" height="16"/>
|
<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"/>
|
||||||
@@ -57,7 +245,7 @@
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<popUpButton verticalHuggingPriority="750" horizontalCompressionResistancePriority="749" translatesAutoresizingMaskIntoConstraints="NO" id="wIu-Sh-2a2">
|
<popUpButton verticalHuggingPriority="750" horizontalCompressionResistancePriority="749" translatesAutoresizingMaskIntoConstraints="NO" id="wIu-Sh-2a2">
|
||||||
<rect key="frame" x="109" y="13" width="39" 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="menu"/>
|
||||||
@@ -89,11 +277,11 @@
|
|||||||
<box autoresizesSubviews="NO" verticalHuggingPriority="500" borderType="line" title="Network" translatesAutoresizingMaskIntoConstraints="NO" id="wD1-ag-7V5">
|
<box autoresizesSubviews="NO" verticalHuggingPriority="500" borderType="line" title="Network" translatesAutoresizingMaskIntoConstraints="NO" id="wD1-ag-7V5">
|
||||||
<rect key="frame" x="17" y="16" width="372" height="126"/>
|
<rect key="frame" x="17" y="16" width="372" height="126"/>
|
||||||
<view key="contentView" id="bQD-ZX-d0i">
|
<view key="contentView" id="bQD-ZX-d0i">
|
||||||
<rect key="frame" x="4" y="5" width="364" height="106"/>
|
<rect key="frame" x="3" y="3" width="366" height="108"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="fl5-Xu-nZP">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="fl5-Xu-nZP">
|
||||||
<rect key="frame" x="14" y="79" width="113" height="16"/>
|
<rect key="frame" x="14" y="81" width="113" height="16"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="height" constant="16" id="kK7-bB-zKY"/>
|
<constraint firstAttribute="height" constant="16" id="kK7-bB-zKY"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
@@ -103,8 +291,8 @@
|
|||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<textField autoresizesSubviews="NO" focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="MWj-9m-uGk">
|
<textField autoresizesSubviews="NO" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="MWj-9m-uGk">
|
||||||
<rect key="frame" x="18" y="11" width="329" height="56"/>
|
<rect key="frame" x="18" y="13" width="330" height="56"/>
|
||||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" id="DaG-1a-SET">
|
<textFieldCell key="cell" sendsActionOnEndEditing="YES" id="DaG-1a-SET">
|
||||||
<font key="font" metaFont="message" size="11"/>
|
<font key="font" metaFont="message" size="11"/>
|
||||||
<string key="title">By default web site icon is downloaded directly from entry's host URL. For some websites it doesn't work and you might prefer using 3rdparty APIs. In this case only host from the URL will be used to get the icon from selected service.</string>
|
<string key="title">By default web site icon is downloaded directly from entry's host URL. For some websites it doesn't work and you might prefer using 3rdparty APIs. In this case only host from the URL will be used to get the icon from selected service.</string>
|
||||||
@@ -113,7 +301,7 @@
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<popUpButton verticalHuggingPriority="750" horizontalCompressionResistancePriority="749" translatesAutoresizingMaskIntoConstraints="NO" id="OfU-6f-oTU">
|
<popUpButton verticalHuggingPriority="750" horizontalCompressionResistancePriority="749" translatesAutoresizingMaskIntoConstraints="NO" id="OfU-6f-oTU">
|
||||||
<rect key="frame" x="130" y="73" width="39" height="25"/>
|
<rect key="frame" x="131" y="76" width="38" height="25"/>
|
||||||
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="mdi-Go-1bJ">
|
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="mdi-Go-1bJ">
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="menu"/>
|
<font key="font" metaFont="menu"/>
|
||||||
@@ -123,31 +311,34 @@
|
|||||||
</subviews>
|
</subviews>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="OfU-6f-oTU" secondAttribute="trailing" constant="16" id="0Wl-LS-ePD"/>
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="OfU-6f-oTU" secondAttribute="trailing" constant="16" id="0Wl-LS-ePD"/>
|
||||||
<constraint firstItem="MWj-9m-uGk" firstAttribute="leading" secondItem="bQD-ZX-d0i" secondAttribute="leading" constant="20" id="1AE-Eu-ceQ"/>
|
|
||||||
<constraint firstItem="OfU-6f-oTU" firstAttribute="centerY" secondItem="fl5-Xu-nZP" secondAttribute="centerY" id="R81-Ij-pdy"/>
|
<constraint firstItem="OfU-6f-oTU" firstAttribute="centerY" secondItem="fl5-Xu-nZP" secondAttribute="centerY" id="R81-Ij-pdy"/>
|
||||||
<constraint firstItem="OfU-6f-oTU" firstAttribute="leading" secondItem="fl5-Xu-nZP" secondAttribute="trailing" constant="8" id="XS0-fl-B2Z"/>
|
<constraint firstItem="OfU-6f-oTU" firstAttribute="leading" secondItem="fl5-Xu-nZP" secondAttribute="trailing" constant="8" id="XS0-fl-B2Z"/>
|
||||||
<constraint firstItem="fl5-Xu-nZP" firstAttribute="leading" secondItem="bQD-ZX-d0i" secondAttribute="leading" constant="16" id="hzo-40-wxR"/>
|
|
||||||
</constraints>
|
</constraints>
|
||||||
</view>
|
</view>
|
||||||
<constraints>
|
<constraints>
|
||||||
|
<constraint firstItem="MWj-9m-uGk" firstAttribute="leading" secondItem="bQD-ZX-d0i" secondAttribute="leading" constant="20" id="1AE-Eu-ceQ"/>
|
||||||
<constraint firstItem="fl5-Xu-nZP" firstAttribute="top" secondItem="wD1-ag-7V5" secondAttribute="top" constant="26" id="OK9-PR-DfC"/>
|
<constraint firstItem="fl5-Xu-nZP" firstAttribute="top" secondItem="wD1-ag-7V5" secondAttribute="top" constant="26" id="OK9-PR-DfC"/>
|
||||||
<constraint firstItem="MWj-9m-uGk" firstAttribute="top" secondItem="fl5-Xu-nZP" secondAttribute="bottom" constant="12" id="Udz-22-4O1"/>
|
<constraint firstItem="MWj-9m-uGk" firstAttribute="top" secondItem="fl5-Xu-nZP" secondAttribute="bottom" constant="12" id="Udz-22-4O1"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="MWj-9m-uGk" secondAttribute="trailing" constant="20" id="hA0-ra-UeU"/>
|
<constraint firstAttribute="trailing" secondItem="MWj-9m-uGk" secondAttribute="trailing" constant="20" id="hA0-ra-UeU"/>
|
||||||
|
<constraint firstItem="fl5-Xu-nZP" firstAttribute="leading" secondItem="bQD-ZX-d0i" secondAttribute="leading" constant="16" id="hzo-40-wxR"/>
|
||||||
<constraint firstAttribute="bottom" secondItem="MWj-9m-uGk" secondAttribute="bottom" constant="12" id="k80-DD-Y5l"/>
|
<constraint firstAttribute="bottom" secondItem="MWj-9m-uGk" secondAttribute="bottom" constant="12" id="k80-DD-Y5l"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
</box>
|
</box>
|
||||||
</subviews>
|
</subviews>
|
||||||
<constraints>
|
<constraints>
|
||||||
|
<constraint firstItem="465" firstAttribute="leading" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="475"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="465" secondAttribute="trailing" constant="20" symbolic="YES" id="525"/>
|
||||||
<constraint firstItem="888" firstAttribute="leading" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="891"/>
|
<constraint firstItem="888" firstAttribute="leading" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="891"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="888" secondAttribute="trailing" constant="20" symbolic="YES" id="893"/>
|
<constraint firstAttribute="trailing" secondItem="888" secondAttribute="trailing" constant="20" symbolic="YES" id="893"/>
|
||||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="400" id="918"/>
|
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="400" id="918"/>
|
||||||
<constraint firstItem="wD1-ag-7V5" firstAttribute="leading" secondItem="1" secondAttribute="leading" constant="20" id="3kp-Uf-fyC"/>
|
<constraint firstItem="wD1-ag-7V5" firstAttribute="leading" secondItem="1" secondAttribute="leading" constant="20" id="3kp-Uf-fyC"/>
|
||||||
<constraint firstItem="wD1-ag-7V5" firstAttribute="bottom" secondItem="1" secondAttribute="bottom" constant="-20" id="EeW-K0-jec"/>
|
<constraint firstItem="wD1-ag-7V5" firstAttribute="bottom" secondItem="1" secondAttribute="bottom" constant="-20" id="EeW-K0-jec"/>
|
||||||
|
<constraint firstItem="wD1-ag-7V5" firstAttribute="top" secondItem="465" secondAttribute="bottom" constant="8" symbolic="YES" id="FsW-LX-Drs"/>
|
||||||
<constraint firstItem="888" firstAttribute="top" secondItem="1" secondAttribute="top" constant="20" symbolic="YES" id="ZMP-Lv-rQh"/>
|
<constraint firstItem="888" firstAttribute="top" secondItem="1" secondAttribute="top" constant="20" symbolic="YES" id="ZMP-Lv-rQh"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="wD1-ag-7V5" secondAttribute="trailing" constant="20" id="ccK-FL-7Wx"/>
|
<constraint firstAttribute="trailing" secondItem="wD1-ag-7V5" secondAttribute="trailing" constant="20" id="ccK-FL-7Wx"/>
|
||||||
<constraint firstItem="wD1-ag-7V5" firstAttribute="top" secondItem="888" secondAttribute="bottom" constant="8" symbolic="YES" id="kgx-BG-wVT"/>
|
<constraint firstItem="465" firstAttribute="top" secondItem="888" secondAttribute="bottom" constant="8" symbolic="YES" id="wyH-HB-i2U"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<point key="canvasLocation" x="-508" y="-372"/>
|
<point key="canvasLocation" x="-535" y="-327.5"/>
|
||||||
</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="21225" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="17701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
<deployment identifier="macosx"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21225"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="17701"/>
|
||||||
<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>
|
||||||
@@ -45,7 +45,7 @@
|
|||||||
</scroller>
|
</scroller>
|
||||||
</scrollView>
|
</scrollView>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="101">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="101">
|
||||||
<rect key="frame" x="317" y="13" width="135" height="32"/>
|
<rect key="frame" x="316" y="13" width="136" height="32"/>
|
||||||
<buttonCell key="cell" type="push" title="Use Default Icon" bezelStyle="rounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="102">
|
<buttonCell key="cell" type="push" title="Use Default Icon" bezelStyle="rounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="102">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@@ -55,7 +55,7 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="8kv-BJ-IEk">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="8kv-BJ-IEk">
|
||||||
<rect key="frame" x="195" y="13" width="124" height="32"/>
|
<rect key="frame" x="194" y="13" width="124" height="32"/>
|
||||||
<buttonCell key="cell" type="push" title="Download Icon" bezelStyle="rounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="iaf-XW-XUo">
|
<buttonCell key="cell" type="push" title="Download Icon" bezelStyle="rounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="iaf-XW-XUo">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@@ -65,7 +65,7 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="His-4A-hcY">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="His-4A-hcY">
|
||||||
<rect key="frame" x="121" y="13" width="76" height="32"/>
|
<rect key="frame" x="120" y="13" width="76" height="32"/>
|
||||||
<buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="1kM-cI-P1o">
|
<buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="1kM-cI-P1o">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@@ -158,7 +158,6 @@
|
|||||||
<constraint firstAttribute="trailing" secondItem="MEC-x9-zrX" secondAttribute="trailing" id="l85-hK-J0S"/>
|
<constraint firstAttribute="trailing" secondItem="MEC-x9-zrX" secondAttribute="trailing" id="l85-hK-J0S"/>
|
||||||
<constraint firstItem="MEC-x9-zrX" firstAttribute="top" secondItem="113" secondAttribute="top" id="uEr-Jk-Jfa"/>
|
<constraint firstItem="MEC-x9-zrX" firstAttribute="top" secondItem="113" secondAttribute="top" id="uEr-Jk-Jfa"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<point key="canvasLocation" x="-1499" y="-64"/>
|
|
||||||
</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="19455" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19529" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
<deployment identifier="macosx"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19455"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19529"/>
|
||||||
<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>
|
||||||
|
|||||||
@@ -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="32700.99.1234" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="17701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
<deployment identifier="macosx"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22690"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="17701"/>
|
||||||
<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,28 +27,28 @@
|
|||||||
<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="417" height="666"/>
|
<rect key="frame" x="0.0" y="0.0" width="411" height="520"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<box autoresizesSubviews="NO" verticalHuggingPriority="500" borderType="line" title="Autotype" translatesAutoresizingMaskIntoConstraints="NO" id="P9N-HM-wER">
|
<box autoresizesSubviews="NO" verticalHuggingPriority="500" borderType="line" title="Autotype" translatesAutoresizingMaskIntoConstraints="NO" id="P9N-HM-wER">
|
||||||
<rect key="frame" x="17" y="248" width="383" height="398"/>
|
<rect key="frame" x="17" y="115" width="377" height="385"/>
|
||||||
<view key="contentView" id="faU-Ok-HJ3">
|
<view key="contentView" id="faU-Ok-HJ3">
|
||||||
<rect key="frame" x="4" y="5" width="375" height="378"/>
|
<rect key="frame" x="3" y="3" width="371" height="367"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<stackView distribution="fill" orientation="vertical" alignment="leading" horizontalStackHuggingPriority="250" verticalStackHuggingPriority="250" horizontalHuggingPriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="j52-9L-k7c">
|
<stackView distribution="fill" orientation="vertical" alignment="leading" horizontalStackHuggingPriority="250" verticalStackHuggingPriority="250" horizontalHuggingPriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="j52-9L-k7c">
|
||||||
<rect key="frame" x="15" y="15" width="345" height="353"/>
|
<rect key="frame" x="16" y="17" width="339" height="340"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="hMJ-Mo-xOM">
|
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="hMJ-Mo-xOM">
|
||||||
<rect key="frame" x="-2" y="311" width="349" height="42"/>
|
<rect key="frame" x="-2" y="298" width="343" height="42"/>
|
||||||
<textFieldCell key="cell" controlSize="small" id="H37-ku-aTc">
|
<textFieldCell key="cell" controlSize="small" id="H37-ku-aTc">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<string key="title">Autotype might not work properly. Some issues were found that prevent Autotype or Global Autotype to work. Please run the Autotype Doctor to fix those issues.</string>
|
<string key="title">Autotype might not work properly. Some issues where found that prevent Autotype or Global Autotype to work. Please run the Autotype Doctor to fix those issues.</string>
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<button horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="jai-b6-Qv4">
|
<button horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="jai-b6-Qv4">
|
||||||
<rect key="frame" x="-7" y="276" width="171" height="32"/>
|
<rect key="frame" x="-6" y="262" width="177" height="32"/>
|
||||||
<buttonCell key="cell" type="push" title="Run Autotype Doctor…" bezelStyle="rounded" alignment="center" borderStyle="border" inset="2" id="NP0-R3-m6n">
|
<buttonCell key="cell" type="push" title="Run Autotype Doctor…" bezelStyle="rounded" alignment="center" borderStyle="border" inset="2" id="NP0-R3-m6n">
|
||||||
<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"/>
|
||||||
@@ -58,16 +58,16 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<button horizontalHuggingPriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="tik-Ar-FJg">
|
<button horizontalHuggingPriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="tik-Ar-FJg">
|
||||||
<rect key="frame" x="-2" y="258" width="347" height="18"/>
|
<rect key="frame" x="-2" y="245" width="343" height="18"/>
|
||||||
<buttonCell key="cell" type="check" title="Enable global Autotype" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="1qb-Rd-jYu">
|
<buttonCell key="cell" type="check" title="Enable global Autotype" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="1qb-Rd-jYu">
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
</button>
|
</button>
|
||||||
<stackView distribution="fill" orientation="horizontal" alignment="centerY" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" translatesAutoresizingMaskIntoConstraints="NO" id="d6A-Vb-CMt">
|
<stackView distribution="fill" orientation="horizontal" alignment="centerY" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" translatesAutoresizingMaskIntoConstraints="NO" id="d6A-Vb-CMt">
|
||||||
<rect key="frame" x="0.0" y="230" width="281" height="21"/>
|
<rect key="frame" x="0.0" y="218" width="281" height="21"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="buI-Wb-o3V">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="buI-Wb-o3V">
|
||||||
<rect key="frame" x="-2" y="3" width="57" height="16"/>
|
<rect key="frame" x="-2" y="3" width="57" height="16"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Shortcut" id="6oN-CH-T0O">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Shortcut" id="6oN-CH-T0O">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@@ -75,7 +75,7 @@
|
|||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Kvg-he-3c8" customClass="DDHotKeyTextField">
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Kvg-he-3c8" customClass="DDHotKeyTextField">
|
||||||
<rect key="frame" x="61" y="0.0" width="89" height="21"/>
|
<rect key="frame" x="61" y="0.0" width="89" height="21"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="width" constant="89" id="Mia-b8-HCZ"/>
|
<constraint firstAttribute="width" constant="89" id="Mia-b8-HCZ"/>
|
||||||
@@ -86,7 +86,7 @@
|
|||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="f5q-EW-RHf">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="f5q-EW-RHf">
|
||||||
<rect key="frame" x="156" y="4" width="127" height="14"/>
|
<rect key="frame" x="156" y="4" width="127" height="14"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Shortcut is missing Key" id="Lxp-wI-yQy">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Shortcut is missing Key" id="Lxp-wI-yQy">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
@@ -107,14 +107,14 @@
|
|||||||
</customSpacing>
|
</customSpacing>
|
||||||
</stackView>
|
</stackView>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="uZQ-Gd-hfu">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="uZQ-Gd-hfu">
|
||||||
<rect key="frame" x="-2" y="205" width="347" height="18"/>
|
<rect key="frame" x="-2" y="194" width="343" height="18"/>
|
||||||
<buttonCell key="cell" type="check" title="Always show confirmation before executing Autotype" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="rrU-70-Ara">
|
<buttonCell key="cell" type="check" title="Always show confirmation before executing Autotype" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="rrU-70-Ara">
|
||||||
<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 focusRingType="none" horizontalHuggingPriority="249" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="cUt-aB-oib">
|
<textField horizontalHuggingPriority="249" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="cUt-aB-oib">
|
||||||
<rect key="frame" x="-2" y="156" width="349" height="42"/>
|
<rect key="frame" x="-2" y="146" width="343" height="42"/>
|
||||||
<textFieldCell key="cell" controlSize="small" selectable="YES" id="VjU-Hz-cu4">
|
<textFieldCell key="cell" controlSize="small" selectable="YES" id="VjU-Hz-cu4">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<string key="title">If enabled, a dialog will show up before Autotype is executed even if only a single match was found to prevent accidental input and wrong matches</string>
|
<string key="title">If enabled, a dialog will show up before Autotype is executed even if only a single match was found to prevent accidental input and wrong matches</string>
|
||||||
@@ -123,42 +123,42 @@
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<button horizontalHuggingPriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="DAX-V8-Say">
|
<button horizontalHuggingPriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="DAX-V8-Say">
|
||||||
<rect key="frame" x="-2" y="131" width="347" height="18"/>
|
<rect key="frame" x="-2" y="122" width="343" height="18"/>
|
||||||
<buttonCell key="cell" type="check" title="Include Entry Title for matches" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="tmL-dT-D0G">
|
<buttonCell key="cell" type="check" title="Include Entry Title for matches" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="tmL-dT-D0G">
|
||||||
<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 horizontalHuggingPriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="8Wz-lo-AXG">
|
<button horizontalHuggingPriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="8Wz-lo-AXG">
|
||||||
<rect key="frame" x="-2" y="107" width="347" height="18"/>
|
<rect key="frame" x="-2" y="100" width="343" height="18"/>
|
||||||
<buttonCell key="cell" type="check" title="Include Entry URL for matches" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="TzR-00-Vp3">
|
<buttonCell key="cell" type="check" title="Include Entry URL for matches" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="TzR-00-Vp3">
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
</button>
|
</button>
|
||||||
<button horizontalHuggingPriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="TiO-ah-BlR">
|
<button horizontalHuggingPriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="TiO-ah-BlR">
|
||||||
<rect key="frame" x="-2" y="83" width="347" height="18"/>
|
<rect key="frame" x="-2" y="78" width="343" height="18"/>
|
||||||
<buttonCell key="cell" type="check" title="Include Entry URL Host for matches" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="B1D-j9-L8x">
|
<buttonCell key="cell" type="check" title="Include Entry URL Host for matches" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="B1D-j9-L8x">
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
</button>
|
</button>
|
||||||
<button horizontalHuggingPriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="9MH-jx-GpG">
|
<button horizontalHuggingPriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="9MH-jx-GpG">
|
||||||
<rect key="frame" x="-2" y="59" width="347" height="18"/>
|
<rect key="frame" x="-2" y="56" width="343" height="18"/>
|
||||||
<buttonCell key="cell" type="check" title="Include Entry Tags for matches" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="rbu-G7-MT8">
|
<buttonCell key="cell" type="check" title="Include Entry Tags for matches" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="rbu-G7-MT8">
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
</button>
|
</button>
|
||||||
<button horizontalHuggingPriority="249" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="VK8-z4-2ci">
|
<button horizontalHuggingPriority="249" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="VK8-z4-2ci">
|
||||||
<rect key="frame" x="-2" y="35" width="347" height="18"/>
|
<rect key="frame" x="-2" y="34" width="343" height="18"/>
|
||||||
<buttonCell key="cell" type="check" title="Interpret ⌃ as ⌘" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="QfO-yG-l3F">
|
<buttonCell key="cell" type="check" title="Interpret ⌃ as ⌘" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="QfO-yG-l3F">
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
</button>
|
</button>
|
||||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="wbP-A9-jpw">
|
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="wbP-A9-jpw">
|
||||||
<rect key="frame" x="-2" y="0.0" width="349" height="28"/>
|
<rect key="frame" x="-2" y="0.0" width="343" height="28"/>
|
||||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="If enabled, every {CONTROL} command will be sent as ⌘. Only disable this if you are sure you need to." id="QRy-CY-ENC">
|
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="If enabled, every {CONTROL} command will be sent as ⌘. Only disable this if you are sure you need to." id="QRy-CY-ENC">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
@@ -205,20 +205,20 @@
|
|||||||
</constraints>
|
</constraints>
|
||||||
</box>
|
</box>
|
||||||
<box autoresizesSubviews="NO" verticalHuggingPriority="500" borderType="line" title="Preview" translatesAutoresizingMaskIntoConstraints="NO" id="VVs-b5-cX9">
|
<box autoresizesSubviews="NO" verticalHuggingPriority="500" borderType="line" title="Preview" translatesAutoresizingMaskIntoConstraints="NO" id="VVs-b5-cX9">
|
||||||
<rect key="frame" x="17" y="147" width="383" height="97"/>
|
<rect key="frame" x="17" y="16" width="377" height="95"/>
|
||||||
<view key="contentView" id="ww4-uR-8gP">
|
<view key="contentView" id="ww4-uR-8gP">
|
||||||
<rect key="frame" x="4" y="5" width="375" height="77"/>
|
<rect key="frame" x="3" y="3" width="371" height="77"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button translatesAutoresizingMaskIntoConstraints="NO" id="LNw-5t-TS4">
|
<button translatesAutoresizingMaskIntoConstraints="NO" id="LNw-5t-TS4">
|
||||||
<rect key="frame" x="13" y="50" width="182" height="18"/>
|
<rect key="frame" x="14" y="51" width="178" height="18"/>
|
||||||
<buttonCell key="cell" type="check" title="Enable Quicklook Preview" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="ERs-ct-Eyx">
|
<buttonCell key="cell" type="check" title="Enable Quicklook Preview" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="ERs-ct-Eyx">
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
</button>
|
</button>
|
||||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="V6l-R9-hIj">
|
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="V6l-R9-hIj">
|
||||||
<rect key="frame" x="13" y="15" width="349" height="28"/>
|
<rect key="frame" x="14" y="17" width="343" height="28"/>
|
||||||
<textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" title="If enabled attached files will be copied to a temporary location for preview and deleted after the preview is closed." id="WmI-IB-Aso">
|
<textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" title="If enabled attached files will be copied to a temporary location for preview and deleted after the preview is closed." id="WmI-IB-Aso">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
@@ -239,57 +239,17 @@
|
|||||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="V6l-R9-hIj" secondAttribute="trailing" constant="16" id="ivY-UD-QFJ"/>
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="V6l-R9-hIj" secondAttribute="trailing" constant="16" id="ivY-UD-QFJ"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
</box>
|
</box>
|
||||||
<box title="Keychain" translatesAutoresizingMaskIntoConstraints="NO" id="ChZ-ku-FOP">
|
|
||||||
<rect key="frame" x="18" y="16" width="381" height="127"/>
|
|
||||||
<view key="contentView" id="ocY-lR-P2Z">
|
|
||||||
<rect key="frame" x="4" y="5" width="373" height="107"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
|
||||||
<subviews>
|
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="u5z-ST-gTK">
|
|
||||||
<rect key="frame" x="9" y="60" width="154" height="32"/>
|
|
||||||
<buttonCell key="cell" type="push" title="Renew TouchID Key" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="b4n-g4-CtW">
|
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
<connections>
|
|
||||||
<action selector="renewTouchIdKey:" target="-2" id="dl7-WD-Abu"/>
|
|
||||||
</connections>
|
|
||||||
</button>
|
|
||||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="9kv-ns-mQx">
|
|
||||||
<rect key="frame" x="14" y="16" width="345" height="42"/>
|
|
||||||
<textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" id="LyC-Hd-ecK">
|
|
||||||
<font key="font" metaFont="smallSystem"/>
|
|
||||||
<string key="title">MacPass will no longer be able to unlock any Database with TouchID until it is successfully unlocked with the password and or keyfile.</string>
|
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
</subviews>
|
</subviews>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="bottom" secondItem="9kv-ns-mQx" secondAttribute="bottom" constant="16" id="INC-l7-zwP"/>
|
|
||||||
<constraint firstItem="u5z-ST-gTK" firstAttribute="leading" secondItem="ocY-lR-P2Z" secondAttribute="leading" constant="16" id="KDt-yM-fh3"/>
|
|
||||||
<constraint firstItem="9kv-ns-mQx" firstAttribute="top" secondItem="u5z-ST-gTK" secondAttribute="bottom" constant="9" id="RjN-pw-qLc"/>
|
|
||||||
<constraint firstItem="9kv-ns-mQx" firstAttribute="leading" secondItem="u5z-ST-gTK" secondAttribute="leading" id="X5L-Rj-Wky"/>
|
|
||||||
<constraint firstItem="u5z-ST-gTK" firstAttribute="top" secondItem="ocY-lR-P2Z" secondAttribute="top" constant="20" symbolic="YES" id="guH-ws-dzX"/>
|
|
||||||
<constraint firstAttribute="trailing" secondItem="9kv-ns-mQx" secondAttribute="trailing" constant="16" id="icu-An-dNK"/>
|
|
||||||
<constraint firstAttribute="trailing" relation="lessThanOrEqual" secondItem="u5z-ST-gTK" secondAttribute="trailing" priority="240" constant="16" id="rni-sA-a7w"/>
|
|
||||||
</constraints>
|
|
||||||
</view>
|
|
||||||
</box>
|
|
||||||
</subviews>
|
|
||||||
<constraints>
|
|
||||||
<constraint firstItem="ChZ-ku-FOP" firstAttribute="trailing" secondItem="ww4-uR-8gP" secondAttribute="trailing" id="39G-i3-XQa"/>
|
|
||||||
<constraint firstItem="ChZ-ku-FOP" firstAttribute="top" secondItem="VVs-b5-cX9" secondAttribute="bottom" constant="8" symbolic="YES" id="3ub-U2-KCr"/>
|
|
||||||
<constraint firstItem="P9N-HM-wER" firstAttribute="top" secondItem="1" secondAttribute="top" constant="20" symbolic="YES" id="8fy-q5-VJy"/>
|
<constraint firstItem="P9N-HM-wER" firstAttribute="top" secondItem="1" secondAttribute="top" constant="20" symbolic="YES" id="8fy-q5-VJy"/>
|
||||||
<constraint firstItem="ChZ-ku-FOP" firstAttribute="leading" secondItem="ww4-uR-8gP" secondAttribute="leading" id="BQW-Zd-udd"/>
|
<constraint firstAttribute="bottom" secondItem="VVs-b5-cX9" secondAttribute="bottom" constant="20" symbolic="YES" id="TZB-qe-7eg"/>
|
||||||
<constraint firstAttribute="bottom" secondItem="ChZ-ku-FOP" secondAttribute="bottom" constant="20" symbolic="YES" id="DBk-vZ-yOT"/>
|
|
||||||
<constraint firstItem="VVs-b5-cX9" firstAttribute="top" secondItem="P9N-HM-wER" secondAttribute="bottom" constant="8" symbolic="YES" id="VCX-JW-cBe"/>
|
<constraint firstItem="VVs-b5-cX9" firstAttribute="top" secondItem="P9N-HM-wER" secondAttribute="bottom" constant="8" symbolic="YES" id="VCX-JW-cBe"/>
|
||||||
<constraint firstItem="VVs-b5-cX9" firstAttribute="trailing" secondItem="P9N-HM-wER" secondAttribute="trailing" id="k9i-4T-WY0"/>
|
<constraint firstItem="VVs-b5-cX9" firstAttribute="trailing" secondItem="P9N-HM-wER" secondAttribute="trailing" id="k9i-4T-WY0"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="P9N-HM-wER" secondAttribute="trailing" constant="20" id="n5w-Cw-Bbt"/>
|
<constraint firstAttribute="trailing" secondItem="P9N-HM-wER" secondAttribute="trailing" constant="20" id="n5w-Cw-Bbt"/>
|
||||||
<constraint firstItem="P9N-HM-wER" firstAttribute="leading" secondItem="1" secondAttribute="leading" constant="20" id="ulV-xL-ldJ"/>
|
<constraint firstItem="P9N-HM-wER" firstAttribute="leading" secondItem="1" secondAttribute="leading" constant="20" id="ulV-xL-ldJ"/>
|
||||||
<constraint firstItem="VVs-b5-cX9" firstAttribute="leading" secondItem="P9N-HM-wER" secondAttribute="leading" id="z4a-9C-78h"/>
|
<constraint firstItem="VVs-b5-cX9" firstAttribute="leading" secondItem="P9N-HM-wER" secondAttribute="leading" id="z4a-9C-78h"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<point key="canvasLocation" x="-1204.5" y="-1287.5"/>
|
<point key="canvasLocation" x="-1204" y="-1287"/>
|
||||||
</customView>
|
</customView>
|
||||||
</objects>
|
</objects>
|
||||||
</document>
|
</document>
|
||||||
|
|||||||
@@ -1,9 +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="21225" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="17701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
<deployment identifier="macosx"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21225"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="17701"/>
|
||||||
<capability name="Image references" minToolsVersion="12.0"/>
|
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<objects>
|
<objects>
|
||||||
@@ -17,8 +16,6 @@
|
|||||||
<outlet property="messageInfoTextField" destination="268" id="ahE-sq-QzR"/>
|
<outlet property="messageInfoTextField" destination="268" id="ahE-sq-QzR"/>
|
||||||
<outlet property="passwordTextField" destination="338" id="495"/>
|
<outlet property="passwordTextField" destination="338" id="495"/>
|
||||||
<outlet property="togglePasswordButton" destination="408" id="493"/>
|
<outlet property="togglePasswordButton" destination="408" id="493"/>
|
||||||
<outlet property="touchIdButton" destination="ZpI-L9-oFW" id="82R-Ir-aCk"/>
|
|
||||||
<outlet property="touchIdModeButton" destination="ojg-6v-74n" id="WOD-fT-1Jp"/>
|
|
||||||
<outlet property="unlockButton" destination="2" id="ZRr-Ui-ExP"/>
|
<outlet property="unlockButton" destination="2" id="ZRr-Ui-ExP"/>
|
||||||
<outlet property="view" destination="1" id="143"/>
|
<outlet property="view" destination="1" id="143"/>
|
||||||
</connections>
|
</connections>
|
||||||
@@ -29,7 +26,7 @@
|
|||||||
<rect key="frame" x="0.0" y="0.0" width="508" height="526"/>
|
<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="325" y="169" width="77" height="32"/>
|
<rect key="frame" x="323" y="169" width="78" 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"/>
|
||||||
@@ -89,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="351" y="246" width="51" height="32"/>
|
<rect key="frame" x="351" y="246" width="50" height="32"/>
|
||||||
<buttonCell key="cell" type="push" bezelStyle="rounded" image="NSQuickLookTemplate" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="409">
|
<buttonCell key="cell" type="push" bezelStyle="rounded" image="NSQuickLookTemplate" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="409">
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="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="351" y="216" width="51" height="32"/>
|
<rect key="frame" x="351" y="216" width="50" height="32"/>
|
||||||
<buttonCell key="cell" type="push" bezelStyle="rounded" image="NSStopProgressTemplate" imagePosition="only" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="487">
|
<buttonCell key="cell" type="push" bezelStyle="rounded" image="NSStopProgressTemplate" imagePosition="only" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="487">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@@ -113,7 +110,7 @@ DQ
|
|||||||
</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="251" y="169" width="76" height="32"/>
|
<rect key="frame" x="249" y="169" width="76" height="32"/>
|
||||||
<buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="erj-mR-UyO">
|
<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"/>
|
||||||
@@ -133,33 +130,9 @@ Gw
|
|||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ZpI-L9-oFW">
|
|
||||||
<rect key="frame" x="153" y="130" width="248" height="40"/>
|
|
||||||
<buttonCell key="cell" type="push" bezelStyle="rounded" imagePosition="overlaps" alignment="center" controlSize="large" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="H68-pk-x95">
|
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<imageReference key="image" image="touchid" catalog="system" symbolScale="large"/>
|
|
||||||
</buttonCell>
|
|
||||||
<connections>
|
|
||||||
<action selector="unlockWithTouchID:" target="-2" id="78g-Zp-kfP"/>
|
|
||||||
</connections>
|
|
||||||
</button>
|
|
||||||
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ojg-6v-74n">
|
|
||||||
<rect key="frame" x="414" y="16" width="78" height="25"/>
|
|
||||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="4zU-tu-WtN" id="ZsC-BU-S2L">
|
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
|
||||||
<font key="font" metaFont="menu"/>
|
|
||||||
<menu key="menu" id="Obl-SJ-PWj">
|
|
||||||
<items>
|
|
||||||
<menuItem title="Item 1" state="on" id="4zU-tu-WtN"/>
|
|
||||||
<menuItem title="Item 2" id="yoj-8p-tLa"/>
|
|
||||||
<menuItem title="Item 3" id="hqz-rH-gah"/>
|
|
||||||
</items>
|
|
||||||
</menu>
|
|
||||||
</popUpButtonCell>
|
|
||||||
</popUpButton>
|
|
||||||
</subviews>
|
</subviews>
|
||||||
<constraints>
|
<constraints>
|
||||||
|
<constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="2" secondAttribute="bottom" constant="20" symbolic="YES" id="122"/>
|
||||||
<constraint firstItem="262" firstAttribute="top" relation="greaterThanOrEqual" secondItem="1" secondAttribute="top" constant="20" symbolic="YES" id="276"/>
|
<constraint firstItem="262" firstAttribute="top" relation="greaterThanOrEqual" secondItem="1" secondAttribute="top" constant="20" symbolic="YES" id="276"/>
|
||||||
<constraint firstAttribute="centerX" secondItem="262" secondAttribute="centerX" id="286"/>
|
<constraint firstAttribute="centerX" secondItem="262" secondAttribute="centerX" id="286"/>
|
||||||
<constraint firstAttribute="centerY" secondItem="338" secondAttribute="centerY" id="386"/>
|
<constraint firstAttribute="centerY" secondItem="338" secondAttribute="centerY" id="386"/>
|
||||||
@@ -178,33 +151,24 @@ Gw
|
|||||||
<constraint firstItem="486" firstAttribute="leading" secondItem="408" secondAttribute="leading" id="490"/>
|
<constraint firstItem="486" firstAttribute="leading" secondItem="408" secondAttribute="leading" id="490"/>
|
||||||
<constraint firstItem="408" firstAttribute="trailing" secondItem="486" secondAttribute="trailing" id="492"/>
|
<constraint firstItem="408" firstAttribute="trailing" secondItem="486" secondAttribute="trailing" id="492"/>
|
||||||
<constraint firstItem="2" firstAttribute="trailing" secondItem="486" secondAttribute="trailing" id="496"/>
|
<constraint firstItem="2" firstAttribute="trailing" secondItem="486" secondAttribute="trailing" id="496"/>
|
||||||
<constraint firstItem="ZpI-L9-oFW" firstAttribute="leading" secondItem="338" secondAttribute="leading" id="586-AF-14D"/>
|
|
||||||
<constraint firstItem="ZpI-L9-oFW" firstAttribute="trailing" secondItem="2" secondAttribute="trailing" id="66E-ud-APw"/>
|
|
||||||
<constraint firstItem="ZpI-L9-oFW" firstAttribute="top" secondItem="2" secondAttribute="bottom" constant="12" symbolic="YES" id="8Cr-iC-tRa"/>
|
|
||||||
<constraint firstItem="2pb-ZG-spA" firstAttribute="baseline" secondItem="2" secondAttribute="baseline" id="9nK-MH-Ozs"/>
|
<constraint firstItem="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="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 firstAttribute="trailing" secondItem="ojg-6v-74n" secondAttribute="trailing" constant="20" symbolic="YES" id="Qi9-tI-1es"/>
|
|
||||||
<constraint firstItem="2pb-ZG-spA" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="SUS-76-os4"/>
|
<constraint firstItem="2pb-ZG-spA" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="SUS-76-os4"/>
|
||||||
<constraint firstItem="ojg-6v-74n" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="U0a-74-fft"/>
|
|
||||||
<constraint firstItem="2" firstAttribute="top" secondItem="txI-yI-5nE" secondAttribute="bottom" constant="8" symbolic="YES" id="jJs-hc-O2O"/>
|
<constraint firstItem="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="txI-yI-5nE" firstAttribute="top" secondItem="241" secondAttribute="bottom" constant="8" symbolic="YES" id="lfg-eB-T2O"/>
|
<constraint firstItem="txI-yI-5nE" firstAttribute="top" secondItem="241" secondAttribute="bottom" constant="8" symbolic="YES" id="lfg-eB-T2O"/>
|
||||||
<constraint firstAttribute="bottom" secondItem="ojg-6v-74n" secondAttribute="bottom" constant="20" symbolic="YES" id="lsJ-TP-Ypo"/>
|
|
||||||
<constraint firstItem="txI-yI-5nE" firstAttribute="leading" secondItem="241" secondAttribute="leading" id="nGY-6Q-Vwy"/>
|
<constraint firstItem="txI-yI-5nE" firstAttribute="leading" secondItem="241" secondAttribute="leading" id="nGY-6Q-Vwy"/>
|
||||||
<constraint firstItem="ojg-6v-74n" firstAttribute="top" relation="greaterThanOrEqual" secondItem="ZpI-L9-oFW" secondAttribute="bottom" constant="20" symbolic="YES" id="vKg-zv-agP"/>
|
|
||||||
<constraint firstItem="d8O-Ha-rrS" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="vxq-YP-UhR"/>
|
<constraint firstItem="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"/>
|
||||||
<constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="ZpI-L9-oFW" secondAttribute="bottom" constant="1" id="zhU-C3-jab"/>
|
|
||||||
</constraints>
|
</constraints>
|
||||||
<point key="canvasLocation" x="100" y="-94"/>
|
<point key="canvasLocation" x="-127" y="-46"/>
|
||||||
</customView>
|
</customView>
|
||||||
</objects>
|
</objects>
|
||||||
<resources>
|
<resources>
|
||||||
<image name="02_MessageBoxWarningTemplate" width="16" height="16"/>
|
<image name="02_MessageBoxWarningTemplate" width="16" height="16"/>
|
||||||
<image name="NSQuickLookTemplate" width="21" height="13"/>
|
<image name="NSQuickLookTemplate" width="21" height="13"/>
|
||||||
<image name="NSStopProgressTemplate" width="14" height="13"/>
|
<image name="NSStopProgressTemplate" width="14" height="13"/>
|
||||||
<image name="touchid" catalog="system" width="21" height="21"/>
|
|
||||||
</resources>
|
</resources>
|
||||||
</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="32700.99.1234" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="17701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
<deployment identifier="macosx"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22690"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="17701"/>
|
||||||
<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,14 +27,14 @@
|
|||||||
<box borderType="line" title="Box" titlePosition="noTitle" translatesAutoresizingMaskIntoConstraints="NO" id="vBs-Ga-aq0">
|
<box borderType="line" title="Box" titlePosition="noTitle" translatesAutoresizingMaskIntoConstraints="NO" id="vBs-Ga-aq0">
|
||||||
<rect key="frame" x="175" y="56" width="415" height="330"/>
|
<rect key="frame" x="175" y="56" width="415" height="330"/>
|
||||||
<view key="contentView" id="tD5-Na-7XI">
|
<view key="contentView" id="tD5-Na-7XI">
|
||||||
<rect key="frame" x="4" y="5" width="407" height="322"/>
|
<rect key="frame" x="3" y="3" width="409" height="324"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<customView translatesAutoresizingMaskIntoConstraints="NO" id="wIk-iw-Tcz">
|
<customView translatesAutoresizingMaskIntoConstraints="NO" id="wIk-iw-Tcz">
|
||||||
<rect key="frame" x="20" y="20" width="367" height="282"/>
|
<rect key="frame" x="20" y="20" width="369" height="284"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<textField focusRingType="none" 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="246" width="331" height="16"/>
|
<rect key="frame" x="18" y="248" 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"/>
|
||||||
@@ -65,7 +65,7 @@
|
|||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
</button>
|
</button>
|
||||||
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="aoG-FD-ds8">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="aoG-FD-ds8">
|
||||||
<rect key="frame" x="18" y="424" width="571" height="28"/>
|
<rect key="frame" x="18" y="424" width="571" height="28"/>
|
||||||
<textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" id="2bX-8S-9XM">
|
<textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" id="2bX-8S-9XM">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
@@ -87,7 +87,7 @@
|
|||||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||||
<tableColumns>
|
<tableColumns>
|
||||||
<tableColumn width="107" minWidth="40" maxWidth="1000" id="kNH-wp-Drp">
|
<tableColumn width="136" minWidth="40" maxWidth="1000" id="kNH-wp-Drp">
|
||||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border">
|
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border">
|
||||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
||||||
@@ -100,19 +100,19 @@
|
|||||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||||
<prototypeCellViews>
|
<prototypeCellViews>
|
||||||
<tableCellView misplaced="YES" id="vVt-P3-yLp" customClass="MPExtendedTableCellView">
|
<tableCellView misplaced="YES" id="vVt-P3-yLp" customClass="MPExtendedTableCellView">
|
||||||
<rect key="frame" x="1" y="1" width="116" 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 focusRingType="none" 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="116" height="16"/>
|
<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"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="fQy-Sz-4VA">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="fQy-Sz-4VA">
|
||||||
<rect key="frame" x="0.0" y="2" width="116" height="14"/>
|
<rect key="frame" x="0.0" y="2" width="145" height="14"/>
|
||||||
<textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" title="Label" id="yuK-qH-jxx">
|
<textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" title="Label" id="yuK-qH-jxx">
|
||||||
<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"/>
|
||||||
@@ -191,7 +191,7 @@
|
|||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
</button>
|
</button>
|
||||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="nrf-Hz-0vB">
|
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="nrf-Hz-0vB">
|
||||||
<rect key="frame" x="18" y="484" width="349" height="14"/>
|
<rect key="frame" x="18" y="484" width="349" height="14"/>
|
||||||
<textFieldCell key="cell" controlSize="small" selectable="YES" title="If enabled, a remote connection is established to macpassapp.org" id="i3S-9b-Bpf">
|
<textFieldCell key="cell" controlSize="small" selectable="YES" title="If enabled, a remote connection is established to macpassapp.org" id="i3S-9b-Bpf">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
@@ -234,7 +234,7 @@
|
|||||||
</customView>
|
</customView>
|
||||||
</objects>
|
</objects>
|
||||||
<resources>
|
<resources>
|
||||||
<image name="NSAddTemplate" width="18" height="17"/>
|
<image name="NSAddTemplate" width="14" height="13"/>
|
||||||
<image name="NSRemoveTemplate" width="18" height="5"/>
|
<image name="NSRemoveTemplate" width="14" height="4"/>
|
||||||
</resources>
|
</resources>
|
||||||
</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="32700.99.1234" 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="22690"/>
|
<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>
|
||||||
@@ -16,23 +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 translatesAutoresizingMaskIntoConstraints="NO" id="1">
|
<customView translatesAutoresizingMaskIntoConstraints="NO" id="1">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="400" height="94"/>
|
<rect key="frame" x="0.0" y="0.0" width="400" height="95"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button verticalHuggingPriority="500" translatesAutoresizingMaskIntoConstraints="NO" id="Z6x-oU-NC5">
|
<button verticalHuggingPriority="500" translatesAutoresizingMaskIntoConstraints="NO" id="Z6x-oU-NC5">
|
||||||
<rect key="frame" x="22" y="59" width="225" height="16"/>
|
<rect key="frame" x="22" y="59" width="221" height="18"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="14" id="ppB-Ka-SVN"/>
|
||||||
|
</constraints>
|
||||||
<buttonCell key="cell" type="check" title="Automatically Check for Updates" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="RFg-q1-AwJ">
|
<buttonCell key="cell" type="check" title="Automatically Check for Updates" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="RFg-q1-AwJ">
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
<constraints>
|
|
||||||
<constraint firstAttribute="height" constant="14" id="ppB-Ka-SVN"/>
|
|
||||||
</constraints>
|
|
||||||
</button>
|
</button>
|
||||||
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="pWJ-eJ-MBf">
|
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="pWJ-eJ-MBf">
|
||||||
<rect key="frame" x="143" y="16" width="115" 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"/>
|
||||||
@@ -45,7 +45,7 @@
|
|||||||
</menu>
|
</menu>
|
||||||
</popUpButtonCell>
|
</popUpButtonCell>
|
||||||
</popUpButton>
|
</popUpButton>
|
||||||
<textField focusRingType="none" 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="23" width="118" height="16"/>
|
<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"/>
|
||||||
|
|||||||
@@ -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="32700.99.1234" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19455" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
<deployment identifier="macosx"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22690"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19455"/>
|
||||||
<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>
|
||||||
@@ -21,24 +21,24 @@
|
|||||||
<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="449" height="486"/>
|
<rect key="frame" x="0.0" y="0.0" width="449" height="478"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<box autoresizesSubviews="NO" horizontalHuggingPriority="249" verticalHuggingPriority="500" borderType="line" title="Entry Table" translatesAutoresizingMaskIntoConstraints="NO" id="2">
|
<box autoresizesSubviews="NO" horizontalHuggingPriority="249" verticalHuggingPriority="500" borderType="line" title="Entry Table" translatesAutoresizingMaskIntoConstraints="NO" id="2">
|
||||||
<rect key="frame" x="17" y="278" width="415" height="104"/>
|
<rect key="frame" x="17" y="272" width="415" height="104"/>
|
||||||
<view key="contentView" id="cfa-nq-Kzt">
|
<view key="contentView" id="cfa-nq-Kzt">
|
||||||
<rect key="frame" x="4" y="5" width="407" height="84"/>
|
<rect key="frame" x="3" y="3" width="409" height="86"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="9">
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="9">
|
||||||
<rect key="frame" x="18" y="47" width="134" height="16"/>
|
<rect key="frame" x="18" y="49" 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"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="36">
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="36">
|
||||||
<rect key="frame" x="18" y="17" width="134" height="16"/>
|
<rect key="frame" x="18" y="19" 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"/>
|
||||||
@@ -46,7 +46,7 @@
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="40">
|
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="40">
|
||||||
<rect key="frame" x="155" y="16" width="140" height="19"/>
|
<rect key="frame" x="155" y="16" width="140" height="21"/>
|
||||||
<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="menu"/>
|
||||||
@@ -59,7 +59,7 @@
|
|||||||
</popUpButtonCell>
|
</popUpButtonCell>
|
||||||
</popUpButton>
|
</popUpButton>
|
||||||
<popUpButton verticalHuggingPriority="750" verticalCompressionResistancePriority="751" translatesAutoresizingMaskIntoConstraints="NO" id="13">
|
<popUpButton verticalHuggingPriority="750" verticalCompressionResistancePriority="751" translatesAutoresizingMaskIntoConstraints="NO" id="13">
|
||||||
<rect key="frame" x="155" y="40" width="110" height="25"/>
|
<rect key="frame" x="155" y="42" width="110" 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="menu"/>
|
||||||
@@ -92,9 +92,9 @@
|
|||||||
</constraints>
|
</constraints>
|
||||||
</box>
|
</box>
|
||||||
<box horizontalHuggingPriority="249" borderType="line" title="New Entries" translatesAutoresizingMaskIntoConstraints="NO" id="Xvt-tP-TbR">
|
<box horizontalHuggingPriority="249" borderType="line" title="New Entries" translatesAutoresizingMaskIntoConstraints="NO" id="Xvt-tP-TbR">
|
||||||
<rect key="frame" x="17" y="176" width="415" height="98"/>
|
<rect key="frame" x="17" y="172" width="415" height="96"/>
|
||||||
<view key="contentView" id="g0i-00-sng">
|
<view key="contentView" id="g0i-00-sng">
|
||||||
<rect key="frame" x="4" y="5" width="407" height="78"/>
|
<rect key="frame" x="3" y="3" width="409" height="78"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="LPY-sM-hjS">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="LPY-sM-hjS">
|
||||||
@@ -124,9 +124,9 @@
|
|||||||
</view>
|
</view>
|
||||||
</box>
|
</box>
|
||||||
<box horizontalHuggingPriority="249" title="Clipboard" translatesAutoresizingMaskIntoConstraints="NO" id="Kff-Xp-hAT">
|
<box horizontalHuggingPriority="249" title="Clipboard" translatesAutoresizingMaskIntoConstraints="NO" id="Kff-Xp-hAT">
|
||||||
<rect key="frame" x="17" y="96" width="415" height="76"/>
|
<rect key="frame" x="17" y="94" width="415" height="74"/>
|
||||||
<view key="contentView" id="Ntf-zj-VZL">
|
<view key="contentView" id="Ntf-zj-VZL">
|
||||||
<rect key="frame" x="4" y="5" width="407" height="56"/>
|
<rect key="frame" x="3" y="3" width="409" height="56"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="vT4-wF-ned">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="vT4-wF-ned">
|
||||||
@@ -146,9 +146,9 @@
|
|||||||
</view>
|
</view>
|
||||||
</box>
|
</box>
|
||||||
<box title="Search" translatesAutoresizingMaskIntoConstraints="NO" id="CLc-Vg-aWg">
|
<box title="Search" translatesAutoresizingMaskIntoConstraints="NO" id="CLc-Vg-aWg">
|
||||||
<rect key="frame" x="17" y="16" width="415" height="76"/>
|
<rect key="frame" x="17" y="16" width="415" height="74"/>
|
||||||
<view key="contentView" id="KWW-Ss-mhI">
|
<view key="contentView" id="KWW-Ss-mhI">
|
||||||
<rect key="frame" x="4" y="5" width="407" height="56"/>
|
<rect key="frame" x="3" y="3" width="409" height="56"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="VIS-db-Y8n">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="VIS-db-Y8n">
|
||||||
@@ -168,12 +168,12 @@
|
|||||||
</view>
|
</view>
|
||||||
</box>
|
</box>
|
||||||
<box title="URLs" translatesAutoresizingMaskIntoConstraints="NO" id="8Z8-mS-hfg">
|
<box title="URLs" translatesAutoresizingMaskIntoConstraints="NO" id="8Z8-mS-hfg">
|
||||||
<rect key="frame" x="17" y="386" width="415" height="80"/>
|
<rect key="frame" x="17" y="380" width="415" height="78"/>
|
||||||
<view key="contentView" id="LD4-oH-eGw">
|
<view key="contentView" id="LD4-oH-eGw">
|
||||||
<rect key="frame" x="4" y="5" width="407" height="60"/>
|
<rect key="frame" x="3" y="3" width="409" height="60"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<textField focusRingType="none" 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="23" width="91" height="16"/>
|
<rect key="frame" x="18" y="23" width="91" height="16"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" enabled="NO" sendsActionOnEndEditing="YES" title="Open URLs in:" id="soD-wI-YOH">
|
<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"/>
|
||||||
|
|||||||
@@ -27,8 +27,11 @@
|
|||||||
#import "MPIconHelper.h"
|
#import "MPIconHelper.h"
|
||||||
|
|
||||||
@interface NSImage (MPTintedImage)
|
@interface NSImage (MPTintedImage)
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation NSImage (MPTintedImage)
|
@implementation NSImage (MPTintedImage)
|
||||||
|
|
||||||
- (NSImage *)imageWithTintColor:(NSColor *)tintColor {
|
- (NSImage *)imageWithTintColor:(NSColor *)tintColor {
|
||||||
/* only tint templated images! */
|
/* only tint templated images! */
|
||||||
if(NO == self.template) {
|
if(NO == self.template) {
|
||||||
@@ -42,6 +45,7 @@
|
|||||||
image.template = NO;
|
image.template = NO;
|
||||||
return image;
|
return image;
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation KPKNode (IconImage)
|
@implementation KPKNode (IconImage)
|
||||||
|
|||||||
@@ -7,45 +7,9 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#import "MPAdvancedDatabaseSettingsViewController.h"
|
#import "MPAdvancedDatabaseSettingsViewController.h"
|
||||||
#import "MPDocument.h"
|
|
||||||
#import "MPDayCountFormatter.h"
|
|
||||||
#import "KPKNode+IconImage.h"
|
|
||||||
|
|
||||||
#import <KeePassKit/KeePassKit.h>
|
|
||||||
#import <HNHUi/HNHUi.h>
|
|
||||||
|
|
||||||
@interface MPAdvancedDatabaseSettingsViewController ()
|
@interface MPAdvancedDatabaseSettingsViewController ()
|
||||||
|
|
||||||
@property (strong) IBOutlet NSButton *enableHistoryCheckButton;
|
|
||||||
@property (strong) IBOutlet NSTextField *historyMaximumItemsTextField;
|
|
||||||
@property (strong) IBOutlet NSStepper *historyMaximumItemsStepper;
|
|
||||||
|
|
||||||
@property (strong) IBOutlet NSTextField *historyMaximumSizeTextField;
|
|
||||||
@property (strong) IBOutlet NSStepper *historyMaximumSizeStepper;
|
|
||||||
|
|
||||||
@property (strong) IBOutlet NSButton *enableTrashCheckButton;
|
|
||||||
@property (strong) IBOutlet NSButton *emptyTrashOnQuitCheckButton;
|
|
||||||
@property (strong) IBOutlet NSPopUpButton *selectTrashGoupPopUpButton;
|
|
||||||
@property (strong) IBOutlet NSTextField *defaultUsernameTextField;
|
|
||||||
@property (strong) IBOutlet NSPopUpButton *templateGroupPopUpButton;
|
|
||||||
|
|
||||||
@property (strong) IBOutlet NSButton *recommendKeyChangeCheckButton;
|
|
||||||
@property (strong) IBOutlet NSButton *enforceKeyChangeCheckButton;
|
|
||||||
@property (strong) IBOutlet NSButton *enforceKeyChangeOnceCheckButton;
|
|
||||||
@property (strong) IBOutlet NSTextField *recommendKeyChangeIntervalTextField;
|
|
||||||
@property (strong) IBOutlet NSStepper *recommendKeyChangeIntervalStepper;
|
|
||||||
@property (strong) IBOutlet NSTextField *enforceKeyChangeIntervalTextField;
|
|
||||||
@property (strong) IBOutlet NSStepper *enforceKeyChangeIntervalStepper;
|
|
||||||
|
|
||||||
@property (assign) BOOL enableHistory;
|
|
||||||
@property (assign) NSInteger maxiumHistoryItems;
|
|
||||||
@property (assign) NSInteger maxiumHistorySize;
|
|
||||||
|
|
||||||
@property (assign) BOOL enforceKeyChange;
|
|
||||||
@property (assign) BOOL recommendKeyChange;
|
|
||||||
@property (assign) NSInteger enforceKeyChangeInterval;
|
|
||||||
@property (assign) NSInteger recommendKeyChangeInterval;
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation MPAdvancedDatabaseSettingsViewController
|
@implementation MPAdvancedDatabaseSettingsViewController
|
||||||
@@ -55,140 +19,4 @@
|
|||||||
// Do view setup here.
|
// Do view setup here.
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)_setupAdvancedTab {
|
|
||||||
/* history */
|
|
||||||
MPDocument *document = (MPDocument*)self.view.window.windowController.document;
|
|
||||||
KPKTree *tree = document.tree;
|
|
||||||
|
|
||||||
self.enableHistory = tree.metaData.isHistoryEnabled;
|
|
||||||
[self.enableHistoryCheckButton bind:NSValueBinding
|
|
||||||
toObject:self
|
|
||||||
withKeyPath:NSStringFromSelector(@selector(enableHistory))
|
|
||||||
options:nil];
|
|
||||||
|
|
||||||
/* history size */
|
|
||||||
self.maxiumHistorySize = tree.metaData.historyMaxSize;
|
|
||||||
self.historyMaximumSizeStepper.minValue = 0;
|
|
||||||
self.historyMaximumSizeStepper.maxValue = NSIntegerMax;
|
|
||||||
self.historyMaximumSizeStepper.increment = 1024*1024; // 1MB
|
|
||||||
[self.historyMaximumSizeStepper bind:NSEnabledBinding toObject:self withKeyPath:NSStringFromSelector(@selector(enableHistory)) options:nil];
|
|
||||||
[self.historyMaximumSizeStepper bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(maxiumHistorySize)) options:nil];
|
|
||||||
[self.historyMaximumSizeTextField bind:NSEnabledBinding toObject:self withKeyPath:NSStringFromSelector(@selector(enableHistory)) options:nil];
|
|
||||||
[self.historyMaximumSizeTextField bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(maxiumHistorySize)) options:nil];
|
|
||||||
|
|
||||||
/* history count */
|
|
||||||
self.maxiumHistoryItems = MAX(0,tree.metaData.historyMaxItems); // prevent -1 form showing up directly
|
|
||||||
self.historyMaximumItemsStepper.minValue = 0;
|
|
||||||
self.historyMaximumItemsStepper.maxValue = NSIntegerMax;
|
|
||||||
self.historyMaximumItemsStepper.increment = 1;
|
|
||||||
[self.historyMaximumItemsStepper bind:NSEnabledBinding toObject:self withKeyPath:NSStringFromSelector(@selector(enableHistory)) options:nil];
|
|
||||||
[self.historyMaximumItemsStepper bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(maxiumHistoryItems)) options:nil];
|
|
||||||
[self.historyMaximumItemsTextField bind:NSEnabledBinding toObject:self withKeyPath:NSStringFromSelector(@selector(enableHistory)) options:nil];
|
|
||||||
[self.historyMaximumItemsTextField bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(maxiumHistoryItems)) options:nil];
|
|
||||||
|
|
||||||
/* trash */
|
|
||||||
HNHUISetStateFromBool(self.enableTrashCheckButton, tree.metaData.useTrash);
|
|
||||||
self.selectTrashGoupPopUpButton.enabled = tree.metaData.useTrash;
|
|
||||||
[self.enableTrashCheckButton bind:NSValueBinding toObject:self.selectTrashGoupPopUpButton withKeyPath:NSEnabledBinding options:nil];
|
|
||||||
[self _updateTrashFolders:tree];
|
|
||||||
|
|
||||||
/* default username */
|
|
||||||
self.defaultUsernameTextField.stringValue = tree.metaData.defaultUserName;
|
|
||||||
self.defaultUsernameTextField.editable = YES;
|
|
||||||
[self _updateTemplateGroup:tree];
|
|
||||||
|
|
||||||
/* key changes */
|
|
||||||
self.enforceKeyChange = tree.metaData.enforceMasterKeyChange;
|
|
||||||
self.recommendKeyChange = tree.metaData.recommendMasterKeyChange;
|
|
||||||
HNHUISetStateFromBool(self.enforceKeyChangeOnceCheckButton, tree.metaData.enforceMasterKeyChangeOnce);
|
|
||||||
|
|
||||||
[self.enforceKeyChangeCheckButton bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(enforceKeyChange)) options:nil];
|
|
||||||
[self.recommendKeyChangeCheckButton bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(recommendKeyChange)) options:nil];
|
|
||||||
|
|
||||||
/* intervals use -1 to encode disabled, do not show this in text fields! */
|
|
||||||
self.enforceKeyChangeInterval = MAX(0,tree.metaData.masterKeyChangeEnforcementInterval);
|
|
||||||
self.enforceKeyChangeIntervalStepper.minValue = 0;
|
|
||||||
self.enforceKeyChangeIntervalStepper.maxValue = NSIntegerMax;
|
|
||||||
self.enforceKeyChangeIntervalStepper.increment = 1; // 1 day steps
|
|
||||||
[self.enforceKeyChangeIntervalStepper bind:NSEnabledBinding toObject:self withKeyPath:NSStringFromSelector(@selector(enforceKeyChange)) options:nil];
|
|
||||||
[self.enforceKeyChangeIntervalStepper bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(enforceKeyChangeInterval)) options:nil];
|
|
||||||
[self.enforceKeyChangeIntervalTextField bind:NSEnabledBinding toObject:self withKeyPath:NSStringFromSelector(@selector(enforceKeyChange)) options:nil];
|
|
||||||
[self.enforceKeyChangeIntervalTextField bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(enforceKeyChangeInterval)) options:nil];
|
|
||||||
|
|
||||||
NSString *valueFormat = NSLocalizedString(@"EVERY_%ld_DAYS", @"Recommend/Enforce key change intervall format");
|
|
||||||
|
|
||||||
((MPDayCountFormatter *)self.enforceKeyChangeIntervalTextField.formatter).valueFormat = valueFormat;
|
|
||||||
|
|
||||||
self.recommendKeyChangeInterval = MAX(0,tree.metaData.masterKeyChangeRecommendationInterval);
|
|
||||||
self.recommendKeyChangeIntervalStepper.minValue = 0;
|
|
||||||
self.recommendKeyChangeIntervalStepper.maxValue = NSIntegerMax;
|
|
||||||
self.recommendKeyChangeIntervalStepper.increment = 1; // 1 day steps
|
|
||||||
[self.recommendKeyChangeIntervalStepper bind:NSEnabledBinding toObject:self withKeyPath:NSStringFromSelector(@selector(recommendKeyChange)) options:nil];
|
|
||||||
[self.recommendKeyChangeIntervalStepper bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(recommendKeyChangeInterval)) options:nil];
|
|
||||||
[self.recommendKeyChangeIntervalTextField bind:NSEnabledBinding toObject:self withKeyPath:NSStringFromSelector(@selector(recommendKeyChange)) options:nil];
|
|
||||||
[self.recommendKeyChangeIntervalTextField bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(recommendKeyChangeInterval)) options:nil];
|
|
||||||
((MPDayCountFormatter *)self.recommendKeyChangeIntervalTextField.formatter).valueFormat = valueFormat;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)_updateTrashFolders:(KPKTree *)tree {
|
|
||||||
NSMenu *menu = [self _buildTrashTreeMenu:tree];
|
|
||||||
self.selectTrashGoupPopUpButton.menu = menu;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)_updateTemplateGroup:(KPKTree *)tree {
|
|
||||||
NSMenu *menu = [self _buildTemplateTreeMenu:tree];
|
|
||||||
self.templateGroupPopUpButton.menu = menu;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSMenu *)_buildTrashTreeMenu:(KPKTree *)tree {
|
|
||||||
NSMenu *menu = [self _buildTreeMenu:tree preselect:tree.metaData.trashUuid];
|
|
||||||
|
|
||||||
NSMenuItem *selectItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"AUTOCREATE_TRASH_FOLDER", @"Menu item for automatic trash creation")
|
|
||||||
action:NULL
|
|
||||||
keyEquivalent:@""];
|
|
||||||
selectItem.enabled = YES;
|
|
||||||
[menu insertItem:selectItem atIndex:0];
|
|
||||||
|
|
||||||
return menu;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSMenu *)_buildTemplateTreeMenu:(KPKTree *)tree {
|
|
||||||
NSMenu *menu = [self _buildTreeMenu:tree preselect:tree.metaData.entryTemplatesGroupUuid];
|
|
||||||
|
|
||||||
NSMenuItem *selectItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"NO_TEMPLATE_GROUP", @"Menu item to reset the template groups")
|
|
||||||
action:NULL
|
|
||||||
keyEquivalent:@""];
|
|
||||||
selectItem.enabled = YES;
|
|
||||||
[menu insertItem:selectItem atIndex:0];
|
|
||||||
|
|
||||||
return menu;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
- (NSMenu *)_buildTreeMenu:(KPKTree *)tree preselect:(NSUUID *)uuid {
|
|
||||||
NSMenu *menu = [[NSMenu alloc] init];
|
|
||||||
menu.autoenablesItems = NO;
|
|
||||||
for(KPKGroup *group in tree.root.groups) {
|
|
||||||
[self _insertMenuItemsForGroup:group atLevel:0 inMenu:menu preselect:uuid];
|
|
||||||
}
|
|
||||||
return menu;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)_insertMenuItemsForGroup:(KPKGroup *)group atLevel:(NSUInteger)level inMenu:(NSMenu *)menu preselect:(NSUUID *)uuid{
|
|
||||||
NSMenuItem *groupItem = [[NSMenuItem alloc] init];
|
|
||||||
groupItem.image = group.iconImage;
|
|
||||||
groupItem.title = group.title;
|
|
||||||
groupItem.representedObject = group;
|
|
||||||
groupItem.enabled = YES;
|
|
||||||
if(uuid && [group.uuid isEqual:uuid]) {
|
|
||||||
groupItem.state = NSOnState;
|
|
||||||
}
|
|
||||||
groupItem.indentationLevel = level;
|
|
||||||
[menu addItem:groupItem];
|
|
||||||
for(KPKGroup *childGroup in group.groups) {
|
|
||||||
[self _insertMenuItemsForGroup:childGroup atLevel:level + 1 inMenu:menu preselect:uuid];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -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="21701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19529" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
<deployment identifier="macosx"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19529"/>
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<objects>
|
<objects>
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
<customView id="Hz6-mo-xeY">
|
<customView id="Hz6-mo-xeY">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="480" height="272"/>
|
<rect key="frame" x="0.0" y="0.0" width="480" height="272"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
<point key="canvasLocation" x="260" y="-61"/>
|
<point key="canvasLocation" x="-229" y="178"/>
|
||||||
</customView>
|
</customView>
|
||||||
</objects>
|
</objects>
|
||||||
</document>
|
</document>
|
||||||
|
|||||||
@@ -25,7 +25,6 @@
|
|||||||
APPKIT_EXTERN NSString *const MPDidChangeStoredKeyFilesSettings;
|
APPKIT_EXTERN NSString *const MPDidChangeStoredKeyFilesSettings;
|
||||||
|
|
||||||
@class MPEntryContextMenuDelegate;
|
@class MPEntryContextMenuDelegate;
|
||||||
@class SPUUpdater;
|
|
||||||
|
|
||||||
@interface MPAppDelegate : NSObject <NSApplicationDelegate, NSMenuDelegate>
|
@interface MPAppDelegate : NSObject <NSApplicationDelegate, NSMenuDelegate>
|
||||||
|
|
||||||
@@ -37,7 +36,6 @@ APPKIT_EXTERN NSString *const MPDidChangeStoredKeyFilesSettings;
|
|||||||
@property (strong) IBOutlet NSMenu *exportMenu;
|
@property (strong) IBOutlet NSMenu *exportMenu;
|
||||||
|
|
||||||
@property (strong, readonly) MPEntryContextMenuDelegate *itemActionMenuDelegate;
|
@property (strong, readonly) MPEntryContextMenuDelegate *itemActionMenuDelegate;
|
||||||
@property (strong, readonly) SPUUpdater *updater;
|
|
||||||
@property (readonly) BOOL isTerminating;
|
@property (readonly) BOOL isTerminating;
|
||||||
|
|
||||||
@property (nonatomic) BOOL isAllowedToStoreKeyFile;
|
@property (nonatomic) BOOL isAllowedToStoreKeyFile;
|
||||||
|
|||||||
@@ -67,7 +67,6 @@ typedef NS_OPTIONS(NSInteger, MPAppStartupState) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@property (strong) NSWindow *welcomeWindow;
|
@property (strong) NSWindow *welcomeWindow;
|
||||||
@property (strong) SPUUpdater *updater;
|
|
||||||
@property (strong) IBOutlet NSWindow *passwordCreatorWindow;
|
@property (strong) IBOutlet NSWindow *passwordCreatorWindow;
|
||||||
@property (strong, nonatomic) MPPreferencesWindowController *preferencesController;
|
@property (strong, nonatomic) MPPreferencesWindowController *preferencesController;
|
||||||
@property (strong, nonatomic) MPPasswordCreatorViewController *passwordCreatorController;
|
@property (strong, nonatomic) MPPasswordCreatorViewController *passwordCreatorController;
|
||||||
@@ -218,9 +217,7 @@ typedef NS_OPTIONS(NSInteger, MPAppStartupState) {
|
|||||||
[MPPluginHost sharedHost];
|
[MPPluginHost sharedHost];
|
||||||
#if !defined(DEBUG) && !defined(NO_SPARKLE)
|
#if !defined(DEBUG) && !defined(NO_SPARKLE)
|
||||||
/* Disable updates if in debug or nosparkle */
|
/* Disable updates if in debug or nosparkle */
|
||||||
SPUStandardUserDriver *userDriver = [[SPUStandardUserDriver alloc] initWithHostBundle:NSBundle.mainBundle delegate:nil];
|
[SUUpdater sharedUpdater];
|
||||||
self.updater = [[SPUUpdater alloc] initWithHostBundle:NSBundle.mainBundle applicationBundle:NSBundle.mainBundle userDriver:userDriver delegate:nil];
|
|
||||||
[self.updater startUpdater:nil];
|
|
||||||
#endif
|
#endif
|
||||||
self.startupState |= MPAppStartupStateFinishedLaunch;
|
self.startupState |= MPAppStartupStateFinishedLaunch;
|
||||||
// Here we just opt-in for allowing our bar to be customized throughout the app.
|
// Here we just opt-in for allowing our bar to be customized throughout the app.
|
||||||
@@ -367,7 +364,7 @@ typedef NS_OPTIONS(NSInteger, MPAppStartupState) {
|
|||||||
[alert addButtonWithTitle:NSLocalizedString(@"OK", @"Ok Button to dismiss disabled updates alert")];
|
[alert addButtonWithTitle:NSLocalizedString(@"OK", @"Ok Button to dismiss disabled updates alert")];
|
||||||
[alert runModal];
|
[alert runModal];
|
||||||
#else
|
#else
|
||||||
[self.updater checkForUpdates];
|
[[SUUpdater sharedUpdater] checkForUpdates:sender];
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -219,8 +219,7 @@ static MPAutotypeDaemon *_sharedInstance;
|
|||||||
NSNotificationCenter * __weak nc = [NSNotificationCenter defaultCenter];
|
NSNotificationCenter * __weak nc = [NSNotificationCenter defaultCenter];
|
||||||
MPAutotypeDaemon * __weak welf = self;
|
MPAutotypeDaemon * __weak welf = self;
|
||||||
NSTimeInterval requestTime = NSDate.date.timeIntervalSinceReferenceDate;
|
NSTimeInterval requestTime = NSDate.date.timeIntervalSinceReferenceDate;
|
||||||
id __block unlockToken; // silence init value never read analyzer warning
|
id __block unlockToken = [nc addObserverForName:MPDocumentDidUnlockDatabaseNotification
|
||||||
unlockToken = [nc addObserverForName:MPDocumentDidUnlockDatabaseNotification
|
|
||||||
object:nil
|
object:nil
|
||||||
queue:NSOperationQueue.mainQueue
|
queue:NSOperationQueue.mainQueue
|
||||||
usingBlock:^(NSNotification *notification) {
|
usingBlock:^(NSNotification *notification) {
|
||||||
@@ -248,8 +247,7 @@ static MPAutotypeDaemon *_sharedInstance;
|
|||||||
NSNotificationCenter * __weak nc = [NSNotificationCenter defaultCenter];
|
NSNotificationCenter * __weak nc = [NSNotificationCenter defaultCenter];
|
||||||
MPAutotypeDaemon * __weak welf = self;
|
MPAutotypeDaemon * __weak welf = self;
|
||||||
NSTimeInterval requestTime = NSDate.date.timeIntervalSinceReferenceDate;
|
NSTimeInterval requestTime = NSDate.date.timeIntervalSinceReferenceDate;
|
||||||
id __block unlockToken; // silence init value never read analyzer warning
|
id __block unlockToken = [nc addObserverForName:MPDocumentDidUnlockDatabaseNotification
|
||||||
unlockToken = [nc addObserverForName:MPDocumentDidUnlockDatabaseNotification
|
|
||||||
object:nil
|
object:nil
|
||||||
queue:NSOperationQueue.mainQueue
|
queue:NSOperationQueue.mainQueue
|
||||||
usingBlock:^(NSNotification *notification) {
|
usingBlock:^(NSNotification *notification) {
|
||||||
@@ -410,8 +408,7 @@ static MPAutotypeDaemon *_sharedInstance;
|
|||||||
}
|
}
|
||||||
|
|
||||||
NSNotificationCenter * __weak nc = NSWorkspace.sharedWorkspace.notificationCenter;
|
NSNotificationCenter * __weak nc = NSWorkspace.sharedWorkspace.notificationCenter;
|
||||||
id __block didActivateToken; // silence init value never read analyzer warning
|
id __block didActivateToken = [nc addObserverForName:NSWorkspaceDidActivateApplicationNotification
|
||||||
didActivateToken = [nc addObserverForName:NSWorkspaceDidActivateApplicationNotification
|
|
||||||
object:nil
|
object:nil
|
||||||
queue:NSOperationQueue.mainQueue
|
queue:NSOperationQueue.mainQueue
|
||||||
usingBlock:^(NSNotification *notification) {
|
usingBlock:^(NSNotification *notification) {
|
||||||
|
|||||||
@@ -40,11 +40,4 @@ FOUNDATION_EXPORT NSString *const MPPluginUTI;
|
|||||||
FOUNDATION_EXPORT NSString *const MPBundleHelpURLKey;
|
FOUNDATION_EXPORT NSString *const MPBundleHelpURLKey;
|
||||||
FOUNDATION_EXPORT NSString *const MPBundlePluginRepositoryURLKey;
|
FOUNDATION_EXPORT NSString *const MPBundlePluginRepositoryURLKey;
|
||||||
FOUNDATION_EXPORT NSString *const MPPluginCompatibilityURLKey;
|
FOUNDATION_EXPORT NSString *const MPPluginCompatibilityURLKey;
|
||||||
|
|
||||||
/**
|
|
||||||
Keychain Keys
|
|
||||||
*/
|
|
||||||
extern NSString *const MPTouchIdUnlockPublicKeyTag;
|
|
||||||
extern NSString *const MPTouchIdUnlockPrivateKeyTag;
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -31,6 +31,3 @@ NSString *const MPBundleHelpURLKey = @"MPHelpURL";
|
|||||||
NSString *const MPBundlePluginRepositoryURLKey = @"MPPluginRepositoryURL";
|
NSString *const MPBundlePluginRepositoryURLKey = @"MPPluginRepositoryURL";
|
||||||
NSString *const MPPluginCompatibilityURLKey = @"MPPluginCompatibilityURLKey";
|
NSString *const MPPluginCompatibilityURLKey = @"MPPluginCompatibilityURLKey";
|
||||||
|
|
||||||
NSString *const MPTouchIdUnlockPublicKeyTag = @"com.hicknhacksoftware.macpass.publickey";
|
|
||||||
NSString *const MPTouchIdUnlockPrivateKeyTag = @"com.hicknhacksoftware.macpass.privatekey";
|
|
||||||
|
|
||||||
|
|||||||
@@ -83,7 +83,6 @@ typedef NS_ENUM(NSUInteger, MPDatabaseSettingsTab) {
|
|||||||
@property (weak) IBOutlet NSStepper *recommendKeyChangeIntervalStepper;
|
@property (weak) IBOutlet NSStepper *recommendKeyChangeIntervalStepper;
|
||||||
@property (weak) IBOutlet NSTextField *enforceKeyChangeIntervalTextField;
|
@property (weak) IBOutlet NSTextField *enforceKeyChangeIntervalTextField;
|
||||||
@property (weak) IBOutlet NSStepper *enforceKeyChangeIntervalStepper;
|
@property (weak) IBOutlet NSStepper *enforceKeyChangeIntervalStepper;
|
||||||
@property (strong) IBOutlet NSTextField *lastKeyChangeTextField;
|
|
||||||
|
|
||||||
- (void)showSettingsTab:(MPDatabaseSettingsTab)tab;
|
- (void)showSettingsTab:(MPDatabaseSettingsTab)tab;
|
||||||
|
|
||||||
|
|||||||
@@ -417,20 +417,6 @@
|
|||||||
[self.recommendKeyChangeIntervalTextField bind:NSEnabledBinding toObject:self withKeyPath:NSStringFromSelector(@selector(recommendKeyChange)) options:nil];
|
[self.recommendKeyChangeIntervalTextField bind:NSEnabledBinding toObject:self withKeyPath:NSStringFromSelector(@selector(recommendKeyChange)) options:nil];
|
||||||
[self.recommendKeyChangeIntervalTextField bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(recommendKeyChangeInterval)) options:nil];
|
[self.recommendKeyChangeIntervalTextField bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(recommendKeyChangeInterval)) options:nil];
|
||||||
((MPDayCountFormatter *)self.recommendKeyChangeIntervalTextField.formatter).valueFormat = valueFormat;
|
((MPDayCountFormatter *)self.recommendKeyChangeIntervalTextField.formatter).valueFormat = valueFormat;
|
||||||
|
|
||||||
if(nil != tree.metaData.masterKeyChanged) {
|
|
||||||
NSString *keyChangeTextFormat = NSLocalizedString(@"LAST_DATABASE_KEY_CHANGE_DATE_%@", "Information about last key change date");
|
|
||||||
NSDateFormatter *changeDateFormatter = [[NSDateFormatter alloc] init];
|
|
||||||
changeDateFormatter.timeStyle = NSDateFormatterNoStyle;
|
|
||||||
changeDateFormatter.dateStyle = NSDateFormatterLongStyle;
|
|
||||||
|
|
||||||
NSString *keyChangeDateString = [changeDateFormatter stringFromDate:tree.metaData.masterKeyChanged];
|
|
||||||
|
|
||||||
self.lastKeyChangeTextField.stringValue = [NSString stringWithFormat:keyChangeTextFormat, keyChangeDateString];
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
self.lastKeyChangeTextField.stringValue = NSLocalizedString(@"DATABASE_KEY_NEVER_CHANGED", "Displayed when the databse key was never changed/is not set");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)_updateFirstResponder {
|
- (void)_updateFirstResponder {
|
||||||
|
|||||||
@@ -1,19 +0,0 @@
|
|||||||
//
|
|
||||||
// MPDocument+BiometricEncryptionSupport.h
|
|
||||||
// MacPass
|
|
||||||
//
|
|
||||||
// Created by Michael Starke on 22.08.22.
|
|
||||||
// Copyright © 2022 HicknHack Software GmbH. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "MPDocument.h"
|
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_BEGIN
|
|
||||||
|
|
||||||
@interface MPDocument (BiometricEncryptionSupport)
|
|
||||||
@property (nonatomic, readonly, copy, nullable) NSString *biometricKey;
|
|
||||||
@property (nonatomic, readonly, copy, nullable) NSData *encryptedKeyData;
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_END
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
//
|
|
||||||
// MPDocument+BiometricEncryptionSupport.m
|
|
||||||
// MacPass
|
|
||||||
//
|
|
||||||
// Created by Michael Starke on 22.08.22.
|
|
||||||
// Copyright © 2022 HicknHack Software GmbH. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "MPDocument+BiometricEncryptionSupport.h"
|
|
||||||
#import "MPTouchIdCompositeKeyStore.h"
|
|
||||||
#import "NSString+MPHash.h"
|
|
||||||
|
|
||||||
|
|
||||||
@implementation MPDocument (BiometricEncryptionSupport)
|
|
||||||
|
|
||||||
@dynamic biometricKey;
|
|
||||||
|
|
||||||
- (NSString *)biometricKey {
|
|
||||||
return [self.fileURL.lastPathComponent sha1HexDigest];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSData *)encryptedKeyData {
|
|
||||||
NSString *documentKey = self.biometricKey;
|
|
||||||
if(nil == documentKey) {
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
return [MPTouchIdCompositeKeyStore.defaultStore loadEncryptedCompositeKeyForDocumentKey:documentKey];
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
||||||
@@ -50,6 +50,7 @@ NSString *const kMPDocumentSearchResultsKey = @"kMPDocumentSearchResul
|
|||||||
[NSNotificationCenter.defaultCenter postNotificationName:MPDocumentDidEnterSearchNotification object:self];
|
[NSNotificationCenter.defaultCenter postNotificationName:MPDocumentDidEnterSearchNotification object:self];
|
||||||
[self updateSearch:self];
|
[self updateSearch:self];
|
||||||
/* clear selection */
|
/* clear selection */
|
||||||
|
self.selectedGroups = nil;
|
||||||
self.selectedEntries = nil;
|
self.selectedEntries = nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -108,13 +108,13 @@ FOUNDATION_EXPORT NSString *const MPDocumentGroupKey;
|
|||||||
/**
|
/**
|
||||||
* Decrypts the database with the given password and keyfile
|
* Decrypts the database with the given password and keyfile
|
||||||
*
|
*
|
||||||
* @param compositeKey The CompositeKey to unlock the db.
|
* @param password The password to unlock the db with, can be nil. This is not the same as an empty string @""
|
||||||
* @param keyFileURL URL for the keyfile that was used to create the compositeKey. Can be nil.
|
* @param keyFileURL URL for the keyfile to use, can be nil
|
||||||
* @param error Pointer to an NSError pointer of error reporting.
|
* @param error Pointer to an NSError pointer of error reporting.
|
||||||
*
|
*
|
||||||
* @return YES if the document was unlocked sucessfully, NO otherwise. Consult the error object for details
|
* @return YES if the document was unlocked sucessfully, NO otherwise. Consult the error object for details
|
||||||
*/
|
*/
|
||||||
- (BOOL)unlockWithPassword:(KPKCompositeKey *)compositeKey keyFileURL:(NSURL *)keyFileURL error:(NSError *__autoreleasing*)error;
|
- (BOOL)unlockWithPassword:(NSString *)password keyFileURL:(NSURL *)keyFileURL error:(NSError *__autoreleasing*)error;
|
||||||
/**
|
/**
|
||||||
* Changes the password of the database. Some sanity checks are applied and the change is aborted if the new values aren't valid
|
* Changes the password of the database. Some sanity checks are applied and the change is aborted if the new values aren't valid
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -147,6 +147,11 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGrou
|
|||||||
[self addWindowController:windowController];
|
[self addWindowController:windowController];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)canCloseDocumentWithDelegate:(id)delegate shouldCloseSelector:(nullable SEL)shouldCloseSelector contextInfo:(nullable void *)contextInfo {
|
||||||
|
|
||||||
|
[super canCloseDocumentWithDelegate:delegate shouldCloseSelector:shouldCloseSelector contextInfo:contextInfo];
|
||||||
|
}
|
||||||
|
|
||||||
- (BOOL)canAsynchronouslyWriteToURL:(NSURL *)url ofType:(NSString *)typeName forSaveOperation:(NSSaveOperationType)saveOperation {
|
- (BOOL)canAsynchronouslyWriteToURL:(NSURL *)url ofType:(NSString *)typeName forSaveOperation:(NSSaveOperationType)saveOperation {
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
@@ -398,6 +403,7 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGrou
|
|||||||
NSError *error;
|
NSError *error;
|
||||||
KPKTree *otherTree;
|
KPKTree *otherTree;
|
||||||
|
|
||||||
|
|
||||||
if(key) {
|
if(key) {
|
||||||
otherTree = [[KPKTree alloc] initWithContentsOfUrl:url key:key error:&error];
|
otherTree = [[KPKTree alloc] initWithContentsOfUrl:url key:key error:&error];
|
||||||
}
|
}
|
||||||
@@ -421,9 +427,13 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGrou
|
|||||||
MPPasswordInputController *passwordInputController = [[MPPasswordInputController alloc] init];
|
MPPasswordInputController *passwordInputController = [[MPPasswordInputController alloc] init];
|
||||||
[passwordInputController requestPasswordWithMessage:NSLocalizedString(@"EXTERN_CHANGE_OF_MASTERKEY", @"The master key was changed by an external program!")
|
[passwordInputController requestPasswordWithMessage:NSLocalizedString(@"EXTERN_CHANGE_OF_MASTERKEY", @"The master key was changed by an external program!")
|
||||||
cancelLabel:NSLocalizedString(@"ABORT_MERGE_KEEP_MINE", @"Button label to abort a merge on a file with changed master key!")
|
cancelLabel:NSLocalizedString(@"ABORT_MERGE_KEEP_MINE", @"Button label to abort a merge on a file with changed master key!")
|
||||||
completionHandler:^BOOL(KPKCompositeKey *compositeKey, NSURL* keyURL, BOOL didCancel, NSError *__autoreleasing *error) {
|
completionHandler:^BOOL(NSString *password, NSURL *keyURL, BOOL didCancel, NSError *__autoreleasing *error) {
|
||||||
[self.windowForSheet endSheet:sheet returnCode:(didCancel ? NSModalResponseCancel : NSModalResponseOK)];
|
[self.windowForSheet endSheet:sheet returnCode:(didCancel ? NSModalResponseCancel : NSModalResponseOK)];
|
||||||
if(!didCancel) {
|
if(!didCancel) {
|
||||||
|
NSData *keyFileData = keyURL ? [NSData dataWithContentsOfURL:keyURL] : nil;
|
||||||
|
KPKCompositeKey *compositeKey = [[KPKCompositeKey alloc] init];
|
||||||
|
[compositeKey addKey:[KPKKey keyWithPassword:password]];
|
||||||
|
[compositeKey addKey:[KPKKey keyWithKeyFileData:keyFileData]];
|
||||||
[self _mergeWithContentsFromURL:url key:compositeKey options:options];
|
[self _mergeWithContentsFromURL:url key:compositeKey options:options];
|
||||||
}
|
}
|
||||||
// just return yes regardless since we will display the sheet again if needed!
|
// just return yes regardless since we will display the sheet again if needed!
|
||||||
@@ -489,9 +499,13 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGrou
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
- (BOOL)unlockWithPassword:(KPKCompositeKey *)compositeKey keyFileURL:(NSURL *)keyFileURL error:(NSError *__autoreleasing*)error{
|
- (BOOL)unlockWithPassword:(NSString *)password keyFileURL:(NSURL *)keyFileURL error:(NSError *__autoreleasing*)error {
|
||||||
// TODO: Make this API asynchronous
|
// TODO: Make this API asynchronous
|
||||||
self.compositeKey = compositeKey;
|
NSData *keyFileData = keyFileURL ? [NSData dataWithContentsOfURL:keyFileURL] : nil;
|
||||||
|
|
||||||
|
self.compositeKey = [[KPKCompositeKey alloc] init];
|
||||||
|
[self.compositeKey addKey:[KPKKey keyWithPassword:password]];
|
||||||
|
[self.compositeKey addKey:[KPKKey keyWithKeyFileData:keyFileData]];
|
||||||
self.tree = [[KPKTree alloc] initWithData:self.encryptedData key:self.compositeKey error:error];
|
self.tree = [[KPKTree alloc] initWithData:self.encryptedData key:self.compositeKey error:error];
|
||||||
|
|
||||||
BOOL isUnlocked = (nil != self.tree);
|
BOOL isUnlocked = (nil != self.tree);
|
||||||
@@ -960,18 +974,12 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGrou
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (void)_storeKeyURL:(NSURL *)keyURL {
|
- (void)_storeKeyURL:(NSURL *)keyURL {
|
||||||
if(self.isDraft) {
|
|
||||||
// we cannot store key files for draft documents
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
NSMutableDictionary *keysForFiles = [[NSUserDefaults.standardUserDefaults dictionaryForKey:kMPSettingsKeyRememeberdKeysForDatabases] mutableCopy];
|
NSMutableDictionary *keysForFiles = [[NSUserDefaults.standardUserDefaults dictionaryForKey:kMPSettingsKeyRememeberdKeysForDatabases] mutableCopy];
|
||||||
MPAppDelegate *delegate = (MPAppDelegate *)[NSApp delegate];
|
MPAppDelegate *delegate = (MPAppDelegate *)[NSApp delegate];
|
||||||
if(!delegate.isAllowedToStoreKeyFile || nil == keyURL) {
|
if(!delegate.isAllowedToStoreKeyFile || nil == keyURL) {
|
||||||
/* user has removed the keyfile or we should not safe it so remove it */
|
/* user has removed the keyfile or we should not safe it so remove it */
|
||||||
if(self.fileURL) {
|
|
||||||
[keysForFiles removeObjectForKey:self.fileURL.path.sha1HexDigest];
|
[keysForFiles removeObjectForKey:self.fileURL.path.sha1HexDigest];
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else if([self.compositeKey hasKeyOfClass:KPKPasswordKey.class] && [self.compositeKey hasKeyOfClass:KPKFileKey.class]) {
|
else if([self.compositeKey hasKeyOfClass:KPKPasswordKey.class] && [self.compositeKey hasKeyOfClass:KPKFileKey.class]) {
|
||||||
if(nil == keysForFiles) {
|
if(nil == keysForFiles) {
|
||||||
keysForFiles = [[NSMutableDictionary alloc] initWithCapacity:1];
|
keysForFiles = [[NSMutableDictionary alloc] initWithCapacity:1];
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
@property (readonly, strong) MPInspectorViewController *inspectorViewController;
|
@property (readonly, strong) MPInspectorViewController *inspectorViewController;
|
||||||
|
|
||||||
- (void)registerNotificationsForDocument:(MPDocument *)document;
|
- (void)registerNotificationsForDocument:(MPDocument *)document;
|
||||||
- (IBAction)toggleInspector:(nullable id)sender;
|
- (IBAction)toggleInspector:(id)sender;
|
||||||
- (void)showOutline;
|
- (void)showOutline;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -106,4 +106,24 @@
|
|||||||
[NSUserDefaults.standardUserDefaults setBool:!inspector.collapsed forKey:kMPSettingsKeyShowInspector];
|
[NSUserDefaults.standardUserDefaults setBool:!inspector.collapsed forKey:kMPSettingsKeyShowInspector];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (id)supplementalTargetForAction:(SEL)action sender:(id)sender {
|
||||||
|
// NSLog(@"Looking for target for action:%@", NSStringFromSelector(action));
|
||||||
|
for(NSViewController *childViewController in self.childViewControllers) {
|
||||||
|
if([childViewController respondsToSelector:action]) {
|
||||||
|
// NSLog(@"Found target:%@ for action:%@", childViewController, NSStringFromSelector(action));
|
||||||
|
return childViewController;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
id target = [childViewController supplementalTargetForAction:action sender:sender];
|
||||||
|
if(!target) {
|
||||||
|
// NSLog(@"No target for action:%@", NSStringFromSelector(action));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// NSLog(@"Found supplemental target:%@ for action:%@", target, NSStringFromSelector(action));
|
||||||
|
return target;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return [super supplementalTargetForAction:action sender:sender];
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -64,19 +64,10 @@
|
|||||||
- (IBAction)delete:(id)sender;
|
- (IBAction)delete:(id)sender;
|
||||||
|
|
||||||
- (IBAction)duplicateEntryWithOptions:(id)sender;
|
- (IBAction)duplicateEntryWithOptions:(id)sender;
|
||||||
- (IBAction)pickExpiryDate:(id)sender;
|
|
||||||
- (IBAction)performAutotypeForEntry:(id)sender;
|
- (IBAction)performAutotypeForEntry:(id)sender;
|
||||||
|
|
||||||
- (IBAction)showGroupInOutline:(id)sender;
|
- (IBAction)showGroupInOutline:(id)sender;
|
||||||
|
|
||||||
/* actions relayed to MPEntryViewController */
|
|
||||||
- (IBAction)copyUsername:(id)sender;
|
|
||||||
- (IBAction)copyPassword:(id)sender;
|
|
||||||
- (IBAction)copyCustomAttribute:(id)sender;
|
|
||||||
- (IBAction)copyAsReference:(id)sender;
|
|
||||||
- (IBAction)copyURL:(id)sender;
|
|
||||||
- (IBAction)openURL:(id)sender;
|
|
||||||
|
|
||||||
#pragma mark Helper
|
#pragma mark Helper
|
||||||
- (IBAction)fixAutotype:(id)sender;
|
- (IBAction)fixAutotype:(id)sender;
|
||||||
|
|
||||||
|
|||||||
@@ -69,7 +69,6 @@ typedef void (^MPPasswordChangedBlock)(BOOL didChangePassword);
|
|||||||
@property (strong) MPPasswordEditWindowController *passwordEditWindowController;
|
@property (strong) MPPasswordEditWindowController *passwordEditWindowController;
|
||||||
@property (strong) MPToolbarDelegate *toolbarDelegate;
|
@property (strong) MPToolbarDelegate *toolbarDelegate;
|
||||||
@property (strong) MPFixAutotypeWindowController *fixAutotypeWindowController;
|
@property (strong) MPFixAutotypeWindowController *fixAutotypeWindowController;
|
||||||
@property (nonatomic, assign) BOOL allowScreenshots;
|
|
||||||
|
|
||||||
//@property (nonatomic, copy) MPPasswordChangedBlock passwordChangedBlock;
|
//@property (nonatomic, copy) MPPasswordChangedBlock passwordChangedBlock;
|
||||||
|
|
||||||
@@ -85,7 +84,6 @@ typedef void (^MPPasswordChangedBlock)(BOOL didChangePassword);
|
|||||||
self = [super initWithWindow:nil];
|
self = [super initWithWindow:nil];
|
||||||
if( self ) {
|
if( self ) {
|
||||||
_firstResponder = nil;
|
_firstResponder = nil;
|
||||||
_allowScreenshots = NO;
|
|
||||||
_toolbarDelegate = [[MPToolbarDelegate alloc] init];
|
_toolbarDelegate = [[MPToolbarDelegate alloc] init];
|
||||||
_splitViewController = [[MPDocumentSplitViewController alloc] init];
|
_splitViewController = [[MPDocumentSplitViewController alloc] init];
|
||||||
_documentWindowDelegate = [[MPDocumentWindowDelegate alloc] init];
|
_documentWindowDelegate = [[MPDocumentWindowDelegate alloc] init];
|
||||||
@@ -97,21 +95,11 @@ typedef void (^MPPasswordChangedBlock)(BOOL didChangePassword);
|
|||||||
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark Properties
|
|
||||||
|
|
||||||
- (void)setAllowScreenshots:(BOOL)allowScreenshots {
|
|
||||||
if (_allowScreenshots != allowScreenshots) {
|
|
||||||
_allowScreenshots = allowScreenshots;
|
|
||||||
}
|
|
||||||
self.window.sharingType = _allowScreenshots ? NSWindowSharingReadOnly : NSWindowSharingNone;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma mark View Handling
|
#pragma mark View Handling
|
||||||
- (void)windowDidLoad {
|
- (void)windowDidLoad {
|
||||||
[super windowDidLoad];
|
[super windowDidLoad];
|
||||||
|
|
||||||
self.window.delegate = self.documentWindowDelegate;
|
self.window.delegate = self.documentWindowDelegate;
|
||||||
|
|
||||||
if (@available(macOS 11.0, *)) {
|
if (@available(macOS 11.0, *)) {
|
||||||
/* let the user decide how to dipsplay the toolbar */
|
/* let the user decide how to dipsplay the toolbar */
|
||||||
BOOL useUnifiedToolbar = [NSUserDefaults.standardUserDefaults boolForKey:kMPSettingsKeyUseUnifiedToolbar];
|
BOOL useUnifiedToolbar = [NSUserDefaults.standardUserDefaults boolForKey:kMPSettingsKeyUseUnifiedToolbar];
|
||||||
@@ -137,13 +125,6 @@ typedef void (^MPPasswordChangedBlock)(BOOL didChangePassword);
|
|||||||
[self.splitViewController registerNotificationsForDocument:document];
|
[self.splitViewController registerNotificationsForDocument:document];
|
||||||
[self.toolbarDelegate registerNotificationsForDocument:document];
|
[self.toolbarDelegate registerNotificationsForDocument:document];
|
||||||
|
|
||||||
// init the value then bind to settings
|
|
||||||
self.allowScreenshots = [NSUserDefaults.standardUserDefaults boolForKey:kMPSettingsKeyAllowScreenshots];
|
|
||||||
[self bind:NSStringFromSelector(@selector(allowScreenshots))
|
|
||||||
toObject:NSUserDefaultsController.sharedUserDefaultsController
|
|
||||||
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyAllowScreenshots]
|
|
||||||
options:nil];
|
|
||||||
|
|
||||||
self.toolbar = [[NSToolbar alloc] initWithIdentifier:@"MainWindowToolbar"];
|
self.toolbar = [[NSToolbar alloc] initWithIdentifier:@"MainWindowToolbar"];
|
||||||
self.toolbar.autosavesConfiguration = YES;
|
self.toolbar.autosavesConfiguration = YES;
|
||||||
self.toolbar.allowsUserCustomization = YES;
|
self.toolbar.allowsUserCustomization = YES;
|
||||||
@@ -356,11 +337,12 @@ typedef void (^MPPasswordChangedBlock)(BOOL didChangePassword);
|
|||||||
self.passwordInputController = [[MPPasswordInputController alloc] init];
|
self.passwordInputController = [[MPPasswordInputController alloc] init];
|
||||||
}
|
}
|
||||||
self.contentViewController = self.passwordInputController;
|
self.contentViewController = self.passwordInputController;
|
||||||
[self.passwordInputController requestPasswordWithMessage:message cancelLabel:nil completionHandler:^BOOL(KPKCompositeKey* compositeKey, NSURL* keyURL, BOOL didCancel, NSError *__autoreleasing *error) {
|
[self.passwordInputController requestPasswordWithMessage:message cancelLabel:nil completionHandler:^BOOL(NSString *password, NSURL *keyURL, BOOL didCancel, NSError *__autoreleasing *error) {
|
||||||
if(didCancel) {
|
if(didCancel) {
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
return [((MPDocument *)self.document) unlockWithPassword:compositeKey keyFileURL:keyURL error:error ];
|
return [((MPDocument *)self.document) unlockWithPassword:password keyFileURL:keyURL error:error];
|
||||||
|
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -459,16 +441,6 @@ typedef void (^MPPasswordChangedBlock)(BOOL didChangePassword);
|
|||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)pickExpiryDate:(id)sender {
|
|
||||||
// FIXME: use propert responder chain
|
|
||||||
[self.splitViewController.inspectorViewController pickExpiryDate:sender];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)showPluginData:(id)sender {
|
|
||||||
// FIXME: use propert responder chain
|
|
||||||
[self.splitViewController.inspectorViewController showPluginData:sender];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)toggleInspector:(id)sender {
|
- (void)toggleInspector:(id)sender {
|
||||||
[self.splitViewController toggleInspector:sender];
|
[self.splitViewController toggleInspector:sender];
|
||||||
}
|
}
|
||||||
@@ -515,32 +487,6 @@ typedef void (^MPPasswordChangedBlock)(BOOL didChangePassword);
|
|||||||
[self.splitViewController.outlineViewController selectGroup:targetEntries.lastObject.parent];
|
[self.splitViewController.outlineViewController selectGroup:targetEntries.lastObject.parent];
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark -
|
|
||||||
#pragma mark Actions forwarded to MPEntryViewController
|
|
||||||
- (void)copyUsername:(id)sender {
|
|
||||||
[self.splitViewController.entryViewController copyUsername:sender];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)copyPassword:(id)sender {
|
|
||||||
[self.splitViewController.entryViewController copyPassword:sender];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)copyCustomAttribute:(id)sender {
|
|
||||||
[self.splitViewController.entryViewController copyCustomAttribute:sender];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)copyAsReference:(id)sender {
|
|
||||||
[self.splitViewController.entryViewController copyAsReference:sender];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)copyURL:(id)sender {
|
|
||||||
[self.splitViewController.entryViewController copyURL:sender];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)openURL:(id)sender {
|
|
||||||
[self.splitViewController.entryViewController openURL:sender];
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma mark Validation
|
#pragma mark Validation
|
||||||
- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
|
- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
|
||||||
return ([self.document validateMenuItem:menuItem]);
|
return ([self.document validateMenuItem:menuItem]);
|
||||||
|
|||||||
@@ -17,16 +17,18 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
/// View controller to show and edit KPKAttributes of KPKEntries.
|
/// View controller to show and edit KPKAttributes of KPKEntries.
|
||||||
/// Set the represented object to the KPKAttribute the editor shoudl show/edit
|
/// Set the represented object to the KPKAttribute the editor shoudl show/edit
|
||||||
/// The editor can be set to edit or view
|
/// The editor can be set to edit or view
|
||||||
@interface MPEntryAttributeViewController : NSViewController <MPInspectorEditor, HNHUITextFieldDelegate>
|
@interface MPEntryAttributeViewController : NSViewController <MPAttributeInspectorEditor, HNHUITextFieldDelegate>
|
||||||
|
|
||||||
@property (strong) IBOutlet NSTextField *keyTextField;
|
@property (strong) IBOutlet NSTextField *keyTextField;
|
||||||
@property (strong) IBOutlet HNHUISecureTextField *valueTextField;
|
@property (strong) IBOutlet HNHUISecureTextField *valueTextField;
|
||||||
|
@property (strong) IBOutlet NSButton *generatePasswordButton;
|
||||||
@property (strong) IBOutlet NSButton *toggleProtectedButton;
|
@property (strong) IBOutlet NSButton *toggleProtectedButton;
|
||||||
@property (strong) IBOutlet NSButton *removeButton;
|
@property (strong) IBOutlet NSButton *removeButton;
|
||||||
|
@property (strong) IBOutlet NSButton *actionButton;
|
||||||
|
@property SEL attributeSelector; // set this if the editor is bound to a default attributes
|
||||||
|
|
||||||
- (void)updateValues;
|
- (void)updateValuesAndEditing;
|
||||||
- (void)updateEditing;
|
- (void)performCopyForText:(NSString *)text;
|
||||||
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
|||||||
@@ -10,11 +10,25 @@
|
|||||||
#import <HNHUi/HNHUi.h>
|
#import <HNHUi/HNHUi.h>
|
||||||
#import <KeePassKit/KeePassKit.h>
|
#import <KeePassKit/KeePassKit.h>
|
||||||
#import "MPPasteBoardController.h"
|
#import "MPPasteBoardController.h"
|
||||||
|
#import "MPInspectorEditorView.h"
|
||||||
|
|
||||||
@interface MPEntryAttributeViewController () {
|
NSString *nameForDefaultKey(NSString *key) {
|
||||||
BOOL _isDefaultAttribute;
|
static NSDictionary *mapping;
|
||||||
|
static dispatch_once_t onceToken;
|
||||||
|
dispatch_once(&onceToken, ^{
|
||||||
|
mapping = @{ kKPKTitleKey: NSLocalizedString(@"TITTLE_ATTRIBUTE_KEY", @"Localized name for title attribute"),
|
||||||
|
kKPKUsernameKey: NSLocalizedString(@"USERNAME_ATTRIBUTE_KEY", @"Localized name for username attribute"),
|
||||||
|
kKPKPasswordKey: NSLocalizedString(@"PASSWORD_ATTRIBUTE_KEY", @"Localized name for password attribute"),
|
||||||
|
kKPKURLKey: NSLocalizedString(@"URL_ATTRIBUTE_KEY", @"Localized name for URL attribute") };
|
||||||
|
});
|
||||||
|
return mapping[key];
|
||||||
}
|
}
|
||||||
@property (readonly, nullable, strong) KPKAttribute *representedAttribute;
|
|
||||||
|
|
||||||
|
@interface MPEntryAttributeViewController ()
|
||||||
|
|
||||||
|
@property (nonatomic, readonly, getter=isDefaultAttributeEditor) BOOL defaultAttributeEditor;
|
||||||
|
@property (nonatomic, readonly, getter=isPasswordAttributeEditor) BOOL passwordAttributeEditor;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@@ -26,37 +40,71 @@
|
|||||||
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
|
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
|
||||||
if(self) {
|
if(self) {
|
||||||
_isEditor = NO;
|
_isEditor = NO;
|
||||||
_isDefaultAttribute = NO;
|
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (instancetype)initWithCoder:(NSCoder *)coder {
|
- (instancetype)initWithCoder:(NSCoder *)coder {
|
||||||
self = [super initWithCoder:coder];
|
self = [super initWithCoder:coder];
|
||||||
// set editor to false?
|
if(self) {
|
||||||
|
_isEditor = NO;
|
||||||
|
NSString *selectorString = [coder decodeObjectOfClass:NSString.class forKey:NSStringFromSelector(@selector(attributeSelector))];
|
||||||
|
if(selectorString) {
|
||||||
|
self.attributeSelector = NSSelectorFromString(selectorString);
|
||||||
|
}
|
||||||
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)encodeWithCoder:(NSCoder *)coder {
|
||||||
|
[super encodeWithCoder:coder];
|
||||||
|
// editor state will be set to NO after decoding
|
||||||
|
[coder encodeObject:NSStringFromSelector(self.attributeSelector) forKey:NSStringFromSelector(@selector(attributeSelector))];
|
||||||
|
}
|
||||||
|
|
||||||
- (void)viewDidLoad {
|
- (void)viewDidLoad {
|
||||||
[super viewDidLoad];
|
[super viewDidLoad];
|
||||||
NSString *placeHolder = NSLocalizedString(@"NONE", "Placeholder text for input fields if no entry or group is selected");
|
|
||||||
self.keyTextField.placeholderString = placeHolder;
|
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(_didEnterMouse:) name:MPInspectorEditorViewMouseEnteredNotification object:self.view];
|
||||||
self.valueTextField.placeholderString = placeHolder;
|
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(_didExitMouse:) name:MPInspectorEditorViewMouseExitedNotification object:self.view];
|
||||||
|
|
||||||
self.toggleProtectedButton.action = @selector(toggleDisplay:);
|
self.toggleProtectedButton.action = @selector(toggleDisplay:);
|
||||||
self.toggleProtectedButton.target = self.valueTextField;
|
self.toggleProtectedButton.target = self.valueTextField;
|
||||||
|
|
||||||
[self updateValues];
|
self.actionButton.action = @selector(_copyText:);
|
||||||
[self updateEditing];
|
self.actionButton.target = self;
|
||||||
|
self.actionButton.hidden = YES;
|
||||||
|
self.actionButton.title = NSLocalizedString(@"COPY", "Button title for copying an attribute value");
|
||||||
|
|
||||||
__weak MPEntryAttributeViewController *welf = self;
|
NSDictionary *bindingOptions = @{ NSNullPlaceholderBindingOption : NSLocalizedString(@"NONE", "Placeholder text for input fields if no entry or group is selected"),
|
||||||
self.valueTextField.buttonTitle = NSLocalizedString(@"COPY", "Button to copy the value of an Attribute");
|
NSConditionallySetsHiddenBindingOption : @(NO),
|
||||||
self.valueTextField.buttonActionBlock = ^void(NSTextField *tf) {
|
NSConditionallySetsEnabledBindingOption : @(NO),
|
||||||
NSText *text = [welf.view.window fieldEditor:NO forObject:welf.valueTextField];
|
NSConditionallySetsEditableBindingOption : @(NO) };
|
||||||
if([text isKindOfClass:NSTextView.class]) {
|
|
||||||
[welf textField:welf.valueTextField textView:(NSTextView *)text performAction:@selector(copy:)];
|
|
||||||
|
NSString *valueKeyPath = [NSString stringWithFormat:@"%@.%@", NSStringFromSelector(@selector(representedObject)), NSStringFromSelector(@selector(value))];
|
||||||
|
if(self.isDefaultAttributeEditor) {
|
||||||
|
valueKeyPath = [NSString stringWithFormat:@"%@.%@.%@", NSStringFromSelector(@selector(representedObject)),NSStringFromSelector(@selector(entry)), NSStringFromSelector(self.attributeSelector)];
|
||||||
}
|
}
|
||||||
};
|
[self.valueTextField bind:NSValueBinding
|
||||||
|
toObject:self
|
||||||
|
withKeyPath:valueKeyPath
|
||||||
|
options:bindingOptions];
|
||||||
|
|
||||||
|
if(!self.isDefaultAttributeEditor) {
|
||||||
|
NSString *keyKeyPath = [NSString stringWithFormat:@"%@.%@", NSStringFromSelector(@selector(representedObject)), NSStringFromSelector(@selector(key))];
|
||||||
|
[self.keyTextField bind:NSValueBinding
|
||||||
|
toObject:self
|
||||||
|
withKeyPath:keyKeyPath
|
||||||
|
options:bindingOptions];
|
||||||
|
}
|
||||||
|
if(self.isPasswordAttributeEditor) {
|
||||||
|
self.toggleProtectedButton.image = [NSImage imageNamed:NSImageNameQuickLookTemplate];
|
||||||
|
NSFont *font = [NSFont fontWithName:@"Menlo-Regular" size:13.0];
|
||||||
|
self.valueTextField.font = font;
|
||||||
|
// TODO: setup pretty password value transformer
|
||||||
|
}
|
||||||
|
[self updateValuesAndEditing];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (KPKAttribute *)representedAttribute {
|
- (KPKAttribute *)representedAttribute {
|
||||||
@@ -66,30 +114,50 @@
|
|||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (BOOL)isDefaultAttributeEditor {
|
||||||
|
return (self.attributeSelector != NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)isPasswordAttributeEditor {
|
||||||
|
return self.attributeSelector == @selector(password);
|
||||||
|
}
|
||||||
|
|
||||||
- (void)setIsEditor:(BOOL)isEditor {
|
- (void)setIsEditor:(BOOL)isEditor {
|
||||||
_isEditor = isEditor;
|
_isEditor = isEditor;
|
||||||
[self updateEditing];
|
[self updateValuesAndEditing];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setRepresentedObject:(id)representedObject {
|
- (void)setRepresentedObject:(id)representedObject {
|
||||||
if(self.representedAttribute) {
|
if(self.representedAttribute) {
|
||||||
[NSNotificationCenter.defaultCenter removeObserver:self name:KPKWillChangeAttributeNotification object:self.representedObject];
|
[NSNotificationCenter.defaultCenter removeObserver:self
|
||||||
[NSNotificationCenter.defaultCenter removeObserver:self name:KPKDidChangeAttributeNotification object:self.representedObject];
|
name:KPKDidChangeAttributeNotification
|
||||||
|
object:self.representedObject];
|
||||||
}
|
}
|
||||||
super.representedObject = representedObject;
|
super.representedObject = representedObject;
|
||||||
if(self.representedAttribute) {
|
if(self.representedAttribute) {
|
||||||
[NSNotificationCenter.defaultCenter addObserver:self
|
|
||||||
selector:(@selector(_willChangeAttribute:))
|
|
||||||
name:KPKWillChangeAttributeNotification
|
|
||||||
object:self.representedAttribute];
|
|
||||||
[NSNotificationCenter.defaultCenter addObserver:self
|
[NSNotificationCenter.defaultCenter addObserver:self
|
||||||
selector:(@selector(_didChangeAttribute:))
|
selector:(@selector(_didChangeAttribute:))
|
||||||
name:KPKDidChangeAttributeNotification
|
name:KPKDidChangeAttributeNotification
|
||||||
object:self.representedAttribute];
|
object:self.representedAttribute];
|
||||||
|
|
||||||
}
|
}
|
||||||
_isDefaultAttribute = self.representedAttribute.isDefault;
|
// bind with read-only setup and value transformer for names?
|
||||||
[self updateValues];
|
if(self.isDefaultAttributeEditor) {
|
||||||
|
[self.keyTextField unbind:NSValueBinding];
|
||||||
|
NSString *localizedKey = nameForDefaultKey(self.representedAttribute.key);
|
||||||
|
if(localizedKey) {
|
||||||
|
self.keyTextField.stringValue = localizedKey;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
self.keyTextField.stringValue = self.representedAttribute.key ? self.representedAttribute.key : @"";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[self updateValuesAndEditing];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)_copyText:(id)sender {
|
||||||
|
[self performCopyForText:self.valueTextField.stringValue];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)textField:(NSTextField *)textField textView:(NSTextView *)textView performAction:(SEL)action {
|
- (BOOL)textField:(NSTextField *)textField textView:(NSTextView *)textView performAction:(SEL)action {
|
||||||
@@ -98,7 +166,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Only copy action
|
// Only copy action
|
||||||
MPPasteboardOverlayInfoType info = MPPasteboardOverlayInfoCustom;
|
|
||||||
NSMutableString *selectedValue = [[NSMutableString alloc] init];
|
NSMutableString *selectedValue = [[NSMutableString alloc] init];
|
||||||
for(NSValue *rangeValue in textView.selectedRanges) {
|
for(NSValue *rangeValue in textView.selectedRanges) {
|
||||||
[selectedValue appendString:[textView.string substringWithRange:rangeValue.rangeValue]];
|
[selectedValue appendString:[textView.string substringWithRange:rangeValue.rangeValue]];
|
||||||
@@ -106,14 +174,21 @@
|
|||||||
if(selectedValue.length == 0) {
|
if(selectedValue.length == 0) {
|
||||||
[selectedValue setString:textField.stringValue];
|
[selectedValue setString:textField.stringValue];
|
||||||
}
|
}
|
||||||
|
[self performCopyForText:selectedValue];
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)performCopyForText:(NSString *)text {
|
||||||
|
|
||||||
|
MPPasteboardOverlayInfoType info = MPPasteboardOverlayInfoCustom;
|
||||||
NSString *name = @"";
|
NSString *name = @"";
|
||||||
|
|
||||||
if([self.representedAttribute.key isEqual:kKPKUsernameKey]) {
|
if([self.representedAttribute.key isEqual:kKPKUsernameKey]) {
|
||||||
info = MPPasteboardOverlayInfoUsername;
|
info = MPPasteboardOverlayInfoUsername;
|
||||||
}
|
}
|
||||||
/*else if([self.representedAttribute.key isEqual:kKPKPasswordKey]) {
|
else if([self.representedAttribute.key isEqual:kKPKPasswordKey]) {
|
||||||
info = MPPasteboardOverlayInfoPassword;
|
info = MPPasteboardOverlayInfoPassword;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
else if([self.representedAttribute.key isEqual:kKPKURLKey]) {
|
else if([self.representedAttribute.key isEqual:kKPKURLKey]) {
|
||||||
info = MPPasteboardOverlayInfoURL;
|
info = MPPasteboardOverlayInfoURL;
|
||||||
}
|
}
|
||||||
@@ -123,33 +198,55 @@
|
|||||||
else {
|
else {
|
||||||
name = self.representedAttribute.key;
|
name = self.representedAttribute.key;
|
||||||
}
|
}
|
||||||
[MPPasteBoardController.defaultController copyObject:selectedValue overlayInfo:info name:name atView:self.view];
|
[MPPasteBoardController.defaultController copyObject:text overlayInfo:info name:name atView:self.view];
|
||||||
return NO;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
- (void)_willChangeAttribute:(NSNotification *)notification {
|
|
||||||
// nothing to d
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)_didChangeAttribute:(NSNotification *)notification {
|
- (void)_didChangeAttribute:(NSNotification *)notification {
|
||||||
[self updateValues];
|
[self updateValuesAndEditing];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)updateValues {
|
- (void)updateValuesAndEditing {
|
||||||
self.view.hidden = (!self.isEditor && self.representedAttribute.value.length == 0);
|
// values
|
||||||
self.keyTextField.stringValue = self.representedAttribute.key ? self.representedAttribute.key : @"";
|
self.view.hidden = self.isEditor ? NO : self.representedAttribute.value.length == 0;
|
||||||
self.valueTextField.stringValue = self.representedAttribute.value ? self.representedAttribute.value : @"";
|
|
||||||
self.valueTextField.showPassword = !self.representedAttribute.protect;
|
self.valueTextField.showPassword = !self.representedAttribute.protect;
|
||||||
}
|
|
||||||
|
|
||||||
- (void)updateEditing {
|
// editor
|
||||||
self.keyTextField.editable = !_isDefaultAttribute && self.isEditor;
|
self.keyTextField.editable = !self.isDefaultAttributeEditor && self.isEditor;
|
||||||
self.valueTextField.editable = self.isEditor;
|
self.valueTextField.editable = self.isEditor;
|
||||||
self.keyTextField.selectable = YES;
|
self.keyTextField.selectable = YES;
|
||||||
self.valueTextField.selectable = YES;
|
self.valueTextField.selectable = YES;
|
||||||
self.toggleProtectedButton.hidden = _isDefaultAttribute;
|
self.toggleProtectedButton.hidden = self.isDefaultAttributeEditor ? !self.isPasswordAttributeEditor : NO;
|
||||||
self.removeButton.hidden = !self.isEditor || (self.isEditor && !_isDefaultAttribute);
|
self.generatePasswordButton.hidden = self.isEditor ? !self.isPasswordAttributeEditor : YES;
|
||||||
|
|
||||||
|
self.removeButton.hidden = !self.isEditor ? YES : self.isDefaultAttributeEditor;
|
||||||
|
|
||||||
|
// set draws background first, since bezeld might have side effects
|
||||||
|
self.valueTextField.drawsBackground = self.isEditor;
|
||||||
|
self.valueTextField.bordered = self.isEditor;
|
||||||
|
self.valueTextField.bezeled = self.isEditor;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)_didEnterMouse:(NSNotification *)notification {
|
||||||
|
self.actionButton.hidden = self.isEditor;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)_didExitMouse:(NSNotification *)notification {
|
||||||
|
self.actionButton.hidden = YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)objectDidBeginEditing:(id<NSEditor>)editor {
|
||||||
|
[self.view.window.windowController.document objectDidBeginEditing:editor];
|
||||||
|
[super objectDidBeginEditing:editor];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)objectDidEndEditing:(id<NSEditor>)editor {
|
||||||
|
[self.view.window.windowController.document objectDidEndEditing:editor];
|
||||||
|
[super objectDidEndEditing:editor];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)commitEditingWithDelegate:(nullable id)delegate didCommitSelector:(nullable SEL)didCommitSelector contextInfo:(nullable void *)contextInfo {
|
||||||
|
[super commitEditingWithDelegate:delegate didCommitSelector:didCommitSelector contextInfo:contextInfo];
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -1,13 +1,15 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="18122" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19529" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
<deployment identifier="macosx"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="18122"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19529"/>
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<objects>
|
<objects>
|
||||||
<customObject id="-2" userLabel="File's Owner" customClass="MPEntryAttributeViewController">
|
<customObject id="-2" userLabel="File's Owner" customClass="MPEntryAttributeViewController">
|
||||||
<connections>
|
<connections>
|
||||||
|
<outlet property="actionButton" destination="gab-tS-gBb" id="gvk-hn-Erc"/>
|
||||||
|
<outlet property="generatePasswordButton" destination="5gR-99-IVJ" id="SFB-s9-2CX"/>
|
||||||
<outlet property="keyTextField" destination="m8q-FN-S8D" id="HzJ-cd-ifA"/>
|
<outlet property="keyTextField" destination="m8q-FN-S8D" id="HzJ-cd-ifA"/>
|
||||||
<outlet property="removeButton" destination="Nmx-gC-8rG" id="eRy-l0-u0E"/>
|
<outlet property="removeButton" destination="Nmx-gC-8rG" id="eRy-l0-u0E"/>
|
||||||
<outlet property="toggleProtectedButton" destination="hAk-oD-dCj" id="js9-Hx-ycS"/>
|
<outlet property="toggleProtectedButton" destination="hAk-oD-dCj" id="js9-Hx-ycS"/>
|
||||||
@@ -17,27 +19,27 @@
|
|||||||
</customObject>
|
</customObject>
|
||||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||||
<customView id="Hz6-mo-xeY">
|
<customView id="Hz6-mo-xeY" customClass="MPInspectorEditorView">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="251" height="43"/>
|
<rect key="frame" x="0.0" y="0.0" width="436" height="50"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<stackView distribution="fill" orientation="vertical" alignment="leading" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="No7-P9-4cl">
|
<stackView distribution="fill" orientation="vertical" alignment="leading" spacing="2" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="No7-P9-4cl">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="251" height="43"/>
|
<rect key="frame" x="0.0" y="0.0" width="436" height="50"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<textField horizontalHuggingPriority="249" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="m8q-FN-S8D">
|
<textField horizontalHuggingPriority="249" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="m8q-FN-S8D">
|
||||||
<rect key="frame" x="-2" y="29" width="255" height="14"/>
|
<rect key="frame" x="-2" y="36" width="440" height="14"/>
|
||||||
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="AttributeName" id="MQc-TE-UjE">
|
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="AttributeName" id="MQc-TE-UjE">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<stackView distribution="fill" orientation="horizontal" alignment="top" spacing="5" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="LBt-0e-cUK">
|
<stackView distribution="fill" orientation="horizontal" alignment="centerY" spacing="5" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="LBt-0e-cUK">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="251" height="21"/>
|
<rect key="frame" x="0.0" y="0.0" width="436" height="34"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<textField horizontalHuggingPriority="249" verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="HZM-H4-dB4" customClass="HNHUISecureTextField">
|
<textField horizontalHuggingPriority="249" verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="HZM-H4-dB4" customClass="HNHUISecureTextField">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="181" height="21"/>
|
<rect key="frame" x="0.0" y="7" width="236" height="21"/>
|
||||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" truncatesLastVisibleLine="YES" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" usesSingleLineMode="YES" id="sO3-xr-VwO">
|
<textFieldCell key="cell" lineBreakMode="truncatingTail" truncatesLastVisibleLine="YES" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" usesSingleLineMode="YES" id="sO3-xr-VwO" customClass="HNHUISecureTextFieldCell">
|
||||||
<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="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
@@ -47,29 +49,50 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</textField>
|
</textField>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="hAk-oD-dCj">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="hAk-oD-dCj">
|
||||||
<rect key="frame" x="179" y="-6" width="44" height="32"/>
|
<rect key="frame" x="234" y="0.0" width="44" height="32"/>
|
||||||
<buttonCell key="cell" type="push" bezelStyle="rounded" image="NSLockLockedTemplate" imagePosition="only" alignment="center" alternateImage="NSLockUnlockedTemplate" lineBreakMode="truncatingTail" borderStyle="border" inset="2" id="f80-K9-DO7">
|
<buttonCell key="cell" type="push" bezelStyle="rounded" image="NSLockLockedTemplate" imagePosition="only" alignment="center" alternateImage="NSLockUnlockedTemplate" lineBreakMode="truncatingTail" borderStyle="border" inset="2" id="f80-K9-DO7">
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
</button>
|
</button>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Nmx-gC-8rG">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Nmx-gC-8rG">
|
||||||
<rect key="frame" x="214" y="-6" width="44" height="32"/>
|
<rect key="frame" x="269" y="0.0" width="44" height="32"/>
|
||||||
<buttonCell key="cell" type="push" bezelStyle="rounded" image="NSRemoveTemplate" imagePosition="only" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="179-uk-89S">
|
<buttonCell key="cell" type="push" bezelStyle="rounded" image="NSRemoveTemplate" imagePosition="only" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="179-uk-89S">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
</button>
|
</button>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="5gR-99-IVJ">
|
||||||
|
<rect key="frame" x="304" y="0.0" width="90" height="32"/>
|
||||||
|
<buttonCell key="cell" type="push" title="Generate" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="IwJ-ml-b4v">
|
||||||
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="showPasswordGenerator:" target="-1" id="L0a-eV-dW3"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="gab-tS-gBb">
|
||||||
|
<rect key="frame" x="386" y="2" width="56" height="27"/>
|
||||||
|
<buttonCell key="cell" type="push" title="Copy" bezelStyle="rounded" alignment="center" controlSize="small" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="0GH-rx-Fg4">
|
||||||
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="smallSystem"/>
|
||||||
|
</buttonCell>
|
||||||
|
</button>
|
||||||
</subviews>
|
</subviews>
|
||||||
<visibilityPriorities>
|
<visibilityPriorities>
|
||||||
<integer value="1000"/>
|
<integer value="1000"/>
|
||||||
<integer value="1000"/>
|
<integer value="1000"/>
|
||||||
<integer value="1000"/>
|
<integer value="1000"/>
|
||||||
|
<integer value="1000"/>
|
||||||
|
<integer value="1000"/>
|
||||||
</visibilityPriorities>
|
</visibilityPriorities>
|
||||||
<customSpacing>
|
<customSpacing>
|
||||||
<real value="3.4028234663852886e+38"/>
|
<real value="3.4028234663852886e+38"/>
|
||||||
<real value="3.4028234663852886e+38"/>
|
<real value="3.4028234663852886e+38"/>
|
||||||
<real value="3.4028234663852886e+38"/>
|
<real value="3.4028234663852886e+38"/>
|
||||||
|
<real value="3.4028234663852886e+38"/>
|
||||||
|
<real value="3.4028234663852886e+38"/>
|
||||||
</customSpacing>
|
</customSpacing>
|
||||||
</stackView>
|
</stackView>
|
||||||
</subviews>
|
</subviews>
|
||||||
@@ -89,7 +112,7 @@
|
|||||||
<constraint firstAttribute="bottom" secondItem="No7-P9-4cl" secondAttribute="bottom" id="MX2-as-4EI"/>
|
<constraint firstAttribute="bottom" secondItem="No7-P9-4cl" secondAttribute="bottom" id="MX2-as-4EI"/>
|
||||||
<constraint firstItem="No7-P9-4cl" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" id="mbE-gq-jDF"/>
|
<constraint firstItem="No7-P9-4cl" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" id="mbE-gq-jDF"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<point key="canvasLocation" x="-434.5" y="134"/>
|
<point key="canvasLocation" x="-527" y="134"/>
|
||||||
</customView>
|
</customView>
|
||||||
</objects>
|
</objects>
|
||||||
<resources>
|
<resources>
|
||||||
|
|||||||
@@ -36,14 +36,7 @@
|
|||||||
@property (weak) IBOutlet NSTabView *tabView;
|
@property (weak) IBOutlet NSTabView *tabView;
|
||||||
@property (strong) IBOutlet NSView *generalView;
|
@property (strong) IBOutlet NSView *generalView;
|
||||||
|
|
||||||
@property (weak) IBOutlet NSTextField *titleTextField;
|
//@property (weak) IBOutlet NSTextField *titleTextField;
|
||||||
@property (weak) IBOutlet NSTextField *usernameTextField;
|
|
||||||
@property (weak) IBOutlet NSTextField *URLTextField;
|
|
||||||
@property (weak) IBOutlet HNHUISecureTextField *passwordTextField;
|
|
||||||
@property (weak) IBOutlet NSButton *generatePasswordButton;
|
|
||||||
@property (weak) IBOutlet NSButton *togglePassword;
|
|
||||||
@property (weak) IBOutlet NSButton *pickExpireDateButton;
|
|
||||||
@property (weak) IBOutlet NSButton *expiresCheckButton;
|
|
||||||
@property (weak) IBOutlet NSTokenField *tagsTokenField;
|
@property (weak) IBOutlet NSTokenField *tagsTokenField;
|
||||||
@property (weak) IBOutlet NSTextField *uuidTextField;
|
@property (weak) IBOutlet NSTextField *uuidTextField;
|
||||||
|
|
||||||
@@ -99,4 +92,6 @@
|
|||||||
- (IBAction)toggleQuicklookPreview:(id)sender;
|
- (IBAction)toggleQuicklookPreview:(id)sender;
|
||||||
- (IBAction)toggleExpire:(NSButton*)sender;
|
- (IBAction)toggleExpire:(NSButton*)sender;
|
||||||
|
|
||||||
|
- (IBAction)toggleEdit:(id)sender;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -35,6 +35,7 @@
|
|||||||
#import "MPTOTPSetupViewController.h"
|
#import "MPTOTPSetupViewController.h"
|
||||||
#import "MPEntryAttributeViewController.h"
|
#import "MPEntryAttributeViewController.h"
|
||||||
#import "MPNodeExpirationViewController.h"
|
#import "MPNodeExpirationViewController.h"
|
||||||
|
#import "MPNodeIconViewController.h"
|
||||||
|
|
||||||
#import "MPPrettyPasswordTransformer.h"
|
#import "MPPrettyPasswordTransformer.h"
|
||||||
#import "NSString+MPPasswordCreation.h"
|
#import "NSString+MPPasswordCreation.h"
|
||||||
@@ -61,18 +62,6 @@ typedef NS_ENUM(NSUInteger, MPEntryTab) {
|
|||||||
MPEntryTabAutotype
|
MPEntryTabAutotype
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef NS_ENUM(NSUInteger, MPInpspectorEditorIndex) {
|
|
||||||
MPInpspectorEditorIndexImageEditor,
|
|
||||||
MPInpspectorEditorIndexTitle,
|
|
||||||
MPInpspectorEditorIndexUsername,
|
|
||||||
MPInpspectorEditorIndexPassword,
|
|
||||||
MPInpspectorEditorIndexURL,
|
|
||||||
MPInpspectorEditorIndexExpires,
|
|
||||||
MPInpspectorEditorIndexTags,
|
|
||||||
MPInpspectorEditorIndexDefaultCount
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
@interface NSObject (MPAppKitPrivateAPI)
|
@interface NSObject (MPAppKitPrivateAPI)
|
||||||
- (void)_searchWithGoogleFromMenu:(id)obj;
|
- (void)_searchWithGoogleFromMenu:(id)obj;
|
||||||
@end
|
@end
|
||||||
@@ -89,13 +78,21 @@ typedef NS_ENUM(NSUInteger, MPInpspectorEditorIndex) {
|
|||||||
MPWindowTitleComboBoxDelegate *_windowTitleMenuDelegate;
|
MPWindowTitleComboBoxDelegate *_windowTitleMenuDelegate;
|
||||||
MPTagsTokenFieldDelegate *_tagTokenFieldDelegate;
|
MPTagsTokenFieldDelegate *_tagTokenFieldDelegate;
|
||||||
MPAddCustomFieldContextMenuDelegate *_addCustomFieldContextMenuDelegate;
|
MPAddCustomFieldContextMenuDelegate *_addCustomFieldContextMenuDelegate;
|
||||||
NSMutableArray<NSViewController<MPInspectorEditor> *> *_attributeEditorViewControllers;
|
|
||||||
|
NSMutableArray<NSViewController<MPAttributeInspectorEditor> *> *_customAttributeEditorViewControllers;
|
||||||
}
|
}
|
||||||
|
|
||||||
@property (nonatomic, assign) BOOL showPassword;
|
@property (nonatomic, assign) BOOL showPassword;
|
||||||
@property (nonatomic, assign) MPEntryTab activeTab;
|
@property (nonatomic, assign) MPEntryTab activeTab;
|
||||||
@property (nonatomic, readonly) KPKEntry *representedEntry;
|
@property (nonatomic, readonly) KPKEntry *representedEntry;
|
||||||
@property (strong) MPTOTPViewController *totpViewController;
|
@property (strong) MPTOTPViewController *totpViewController;
|
||||||
|
@property (strong) MPEntryAttributeViewController *titleEditorViewController;
|
||||||
|
@property (strong) MPEntryAttributeViewController *usernameEditorViewController;
|
||||||
|
@property (strong) MPEntryAttributeViewController *passwordEditorViewController;
|
||||||
|
@property (strong) MPEntryAttributeViewController *urlEditorViewController;
|
||||||
|
@property (strong) MPNodeExpirationViewController *expiresEditorViewController;
|
||||||
|
@property (strong) MPNodeIconViewController *iconViewController;
|
||||||
|
|
||||||
|
|
||||||
@property (strong) MPTemporaryFileStorage *quicklookStorage;
|
@property (strong) MPTemporaryFileStorage *quicklookStorage;
|
||||||
|
|
||||||
@@ -126,7 +123,7 @@ typedef NS_ENUM(NSUInteger, MPInpspectorEditorIndex) {
|
|||||||
_customFieldTableDelegate.viewController = self;
|
_customFieldTableDelegate.viewController = self;
|
||||||
_addCustomFieldContextMenuDelegate.viewController = self;
|
_addCustomFieldContextMenuDelegate.viewController = self;
|
||||||
|
|
||||||
_attributeEditorViewControllers = [[NSMutableArray alloc] init];
|
_customAttributeEditorViewControllers = [[NSMutableArray alloc] init];
|
||||||
_activeTab = MPEntryTabGeneral;
|
_activeTab = MPEntryTabGeneral;
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
@@ -143,6 +140,8 @@ typedef NS_ENUM(NSUInteger, MPInpspectorEditorIndex) {
|
|||||||
if(self.representedObject) {
|
if(self.representedObject) {
|
||||||
[NSNotificationCenter.defaultCenter removeObserver:self name:KPKWillChangeEntryNotification object:self.representedEntry];
|
[NSNotificationCenter.defaultCenter removeObserver:self name:KPKWillChangeEntryNotification object:self.representedEntry];
|
||||||
[NSNotificationCenter.defaultCenter removeObserver:self name:KPKDidChangeEntryNotification object:self.representedEntry];
|
[NSNotificationCenter.defaultCenter removeObserver:self name:KPKDidChangeEntryNotification object:self.representedEntry];
|
||||||
|
[NSNotificationCenter.defaultCenter removeObserver:self name:KPKWillAddAttributeNotification object:self.representedEntry];
|
||||||
|
[NSNotificationCenter.defaultCenter removeObserver:self name:KPKDidAddAttributeNotification object:self.representedEntry];
|
||||||
}
|
}
|
||||||
super.representedObject = representedObject;
|
super.representedObject = representedObject;
|
||||||
|
|
||||||
@@ -152,6 +151,8 @@ typedef NS_ENUM(NSUInteger, MPInpspectorEditorIndex) {
|
|||||||
if(self.representedEntry) {
|
if(self.representedEntry) {
|
||||||
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(_willChangeEntry:) name:KPKWillChangeEntryNotification object:self.representedEntry];
|
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(_willChangeEntry:) name:KPKWillChangeEntryNotification object:self.representedEntry];
|
||||||
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(_didChangeEntry:) name:KPKDidChangeEntryNotification object:self.representedEntry];
|
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(_didChangeEntry:) name:KPKDidChangeEntryNotification object:self.representedEntry];
|
||||||
|
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(_willAddAttribute:) name:KPKWillAddAttributeNotification object:self.representedEntry];
|
||||||
|
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(_didAddAttribute:) name:KPKDidAddAttributeNotification object:self.representedEntry];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -207,8 +208,8 @@ typedef NS_ENUM(NSUInteger, MPInpspectorEditorIndex) {
|
|||||||
|
|
||||||
self.windowTitleComboBox.delegate = _windowTitleMenuDelegate;
|
self.windowTitleComboBox.delegate = _windowTitleMenuDelegate;
|
||||||
|
|
||||||
[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.togglePassword bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(showPassword)) options:nil];
|
//[self.togglePassword bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(showPassword)) options:nil];
|
||||||
|
|
||||||
self.tagsTokenField.delegate = _tagTokenFieldDelegate;
|
self.tagsTokenField.delegate = _tagTokenFieldDelegate;
|
||||||
|
|
||||||
@@ -334,6 +335,17 @@ typedef NS_ENUM(NSUInteger, MPInpspectorEditorIndex) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)toggleEdit:(id)sender {
|
||||||
|
// commit changes in editors!
|
||||||
|
self.titleEditorViewController.isEditor = !self.titleEditorViewController.isEditor;
|
||||||
|
self.usernameEditorViewController.isEditor = !self.usernameEditorViewController.isEditor;
|
||||||
|
self.passwordEditorViewController.isEditor = !self.passwordEditorViewController.isEditor;
|
||||||
|
self.urlEditorViewController.isEditor = !self.urlEditorViewController.isEditor;
|
||||||
|
self.expiresEditorViewController.isEditor = !self.expiresEditorViewController.isEditor;
|
||||||
|
self.iconViewController.isEditor = !self.iconViewController.isEditor;
|
||||||
|
//self.totpViewController.isEditor = !self.totpViewController.isEditor;
|
||||||
|
}
|
||||||
|
|
||||||
- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
|
- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
|
||||||
switch([MPActionHelper typeForAction:menuItem.action]) {
|
switch([MPActionHelper typeForAction:menuItem.action]) {
|
||||||
case MPActionToggleQuicklook: {
|
case MPActionToggleQuicklook: {
|
||||||
@@ -346,6 +358,7 @@ typedef NS_ENUM(NSUInteger, MPInpspectorEditorIndex) {
|
|||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark -
|
#pragma mark -
|
||||||
#pragma mark QLPreviewPanelDelegate
|
#pragma mark QLPreviewPanelDelegate
|
||||||
|
|
||||||
@@ -403,7 +416,7 @@ typedef NS_ENUM(NSUInteger, MPInpspectorEditorIndex) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)showPasswordGenerator:(id)sender {
|
- (IBAction)showPasswordGenerator:(id)sender {
|
||||||
self.generatePasswordButton.enabled = NO;
|
//self.generatePasswordButton.enabled = NO;
|
||||||
MPPasswordCreatorViewController *viewController = [[MPPasswordCreatorViewController alloc] init];
|
MPPasswordCreatorViewController *viewController = [[MPPasswordCreatorViewController alloc] init];
|
||||||
viewController.allowsEntryDefaults = YES;
|
viewController.allowsEntryDefaults = YES;
|
||||||
viewController.representedObject = self.representedObject;
|
viewController.representedObject = self.representedObject;
|
||||||
@@ -433,7 +446,7 @@ typedef NS_ENUM(NSUInteger, MPInpspectorEditorIndex) {
|
|||||||
self.showCustomEntrySequenceAutotypeBuilderButton.enabled = YES;
|
self.showCustomEntrySequenceAutotypeBuilderButton.enabled = YES;
|
||||||
}
|
}
|
||||||
else if([viewController isKindOfClass:MPPasswordCreatorViewController.class]) {
|
else if([viewController isKindOfClass:MPPasswordCreatorViewController.class]) {
|
||||||
self.generatePasswordButton.enabled = YES;
|
//self.generatePasswordButton.enabled = YES;
|
||||||
}
|
}
|
||||||
[super dismissViewController:viewController];
|
[super dismissViewController:viewController];
|
||||||
}
|
}
|
||||||
@@ -497,13 +510,8 @@ typedef NS_ENUM(NSUInteger, MPInpspectorEditorIndex) {
|
|||||||
|
|
||||||
- (void)_setupViewBindings {
|
- (void)_setupViewBindings {
|
||||||
/* Disable for history view */
|
/* Disable for history view */
|
||||||
NSArray *inputs = @[self.titleTextField,
|
NSArray *inputs = @[
|
||||||
self.passwordTextField,
|
|
||||||
self.usernameTextField,
|
|
||||||
self.URLTextField,
|
|
||||||
self.expiresCheckButton,
|
|
||||||
self.tagsTokenField,
|
self.tagsTokenField,
|
||||||
self.generatePasswordButton,
|
|
||||||
self.addAttachmentButton,
|
self.addAttachmentButton,
|
||||||
self.addCustomFieldButton,
|
self.addCustomFieldButton,
|
||||||
self.addWindowAssociationButton,
|
self.addWindowAssociationButton,
|
||||||
@@ -525,35 +533,6 @@ typedef NS_ENUM(NSUInteger, MPInpspectorEditorIndex) {
|
|||||||
NSDictionary *nullPlaceholderBindingOptionsDict = @{ NSNullPlaceholderBindingOption: NSLocalizedString(@"NONE", "Placeholder text for input fields if no entry or group is selected")};
|
NSDictionary *nullPlaceholderBindingOptionsDict = @{ NSNullPlaceholderBindingOption: NSLocalizedString(@"NONE", "Placeholder text for input fields if no entry or group is selected")};
|
||||||
NSDictionary *prettyPasswordBindingOptionsDict = @{ NSNullPlaceholderBindingOption: nullPlaceholderBindingOptionsDict[NSNullPlaceholderBindingOption], NSValueTransformerNameBindingOption : MPPrettyPasswordTransformerName };
|
NSDictionary *prettyPasswordBindingOptionsDict = @{ NSNullPlaceholderBindingOption: nullPlaceholderBindingOptionsDict[NSNullPlaceholderBindingOption], NSValueTransformerNameBindingOption : MPPrettyPasswordTransformerName };
|
||||||
|
|
||||||
[self.titleTextField bind:NSValueBinding
|
|
||||||
toObject:self
|
|
||||||
withKeyPath:[NSString stringWithFormat:@"%@.%@", NSStringFromSelector(@selector(representedObject)), NSStringFromSelector(@selector(title))]
|
|
||||||
options:nullPlaceholderBindingOptionsDict];
|
|
||||||
[self.passwordTextField bind:NSValueBinding
|
|
||||||
toObject:self
|
|
||||||
withKeyPath:[NSString stringWithFormat:@"%@.%@", NSStringFromSelector(@selector(representedObject)), NSStringFromSelector(@selector(password))]
|
|
||||||
options:prettyPasswordBindingOptionsDict];
|
|
||||||
|
|
||||||
[self.usernameTextField bind:NSValueBinding
|
|
||||||
toObject:self
|
|
||||||
withKeyPath:[NSString stringWithFormat:@"%@.%@", NSStringFromSelector(@selector(representedObject)), NSStringFromSelector(@selector(username))]
|
|
||||||
options:nullPlaceholderBindingOptionsDict];
|
|
||||||
|
|
||||||
[self.URLTextField bind:NSValueBinding
|
|
||||||
toObject:self
|
|
||||||
withKeyPath:[NSString stringWithFormat:@"%@.%@", NSStringFromSelector(@selector(representedObject)), NSStringFromSelector(@selector(url))]
|
|
||||||
options:nullPlaceholderBindingOptionsDict];
|
|
||||||
|
|
||||||
[self.expiresCheckButton bind:NSTitleBinding
|
|
||||||
toObject:self
|
|
||||||
withKeyPath:[NSString stringWithFormat:@"%@.%@.%@", NSStringFromSelector(@selector(representedObject)), NSStringFromSelector(@selector(timeInfo)), NSStringFromSelector(@selector(expirationDate))]
|
|
||||||
options:@{ NSValueTransformerNameBindingOption:MPExpiryDateValueTransformerName }];
|
|
||||||
|
|
||||||
[self.expiresCheckButton bind:NSValueBinding
|
|
||||||
toObject:self
|
|
||||||
withKeyPath:[NSString stringWithFormat:@"%@.%@.%@", NSStringFromSelector(@selector(representedObject)), NSStringFromSelector(@selector(timeInfo)), NSStringFromSelector(@selector(expires))]
|
|
||||||
options:nil];
|
|
||||||
|
|
||||||
[self.tagsTokenField bind:NSValueBinding
|
[self.tagsTokenField bind:NSValueBinding
|
||||||
toObject:self
|
toObject:self
|
||||||
withKeyPath:[NSString stringWithFormat:@"%@.%@", NSStringFromSelector(@selector(representedObject)), NSStringFromSelector(@selector(tags))]
|
withKeyPath:[NSString stringWithFormat:@"%@.%@", NSStringFromSelector(@selector(representedObject)), NSStringFromSelector(@selector(tags))]
|
||||||
@@ -626,47 +605,79 @@ typedef NS_ENUM(NSUInteger, MPInpspectorEditorIndex) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (void)_setupAttributeEditors {
|
- (void)_setupAttributeEditors {
|
||||||
|
self.iconViewController = [[MPNodeIconViewController alloc] init];
|
||||||
|
[self addChildViewController:self.iconViewController];
|
||||||
|
[self.fieldsStackView addArrangedSubview:self.iconViewController.view];
|
||||||
|
|
||||||
|
self.titleEditorViewController = [[MPEntryAttributeViewController alloc] init];
|
||||||
|
[self addChildViewController:self.titleEditorViewController];
|
||||||
|
self.titleEditorViewController.attributeSelector = @selector(title);
|
||||||
|
[self.fieldsStackView addArrangedSubview:self.titleEditorViewController.view];
|
||||||
|
|
||||||
|
self.usernameEditorViewController = [[MPEntryAttributeViewController alloc] init];
|
||||||
|
[self addChildViewController:self.usernameEditorViewController];
|
||||||
|
self.usernameEditorViewController.attributeSelector = @selector(username);
|
||||||
|
[self.fieldsStackView addArrangedSubview:self.usernameEditorViewController.view];
|
||||||
|
|
||||||
|
self.passwordEditorViewController = [[MPEntryAttributeViewController alloc] init];
|
||||||
|
[self addChildViewController:self.passwordEditorViewController];
|
||||||
|
self.passwordEditorViewController.attributeSelector = @selector(password);
|
||||||
|
[self.fieldsStackView addArrangedSubview:self.passwordEditorViewController.view];
|
||||||
|
|
||||||
|
self.urlEditorViewController = [[MPEntryAttributeViewController alloc] init];
|
||||||
|
[self addChildViewController:self.urlEditorViewController];
|
||||||
|
self.urlEditorViewController.attributeSelector = @selector(url);
|
||||||
|
[self.fieldsStackView addArrangedSubview:self.urlEditorViewController.view];
|
||||||
|
|
||||||
self.totpViewController = [[MPTOTPViewController alloc] init];
|
self.totpViewController = [[MPTOTPViewController alloc] init];
|
||||||
|
|
||||||
NSInteger urlindex = [self.fieldsStackView.arrangedSubviews indexOfObject:self.URLTextField];
|
|
||||||
NSAssert(urlindex != NSNotFound, @"Missing reference view. This should not happen!");
|
|
||||||
[self addChildViewController:self.totpViewController];
|
[self addChildViewController:self.totpViewController];
|
||||||
[self.fieldsStackView insertArrangedSubview:self.totpViewController.view atIndex:urlindex - 1];
|
//self.totpViewController.isEditor = NO;
|
||||||
|
[self.fieldsStackView addArrangedSubview:self.totpViewController.view];
|
||||||
|
|
||||||
/*
|
self.expiresEditorViewController = [[MPNodeExpirationViewController alloc] init];
|
||||||
MPNodeExpirationViewController *vc = [[MPNodeExpirationViewController alloc] init];
|
[self addChildViewController:self.expiresEditorViewController];
|
||||||
vc.isEditor = NO;
|
self.expiresEditorViewController.isEditor = NO;
|
||||||
[_attributeEditorViewControllers addObject:vc];
|
[self.fieldsStackView addArrangedSubview:self.expiresEditorViewController.view];
|
||||||
[self.fieldsStackView addArrangedSubview:vc.view];
|
|
||||||
|
|
||||||
MPEntryAttributeViewController *vc = [[MPEntryAttributeViewController alloc] init];
|
|
||||||
vc.isEditor = NO;
|
|
||||||
[_attributeEditorViewControllers addObject:vc];
|
|
||||||
[self.fieldsStackView addArrangedSubview:vc.view];
|
|
||||||
|
|
||||||
for(NSUInteger index = 0; index < kKPKDefaultEntryKeysCount; index++) {
|
|
||||||
MPEntryAttributeViewController *vc = [[MPEntryAttributeViewController alloc] init];
|
|
||||||
vc.isEditor = NO;
|
|
||||||
[_attributeEditorViewControllers addObject:vc];
|
|
||||||
[self.fieldsStackView addArrangedSubview:vc.view];
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)_updateEditors {
|
- (void)_updateEditors {
|
||||||
|
self.iconViewController.representedObject = self.representedObject;
|
||||||
self.totpViewController.representedObject = self.representedObject;
|
self.totpViewController.representedObject = self.representedObject;
|
||||||
/* Update all the Attribute editors
|
self.expiresEditorViewController.representedObject = self.representedEntry.timeInfo;
|
||||||
_attributeEditorViewControllers[MPInpspectorEditorIndexUsername].representedObject = [self.representedEntry attributeWithKey:kKPKUsernameKey];
|
|
||||||
*/
|
self.titleEditorViewController.representedObject = [self.representedEntry attributeWithKey:kKPKTitleKey];
|
||||||
|
self.usernameEditorViewController.representedObject = [self.representedEntry attributeWithKey:kKPKUsernameKey];
|
||||||
|
self.passwordEditorViewController.representedObject = [self.representedEntry attributeWithKey:kKPKPasswordKey];
|
||||||
|
self.urlEditorViewController.representedObject = [self.representedEntry attributeWithKey:kKPKURLKey];
|
||||||
|
|
||||||
|
// update custom field editors
|
||||||
|
for(NSViewController *vc in _customAttributeEditorViewControllers) {
|
||||||
|
[self.fieldsStackView removeView:vc.view];
|
||||||
|
[vc removeFromParentViewController];
|
||||||
|
}
|
||||||
|
[_customAttributeEditorViewControllers removeAllObjects];
|
||||||
|
for(KPKAttribute *attribute in self.representedEntry.customAttributes) {
|
||||||
|
MPEntryAttributeViewController *vc = [[MPEntryAttributeViewController alloc] init];
|
||||||
|
// FIXME: Correcly set editor starte based on current state
|
||||||
|
vc.isEditor = NO;
|
||||||
|
vc.representedObject = attribute;
|
||||||
|
[self.fieldsStackView addArrangedSubview:vc.view];
|
||||||
|
[self addChildViewController:vc];
|
||||||
|
[_customAttributeEditorViewControllers addObject:vc];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark -
|
#pragma mark -
|
||||||
#pragma mark HNHUITextFieldDelegate
|
#pragma mark HNHUITextFieldDelegate
|
||||||
- (BOOL)textField:(NSTextField *)textField allowServicesForTextView:(NSTextView *)textView {
|
- (BOOL)textField:(NSTextField *)textField allowServicesForTextView:(NSTextView *)textView {
|
||||||
/* disallow servies for password fields */
|
/* disallow servies for password fields */
|
||||||
|
|
||||||
|
/*
|
||||||
|
FIXME: Add to MPEntryPasswordViewController
|
||||||
if(textField == self.passwordTextField) {
|
if(textField == self.passwordTextField) {
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
NSInteger index = MPCustomFieldIndexFromTag(textField.tag);
|
NSInteger index = MPCustomFieldIndexFromTag(textField.tag);
|
||||||
if(index > -1) {
|
if(index > -1) {
|
||||||
KPKAttribute *attribute = _customFieldsController.arrangedObjects[index];
|
KPKAttribute *attribute = _customFieldsController.arrangedObjects[index];
|
||||||
@@ -703,6 +714,7 @@ typedef NS_ENUM(NSUInteger, MPInpspectorEditorIndex) {
|
|||||||
if(selectedValue.length == 0) {
|
if(selectedValue.length == 0) {
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
/* FIXME: Add to AttributeViewController
|
||||||
if(textField == self.usernameTextField) {
|
if(textField == self.usernameTextField) {
|
||||||
info = MPPasteboardOverlayInfoUsername;
|
info = MPPasteboardOverlayInfoUsername;
|
||||||
}
|
}
|
||||||
@@ -712,12 +724,9 @@ typedef NS_ENUM(NSUInteger, MPInpspectorEditorIndex) {
|
|||||||
else if(textField == self.URLTextField) {
|
else if(textField == self.URLTextField) {
|
||||||
info = MPPasteboardOverlayInfoURL;
|
info = MPPasteboardOverlayInfoURL;
|
||||||
}
|
}
|
||||||
else if(textField == self.uuidTextField) {
|
else*/ if(textField == self.uuidTextField) {
|
||||||
name = NSLocalizedString(@"UUID", "Displayed name when uuid field was copied");
|
name = NSLocalizedString(@"UUID", "Displayed name when uuid field was copied");
|
||||||
}
|
}
|
||||||
else if(textField == self.titleTextField) {
|
|
||||||
name = NSLocalizedString(@"TITLE", "Displayed name when title field was copied");
|
|
||||||
}
|
|
||||||
else {
|
else {
|
||||||
NSInteger index = MPCustomFieldIndexFromTag(textField.tag);
|
NSInteger index = MPCustomFieldIndexFromTag(textField.tag);
|
||||||
if(index > -1) {
|
if(index > -1) {
|
||||||
@@ -731,9 +740,13 @@ typedef NS_ENUM(NSUInteger, MPInpspectorEditorIndex) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)toggleExpire:(NSButton*)sender {
|
- (IBAction)toggleExpire:(NSButton*)sender {
|
||||||
|
|
||||||
|
/*
|
||||||
|
FIXME: Add to expiredViewController
|
||||||
if([sender state] == NSOnState && [self.representedEntry.timeInfo.expirationDate isEqualToDate:NSDate.distantFuture]) {
|
if([sender state] == NSOnState && [self.representedEntry.timeInfo.expirationDate isEqualToDate:NSDate.distantFuture]) {
|
||||||
[NSApp sendAction:self.pickExpireDateButton.action to:nil from:self.pickExpireDateButton];
|
[NSApp sendAction:self.pickExpireDateButton.action to:nil from:self.pickExpireDateButton];
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark -
|
#pragma mark -
|
||||||
@@ -741,7 +754,6 @@ typedef NS_ENUM(NSUInteger, MPInpspectorEditorIndex) {
|
|||||||
|
|
||||||
- (void)_didAddEntry:(NSNotification *)notification {
|
- (void)_didAddEntry:(NSNotification *)notification {
|
||||||
[self.tabView selectTabViewItemAtIndex:MPEntryTabGeneral];
|
[self.tabView selectTabViewItemAtIndex:MPEntryTabGeneral];
|
||||||
[self.titleTextField becomeFirstResponder];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)_didChangeCurrentItem:(NSNotification *)notificiation {
|
- (void)_didChangeCurrentItem:(NSNotification *)notificiation {
|
||||||
@@ -767,4 +779,19 @@ typedef NS_ENUM(NSUInteger, MPInpspectorEditorIndex) {
|
|||||||
- (void)_didChangeAttribute:(NSNotification *)notification {
|
- (void)_didChangeAttribute:(NSNotification *)notification {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)_willAddAttribute:(NSNotification *)notification {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)_didAddAttribute:(NSNotification *)notification {
|
||||||
|
// TODO: add attribute editor to stackview
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)_willRemoveAttribute:(NSNotification *)notification {
|
||||||
|
// TODO: remove attribute editor form stackview
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)_didRemoveAttribute:(NSNotification *)notification {
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -1,18 +0,0 @@
|
|||||||
//
|
|
||||||
// MPEntryPasswordAttributeViewController.h
|
|
||||||
// MacPass
|
|
||||||
//
|
|
||||||
// Created by Michael Starke on 18.10.21.
|
|
||||||
// Copyright © 2021 HicknHack Software GmbH. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h>
|
|
||||||
#import "MPEntryAttributeViewController.h"
|
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_BEGIN
|
|
||||||
|
|
||||||
@interface MPEntryPasswordAttributeViewController : MPEntryAttributeViewController
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_END
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
//
|
|
||||||
// MPEntryPasswordAttributeViewController.m
|
|
||||||
// MacPass
|
|
||||||
//
|
|
||||||
// Created by Michael Starke on 18.10.21.
|
|
||||||
// Copyright © 2021 HicknHack Software GmbH. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "MPEntryPasswordAttributeViewController.h"
|
|
||||||
#import <HNHUi/HNHUi.h>
|
|
||||||
#import <KeePassKit/KeePassKit.h>
|
|
||||||
|
|
||||||
@interface MPEntryPasswordAttributeViewController ()
|
|
||||||
|
|
||||||
@property (strong) IBOutlet HNHUISecureTextField *passwordTextField;
|
|
||||||
@property (strong) IBOutlet NSButton *togglePasswordButton;
|
|
||||||
@property (strong) IBOutlet NSButton *generatePasswordButton;
|
|
||||||
|
|
||||||
@property (strong, nullable, readonly) KPKAttribute *representedAttribute;
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
@implementation MPEntryPasswordAttributeViewController
|
|
||||||
|
|
||||||
- (void)updateValues {
|
|
||||||
self.view.hidden = (!self.isEditor && self.representedAttribute.value.length == 0);
|
|
||||||
self.passwordTextField.stringValue = self.representedAttribute.value ? self.representedAttribute.value : @"";
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)updateEditing {
|
|
||||||
self.generatePasswordButton.hidden = !self.isEditor;
|
|
||||||
self.passwordTextField.editable = self.isEditor;
|
|
||||||
self.passwordTextField.selectable = YES;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@end
|
|
||||||
@@ -1,104 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="18122" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
|
||||||
<dependencies>
|
|
||||||
<deployment identifier="macosx"/>
|
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="18122"/>
|
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
|
||||||
</dependencies>
|
|
||||||
<objects>
|
|
||||||
<customObject id="-2" userLabel="File's Owner" customClass="MPEntryPasswordAttributeViewController">
|
|
||||||
<connections>
|
|
||||||
<outlet property="generatePasswordButton" destination="UlI-yI-Sqn" id="sKR-Rd-2LC"/>
|
|
||||||
<outlet property="keyTextField" destination="2aN-Ps-z4K" id="ua7-Km-K5o"/>
|
|
||||||
<outlet property="passwordTextField" destination="tpF-hp-29r" id="2pM-fr-9l0"/>
|
|
||||||
<outlet property="togglePasswordButton" destination="AY0-XE-8S7" id="IwM-pB-tQn"/>
|
|
||||||
<outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
|
|
||||||
</connections>
|
|
||||||
</customObject>
|
|
||||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
|
||||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
|
||||||
<customView id="Hz6-mo-xeY">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="480" height="42"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<subviews>
|
|
||||||
<stackView distribution="fill" orientation="vertical" alignment="leading" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="jTp-ga-xuT">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="480" height="42"/>
|
|
||||||
<subviews>
|
|
||||||
<textField horizontalHuggingPriority="249" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="2aN-Ps-z4K">
|
|
||||||
<rect key="frame" x="-2" y="28" width="484" height="14"/>
|
|
||||||
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Password" id="Piv-zL-dtc">
|
|
||||||
<font key="font" metaFont="smallSystem"/>
|
|
||||||
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<stackView distribution="fill" orientation="horizontal" alignment="centerY" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" horizontalHuggingPriority="249" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="XRh-Fs-reW">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="480" height="20"/>
|
|
||||||
<subviews>
|
|
||||||
<secureTextField horizontalHuggingPriority="249" verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" allowsCharacterPickerTouchBarItem="YES" contentType="oneTimeCode" translatesAutoresizingMaskIntoConstraints="NO" id="tpF-hp-29r" customClass="HNHUISecureTextField">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="352" height="20"/>
|
|
||||||
<secureTextFieldCell key="cell" lineBreakMode="truncatingTail" truncatesLastVisibleLine="YES" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" usesSingleLineMode="YES" id="CeT-F7-Vb3">
|
|
||||||
<font key="font" size="13" name="Menlo-Regular"/>
|
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<allowedInputSourceLocales>
|
|
||||||
<string>NSAllRomanInputSourcesLocaleIdentifier</string>
|
|
||||||
</allowedInputSourceLocales>
|
|
||||||
</secureTextFieldCell>
|
|
||||||
<connections>
|
|
||||||
<outlet property="nextKeyView" destination="AY0-XE-8S7" id="uPk-2E-Bwh"/>
|
|
||||||
</connections>
|
|
||||||
</secureTextField>
|
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="AY0-XE-8S7">
|
|
||||||
<rect key="frame" x="353" y="-7" width="50" height="32"/>
|
|
||||||
<buttonCell key="cell" type="push" bezelStyle="rounded" image="NSQuickLookTemplate" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="NUE-lS-hzr">
|
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
<connections>
|
|
||||||
<outlet property="nextKeyView" destination="UlI-yI-Sqn" id="6uu-J3-TEc"/>
|
|
||||||
</connections>
|
|
||||||
</button>
|
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="UlI-yI-Sqn">
|
|
||||||
<rect key="frame" x="397" y="-7" width="90" height="32"/>
|
|
||||||
<buttonCell key="cell" type="push" title="Generate" bezelStyle="rounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Rx9-ck-eKo">
|
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
</button>
|
|
||||||
</subviews>
|
|
||||||
<visibilityPriorities>
|
|
||||||
<integer value="1000"/>
|
|
||||||
<integer value="1000"/>
|
|
||||||
<integer value="1000"/>
|
|
||||||
</visibilityPriorities>
|
|
||||||
<customSpacing>
|
|
||||||
<real value="3.4028234663852886e+38"/>
|
|
||||||
<real value="3.4028234663852886e+38"/>
|
|
||||||
<real value="3.4028234663852886e+38"/>
|
|
||||||
</customSpacing>
|
|
||||||
</stackView>
|
|
||||||
</subviews>
|
|
||||||
<visibilityPriorities>
|
|
||||||
<integer value="1000"/>
|
|
||||||
<integer value="1000"/>
|
|
||||||
</visibilityPriorities>
|
|
||||||
<customSpacing>
|
|
||||||
<real value="3.4028234663852886e+38"/>
|
|
||||||
<real value="3.4028234663852886e+38"/>
|
|
||||||
</customSpacing>
|
|
||||||
</stackView>
|
|
||||||
</subviews>
|
|
||||||
<constraints>
|
|
||||||
<constraint firstAttribute="trailing" secondItem="jTp-ga-xuT" secondAttribute="trailing" id="8qT-FW-gVh"/>
|
|
||||||
<constraint firstItem="jTp-ga-xuT" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" id="Hla-na-Bw8"/>
|
|
||||||
<constraint firstAttribute="bottom" secondItem="jTp-ga-xuT" secondAttribute="bottom" id="pcp-4W-Bvc"/>
|
|
||||||
<constraint firstItem="jTp-ga-xuT" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" id="wEy-tv-xz0"/>
|
|
||||||
</constraints>
|
|
||||||
<point key="canvasLocation" x="173" y="112"/>
|
|
||||||
</customView>
|
|
||||||
</objects>
|
|
||||||
<resources>
|
|
||||||
<image name="NSQuickLookTemplate" width="21" height="13"/>
|
|
||||||
</resources>
|
|
||||||
</document>
|
|
||||||
@@ -48,7 +48,6 @@ typedef NS_ENUM(NSUInteger, MPDisplayMode) {
|
|||||||
- (IBAction)copyPassword:(id)sender;
|
- (IBAction)copyPassword:(id)sender;
|
||||||
- (IBAction)copyCustomAttribute:(id)sender;
|
- (IBAction)copyCustomAttribute:(id)sender;
|
||||||
- (IBAction)copyURL:(id)sender;
|
- (IBAction)copyURL:(id)sender;
|
||||||
- (IBAction)copyTOTP:(id)sender;
|
|
||||||
- (IBAction)openURL:(id)sender;
|
- (IBAction)openURL:(id)sender;
|
||||||
- (IBAction)copyAsReference:(id)sender;
|
- (IBAction)copyAsReference:(id)sender;
|
||||||
|
|
||||||
|
|||||||
@@ -67,7 +67,6 @@ NSString *const MPEntryTableAttachmentColumnIdentifier = @"MPEntryTableAttachmen
|
|||||||
NSString *const MPEntryTableCreatedColumnIdentifier = @"MPEntryTableCreatedColumnIdentifier";
|
NSString *const MPEntryTableCreatedColumnIdentifier = @"MPEntryTableCreatedColumnIdentifier";
|
||||||
NSString *const MPEntryTableModfiedColumnIdentifier = @"MPEntryTableModfiedColumnIdentifier";
|
NSString *const MPEntryTableModfiedColumnIdentifier = @"MPEntryTableModfiedColumnIdentifier";
|
||||||
NSString *const MPEntryTableHistoryColumnIdentifier = @"MPEntryTableHistoryColumnIdentifier";
|
NSString *const MPEntryTableHistoryColumnIdentifier = @"MPEntryTableHistoryColumnIdentifier";
|
||||||
NSString *const MPEntryTableTOTPColumnIdentifier = @"MPEntryTableTOTPColumnIdentifier";
|
|
||||||
|
|
||||||
NSString *const _MPTableImageCellView = @"ImageCell";
|
NSString *const _MPTableImageCellView = @"ImageCell";
|
||||||
NSString *const _MPTableStringCellView = @"StringCell";
|
NSString *const _MPTableStringCellView = @"StringCell";
|
||||||
@@ -83,8 +82,6 @@ NSString *const _MPTableMonoSpacedStringCellView = @"MonospacedStringCell";
|
|||||||
|
|
||||||
@property (weak) IBOutlet NSTableView *entryTable;
|
@property (weak) IBOutlet NSTableView *entryTable;
|
||||||
@property (assign) MPDisplayMode displayMode;
|
@property (assign) MPDisplayMode displayMode;
|
||||||
@property (nonatomic, assign) BOOL totpColumnHidden;
|
|
||||||
@property (strong) NSTimer *totpUpdateTimer;
|
|
||||||
|
|
||||||
|
|
||||||
/* Constraints */
|
/* Constraints */
|
||||||
@@ -106,7 +103,6 @@ NSString *const _MPTableMonoSpacedStringCellView = @"MonospacedStringCell";
|
|||||||
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
|
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
|
||||||
if(self) {
|
if(self) {
|
||||||
_isDisplayingContextBar = NO;
|
_isDisplayingContextBar = NO;
|
||||||
_totpColumnHidden = NO;
|
|
||||||
_displayMode = MPDisplayModeEntries;
|
_displayMode = MPDisplayModeEntries;
|
||||||
_entryArrayController = [[NSArrayController alloc] init];
|
_entryArrayController = [[NSArrayController alloc] init];
|
||||||
_dataSource = [[MPEntryTableDataSource alloc] init];
|
_dataSource = [[MPEntryTableDataSource alloc] init];
|
||||||
@@ -165,8 +161,6 @@ NSString *const _MPTableMonoSpacedStringCellView = @"MonospacedStringCell";
|
|||||||
NSTableColumn *modifiedColumn = [[NSTableColumn alloc] initWithIdentifier:MPEntryTableModfiedColumnIdentifier];
|
NSTableColumn *modifiedColumn = [[NSTableColumn alloc] initWithIdentifier:MPEntryTableModfiedColumnIdentifier];
|
||||||
NSTableColumn *historyColumn = [[NSTableColumn alloc] initWithIdentifier:MPEntryTableHistoryColumnIdentifier];
|
NSTableColumn *historyColumn = [[NSTableColumn alloc] initWithIdentifier:MPEntryTableHistoryColumnIdentifier];
|
||||||
NSTableColumn *indexColumn = [[NSTableColumn alloc] initWithIdentifier:MPEntryTableIndexColumnIdentifier];
|
NSTableColumn *indexColumn = [[NSTableColumn alloc] initWithIdentifier:MPEntryTableIndexColumnIdentifier];
|
||||||
NSTableColumn *totpTableColumn = [[NSTableColumn alloc] initWithIdentifier:MPEntryTableTOTPColumnIdentifier];
|
|
||||||
|
|
||||||
notesColumn.minWidth = 40.0;
|
notesColumn.minWidth = 40.0;
|
||||||
attachmentsColumn.minWidth = 40.0;
|
attachmentsColumn.minWidth = 40.0;
|
||||||
createdColumn.minWidth = 40.0;
|
createdColumn.minWidth = 40.0;
|
||||||
@@ -179,7 +173,6 @@ NSString *const _MPTableMonoSpacedStringCellView = @"MonospacedStringCell";
|
|||||||
[self.entryTable addTableColumn:modifiedColumn];
|
[self.entryTable addTableColumn:modifiedColumn];
|
||||||
[self.entryTable addTableColumn:createdColumn];
|
[self.entryTable addTableColumn:createdColumn];
|
||||||
[self.entryTable addTableColumn:historyColumn];
|
[self.entryTable addTableColumn:historyColumn];
|
||||||
[self.entryTable addTableColumn:totpTableColumn];
|
|
||||||
[self.entryTable addTableColumn:indexColumn];
|
[self.entryTable addTableColumn:indexColumn];
|
||||||
|
|
||||||
parentColumn.identifier = MPEntryTableParentColumnIdentifier;
|
parentColumn.identifier = MPEntryTableParentColumnIdentifier;
|
||||||
@@ -202,7 +195,6 @@ NSString *const _MPTableMonoSpacedStringCellView = @"MonospacedStringCell";
|
|||||||
parentColumn.sortDescriptorPrototype = [NSSortDescriptor sortDescriptorWithKey:parentTitleKeyPath ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)];
|
parentColumn.sortDescriptorPrototype = [NSSortDescriptor sortDescriptorWithKey:parentTitleKeyPath ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)];
|
||||||
modifiedColumn.sortDescriptorPrototype = [NSSortDescriptor sortDescriptorWithKey:timeInfoModificationTimeKeyPath ascending:YES selector:@selector(compare:)];
|
modifiedColumn.sortDescriptorPrototype = [NSSortDescriptor sortDescriptorWithKey:timeInfoModificationTimeKeyPath ascending:YES selector:@selector(compare:)];
|
||||||
createdColumn.sortDescriptorPrototype = [NSSortDescriptor sortDescriptorWithKey:timeInfoCreationTimeKeyPath ascending:YES selector:@selector(compare:)];
|
createdColumn.sortDescriptorPrototype = [NSSortDescriptor sortDescriptorWithKey:timeInfoCreationTimeKeyPath ascending:YES selector:@selector(compare:)];
|
||||||
totpTableColumn.sortDescriptorPrototype = [NSSortDescriptor sortDescriptorWithKey:NSStringFromSelector(@selector(timeOTP)) ascending:YES selector:@selector(compare:)];
|
|
||||||
|
|
||||||
indexColumn.headerCell.stringValue = @"";
|
indexColumn.headerCell.stringValue = @"";
|
||||||
indexColumn.headerToolTip = NSLocalizedString(@"ENTRY_INDEX_COLUMN_TOOLTIP", "Tooltip displayed on the index header cell");
|
indexColumn.headerToolTip = NSLocalizedString(@"ENTRY_INDEX_COLUMN_TOOLTIP", "Tooltip displayed on the index header cell");
|
||||||
@@ -216,7 +208,6 @@ NSString *const _MPTableMonoSpacedStringCellView = @"MonospacedStringCell";
|
|||||||
createdColumn.headerCell.stringValue = NSLocalizedString(@"CREATED", "Creating date column title");
|
createdColumn.headerCell.stringValue = NSLocalizedString(@"CREATED", "Creating date column title");
|
||||||
modifiedColumn.headerCell.stringValue = NSLocalizedString(@"MODIFIED", "Modification date column title");
|
modifiedColumn.headerCell.stringValue = NSLocalizedString(@"MODIFIED", "Modification date column title");
|
||||||
historyColumn.headerCell.stringValue = NSLocalizedString(@"HISTORY", "History count column title");
|
historyColumn.headerCell.stringValue = NSLocalizedString(@"HISTORY", "History count column title");
|
||||||
totpTableColumn.headerCell.stringValue = NSLocalizedString(@"TOPT", "TOTP column title");
|
|
||||||
|
|
||||||
[self.entryTable bind:NSContentBinding toObject:self.entryArrayController withKeyPath:NSStringFromSelector(@selector(arrangedObjects)) options:nil];
|
[self.entryTable bind:NSContentBinding toObject:self.entryArrayController withKeyPath:NSStringFromSelector(@selector(arrangedObjects)) options:nil];
|
||||||
[self.entryTable bind:NSSortDescriptorsBinding toObject:self.entryArrayController withKeyPath:NSStringFromSelector(@selector(sortDescriptors)) options:nil];
|
[self.entryTable bind:NSSortDescriptorsBinding toObject:self.entryArrayController withKeyPath:NSStringFromSelector(@selector(sortDescriptors)) options:nil];
|
||||||
@@ -241,7 +232,6 @@ NSString *const _MPTableMonoSpacedStringCellView = @"MonospacedStringCell";
|
|||||||
if(parentIndex != 1) {
|
if(parentIndex != 1) {
|
||||||
[self.entryTable moveColumn:parentIndex toColumn:1];
|
[self.entryTable moveColumn:parentIndex toColumn:1];
|
||||||
}
|
}
|
||||||
[self _updateTOTPTimer];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setDisplayClearTextPasswords:(BOOL)displayClearTextPasswords {
|
- (void)setDisplayClearTextPasswords:(BOOL)displayClearTextPasswords {
|
||||||
@@ -271,11 +261,6 @@ NSString *const _MPTableMonoSpacedStringCellView = @"MonospacedStringCell";
|
|||||||
[self.contextBarViewController registerNotificationsForDocument:document];
|
[self.contextBarViewController registerNotificationsForDocument:document];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setTotpColumnHidden:(BOOL)toptColumnVisible {
|
|
||||||
_totpColumnHidden = toptColumnVisible;
|
|
||||||
[self _updateTOTPTimer];
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma mark NSTableViewDelgate
|
#pragma mark NSTableViewDelgate
|
||||||
|
|
||||||
- (void)_tableDidScroll:(NSNotification *)notification {
|
- (void)_tableDidScroll:(NSNotification *)notification {
|
||||||
@@ -307,7 +292,6 @@ NSString *const _MPTableMonoSpacedStringCellView = @"MonospacedStringCell";
|
|||||||
BOOL isCreatedColumn = [tableColumn.identifier isEqualToString:MPEntryTableCreatedColumnIdentifier];
|
BOOL isCreatedColumn = [tableColumn.identifier isEqualToString:MPEntryTableCreatedColumnIdentifier];
|
||||||
BOOL isModifedColumn = [tableColumn.identifier isEqualToString:MPEntryTableModfiedColumnIdentifier];
|
BOOL isModifedColumn = [tableColumn.identifier isEqualToString:MPEntryTableModfiedColumnIdentifier];
|
||||||
BOOL isHistoryColumn = [tableColumn.identifier isEqualToString:MPEntryTableHistoryColumnIdentifier];
|
BOOL isHistoryColumn = [tableColumn.identifier isEqualToString:MPEntryTableHistoryColumnIdentifier];
|
||||||
BOOL isTOPTColumn = [tableColumn.identifier isEqualToString:MPEntryTableTOTPColumnIdentifier];
|
|
||||||
|
|
||||||
NSTableCellView *view = nil;
|
NSTableCellView *view = nil;
|
||||||
BOOL displayClearTextPasswords = [NSUserDefaults.standardUserDefaults boolForKey:kMPSettingsKeyDisplayClearTextPasswordsInEntryList];
|
BOOL displayClearTextPasswords = [NSUserDefaults.standardUserDefaults boolForKey:kMPSettingsKeyDisplayClearTextPasswordsInEntryList];
|
||||||
@@ -431,10 +415,6 @@ NSString *const _MPTableMonoSpacedStringCellView = @"MonospacedStringCell";
|
|||||||
NSStringFromSelector(@selector(password))];
|
NSStringFromSelector(@selector(password))];
|
||||||
[view.textField bind:NSValueBinding toObject:view withKeyPath:passwordKeyPath options:nil];
|
[view.textField bind:NSValueBinding toObject:view withKeyPath:passwordKeyPath options:nil];
|
||||||
}
|
}
|
||||||
else if(isTOPTColumn) {
|
|
||||||
NSString *TOTPKeyPath = [NSString stringWithFormat:@"%@.%@", NSStringFromSelector(@selector(objectValue)), NSStringFromSelector(@selector(timeOTP))];
|
|
||||||
[view.textField bind:NSValueBinding toObject:view withKeyPath:TOTPKeyPath options:nil];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
@@ -698,7 +678,6 @@ NSString *const _MPTableMonoSpacedStringCellView = @"MonospacedStringCell";
|
|||||||
[headerMenu addItemWithTitle:NSLocalizedString(@"MODIFIED", "Menu item to toggle display of modified date column in entry table") action:NULL keyEquivalent:@""];
|
[headerMenu addItemWithTitle:NSLocalizedString(@"MODIFIED", "Menu item to toggle display of modified date column in entry table") action:NULL keyEquivalent:@""];
|
||||||
[headerMenu addItemWithTitle:NSLocalizedString(@"CREATED", "Menu item to toggle display of created date column in entry table") action:NULL keyEquivalent:@""];
|
[headerMenu addItemWithTitle:NSLocalizedString(@"CREATED", "Menu item to toggle display of created date column in entry table") action:NULL keyEquivalent:@""];
|
||||||
[headerMenu addItemWithTitle:NSLocalizedString(@"HISTORY", "Menu item to toggle display of history count column in entry table") action:NULL keyEquivalent:@""];
|
[headerMenu addItemWithTitle:NSLocalizedString(@"HISTORY", "Menu item to toggle display of history count column in entry table") action:NULL keyEquivalent:@""];
|
||||||
[headerMenu addItemWithTitle:NSLocalizedString(@"TOTP", "Menu item to toggle display of TOTP count column in entry table") action:NULL keyEquivalent:@""];
|
|
||||||
|
|
||||||
NSArray *identifier = @[ MPEntryTableTitleColumnIdentifier,
|
NSArray *identifier = @[ MPEntryTableTitleColumnIdentifier,
|
||||||
MPEntryTableUserNameColumnIdentifier,
|
MPEntryTableUserNameColumnIdentifier,
|
||||||
@@ -708,8 +687,7 @@ NSString *const _MPTableMonoSpacedStringCellView = @"MonospacedStringCell";
|
|||||||
MPEntryTableAttachmentColumnIdentifier,
|
MPEntryTableAttachmentColumnIdentifier,
|
||||||
MPEntryTableModfiedColumnIdentifier,
|
MPEntryTableModfiedColumnIdentifier,
|
||||||
MPEntryTableCreatedColumnIdentifier,
|
MPEntryTableCreatedColumnIdentifier,
|
||||||
MPEntryTableHistoryColumnIdentifier,
|
MPEntryTableHistoryColumnIdentifier ];
|
||||||
MPEntryTableTOTPColumnIdentifier];
|
|
||||||
|
|
||||||
NSDictionary *options = @{ NSValueTransformerNameBindingOption : NSNegateBooleanTransformerName };
|
NSDictionary *options = @{ NSValueTransformerNameBindingOption : NSNegateBooleanTransformerName };
|
||||||
for(NSMenuItem *item in headerMenu.itemArray) {
|
for(NSMenuItem *item in headerMenu.itemArray) {
|
||||||
@@ -718,8 +696,6 @@ NSString *const _MPTableMonoSpacedStringCellView = @"MonospacedStringCell";
|
|||||||
[item bind:NSValueBinding toObject:column withKeyPath:NSHiddenBinding options:options];
|
[item bind:NSValueBinding toObject:column withKeyPath:NSHiddenBinding options:options];
|
||||||
}
|
}
|
||||||
|
|
||||||
NSTableColumn *totpColumn = [self.entryTable tableColumnWithIdentifier:MPEntryTableTOTPColumnIdentifier];
|
|
||||||
[self bind:NSStringFromSelector(@selector(totpColumnHidden)) toObject:totpColumn withKeyPath:NSHiddenBinding options:nil]; // double binding works?
|
|
||||||
|
|
||||||
[headerMenu addItem:[NSMenuItem separatorItem]];
|
[headerMenu addItem:[NSMenuItem separatorItem]];
|
||||||
NSMenuItem *showPasswordsItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"SHOW_CLEAR_TEXT_PASSWORDS", "Menu item to toggle display type of passwords") action:NULL keyEquivalent:@""];
|
NSMenuItem *showPasswordsItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"SHOW_CLEAR_TEXT_PASSWORDS", "Menu item to toggle display type of passwords") action:NULL keyEquivalent:@""];
|
||||||
@@ -731,26 +707,12 @@ NSString *const _MPTableMonoSpacedStringCellView = @"MonospacedStringCell";
|
|||||||
self.entryTable.headerView.menu = headerMenu;
|
self.entryTable.headerView.menu = headerMenu;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)_updateTOTPTimer {
|
|
||||||
if(self.totpColumnHidden) {
|
|
||||||
[self.totpUpdateTimer invalidate];
|
|
||||||
self.totpUpdateTimer = nil;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
__weak MPEntryViewController *welf = self;
|
|
||||||
self.totpUpdateTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 repeats:YES block:^(NSTimer * _Nonnull timer) {
|
|
||||||
NSIndexSet *columnIndex = [NSIndexSet indexSetWithIndex:[welf.entryTable columnWithIdentifier:MPEntryTableTOTPColumnIdentifier]];
|
|
||||||
NSIndexSet *rowIndexes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0,welf.entryTable.numberOfRows)];
|
|
||||||
[welf.entryTable reloadDataForRowIndexes:rowIndexes columnIndexes:columnIndex];
|
|
||||||
}];
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma mark Actions
|
#pragma mark Actions
|
||||||
- (void)copyPassword:(id)sender {
|
- (void)copyPassword:(id)sender {
|
||||||
NSArray *nodes = self.currentTargetNodes;
|
NSArray *nodes = self.currentTargetNodes;
|
||||||
KPKEntry *selectedEntry = nodes.count == 1 ? [nodes.firstObject asEntry] : nil;
|
KPKEntry *selectedEntry = nodes.count == 1 ? [nodes.firstObject asEntry] : nil;
|
||||||
NSString *value = [selectedEntry.password kpk_finalValueForEntry:selectedEntry];
|
NSString *value = [selectedEntry.password kpk_finalValueForEntry:selectedEntry];
|
||||||
if(value.length > 0) {
|
if(value) {
|
||||||
[MPPasteBoardController.defaultController copyObject:value overlayInfo:MPPasteboardOverlayInfoPassword name:nil atView:self.view];
|
[MPPasteBoardController.defaultController copyObject:value overlayInfo:MPPasteboardOverlayInfoPassword name:nil atView:self.view];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -759,20 +721,11 @@ NSString *const _MPTableMonoSpacedStringCellView = @"MonospacedStringCell";
|
|||||||
NSArray *nodes = self.currentTargetNodes;
|
NSArray *nodes = self.currentTargetNodes;
|
||||||
KPKEntry *selectedEntry = nodes.count == 1 ? [nodes.firstObject asEntry] : nil;
|
KPKEntry *selectedEntry = nodes.count == 1 ? [nodes.firstObject asEntry] : nil;
|
||||||
NSString *value = [selectedEntry.username kpk_finalValueForEntry:selectedEntry];
|
NSString *value = [selectedEntry.username kpk_finalValueForEntry:selectedEntry];
|
||||||
if(value.length > 0) {
|
if(value) {
|
||||||
[MPPasteBoardController.defaultController copyObject:value overlayInfo:MPPasteboardOverlayInfoUsername name:nil atView:self.view];
|
[MPPasteBoardController.defaultController copyObject:value overlayInfo:MPPasteboardOverlayInfoUsername name:nil atView:self.view];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)copyTOTP:(id)sender {
|
|
||||||
NSArray *nodes = self.currentTargetNodes;
|
|
||||||
KPKEntry *selectedEntry = nodes.count == 1 ? [nodes.firstObject asEntry] : nil;
|
|
||||||
NSString *value = selectedEntry.timeOTP;
|
|
||||||
if(value.length > 0) {
|
|
||||||
[MPPasteBoardController.defaultController copyObject:value overlayInfo:MPPasteboardOverlayInfoTOTP name:nil atView:self.view];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)copyCustomAttribute:(id)sender {
|
- (void)copyCustomAttribute:(id)sender {
|
||||||
NSArray *nodes = self.currentTargetNodes;
|
NSArray *nodes = self.currentTargetNodes;
|
||||||
KPKEntry *selectedEntry = nodes.count == 1 ? [nodes.firstObject asEntry] : nil;
|
KPKEntry *selectedEntry = nodes.count == 1 ? [nodes.firstObject asEntry] : nil;
|
||||||
@@ -781,7 +734,7 @@ NSString *const _MPTableMonoSpacedStringCellView = @"MonospacedStringCell";
|
|||||||
NSAssert((index >= 0) && (index < selectedEntry.customAttributes.count), @"Index for custom field needs to be valid");
|
NSAssert((index >= 0) && (index < selectedEntry.customAttributes.count), @"Index for custom field needs to be valid");
|
||||||
KPKAttribute *attribute = selectedEntry.customAttributes[index];
|
KPKAttribute *attribute = selectedEntry.customAttributes[index];
|
||||||
NSString *value = attribute.evaluatedValue;
|
NSString *value = attribute.evaluatedValue;
|
||||||
if(value.length > 0) {
|
if(value) {
|
||||||
[MPPasteBoardController.defaultController copyObject:value overlayInfo:MPPasteboardOverlayInfoCustom name:attribute.key atView:self.view];
|
[MPPasteBoardController.defaultController copyObject:value overlayInfo:MPPasteboardOverlayInfoCustom name:attribute.key atView:self.view];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -791,7 +744,7 @@ NSString *const _MPTableMonoSpacedStringCellView = @"MonospacedStringCell";
|
|||||||
NSArray *nodes = self.currentTargetNodes;
|
NSArray *nodes = self.currentTargetNodes;
|
||||||
KPKEntry *selectedEntry = nodes.count == 1 ? [nodes.firstObject asEntry] : nil;
|
KPKEntry *selectedEntry = nodes.count == 1 ? [nodes.firstObject asEntry] : nil;
|
||||||
NSString *value = [selectedEntry.url kpk_finalValueForEntry:selectedEntry];
|
NSString *value = [selectedEntry.url kpk_finalValueForEntry:selectedEntry];
|
||||||
if(value.length > 0) {
|
if(value) {
|
||||||
[MPPasteBoardController.defaultController copyObject:value overlayInfo:MPPasteboardOverlayInfoURL name:nil atView:self.view];
|
[MPPasteBoardController.defaultController copyObject:value overlayInfo:MPPasteboardOverlayInfoURL name:nil atView:self.view];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -860,9 +813,6 @@ NSString *const _MPTableMonoSpacedStringCellView = @"MonospacedStringCell";
|
|||||||
else if([identifier isEqualToString:MPEntryTableUserNameColumnIdentifier]) {
|
else if([identifier isEqualToString:MPEntryTableUserNameColumnIdentifier]) {
|
||||||
[self copyUsername:nil];
|
[self copyUsername:nil];
|
||||||
}
|
}
|
||||||
else if([identifier isEqualToString:MPEntryTableTOTPColumnIdentifier]) {
|
|
||||||
[self copyTOTP:nil];
|
|
||||||
}
|
|
||||||
else if([identifier isEqualToString:MPEntryTableURLColumnIdentifier]) {
|
else if([identifier isEqualToString:MPEntryTableURLColumnIdentifier]) {
|
||||||
[self _executeURLColumnDoubleClick];
|
[self _executeURLColumnDoubleClick];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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="21701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19455" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
<deployment identifier="macosx"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19455"/>
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<objects>
|
<objects>
|
||||||
@@ -37,7 +37,7 @@
|
|||||||
</columns>
|
</columns>
|
||||||
<gridCells>
|
<gridCells>
|
||||||
<gridCell row="xmM-rD-5oB" column="7Ct-m6-g6y" id="am5-3Y-3j8">
|
<gridCell row="xmM-rD-5oB" column="7Ct-m6-g6y" id="am5-3Y-3j8">
|
||||||
<textField key="contentView" verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="JAh-R7-pLA">
|
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="JAh-R7-pLA">
|
||||||
<rect key="frame" x="-2" y="188" width="102" height="16"/>
|
<rect key="frame" x="-2" y="188" width="102" height="16"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Database name:" id="03Y-Lj-rRN">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Database name:" id="03Y-Lj-rRN">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@@ -47,7 +47,7 @@
|
|||||||
</textField>
|
</textField>
|
||||||
</gridCell>
|
</gridCell>
|
||||||
<gridCell row="xmM-rD-5oB" column="eQs-KV-hxL" id="IfW-cA-EoE">
|
<gridCell row="xmM-rD-5oB" column="eQs-KV-hxL" id="IfW-cA-EoE">
|
||||||
<textField key="contentView" verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ufI-vz-Iga">
|
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ufI-vz-Iga">
|
||||||
<rect key="frame" x="106" y="188" width="280" height="16"/>
|
<rect key="frame" x="106" y="188" width="280" height="16"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="width" constant="280" id="FXj-7O-RqC"/>
|
<constraint firstAttribute="width" constant="280" id="FXj-7O-RqC"/>
|
||||||
@@ -60,7 +60,7 @@
|
|||||||
</textField>
|
</textField>
|
||||||
</gridCell>
|
</gridCell>
|
||||||
<gridCell row="EPS-PJ-wZn" column="7Ct-m6-g6y" id="uqN-Dk-NnR">
|
<gridCell row="EPS-PJ-wZn" column="7Ct-m6-g6y" id="uqN-Dk-NnR">
|
||||||
<textField key="contentView" verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="WIS-Jx-S9I">
|
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="WIS-Jx-S9I">
|
||||||
<rect key="frame" x="22" y="164" width="78" height="16"/>
|
<rect key="frame" x="22" y="164" width="78" height="16"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Description:" id="p9U-Kw-bI5">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Description:" id="p9U-Kw-bI5">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@@ -70,7 +70,7 @@
|
|||||||
</textField>
|
</textField>
|
||||||
</gridCell>
|
</gridCell>
|
||||||
<gridCell row="EPS-PJ-wZn" column="eQs-KV-hxL" id="Gb7-AY-QQA">
|
<gridCell row="EPS-PJ-wZn" column="eQs-KV-hxL" id="Gb7-AY-QQA">
|
||||||
<scrollView key="contentView" ambiguous="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="nST-Dm-Qr7">
|
<scrollView key="contentView" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="nST-Dm-Qr7">
|
||||||
<rect key="frame" x="106" y="80" width="280" height="100"/>
|
<rect key="frame" x="106" y="80" width="280" height="100"/>
|
||||||
<clipView key="contentView" drawsBackground="NO" id="Is2-5k-gGr">
|
<clipView key="contentView" drawsBackground="NO" id="Is2-5k-gGr">
|
||||||
<rect key="frame" x="1" y="1" width="278" height="98"/>
|
<rect key="frame" x="1" y="1" width="278" height="98"/>
|
||||||
@@ -102,7 +102,7 @@
|
|||||||
</scrollView>
|
</scrollView>
|
||||||
</gridCell>
|
</gridCell>
|
||||||
<gridCell row="6vV-rV-ITV" column="7Ct-m6-g6y" id="EZb-Cx-iTX">
|
<gridCell row="6vV-rV-ITV" column="7Ct-m6-g6y" id="EZb-Cx-iTX">
|
||||||
<textField key="contentView" verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="8Dj-om-Zoe">
|
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="8Dj-om-Zoe">
|
||||||
<rect key="frame" x="12" y="56" width="88" height="16"/>
|
<rect key="frame" x="12" y="56" width="88" height="16"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Compression:" id="5Bm-Nl-53q">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Compression:" id="5Bm-Nl-53q">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@@ -112,7 +112,7 @@
|
|||||||
</textField>
|
</textField>
|
||||||
</gridCell>
|
</gridCell>
|
||||||
<gridCell row="6vV-rV-ITV" column="eQs-KV-hxL" id="T5V-Av-aBB">
|
<gridCell row="6vV-rV-ITV" column="eQs-KV-hxL" id="T5V-Av-aBB">
|
||||||
<popUpButton key="contentView" verticalHuggingPriority="750" verticalCompressionResistancePriority="749" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Dq5-lP-zsS">
|
<popUpButton key="contentView" verticalHuggingPriority="750" verticalCompressionResistancePriority="749" translatesAutoresizingMaskIntoConstraints="NO" id="Dq5-lP-zsS">
|
||||||
<rect key="frame" x="103" y="52" width="72" height="21"/>
|
<rect key="frame" x="103" y="52" width="72" height="21"/>
|
||||||
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="GdG-Qp-e8U">
|
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="GdG-Qp-e8U">
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
@@ -127,7 +127,7 @@
|
|||||||
</popUpButton>
|
</popUpButton>
|
||||||
</gridCell>
|
</gridCell>
|
||||||
<gridCell row="zYk-Ml-HAt" column="7Ct-m6-g6y" id="DAB-yY-fno">
|
<gridCell row="zYk-Ml-HAt" column="7Ct-m6-g6y" id="DAB-yY-fno">
|
||||||
<textField key="contentView" verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="jgn-WC-9Qs">
|
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="jgn-WC-9Qs">
|
||||||
<rect key="frame" x="59" y="24" width="41" height="24"/>
|
<rect key="frame" x="59" y="24" width="41" height="24"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Color:" id="shK-cG-3dL">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Color:" id="shK-cG-3dL">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@@ -137,13 +137,13 @@
|
|||||||
</textField>
|
</textField>
|
||||||
</gridCell>
|
</gridCell>
|
||||||
<gridCell row="zYk-Ml-HAt" column="eQs-KV-hxL" id="3lH-bt-QOB">
|
<gridCell row="zYk-Ml-HAt" column="eQs-KV-hxL" id="3lH-bt-QOB">
|
||||||
<colorWell key="contentView" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="mT4-DP-GXO" customClass="HNHUIColorWell">
|
<colorWell key="contentView" translatesAutoresizingMaskIntoConstraints="NO" id="mT4-DP-GXO" customClass="HNHUIColorWell">
|
||||||
<rect key="frame" x="103" y="22" width="44" height="28"/>
|
<rect key="frame" x="106" y="24" width="100" height="24"/>
|
||||||
<color key="color" red="0.05813049898" green="0.055541899059999997" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="color" red="0.05813049898" green="0.055541899059999997" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
</colorWell>
|
</colorWell>
|
||||||
</gridCell>
|
</gridCell>
|
||||||
<gridCell row="kzN-Ch-gfi" column="7Ct-m6-g6y" id="SII-3r-mjn">
|
<gridCell row="kzN-Ch-gfi" column="7Ct-m6-g6y" id="SII-3r-mjn">
|
||||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="IX3-zX-Jvu">
|
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="IX3-zX-Jvu">
|
||||||
<rect key="frame" x="27" y="0.0" width="73" height="16"/>
|
<rect key="frame" x="27" y="0.0" width="73" height="16"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="File format:" id="FgL-0B-JE9">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="File format:" id="FgL-0B-JE9">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@@ -153,7 +153,7 @@
|
|||||||
</textField>
|
</textField>
|
||||||
</gridCell>
|
</gridCell>
|
||||||
<gridCell row="kzN-Ch-gfi" column="eQs-KV-hxL" id="3Hz-QZ-yB0">
|
<gridCell row="kzN-Ch-gfi" column="eQs-KV-hxL" id="3Hz-QZ-yB0">
|
||||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="7hG-5O-ghC">
|
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="7hG-5O-ghC">
|
||||||
<rect key="frame" x="104" y="0.0" width="72" height="16"/>
|
<rect key="frame" x="104" y="0.0" width="72" height="16"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="VersionInfo" id="C2T-fi-WiV">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="VersionInfo" id="C2T-fi-WiV">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
|
|||||||
@@ -26,8 +26,16 @@
|
|||||||
|
|
||||||
@interface MPGeneralPreferencesController : MPViewController <MPPreferencesTab>
|
@interface MPGeneralPreferencesController : MPViewController <MPPreferencesTab>
|
||||||
|
|
||||||
|
@property (strong) IBOutlet NSButton *clearPasteboardOnQuitCheckButton;
|
||||||
|
@property (strong) IBOutlet NSPopUpButton *clearPasteboardTimeoutPopup;
|
||||||
|
@property (strong) IBOutlet NSButton *preventUniversalClipboardSupportCheckButton;
|
||||||
|
@property (strong) IBOutlet NSPopUpButton *idleTimeOutPopup;
|
||||||
|
@property (strong) IBOutlet NSButton *lockOnSleepCheckButton;
|
||||||
|
@property (strong) IBOutlet NSButton *lockOnLogoutCheckButton;
|
||||||
|
@property (strong) IBOutlet NSButton *lockOnScreenSleepCheckButton;
|
||||||
@property (strong) IBOutlet NSButton *reopenLastDatabase;
|
@property (strong) IBOutlet NSButton *reopenLastDatabase;
|
||||||
@property (strong) IBOutlet NSButton *enableAutosaveCheckButton;
|
@property (strong) IBOutlet NSButton *enableAutosaveCheckButton;
|
||||||
|
@property (strong) IBOutlet NSButton *rememberKeyFileCheckButton;
|
||||||
@property (strong) IBOutlet NSPopUpButton *fileChangeStrategyPopup;
|
@property (strong) IBOutlet NSPopUpButton *fileChangeStrategyPopup;
|
||||||
@property (strong) IBOutlet NSPopUpButton *faviconDownloadMethodPopup;
|
@property (strong) IBOutlet NSPopUpButton *faviconDownloadMethodPopup;
|
||||||
|
|
||||||
|
|||||||
@@ -45,8 +45,16 @@
|
|||||||
- (void)viewDidLoad {
|
- (void)viewDidLoad {
|
||||||
NSUserDefaultsController *defaultsController = [NSUserDefaultsController sharedUserDefaultsController];
|
NSUserDefaultsController *defaultsController = [NSUserDefaultsController sharedUserDefaultsController];
|
||||||
|
|
||||||
|
[self.clearPasteboardOnQuitCheckButton bind:NSValueBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyClearPasteboardOnQuit] options:nil];
|
||||||
|
[self.clearPasteboardTimeoutPopup bind:NSSelectedTagBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyPasteboardClearTimeout] options:nil];
|
||||||
|
[self.preventUniversalClipboardSupportCheckButton bind:NSValueBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyPreventUniversalClipboard] options:nil];
|
||||||
|
[self.lockOnSleepCheckButton bind:NSValueBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyLockOnSleep] options:nil];
|
||||||
|
[self.lockOnLogoutCheckButton bind:NSValueBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingskeyLockOnLogout] options:nil];
|
||||||
|
[self.lockOnScreenSleepCheckButton bind:NSValueBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingskeyLockOnScreenSleep] options:nil];
|
||||||
|
[self.idleTimeOutPopup bind:NSSelectedTagBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyIdleLockTimeOut] options:nil];
|
||||||
[self.reopenLastDatabase bind:NSValueBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyReopenLastDatabaseOnLaunch] options:nil];
|
[self.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];
|
||||||
|
[self.rememberKeyFileCheckButton bind:NSValueBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyRememberKeyFilesForDatabases] options:nil];
|
||||||
|
|
||||||
/* Favicon download method menu */
|
/* Favicon download method menu */
|
||||||
NSDictionary *faviconDownloadMethodDict = @{ @(MPFaviconDownloadMethodDirect) : NSLocalizedString(@"FAVICON_DOWNLOAD_METHOD_DIRECT", @"Favicon download method: directly download from the host"),
|
NSDictionary *faviconDownloadMethodDict = @{ @(MPFaviconDownloadMethodDirect) : NSLocalizedString(@"FAVICON_DOWNLOAD_METHOD_DIRECT", @"Favicon download method: directly download from the host"),
|
||||||
@@ -74,5 +82,6 @@
|
|||||||
[self.fileChangeStrategyPopup.menu addItem:item];
|
[self.fileChangeStrategyPopup.menu addItem:item];
|
||||||
}
|
}
|
||||||
[self.fileChangeStrategyPopup bind:NSSelectedTagBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyFileChangeStrategy] options:nil];
|
[self.fileChangeStrategyPopup bind:NSSelectedTagBinding toObject:defaultsController withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyFileChangeStrategy] options:nil];
|
||||||
|
|
||||||
}
|
}
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -7,6 +7,10 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
|
@class KPKAttribute;
|
||||||
|
@class KPKEntry;
|
||||||
|
@class KPKTimeInfo;
|
||||||
|
@class KPKNode;
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_BEGIN
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
@@ -14,10 +18,32 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
/// Individual editors shoudl adopt different APIs to accomodate their needs
|
/// Individual editors shoudl adopt different APIs to accomodate their needs
|
||||||
/// The preferred way to set model data is to use the representedObject
|
/// The preferred way to set model data is to use the representedObject
|
||||||
@protocol MPInspectorEditor <NSObject>
|
@protocol MPInspectorEditor <NSObject>
|
||||||
|
|
||||||
@required
|
@required
|
||||||
@property (nonatomic) BOOL isEditor;
|
@property (nonatomic) BOOL isEditor;
|
||||||
|
@end
|
||||||
|
|
||||||
|
/// NodeInspectorEditors require the represented object to be a KPKNode
|
||||||
|
@protocol MPNodeInspectorEditor <MPInspectorEditor>
|
||||||
|
@required
|
||||||
|
@property (nonatomic, nullable, readonly, strong) KPKNode *representedNode;
|
||||||
|
@end
|
||||||
|
|
||||||
|
/// EntryInspectorEditors require the represented object to be a KPKEnty
|
||||||
|
@protocol MPEntryInspectorEditor <MPInspectorEditor>
|
||||||
|
@required
|
||||||
|
@property (nonatomic, nullable, readonly, strong) KPKEntry *representedEntry;
|
||||||
|
@end
|
||||||
|
|
||||||
|
/// AttributeInspectorEditors require the represented object to be a KPKAttribute
|
||||||
|
@protocol MPAttributeInspectorEditor <MPInspectorEditor>
|
||||||
|
@required
|
||||||
|
@property (nonatomic, nullable, readonly, strong) KPKAttribute *representedAttribute;
|
||||||
|
@end
|
||||||
|
|
||||||
|
/// TimeInfoInpspectorEditors require the represented object to be a KPKTimeInfo
|
||||||
|
@protocol MPTimeInfoInpspectorEditor <MPInspectorEditor>
|
||||||
|
@required
|
||||||
|
@property (nonatomic, nullable, readonly, strong) KPKTimeInfo *representedTimeInfo;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_END
|
NS_ASSUME_NONNULL_END
|
||||||
|
|||||||
21
MacPass/MPInspectorEditorView.h
Normal file
21
MacPass/MPInspectorEditorView.h
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
//
|
||||||
|
// MPInspectorEditorView.h
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 08.03.22.
|
||||||
|
// Copyright © 2022 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
FOUNDATION_EXPORT NSString *const MPInspectorEditorViewMouseEnteredNotification;
|
||||||
|
FOUNDATION_EXPORT NSString *const MPInspectorEditorViewMouseExitedNotification;
|
||||||
|
|
||||||
|
|
||||||
|
@interface MPInspectorEditorView : NSView
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
50
MacPass/MPInspectorEditorView.m
Normal file
50
MacPass/MPInspectorEditorView.m
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
//
|
||||||
|
// MPInspectorEditorView.m
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 08.03.22.
|
||||||
|
// Copyright © 2022 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "MPInspectorEditorView.h"
|
||||||
|
|
||||||
|
NSString *const MPInspectorEditorViewMouseEnteredNotification = @"com.hicknhacksoftware.macpass.MPInspectorEditorViewMouseEnteredNotification";
|
||||||
|
NSString *const MPInspectorEditorViewMouseExitedNotification = @"com.hicknhacksoftware.macpass.MPInspectorEditorViewMouseExitedNotification";
|
||||||
|
|
||||||
|
@interface MPInspectorEditorView ()
|
||||||
|
|
||||||
|
@property (strong) NSTrackingArea *trackingArea;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation MPInspectorEditorView
|
||||||
|
|
||||||
|
- (void)mouseEntered:(NSEvent *)event {
|
||||||
|
[NSNotificationCenter.defaultCenter postNotificationName:MPInspectorEditorViewMouseEnteredNotification object:self];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)mouseExited:(NSEvent *)event {
|
||||||
|
[NSNotificationCenter.defaultCenter postNotificationName:MPInspectorEditorViewMouseExitedNotification object:self];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)createTrackingArea {
|
||||||
|
self.trackingArea = [[NSTrackingArea alloc] initWithRect:self.bounds options:NSTrackingActiveAlways|NSTrackingMouseEnteredAndExited owner:self userInfo:nil];
|
||||||
|
[self addTrackingArea:self.trackingArea];
|
||||||
|
|
||||||
|
NSPoint mouseLocation = self.window.mouseLocationOutsideOfEventStream;
|
||||||
|
mouseLocation = [self convertPoint:mouseLocation fromView:nil];
|
||||||
|
if(NSPointInRect(mouseLocation, self.bounds)) {
|
||||||
|
[self mouseEntered:NSApp.currentEvent];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
[self mouseExited:NSApp.currentEvent];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)updateTrackingAreas {
|
||||||
|
[self removeTrackingArea:self.trackingArea];
|
||||||
|
[self createTrackingArea];
|
||||||
|
[super updateTrackingAreas];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
@@ -81,6 +81,7 @@ typedef NS_ENUM(NSUInteger, MPContentTab) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (void)awakeFromNib {
|
- (void)awakeFromNib {
|
||||||
|
// TODO: Convert to NSTabViewController?
|
||||||
self.noSelectionInfo.cell.backgroundStyle = NSBackgroundStyleRaised;
|
self.noSelectionInfo.cell.backgroundStyle = NSBackgroundStyleRaised;
|
||||||
self.itemImageView.cell.backgroundStyle = NSBackgroundStyleRaised;
|
self.itemImageView.cell.backgroundStyle = NSBackgroundStyleRaised;
|
||||||
[self.tabView bind:NSSelectedIndexBinding toObject:self withKeyPath:NSStringFromSelector(@selector(activeTab)) options:nil];
|
[self.tabView bind:NSSelectedIndexBinding toObject:self withKeyPath:NSStringFromSelector(@selector(activeTab)) options:nil];
|
||||||
@@ -105,6 +106,10 @@ typedef NS_ENUM(NSUInteger, MPContentTab) {
|
|||||||
[groupTabView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[groupView]|" options:0 metrics:nil views:views]];
|
[groupTabView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[groupView]|" options:0 metrics:nil views:views]];
|
||||||
groupTabItem.initialFirstResponder = groupView;
|
groupTabItem.initialFirstResponder = groupView;
|
||||||
|
|
||||||
|
|
||||||
|
[self addChildViewController:self.entryViewController];
|
||||||
|
[self addChildViewController:self.groupViewController];
|
||||||
|
|
||||||
[self.view layout];}
|
[self.view layout];}
|
||||||
|
|
||||||
- (void)registerNotificationsForDocument:(MPDocument *)document {
|
- (void)registerNotificationsForDocument:(MPDocument *)document {
|
||||||
@@ -217,4 +222,20 @@ typedef NS_ENUM(NSUInteger, MPContentTab) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (id)supplementalTargetForAction:(SEL)action sender:(id)sender {
|
||||||
|
for(NSViewController *childViewController in self.childViewControllers) {
|
||||||
|
if([childViewController respondsToSelector:action]) {
|
||||||
|
return childViewController;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
id target = [childViewController supplementalTargetForAction:action sender:sender];
|
||||||
|
if(!target) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
return target;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return [super supplementalTargetForAction:action sender:sender];
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -24,7 +24,6 @@
|
|||||||
#import "MPSettingsHelper.h"
|
#import "MPSettingsHelper.h"
|
||||||
#import "MPIconHelper.h"
|
#import "MPIconHelper.h"
|
||||||
#import "MPAutotypeDoctor.h"
|
#import "MPAutotypeDoctor.h"
|
||||||
#import "MPConstants.h"
|
|
||||||
|
|
||||||
#import "DDHotKeyCenter.h"
|
#import "DDHotKeyCenter.h"
|
||||||
#import "DDHotKey+MacPassAdditions.h"
|
#import "DDHotKey+MacPassAdditions.h"
|
||||||
@@ -134,32 +133,4 @@
|
|||||||
- (void)runAutotypeDoctor:(id)sender {
|
- (void)runAutotypeDoctor:(id)sender {
|
||||||
[MPAutotypeDoctor.defaultDoctor runChecksAndPresentResults];
|
[MPAutotypeDoctor.defaultDoctor runChecksAndPresentResults];
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark -
|
|
||||||
#pragma mark Keychain Actions
|
|
||||||
- (IBAction)renewTouchIdKey:(id)sender {
|
|
||||||
NSData* publicKeyTag = [MPTouchIdUnlockPublicKeyTag dataUsingEncoding:NSUTF8StringEncoding];
|
|
||||||
NSDictionary *publicKeyQuery = @{
|
|
||||||
(id)kSecClass: (id)kSecClassKey,
|
|
||||||
(id)kSecAttrApplicationTag: publicKeyTag,
|
|
||||||
(id)kSecReturnRef: @YES,
|
|
||||||
};
|
|
||||||
OSStatus status = SecItemDelete((__bridge CFDictionaryRef)publicKeyQuery);
|
|
||||||
if (status != errSecSuccess) {
|
|
||||||
NSString* description = CFBridgingRelease(SecCopyErrorMessageString(status, NULL));
|
|
||||||
NSLog(@"Error while trying to delete public key from Keychain: %@", description);
|
|
||||||
}
|
|
||||||
|
|
||||||
NSData* privateKeyTag = [MPTouchIdUnlockPrivateKeyTag dataUsingEncoding:NSUTF8StringEncoding];
|
|
||||||
NSDictionary *privateKeyQuery = @{
|
|
||||||
(id)kSecClass: (id)kSecClassKey,
|
|
||||||
(id)kSecAttrApplicationTag: privateKeyTag,
|
|
||||||
(id)kSecReturnRef: @YES,
|
|
||||||
};
|
|
||||||
status = SecItemDelete((__bridge CFDictionaryRef)privateKeyQuery);
|
|
||||||
if (status != errSecSuccess) {
|
|
||||||
NSString* description = CFBridgingRelease(SecCopyErrorMessageString(status, NULL));
|
|
||||||
NSLog(@"Error while trying to delete private key from Keychain: %@", description);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -88,9 +88,6 @@
|
|||||||
sizeof(chars) / sizeof(chars[0]),
|
sizeof(chars) / sizeof(chars[0]),
|
||||||
&realLength,
|
&realLength,
|
||||||
chars);
|
chars);
|
||||||
if(0 != success) {
|
|
||||||
NSLog(@"Unable to transpate modifiedKey:%@", MPStringFromModifiedKey(modifiedKey));
|
|
||||||
}
|
|
||||||
return CFBridgingRelease(CFStringCreateWithCharacters(kCFAllocatorDefault, chars, realLength));
|
return CFBridgingRelease(CFStringCreateWithCharacters(kCFAllocatorDefault, chars, realLength));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ static MPLockDaemon *_sharedInstance;
|
|||||||
if(_lockOnLogout != lockOnLogout) {
|
if(_lockOnLogout != lockOnLogout) {
|
||||||
_lockOnLogout = lockOnLogout;
|
_lockOnLogout = lockOnLogout;
|
||||||
if(_lockOnLogout) {
|
if(_lockOnLogout) {
|
||||||
[NSWorkspace.sharedWorkspace.notificationCenter addObserver:self selector:@selector(_lockDocumentsForNotification:) name:NSWorkspaceSessionDidResignActiveNotification object:nil];
|
[NSWorkspace.sharedWorkspace.notificationCenter addObserver:self selector:@selector(_willLogOutNotification:) name:NSWorkspaceSessionDidResignActiveNotification object:nil];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
[NSWorkspace.sharedWorkspace.notificationCenter removeObserver:self name:@"" object:nil];
|
[NSWorkspace.sharedWorkspace.notificationCenter removeObserver:self name:@"" object:nil];
|
||||||
@@ -89,7 +89,7 @@ static MPLockDaemon *_sharedInstance;
|
|||||||
if(_lockOnSleep != lockOnSleep) {
|
if(_lockOnSleep != lockOnSleep) {
|
||||||
_lockOnSleep = lockOnSleep;
|
_lockOnSleep = lockOnSleep;
|
||||||
if(_lockOnSleep) {
|
if(_lockOnSleep) {
|
||||||
[NSWorkspace.sharedWorkspace.notificationCenter addObserver:self selector:@selector(_lockDocumentsForNotification:) name:NSWorkspaceWillSleepNotification object:nil];
|
[NSWorkspace.sharedWorkspace.notificationCenter addObserver:self selector:@selector(_willSleepNotification:) name:NSWorkspaceWillSleepNotification object:nil];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
[NSWorkspace.sharedWorkspace.notificationCenter removeObserver:self name:NSWorkspaceWillSleepNotification object:nil];
|
[NSWorkspace.sharedWorkspace.notificationCenter removeObserver:self name:NSWorkspaceWillSleepNotification object:nil];
|
||||||
@@ -101,7 +101,7 @@ static MPLockDaemon *_sharedInstance;
|
|||||||
if(_lockOnScreenSleep != lockOnScreenSleep) {
|
if(_lockOnScreenSleep != lockOnScreenSleep) {
|
||||||
_lockOnScreenSleep = lockOnScreenSleep;
|
_lockOnScreenSleep = lockOnScreenSleep;
|
||||||
if(_lockOnScreenSleep) {
|
if(_lockOnScreenSleep) {
|
||||||
[NSWorkspace.sharedWorkspace.notificationCenter addObserver:self selector:@selector(_lockDocumentsForNotification:) name:NSWorkspaceScreensDidSleepNotification object:nil];
|
[NSWorkspace.sharedWorkspace.notificationCenter addObserver:self selector:@selector(_willScreenSleepNotification:) name:NSWorkspaceScreensDidSleepNotification object:nil];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
[NSWorkspace.sharedWorkspace.notificationCenter removeObserver:self name:NSWorkspaceScreensDidSleepNotification object:nil];
|
[NSWorkspace.sharedWorkspace.notificationCenter removeObserver:self name:NSWorkspaceScreensDidSleepNotification object:nil];
|
||||||
@@ -120,7 +120,14 @@ static MPLockDaemon *_sharedInstance;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
- (void)_lockDocumentsForNotification:(NSNotification *)notification {
|
|
||||||
|
- (void)_willLogOutNotification:(NSNotification *)notification {
|
||||||
|
[((MPAppDelegate *)NSApp.delegate) lockAllDocuments];
|
||||||
|
}
|
||||||
|
- (void)_willSleepNotification:(NSNotification *)notification {
|
||||||
|
[((MPAppDelegate *)NSApp.delegate) lockAllDocuments];
|
||||||
|
}
|
||||||
|
- (void)_willScreenSleepNotification:(NSNotification *)notification {
|
||||||
[((MPAppDelegate *)NSApp.delegate) lockAllDocuments];
|
[((MPAppDelegate *)NSApp.delegate) lockAllDocuments];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -40,10 +40,6 @@ NS_INLINE BOOL MPIsValidModifiedKey(MPModifiedKey k) {
|
|||||||
return (k.keyCode == kMPUnknownKeyCode);
|
return (k.keyCode == kMPUnknownKeyCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_INLINE NSString *MPStringFromModifiedKey(MPModifiedKey key) {
|
|
||||||
return [NSString stringWithFormat:@"keyCode:%hu %llud", key.keyCode, key.modifier];
|
|
||||||
}
|
|
||||||
|
|
||||||
@interface NSValue(NSValueMPModifiedKeyExtensions)
|
@interface NSValue(NSValueMPModifiedKeyExtensions)
|
||||||
@property (nonatomic, readonly, assign) MPModifiedKey modifiedKeyValue;
|
@property (nonatomic, readonly, assign) MPModifiedKey modifiedKeyValue;
|
||||||
+ (instancetype)valueWithModifiedKey:(MPModifiedKey)key;
|
+ (instancetype)valueWithModifiedKey:(MPModifiedKey)key;
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
NS_ASSUME_NONNULL_BEGIN
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
@interface MPNodeExpirationViewController : NSViewController <MPInspectorEditor>
|
@interface MPNodeExpirationViewController : NSViewController <MPTimeInfoInpspectorEditor>
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,6 @@
|
|||||||
|
|
||||||
@interface MPNodeExpirationViewController ()
|
@interface MPNodeExpirationViewController ()
|
||||||
|
|
||||||
@property (nonatomic, readonly, strong) KPKTimeInfo *representedTimeInfo;
|
|
||||||
@property (strong) IBOutlet NSButton *expiredCheckButton;
|
@property (strong) IBOutlet NSButton *expiredCheckButton;
|
||||||
@property (strong) IBOutlet NSButton *pickExpireDateButton;
|
@property (strong) IBOutlet NSButton *pickExpireDateButton;
|
||||||
|
|
||||||
@@ -61,7 +60,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (void)_updateValues {
|
- (void)_updateValues {
|
||||||
self.view.hidden = self.representedTimeInfo.expires;
|
self.view.hidden = !self.representedTimeInfo.expires;
|
||||||
self.expiredCheckButton.state = HNHUIStateForBool(self.representedTimeInfo.expires);
|
self.expiredCheckButton.state = HNHUIStateForBool(self.representedTimeInfo.expires);
|
||||||
NSValueTransformer *dateTransformer = [NSValueTransformer valueTransformerForName:MPExpiryDateValueTransformerName];
|
NSValueTransformer *dateTransformer = [NSValueTransformer valueTransformerForName:MPExpiryDateValueTransformerName];
|
||||||
self.expiredCheckButton.title = [dateTransformer transformedValue:self.representedTimeInfo.expirationDate];
|
self.expiredCheckButton.title = [dateTransformer transformedValue:self.representedTimeInfo.expirationDate];
|
||||||
|
|||||||
@@ -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="18122" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19529" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
<deployment identifier="macosx"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="18122"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19529"/>
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<objects>
|
<objects>
|
||||||
@@ -16,21 +16,21 @@
|
|||||||
<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="Hz6-mo-xeY">
|
<customView id="Hz6-mo-xeY">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="187" height="20"/>
|
<rect key="frame" x="0.0" y="0.0" width="187" height="22"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<stackView distribution="fill" orientation="horizontal" alignment="centerY" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" horizontalHuggingPriority="248" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="l8k-GC-FnL">
|
<stackView distribution="fill" orientation="horizontal" alignment="centerY" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" horizontalHuggingPriority="248" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="l8k-GC-FnL">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="187" height="20"/>
|
<rect key="frame" x="0.0" y="0.0" width="187" height="22"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button horizontalHuggingPriority="249" horizontalCompressionResistancePriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="HAQ-Wk-M7P">
|
<button horizontalHuggingPriority="249" horizontalCompressionResistancePriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="HAQ-Wk-M7P">
|
||||||
<rect key="frame" x="-2" y="1" width="150" height="18"/>
|
<rect key="frame" x="-2" y="2" width="150" height="18"/>
|
||||||
<buttonCell key="cell" type="check" title="Expires" bezelStyle="regularSquare" imagePosition="left" lineBreakMode="truncatingMiddle" state="on" inset="2" id="7kV-WE-lr3">
|
<buttonCell key="cell" type="check" title="Expires" bezelStyle="regularSquare" imagePosition="left" lineBreakMode="truncatingMiddle" state="on" inset="2" id="7kV-WE-lr3">
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
<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="G7C-WZ-ad7">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="G7C-WZ-ad7">
|
||||||
<rect key="frame" x="149" y="-7" width="45" height="32"/>
|
<rect key="frame" x="149" y="-6" width="45" height="32"/>
|
||||||
<buttonCell key="cell" type="push" bezelStyle="rounded" image="NSActionTemplate" imagePosition="only" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="hgC-Qj-aTs">
|
<buttonCell key="cell" type="push" bezelStyle="rounded" image="NSActionTemplate" imagePosition="only" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="hgC-Qj-aTs">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@@ -40,6 +40,10 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
</subviews>
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="G7C-WZ-ad7" secondAttribute="bottom" constant="1" id="62i-sg-sio"/>
|
||||||
|
<constraint firstItem="G7C-WZ-ad7" firstAttribute="top" secondItem="l8k-GC-FnL" secondAttribute="top" constant="1" id="QLH-zK-eyP"/>
|
||||||
|
</constraints>
|
||||||
<visibilityPriorities>
|
<visibilityPriorities>
|
||||||
<integer value="1000"/>
|
<integer value="1000"/>
|
||||||
<integer value="1000"/>
|
<integer value="1000"/>
|
||||||
@@ -56,7 +60,7 @@
|
|||||||
<constraint firstItem="l8k-GC-FnL" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" id="Qvv-5F-nde"/>
|
<constraint firstItem="l8k-GC-FnL" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" id="Qvv-5F-nde"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="l8k-GC-FnL" secondAttribute="trailing" id="ckb-kh-R60"/>
|
<constraint firstAttribute="trailing" secondItem="l8k-GC-FnL" secondAttribute="trailing" id="ckb-kh-R60"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
<point key="canvasLocation" x="-91" y="-25"/>
|
<point key="canvasLocation" x="-91.5" y="-41"/>
|
||||||
</customView>
|
</customView>
|
||||||
</objects>
|
</objects>
|
||||||
<resources>
|
<resources>
|
||||||
|
|||||||
18
MacPass/MPNodeIconViewController.h
Normal file
18
MacPass/MPNodeIconViewController.h
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
//
|
||||||
|
// MPNodeIconViewController.h
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 02.03.22.
|
||||||
|
// Copyright © 2022 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
#import "MPInspectorEditor.h"
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface MPNodeIconViewController : NSViewController <MPNodeInspectorEditor>
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
56
MacPass/MPNodeIconViewController.m
Normal file
56
MacPass/MPNodeIconViewController.m
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
//
|
||||||
|
// MPNodeIconViewController.m
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 02.03.22.
|
||||||
|
// Copyright © 2022 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "MPNodeIconViewController.h"
|
||||||
|
#import <KeePassKit/KeePassKit.h>
|
||||||
|
#import "MPEntryInspectorViewController.h"
|
||||||
|
|
||||||
|
#import "KPKNode+IconImage.h"
|
||||||
|
|
||||||
|
@interface MPNodeIconViewController ()
|
||||||
|
@property (strong) IBOutlet NSButton *imageButton;
|
||||||
|
@property (strong) IBOutlet NSTextField *textField;
|
||||||
|
@property (copy) NSUUID *iconUUID;
|
||||||
|
@property NSUInteger iconId;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation MPNodeIconViewController
|
||||||
|
|
||||||
|
@synthesize isEditor = _isEditor;
|
||||||
|
|
||||||
|
- (void)viewDidLoad {
|
||||||
|
[super viewDidLoad];
|
||||||
|
//self.imageView.cell.backgroundStyle = NSBackgroundStyleRaised;
|
||||||
|
[self.imageButton bind:NSImageBinding
|
||||||
|
toObject:self
|
||||||
|
withKeyPath:[NSString stringWithFormat:@"%@.%@", NSStringFromSelector(@selector(representedObject)), NSStringFromSelector(@selector(iconImage))]
|
||||||
|
options:@{NSConditionallySetsEnabledBindingOption: @NO}];
|
||||||
|
[self.textField bind:NSValueBinding
|
||||||
|
toObject:self
|
||||||
|
withKeyPath:[NSString stringWithFormat:@"%@.%@", NSStringFromSelector(@selector(representedObject)), NSStringFromSelector(@selector(title))]
|
||||||
|
options:@{NSNullPlaceholderBindingOption:NSLocalizedString(@"NO_TITLE", @"Fallback to items with no title")}];
|
||||||
|
[self _updateValueAndEditing];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (KPKNode *)representedNode {
|
||||||
|
if([self.representedObject isKindOfClass:KPKNode.class]) {
|
||||||
|
return (KPKNode *)self.representedObject;
|
||||||
|
}
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setIsEditor:(BOOL)isEditor {
|
||||||
|
_isEditor = isEditor;
|
||||||
|
[self _updateValueAndEditing];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)_updateValueAndEditing {
|
||||||
|
self.imageButton.enabled = self.isEditor;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
68
MacPass/MPNodeIconViewController.xib
Normal file
68
MacPass/MPNodeIconViewController.xib
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19529" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||||
|
<dependencies>
|
||||||
|
<deployment identifier="macosx"/>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19529"/>
|
||||||
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
|
</dependencies>
|
||||||
|
<objects>
|
||||||
|
<customObject id="-2" userLabel="File's Owner" customClass="MPNodeIconViewController">
|
||||||
|
<connections>
|
||||||
|
<outlet property="imageButton" destination="EO8-71-AW8" id="kgk-Bm-Hwv"/>
|
||||||
|
<outlet property="textField" destination="xou-fD-adZ" id="n93-XV-5dq"/>
|
||||||
|
<outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
|
||||||
|
</connections>
|
||||||
|
</customObject>
|
||||||
|
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||||
|
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||||
|
<customView id="Hz6-mo-xeY">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="495" height="32"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<textField horizontalHuggingPriority="249" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="xou-fD-adZ">
|
||||||
|
<rect key="frame" x="38" y="8" width="406" height="16"/>
|
||||||
|
<textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="aKF-2z-5ob">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="0HE-hi-9Hm">
|
||||||
|
<rect key="frame" x="443" y="-1" width="58" height="32"/>
|
||||||
|
<buttonCell key="cell" type="push" title="Edit" alternateTitle="Done" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="ueF-MQ-zDV">
|
||||||
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleEdit:" target="-1" id="cBO-qZ-fN3"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button translatesAutoresizingMaskIntoConstraints="NO" id="EO8-71-AW8">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="32" height="32"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="32" id="TEp-1p-b6O"/>
|
||||||
|
<constraint firstAttribute="width" constant="32" id="vue-ta-TCV"/>
|
||||||
|
</constraints>
|
||||||
|
<buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" imagePosition="only" alignment="center" imageScaling="proportionallyUpOrDown" inset="2" id="hbo-qV-oVP">
|
||||||
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="pickIcon:" target="-1" id="8Ad-dS-w36"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="0HE-hi-9Hm" firstAttribute="centerY" secondItem="Hz6-mo-xeY" secondAttribute="centerY" id="4rk-Ut-1ch"/>
|
||||||
|
<constraint firstItem="EO8-71-AW8" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" id="AxG-ML-ibN"/>
|
||||||
|
<constraint firstItem="xou-fD-adZ" firstAttribute="centerY" secondItem="Hz6-mo-xeY" secondAttribute="centerY" id="EYw-Zm-iiO"/>
|
||||||
|
<constraint firstItem="0HE-hi-9Hm" firstAttribute="leading" secondItem="xou-fD-adZ" secondAttribute="trailing" constant="8" symbolic="YES" id="J5A-t9-uim"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="0HE-hi-9Hm" secondAttribute="trailing" constant="1" id="QL9-uh-tCj"/>
|
||||||
|
<constraint firstItem="xou-fD-adZ" firstAttribute="leading" secondItem="EO8-71-AW8" secondAttribute="trailing" constant="8" symbolic="YES" id="TFI-Xr-6JG"/>
|
||||||
|
<constraint firstItem="EO8-71-AW8" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" id="bYm-Dz-12l"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="EO8-71-AW8" secondAttribute="bottom" id="uhZ-Es-YcW"/>
|
||||||
|
</constraints>
|
||||||
|
<point key="canvasLocation" x="231.5" y="-13.5"/>
|
||||||
|
</customView>
|
||||||
|
</objects>
|
||||||
|
</document>
|
||||||
17
MacPass/MPNodeTagViewController.h
Normal file
17
MacPass/MPNodeTagViewController.h
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
//
|
||||||
|
// MPNodeTagViewController.h
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 15.03.22.
|
||||||
|
// Copyright © 2022 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface MPNodeTagViewController : NSViewController
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
22
MacPass/MPNodeTagViewController.m
Normal file
22
MacPass/MPNodeTagViewController.m
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
//
|
||||||
|
// MPNodeTagViewController.m
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 15.03.22.
|
||||||
|
// Copyright © 2022 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "MPNodeTagViewController.h"
|
||||||
|
|
||||||
|
@interface MPNodeTagViewController ()
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation MPNodeTagViewController
|
||||||
|
|
||||||
|
- (void)viewDidLoad {
|
||||||
|
[super viewDidLoad];
|
||||||
|
// Do view setup here.
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
22
MacPass/MPNodeTagViewController.xib
Normal file
22
MacPass/MPNodeTagViewController.xib
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19529" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||||
|
<dependencies>
|
||||||
|
<deployment identifier="macosx"/>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19529"/>
|
||||||
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
|
</dependencies>
|
||||||
|
<objects>
|
||||||
|
<customObject id="-2" userLabel="File's Owner" customClass="MPNodeTagViewController">
|
||||||
|
<connections>
|
||||||
|
<outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
|
||||||
|
</connections>
|
||||||
|
</customObject>
|
||||||
|
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||||
|
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||||
|
<customView id="Hz6-mo-xeY">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="480" height="272"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<point key="canvasLocation" x="140" y="147"/>
|
||||||
|
</customView>
|
||||||
|
</objects>
|
||||||
|
</document>
|
||||||
@@ -1,9 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11134" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11134"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22690"/>
|
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<objects>
|
<objects>
|
||||||
<customObject id="-2" userLabel="File's Owner" customClass="MPNotificationPreferencesController">
|
<customObject id="-2" userLabel="File's Owner" customClass="MPNotificationPreferencesController">
|
||||||
@@ -16,7 +14,6 @@
|
|||||||
<customView id="Hz6-mo-xeY">
|
<customView id="Hz6-mo-xeY">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="480" height="272"/>
|
<rect key="frame" x="0.0" y="0.0" width="480" height="272"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
<point key="canvasLocation" x="140" y="-36"/>
|
|
||||||
</customView>
|
</customView>
|
||||||
</objects>
|
</objects>
|
||||||
</document>
|
</document>
|
||||||
|
|||||||
@@ -46,7 +46,6 @@ NSString *const _MPOutlinveViewHeaderViewIdentifier = @"HeaderCell";
|
|||||||
|
|
||||||
@interface MPOutlineViewController () {
|
@interface MPOutlineViewController () {
|
||||||
BOOL _bindingEstablished;
|
BOOL _bindingEstablished;
|
||||||
NSIndexSet *_storedSelectionIndexSet;
|
|
||||||
MPOutlineContextMenuDelegate *_menuDelegate;
|
MPOutlineContextMenuDelegate *_menuDelegate;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -101,6 +100,7 @@ NSString *const _MPOutlinveViewHeaderViewIdentifier = @"HeaderCell";
|
|||||||
name:MPDidActivateViewNotification
|
name:MPDidActivateViewNotification
|
||||||
object:self.outlineView];
|
object:self.outlineView];
|
||||||
|
|
||||||
|
|
||||||
NSView *clipView = self.outlineView.enclosingScrollView.contentView;
|
NSView *clipView = self.outlineView.enclosingScrollView.contentView;
|
||||||
[NSNotificationCenter.defaultCenter addObserver:self
|
[NSNotificationCenter.defaultCenter addObserver:self
|
||||||
selector:@selector(_outlineDidScroll:)
|
selector:@selector(_outlineDidScroll:)
|
||||||
@@ -226,8 +226,6 @@ NSString *const _MPOutlinveViewHeaderViewIdentifier = @"HeaderCell";
|
|||||||
- (void)registerNotificationsForDocument:(MPDocument *)document {
|
- (void)registerNotificationsForDocument:(MPDocument *)document {
|
||||||
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(_didAddGroup:) name:MPDocumentDidAddGroupNotification object:document];
|
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(_didAddGroup:) name:MPDocumentDidAddGroupNotification object:document];
|
||||||
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(_didRevertDocument:) name:MPDocumentDidRevertNotification object:document];
|
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(_didRevertDocument:) name:MPDocumentDidRevertNotification object:document];
|
||||||
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(_didEnterSearch:) name:MPDocumentDidEnterSearchNotification object:document];
|
|
||||||
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(_didExitSearch:) name:MPDocumentDidExitSearchNotification object:document];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)clearSelection {
|
- (void)clearSelection {
|
||||||
@@ -275,16 +273,6 @@ NSString *const _MPOutlinveViewHeaderViewIdentifier = @"HeaderCell";
|
|||||||
[self clearSelection];
|
[self clearSelection];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)_didEnterSearch:(NSNotification *)notification {
|
|
||||||
// store seelection
|
|
||||||
_storedSelectionIndexSet = self.outlineView.selectedRowIndexes;
|
|
||||||
[self clearSelection];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)_didExitSearch:(NSNotification *)notification {
|
|
||||||
[self.outlineView selectRowIndexes:_storedSelectionIndexSet byExtendingSelection:NO];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (id)itemUnderMouse {
|
- (id)itemUnderMouse {
|
||||||
NSPoint mouseLocation = [self.outlineView.window mouseLocationOutsideOfEventStream];
|
NSPoint mouseLocation = [self.outlineView.window mouseLocationOutsideOfEventStream];
|
||||||
NSPoint localPoint = [self.outlineView convertPoint:mouseLocation fromView:self.outlineView.window.contentView];
|
NSPoint localPoint = [self.outlineView convertPoint:mouseLocation fromView:self.outlineView.window.contentView];
|
||||||
|
|||||||
@@ -151,7 +151,7 @@ typedef NS_ENUM(NSUInteger, MPPasswordEditKeyError) {
|
|||||||
- (IBAction)generateKey:(id)sender {
|
- (IBAction)generateKey:(id)sender {
|
||||||
MPDocument *document = self.document;
|
MPDocument *document = self.document;
|
||||||
KPKFileVersion fileVersion = document.tree.minimumVersion;
|
KPKFileVersion fileVersion = document.tree.minimumVersion;
|
||||||
NSArray *fileTypes;
|
NSArray *fileTypes = @[];
|
||||||
KPKKeyFileType keyFileType;
|
KPKKeyFileType keyFileType;
|
||||||
|
|
||||||
if(fileVersion.format == KPKDatabaseFormatUnknown) {
|
if(fileVersion.format == KPKDatabaseFormatUnknown) {
|
||||||
|
|||||||
@@ -21,14 +21,14 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#import "MPViewController.h"
|
#import "MPViewController.h"
|
||||||
#import "KeePassKit/KeePassKit.h"
|
|
||||||
|
|
||||||
@class KPKCompositeKey;
|
@class KPKCompositeKey;
|
||||||
|
|
||||||
@interface MPPasswordInputController : MPViewController <NSTouchBarDelegate>
|
@interface MPPasswordInputController : MPViewController <NSTouchBarDelegate>
|
||||||
|
|
||||||
typedef BOOL (^passwordInputCompletionBlock)(KPKCompositeKey *key, NSURL* keyFileURL, BOOL didCancel, NSError *__autoreleasing*error);
|
typedef BOOL (^passwordInputCompletionBlock)(NSString *password, NSURL *keyURL, BOOL didCancel, NSError *__autoreleasing*error);
|
||||||
|
|
||||||
|
- (void)requestPasswordWithCompletionHandler:(passwordInputCompletionBlock)completionHandler;
|
||||||
- (void)requestPasswordWithMessage:(NSString *)message cancelLabel:(NSString *)cancelLabel completionHandler:(passwordInputCompletionBlock)completionHandler;
|
- (void)requestPasswordWithMessage:(NSString *)message cancelLabel:(NSString *)cancelLabel completionHandler:(passwordInputCompletionBlock)completionHandler;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -24,13 +24,9 @@
|
|||||||
#import "MPAppDelegate.h"
|
#import "MPAppDelegate.h"
|
||||||
#import "MPDocumentWindowController.h"
|
#import "MPDocumentWindowController.h"
|
||||||
#import "MPDocument.h"
|
#import "MPDocument.h"
|
||||||
#import "MPDocument+BiometricEncryptionSupport.h"
|
|
||||||
#import "MPSettingsHelper.h"
|
#import "MPSettingsHelper.h"
|
||||||
#import "MPPathControl.h"
|
#import "MPPathControl.h"
|
||||||
#import "MPTouchBarButtonCreator.h"
|
#import "MPTouchBarButtonCreator.h"
|
||||||
#import "MPSettingsHelper.h"
|
|
||||||
#import "MPConstants.h"
|
|
||||||
#import "MPTouchIdCompositeKeyStore.h"
|
|
||||||
|
|
||||||
#import "HNHUi/HNHUi.h"
|
#import "HNHUi/HNHUi.h"
|
||||||
|
|
||||||
@@ -48,9 +44,6 @@
|
|||||||
@property (weak) IBOutlet NSButton *enablePasswordCheckBox;
|
@property (weak) IBOutlet NSButton *enablePasswordCheckBox;
|
||||||
@property (weak) IBOutlet NSButton *unlockButton;
|
@property (weak) IBOutlet NSButton *unlockButton;
|
||||||
@property (weak) IBOutlet NSButton *cancelButton;
|
@property (weak) IBOutlet NSButton *cancelButton;
|
||||||
@property (weak) IBOutlet NSButton *touchIdButton;
|
|
||||||
@property (weak) IBOutlet NSButton *touchIdEnabledButton;
|
|
||||||
@property (strong) IBOutlet NSPopUpButton *touchIdModeButton;
|
|
||||||
|
|
||||||
@property (copy) NSString *message;
|
@property (copy) NSString *message;
|
||||||
@property (copy) NSString *cancelLabel;
|
@property (copy) NSString *cancelLabel;
|
||||||
@@ -88,37 +81,6 @@
|
|||||||
[self.enablePasswordCheckBox bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(enablePassword)) options:nil];
|
[self.enablePasswordCheckBox bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(enablePassword)) options:nil];
|
||||||
[self.togglePasswordButton bind:NSEnabledBinding toObject:self withKeyPath:NSStringFromSelector(@selector(enablePassword)) options:nil];
|
[self.togglePasswordButton bind:NSEnabledBinding toObject:self withKeyPath:NSStringFromSelector(@selector(enablePassword)) options:nil];
|
||||||
[self.passwordTextField bind:NSEnabledBinding toObject:self withKeyPath:NSStringFromSelector(@selector(enablePassword)) options:nil];
|
[self.passwordTextField bind:NSEnabledBinding toObject:self withKeyPath:NSStringFromSelector(@selector(enablePassword)) options:nil];
|
||||||
|
|
||||||
NSMenu* touchIDMenu = [[NSMenu alloc] init];
|
|
||||||
NSMenuItem *disabledItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"TOUCHID_DISABLED", @"menu item to disable touchid key storage")
|
|
||||||
action:NULL
|
|
||||||
keyEquivalent:@""];
|
|
||||||
NSMenuItem *transitentItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"TOUCHID_TRANSIENT_KEY_STORAGE", @"menu item to enable transient touchid key storage")
|
|
||||||
action:NULL
|
|
||||||
keyEquivalent:@""];
|
|
||||||
NSMenuItem *persistentItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"TOUCHID_PERSISTENT_KEY_STORAGE", @"menu item to enable persisntent touchid key storage")
|
|
||||||
action:NULL
|
|
||||||
keyEquivalent:@""];
|
|
||||||
|
|
||||||
disabledItem.tag = MPTouchIDKeyStorageDisabled;
|
|
||||||
transitentItem.tag = MPTouchIDKeyStorageTransient;
|
|
||||||
persistentItem.tag = MPTouchIDKeyStoragePersistent;
|
|
||||||
|
|
||||||
touchIDMenu.itemArray = @[disabledItem, transitentItem, persistentItem];
|
|
||||||
self.touchIdModeButton.menu = touchIDMenu;
|
|
||||||
[self.touchIdModeButton bind:NSSelectedTagBinding
|
|
||||||
toObject:NSUserDefaultsController.sharedUserDefaultsController
|
|
||||||
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyTouchIdEnabled]
|
|
||||||
options:nil];
|
|
||||||
[self.touchIdEnabledButton bind:NSValueBinding
|
|
||||||
toObject:NSUserDefaultsController.sharedUserDefaultsController
|
|
||||||
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyTouchIdEnabled]
|
|
||||||
options:nil];
|
|
||||||
self.touchIdEnabledButton.hidden = YES;
|
|
||||||
if (@available(macOS 10.13.4, *)) {
|
|
||||||
self.touchIdEnabledButton.hidden = NO;
|
|
||||||
[self _touchIdUpdateToolTip];
|
|
||||||
}
|
|
||||||
[self _reset];
|
[self _reset];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -133,6 +95,10 @@
|
|||||||
[self _reset];
|
[self _reset];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)requestPasswordWithCompletionHandler:(passwordInputCompletionBlock)completionHandler {
|
||||||
|
[self requestPasswordWithMessage:nil cancelLabel:nil completionHandler:completionHandler];
|
||||||
|
}
|
||||||
|
|
||||||
#pragma mark Properties
|
#pragma mark Properties
|
||||||
- (void)setEnablePassword:(BOOL)enablePassword {
|
- (void)setEnablePassword:(BOOL)enablePassword {
|
||||||
if(_enablePassword != enablePassword) {
|
if(_enablePassword != enablePassword) {
|
||||||
@@ -161,23 +127,8 @@
|
|||||||
NSString *password = self.enablePassword ? self.passwordTextField.stringValue : nil;
|
NSString *password = self.enablePassword ? self.passwordTextField.stringValue : nil;
|
||||||
|
|
||||||
BOOL cancel = (sender == self.cancelButton);
|
BOOL cancel = (sender == self.cancelButton);
|
||||||
NSURL* keyURL = self.keyPathControl.URL;
|
BOOL result = self.completionHandler(password, self.keyPathControl.URL, cancel, &error);
|
||||||
NSData *keyFileData = keyURL ? [NSData dataWithContentsOfURL:keyURL] : nil;
|
if(cancel || result) {
|
||||||
KPKKey* passwordKey = [KPKKey keyWithPassword:password];
|
|
||||||
KPKKey* fileKey = [KPKKey keyWithKeyFileData:keyFileData];
|
|
||||||
KPKCompositeKey* compositeKey = [[KPKCompositeKey alloc] init];
|
|
||||||
[compositeKey addKey:passwordKey];
|
|
||||||
[compositeKey addKey:fileKey];
|
|
||||||
/* After the completion handler finished we no longer have a windowController set */
|
|
||||||
NSString* documentKey = [self biometricKeyForCurrentDocument];
|
|
||||||
BOOL result = self.completionHandler(compositeKey, keyURL, cancel, &error);
|
|
||||||
if(result) {
|
|
||||||
if(nil != documentKey) {
|
|
||||||
[MPTouchIdCompositeKeyStore.defaultStore saveCompositeKey:compositeKey forDocumentKey:documentKey];
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if(cancel) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
[self _showError:error];
|
[self _showError:error];
|
||||||
@@ -186,62 +137,6 @@
|
|||||||
[self.view.window shakeWindow:nil];
|
[self.view.window shakeWindow:nil];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
- (KPKCompositeKey*)_touchIdDecryptCompositeKey:(NSData*)encryptedKey {
|
|
||||||
NSError *error;
|
|
||||||
return [MPTouchIdCompositeKeyStore.defaultStore compositeKeyForEncryptedKeyData:encryptedKey error:&error];
|
|
||||||
}*/
|
|
||||||
|
|
||||||
- (NSString *)biometricKeyForCurrentDocument {
|
|
||||||
MPDocument* currentDocument = (MPDocument *)self.windowController.document;
|
|
||||||
return currentDocument.biometricKey;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (bool) _touchIdIsUnlockAvailable {
|
|
||||||
MPDocument *currentDocument = (MPDocument *)self.windowController.document;
|
|
||||||
return (nil != currentDocument.encryptedKeyData);
|
|
||||||
}
|
|
||||||
|
|
||||||
- (IBAction)unlockWithTouchID:(id)sender {
|
|
||||||
NSString* documentKey = [self biometricKeyForCurrentDocument];
|
|
||||||
if(nil == documentKey) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
NSData* encryptedKey = [MPTouchIdCompositeKeyStore.defaultStore loadEncryptedCompositeKeyForDocumentKey:documentKey];
|
|
||||||
if(!encryptedKey) {
|
|
||||||
self.touchIdButton.enabled = NO;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
NSError *error;
|
|
||||||
KPKCompositeKey* compositeKey = [MPTouchIdCompositeKeyStore.defaultStore compositeKeyForEncryptedKeyData:encryptedKey error:&error];
|
|
||||||
if(!compositeKey) {
|
|
||||||
self.touchIdButton.enabled = NO;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
bool success = self.completionHandler(compositeKey, NULL, false, &error);
|
|
||||||
if(success) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// TODO: clear encryptedKey if password was wrong? Show user feedback?
|
|
||||||
self.touchIdButton.enabled = NO;
|
|
||||||
[self _showError:error];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (IBAction)touchIdEnabledChanged:(id)sender {
|
|
||||||
[self _touchIdUpdateToolTip];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void) _touchIdUpdateToolTip {
|
|
||||||
switch(self.touchIdEnabledButton.state) {
|
|
||||||
case NSControlStateValueOn:
|
|
||||||
self.touchIdEnabledButton.toolTip = NSLocalizedString(@"TOOLTIP_TOUCHID_ENABELD", @"Tooltip displayed when TouchID is is fully enabeld");
|
|
||||||
case NSControlStateValueOff:
|
|
||||||
self.touchIdEnabledButton.toolTip = NSLocalizedString(@"TOOLTIP_TOUCHID_DISABLED", @"Tooltip displayed when TouchID is disabled");
|
|
||||||
case NSControlStateValueMixed:
|
|
||||||
default:
|
|
||||||
self.touchIdEnabledButton.toolTip = NSLocalizedString(@"TOOLTIP_TOUCHID_TRANSIENT", @"Tooltip displayed when TouchID is in transient (inmemory) mode");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (IBAction)resetKeyFile:(id)sender {
|
- (IBAction)resetKeyFile:(id)sender {
|
||||||
/* If the reset was triggered by ourselves we want to preselect the keyfile */
|
/* If the reset was triggered by ourselves we want to preselect the keyfile */
|
||||||
@@ -258,9 +153,6 @@
|
|||||||
self.enablePassword = YES;
|
self.enablePassword = YES;
|
||||||
self.passwordTextField.stringValue = @"";
|
self.passwordTextField.stringValue = @"";
|
||||||
self.messageInfoTextField.hidden = (nil == self.message);
|
self.messageInfoTextField.hidden = (nil == self.message);
|
||||||
self.touchIdButton.hidden = ![self _touchIdIsUnlockAvailable];
|
|
||||||
self.touchIdButton.enabled = YES;
|
|
||||||
|
|
||||||
if(self.message) {
|
if(self.message) {
|
||||||
self.messageInfoTextField.stringValue = self.message;
|
self.messageInfoTextField.stringValue = self.message;
|
||||||
self.messageImageView.image = [NSImage imageNamed:NSImageNameInfo];
|
self.messageImageView.image = [NSImage imageNamed:NSImageNameInfo];
|
||||||
@@ -344,4 +236,5 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ typedef NS_ENUM(NSUInteger, MPPasteboardOverlayInfoType) {
|
|||||||
MPPasteboardOverlayInfoPassword,
|
MPPasteboardOverlayInfoPassword,
|
||||||
MPPasteboardOverlayInfoUsername,
|
MPPasteboardOverlayInfoUsername,
|
||||||
MPPasteboardOverlayInfoURL,
|
MPPasteboardOverlayInfoURL,
|
||||||
MPPasteboardOverlayInfoTOTP,
|
|
||||||
MPPasteboardOverlayInfoCustom, // overlay info that a custom field was copied
|
MPPasteboardOverlayInfoCustom, // overlay info that a custom field was copied
|
||||||
MPPasteboardOverlayInfoReference // overlay info that a reference that was copied
|
MPPasteboardOverlayInfoReference // overlay info that a reference that was copied
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -154,11 +154,6 @@ NSString *const MPPasteBoardTypeSource = @"org.nspasteboard.source";
|
|||||||
infoText = NSLocalizedString(@"COPIED_USERNAME", @"Username was copied to the pasteboard");
|
infoText = NSLocalizedString(@"COPIED_USERNAME", @"Username was copied to the pasteboard");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MPPasteboardOverlayInfoTOTP:
|
|
||||||
infoImage = [MPIconHelper icon:MPIconPassword];
|
|
||||||
infoText = NSLocalizedString(@"COPIED_TOTP", "TOTP was copied to the pasteboard");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MPPasteboardOverlayInfoCustom:
|
case MPPasteboardOverlayInfoCustom:
|
||||||
infoImage = [MPIconHelper icon:MPIconPassword];
|
infoImage = [MPIconHelper icon:MPIconPassword];
|
||||||
infoText = [NSString stringWithFormat:NSLocalizedString(@"COPIED_FIELD_%@", "Field name that was copied to the pasteboard"), name];
|
infoText = [NSString stringWithFormat:NSLocalizedString(@"COPIED_FIELD_%@", "Field name that was copied to the pasteboard"), name];
|
||||||
|
|||||||
@@ -92,9 +92,7 @@ typedef NS_ENUM(NSUInteger, MPPickfieldTableColumn) {
|
|||||||
view.textField.stringValue = rowItem.name;
|
view.textField.stringValue = rowItem.name;
|
||||||
break;
|
break;
|
||||||
case MPPIckfieldValueTableColumn:
|
case MPPIckfieldValueTableColumn:
|
||||||
view.textField.stringValue = (rowItem.isProtected
|
view.textField.stringValue = rowItem.isProtected ? @"•••" : rowItem.value;
|
||||||
? NSLocalizedString(@"PROTECTED_PASSWORD_STRING", @"String to show an obfuscated password. Something like three dots.")
|
|
||||||
: rowItem.value);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ FOUNDATION_EXPORT NSString *const MPPluginDescriptionInfoDictionaryKey;
|
|||||||
#pragma mark Supported Plugin Protocolls
|
#pragma mark Supported Plugin Protocolls
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Adopting this protocoll allows for custom settings in the Plugin settings pane.
|
Adopting this protocolls allows for custom settings in the Plugin settings pane.
|
||||||
MacPass will load your view controller and place it inside the settings window
|
MacPass will load your view controller and place it inside the settings window
|
||||||
when a user has selected your plugin in the list
|
when a user has selected your plugin in the list
|
||||||
*/
|
*/
|
||||||
@@ -71,8 +71,8 @@ FOUNDATION_EXPORT NSString *const MPPluginDescriptionInfoDictionaryKey;
|
|||||||
@end
|
@end
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Adopt this protocoll if your plugin can extract window title information for a set of applications
|
Adopt this protocoll if you plugin can extract window title information for a set of applications
|
||||||
This way, MacPass might yield better results for autotype. Beware that this might break interoparbility
|
This way, MacPass might yield better results for autotype. Beware that his might break interoparbility
|
||||||
*/
|
*/
|
||||||
@protocol MPAutotypeWindowTitleResolverPlugin <NSObject>
|
@protocol MPAutotypeWindowTitleResolverPlugin <NSObject>
|
||||||
@required
|
@required
|
||||||
@@ -113,7 +113,7 @@ FOUNDATION_EXPORT NSString *const MPPluginDescriptionInfoDictionaryKey;
|
|||||||
@protocol MPImportPlugin <NSObject>
|
@protocol MPImportPlugin <NSObject>
|
||||||
@required
|
@required
|
||||||
/**
|
/**
|
||||||
Called by the host to upate a menu item for importing.
|
Called by the Host to upate a menu item for importing.
|
||||||
You are supposed to update the title to something meaningfull.
|
You are supposed to update the title to something meaningfull.
|
||||||
target and action will get set by host, so do not rely on them
|
target and action will get set by host, so do not rely on them
|
||||||
|
|
||||||
@@ -122,7 +122,7 @@ FOUNDATION_EXPORT NSString *const MPPluginDescriptionInfoDictionaryKey;
|
|||||||
- (void)prepareImportMenuItem:(NSMenuItem *)item;
|
- (void)prepareImportMenuItem:(NSMenuItem *)item;
|
||||||
/**
|
/**
|
||||||
Called by the host when an import is about to happen.
|
Called by the host when an import is about to happen.
|
||||||
Update the panel to allow it to work for all the files and formats you can open.
|
Update the panel to allow work for all the files and formats you can open.
|
||||||
|
|
||||||
Host will simply run the panel with - beginSheetModalForWindow:completionHandler:
|
Host will simply run the panel with - beginSheetModalForWindow:completionHandler:
|
||||||
and will call treeForRunningOpenPanel:withResponse: afterwards to handle the result.
|
and will call treeForRunningOpenPanel:withResponse: afterwards to handle the result.
|
||||||
|
|||||||
@@ -26,7 +26,6 @@
|
|||||||
|
|
||||||
typedef NS_ENUM(NSUInteger, MPPreferencesTab) {
|
typedef NS_ENUM(NSUInteger, MPPreferencesTab) {
|
||||||
MPPreferencesTabGeneral,
|
MPPreferencesTabGeneral,
|
||||||
MPPreferencesTabSecurity,
|
|
||||||
MPPreferencesTabIntegration,
|
MPPreferencesTabIntegration,
|
||||||
MPPreferencesTabWorkflow,
|
MPPreferencesTabWorkflow,
|
||||||
MPPreferencesTabUpdate,
|
MPPreferencesTabUpdate,
|
||||||
|
|||||||
@@ -30,7 +30,6 @@
|
|||||||
#import "MPUpdatePreferencesController.h"
|
#import "MPUpdatePreferencesController.h"
|
||||||
#import "MPPluginPreferencesController.h"
|
#import "MPPluginPreferencesController.h"
|
||||||
#import "MPTabViewController.h"
|
#import "MPTabViewController.h"
|
||||||
#import "MPSecurityPreferencesController.h"
|
|
||||||
|
|
||||||
@interface MPPreferencesWindowController ()
|
@interface MPPreferencesWindowController ()
|
||||||
|
|
||||||
@@ -111,9 +110,6 @@
|
|||||||
case MPPreferencesTabPlugins:
|
case MPPreferencesTabPlugins:
|
||||||
tabClass = MPPluginPreferencesController.class;
|
tabClass = MPPluginPreferencesController.class;
|
||||||
break;
|
break;
|
||||||
case MPPreferencesTabSecurity:
|
|
||||||
tabClass = MPSecurityPreferencesController.class;
|
|
||||||
break;
|
|
||||||
case MPPreferencesTabIntegration:
|
case MPPreferencesTabIntegration:
|
||||||
tabClass = MPIntegrationPreferencesController.class;
|
tabClass = MPIntegrationPreferencesController.class;
|
||||||
break;
|
break;
|
||||||
@@ -140,7 +136,6 @@
|
|||||||
|
|
||||||
- (void)_setupDefaultPreferencesTabs {
|
- (void)_setupDefaultPreferencesTabs {
|
||||||
NSArray<NSViewController<MPPreferencesTab>*> *controllers = @[ [[MPGeneralPreferencesController alloc] init],
|
NSArray<NSViewController<MPPreferencesTab>*> *controllers = @[ [[MPGeneralPreferencesController alloc] init],
|
||||||
[[MPSecurityPreferencesController alloc] init],
|
|
||||||
[[MPIntegrationPreferencesController alloc] init],
|
[[MPIntegrationPreferencesController alloc] init],
|
||||||
[[MPWorkflowPreferencesController alloc] init],
|
[[MPWorkflowPreferencesController alloc] init],
|
||||||
[[MPUpdatePreferencesController alloc] init],
|
[[MPUpdatePreferencesController alloc] init],
|
||||||
|
|||||||
@@ -7,33 +7,9 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#import "MPSecurityDatabaseSettingsViewController.h"
|
#import "MPSecurityDatabaseSettingsViewController.h"
|
||||||
#import "MPDocument.h"
|
|
||||||
#import <KeePassKit/KeePassKit.h>
|
|
||||||
|
|
||||||
|
|
||||||
@interface MPSecurityDatabaseSettingsViewController ()
|
@interface MPSecurityDatabaseSettingsViewController ()
|
||||||
|
|
||||||
@property (assign) NSInteger argon2dMemory;
|
|
||||||
@property (assign) NSInteger argon2idMemory;
|
|
||||||
|
|
||||||
@property (strong) IBOutlet NSButton *createKeyDerivationParametersButton;
|
|
||||||
@property (strong) IBOutlet NSPopUpButton *cipherPopupButton;
|
|
||||||
@property (strong) IBOutlet NSPopUpButton *keyDerivationPopupButton;
|
|
||||||
@property (strong) IBOutlet NSTabView *keyDerivationSettingsTabView;
|
|
||||||
|
|
||||||
/* AES */
|
|
||||||
@property (strong) IBOutlet NSTextField *aesEncryptionRoundsTextField;
|
|
||||||
/* Argon2d */
|
|
||||||
@property (strong) IBOutlet NSTextField *argon2dThreadsTextField;
|
|
||||||
@property (strong) IBOutlet NSTextField *argon2dIterationsTextField;
|
|
||||||
@property (strong) IBOutlet NSTextField *argon2dMemoryTextField;
|
|
||||||
@property (strong) IBOutlet NSStepper *argon2dMemoryStepper;
|
|
||||||
/* Argon2id */
|
|
||||||
@property (strong) IBOutlet NSTextField *argon2idThreadsTextField;
|
|
||||||
@property (strong) IBOutlet NSTextField *argon2idIterationsTextField;
|
|
||||||
@property (strong) IBOutlet NSTextField *argon2idMemoryTextField;
|
|
||||||
@property (strong) IBOutlet NSStepper *argon2idMemoryStepper;
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation MPSecurityDatabaseSettingsViewController
|
@implementation MPSecurityDatabaseSettingsViewController
|
||||||
@@ -43,75 +19,4 @@
|
|||||||
// Do view setup here.
|
// Do view setup here.
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)_setupSecurityTab {
|
|
||||||
|
|
||||||
MPDocument *document = (MPDocument *)self.view.window.windowController.document;
|
|
||||||
KPKTree *tree = document.tree;
|
|
||||||
KPKMetaData *metaData = tree.metaData;
|
|
||||||
|
|
||||||
/*
|
|
||||||
If kdf or cipher is not found, exceptions are thrown.
|
|
||||||
This should not happen since we should not be able to load a file with unknown cipher/kdf
|
|
||||||
*/
|
|
||||||
KPKKeyDerivation *keyDerivation = [KPKKeyDerivation keyDerivationWithParameters:metaData.keyDerivationParameters];
|
|
||||||
NSUInteger kdfIndex = [self.keyDerivationPopupButton.menu indexOfItemWithRepresentedObject:keyDerivation.uuid];
|
|
||||||
[self.keyDerivationPopupButton selectItemAtIndex:kdfIndex];
|
|
||||||
[self.keyDerivationSettingsTabView selectTabViewItemWithIdentifier:keyDerivation.uuid];
|
|
||||||
|
|
||||||
/* fill defaults for AES */
|
|
||||||
KPKAESKeyDerivation *aesKdf = [[KPKAESKeyDerivation alloc] initWithParameters:[KPKAESKeyDerivation defaultParameters]];
|
|
||||||
self.aesEncryptionRoundsTextField.integerValue = aesKdf.rounds;
|
|
||||||
|
|
||||||
/* fill defaults for Argon2d */
|
|
||||||
KPKArgon2DKeyDerivation *argon2dKdf = [[KPKArgon2DKeyDerivation alloc] initWithParameters:[KPKArgon2DKeyDerivation defaultParameters]];
|
|
||||||
self.argon2dIterationsTextField.integerValue = argon2dKdf.iterations;
|
|
||||||
self.argon2dMemory = argon2dKdf.memory;
|
|
||||||
self.argon2dThreadsTextField.integerValue = argon2dKdf.threads;
|
|
||||||
|
|
||||||
/* fill defaults for Argon2id */
|
|
||||||
KPKArgon2IDKeyDerivation *argon2idKdf = [[KPKArgon2IDKeyDerivation alloc] initWithParameters:[KPKArgon2IDKeyDerivation defaultParameters]];
|
|
||||||
self.argon2idIterationsTextField.integerValue = argon2idKdf.iterations;
|
|
||||||
self.argon2idMemory = argon2idKdf.memory;
|
|
||||||
self.argon2idThreadsTextField.integerValue = argon2idKdf.threads;
|
|
||||||
|
|
||||||
if([keyDerivation isMemberOfClass:KPKAESKeyDerivation.class]) {
|
|
||||||
/* set to database values */
|
|
||||||
KPKAESKeyDerivation *aesKdf = (KPKAESKeyDerivation *)keyDerivation;
|
|
||||||
self.aesEncryptionRoundsTextField.integerValue = aesKdf.rounds;
|
|
||||||
self.createKeyDerivationParametersButton.enabled = YES;
|
|
||||||
}
|
|
||||||
else if([keyDerivation isMemberOfClass:KPKArgon2DKeyDerivation.class]) {
|
|
||||||
/* set to database value */
|
|
||||||
KPKArgon2DKeyDerivation *argon2dKdf = (KPKArgon2DKeyDerivation *)keyDerivation;
|
|
||||||
self.argon2dMemory = argon2dKdf.memory;
|
|
||||||
self.argon2dThreadsTextField.integerValue = argon2dKdf.threads;
|
|
||||||
self.argon2dIterationsTextField.integerValue = argon2dKdf.iterations;
|
|
||||||
}
|
|
||||||
else if([keyDerivation isMemberOfClass:KPKArgon2IDKeyDerivation.class]) {
|
|
||||||
/* set to database value */
|
|
||||||
KPKArgon2IDKeyDerivation *argon2idKdf = (KPKArgon2IDKeyDerivation *)keyDerivation;
|
|
||||||
self.argon2idMemory = argon2idKdf.memory;
|
|
||||||
self.argon2idThreadsTextField.integerValue = argon2idKdf.threads;
|
|
||||||
self.argon2idIterationsTextField.integerValue = argon2idKdf.iterations;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
NSAssert(NO, @"Unkown key derivation");
|
|
||||||
}
|
|
||||||
|
|
||||||
self.argon2dMemoryStepper.minValue = 8*1024; // 8KB minimum
|
|
||||||
self.argon2dMemoryStepper.maxValue = NSIntegerMax;
|
|
||||||
self.argon2dMemoryStepper.increment = 1024*1024; // 1 megabytes steps
|
|
||||||
[self.argon2dMemoryTextField bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(argon2dMemory)) options:nil];
|
|
||||||
[self.argon2dMemoryStepper bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(argon2dMemory)) options:nil];
|
|
||||||
|
|
||||||
self.argon2idMemoryStepper.minValue = 8*1024; // 8KB minimum
|
|
||||||
self.argon2idMemoryStepper.maxValue = NSIntegerMax;
|
|
||||||
self.argon2idMemoryStepper.increment = 1024*1024; // 1 megabytes steps
|
|
||||||
[self.argon2idMemoryTextField bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(argon2idMemory)) options:nil];
|
|
||||||
[self.argon2idMemoryStepper bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(argon2idMemory)) options:nil];
|
|
||||||
|
|
||||||
NSUInteger cipherIndex = [self.cipherPopupButton.menu indexOfItemWithRepresentedObject:metaData.cipherUUID];
|
|
||||||
[self.cipherPopupButton selectItemAtIndex:cipherIndex];
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -1,348 +1,19 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11134" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11134"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/>
|
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<objects>
|
<objects>
|
||||||
<customObject id="-2" userLabel="File's Owner" customClass="MPSecurityDatabaseSettingsViewController">
|
<customObject id="-2" userLabel="File's Owner" customClass="MPSecurityDatabaseSettingsViewController">
|
||||||
<connections>
|
<connections>
|
||||||
<outlet property="argon2idThreadsTextField" destination="dgK-W7-6ko" id="Kx2-bh-Re9"/>
|
|
||||||
<outlet property="createKeyDerivationParametersButton" destination="NQD-8z-yEk" id="Xyq-Q2-xfh"/>
|
|
||||||
<outlet property="keyDerivationPopupButton" destination="HXH-FA-g4K" id="gGN-Py-oOX"/>
|
|
||||||
<outlet property="keyDerivationSettingsTabView" destination="2Rh-L6-aPE" id="2lx-QL-81N"/>
|
|
||||||
<outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
|
<outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
|
||||||
</connections>
|
</connections>
|
||||||
</customObject>
|
</customObject>
|
||||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||||
<customView id="Hz6-mo-xeY">
|
<customView id="Hz6-mo-xeY">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="575" height="742"/>
|
<rect key="frame" x="0.0" y="0.0" width="480" height="272"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
<subviews>
|
|
||||||
<box misplaced="YES" title="Key derivation" translatesAutoresizingMaskIntoConstraints="NO" id="qbM-un-eXz">
|
|
||||||
<rect key="frame" x="17" y="407" width="554" height="253"/>
|
|
||||||
<view key="contentView" id="MOf-XP-Xg8">
|
|
||||||
<rect key="frame" x="4" y="5" width="546" height="233"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
|
||||||
<subviews>
|
|
||||||
<tabView drawsBackground="NO" type="noTabsNoBorder" translatesAutoresizingMaskIntoConstraints="NO" id="2Rh-L6-aPE">
|
|
||||||
<rect key="frame" x="11" y="-321" width="511" height="61"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<tabViewItems>
|
|
||||||
<tabViewItem label="Aes" identifier="1" id="l3r-tx-ISG">
|
|
||||||
<view key="view" id="Oyh-DQ-bFG">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="511" height="61"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
|
||||||
<subviews>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="R5P-C9-Xmn">
|
|
||||||
<rect key="frame" x="125" y="23" width="50" height="16"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Rounds" id="omn-YS-0WC">
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="g3a-6m-F6j">
|
|
||||||
<rect key="frame" x="181" y="20" width="150" height="21"/>
|
|
||||||
<constraints>
|
|
||||||
<constraint firstAttribute="width" constant="150" id="twe-aC-Qcz"/>
|
|
||||||
</constraints>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="90A-3m-BSM">
|
|
||||||
<numberFormatter key="formatter" formatterBehavior="default10_4" usesGroupingSeparator="NO" groupingSize="0" minimumIntegerDigits="0" maximumIntegerDigits="42" id="t2G-Ll-zVi">
|
|
||||||
<real key="minimum" value="0.0"/>
|
|
||||||
</numberFormatter>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
</subviews>
|
|
||||||
<constraints>
|
|
||||||
<constraint firstItem="g3a-6m-F6j" firstAttribute="leading" secondItem="R5P-C9-Xmn" secondAttribute="trailing" constant="8" symbolic="YES" id="4sR-8G-Opb"/>
|
|
||||||
<constraint firstAttribute="bottom" secondItem="g3a-6m-F6j" secondAttribute="bottom" constant="20" symbolic="YES" id="Dk2-RT-gvD"/>
|
|
||||||
<constraint firstItem="g3a-6m-F6j" firstAttribute="top" secondItem="Oyh-DQ-bFG" secondAttribute="top" constant="20" symbolic="YES" id="Qhm-CQ-VXO"/>
|
|
||||||
<constraint firstItem="g3a-6m-F6j" firstAttribute="baseline" secondItem="R5P-C9-Xmn" secondAttribute="baseline" id="Shi-kn-njN"/>
|
|
||||||
<constraint firstItem="g3a-6m-F6j" firstAttribute="centerX" secondItem="Oyh-DQ-bFG" secondAttribute="centerX" id="cZz-4G-1hC"/>
|
|
||||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="g3a-6m-F6j" secondAttribute="trailing" constant="20" symbolic="YES" id="hm6-A3-LZb"/>
|
|
||||||
<constraint firstItem="R5P-C9-Xmn" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="Oyh-DQ-bFG" secondAttribute="leading" constant="20" symbolic="YES" id="y90-Ic-UYu"/>
|
|
||||||
</constraints>
|
|
||||||
</view>
|
|
||||||
</tabViewItem>
|
|
||||||
<tabViewItem label="Argon2d" identifier="2" id="d7E-Ya-Yth">
|
|
||||||
<view key="view" id="Oea-xa-gEP">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="348" height="111"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
|
||||||
<subviews>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="751" translatesAutoresizingMaskIntoConstraints="NO" id="K9Z-pu-LP1">
|
|
||||||
<rect key="frame" x="39" y="85" width="54" height="16"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Threads" id="GCY-Ko-bqW">
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="751" translatesAutoresizingMaskIntoConstraints="NO" id="X7R-6X-7ux">
|
|
||||||
<rect key="frame" x="32" y="54" width="61" height="16"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Iterations" id="9E9-4k-nGZ">
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="iuw-vj-gSN">
|
|
||||||
<rect key="frame" x="99" y="82" width="150" height="21"/>
|
|
||||||
<constraints>
|
|
||||||
<constraint firstAttribute="width" constant="150" id="3ys-Jf-vWj"/>
|
|
||||||
</constraints>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="Ye1-WJ-9cl">
|
|
||||||
<numberFormatter key="formatter" formatterBehavior="default10_4" usesGroupingSeparator="NO" groupingSize="0" minimumIntegerDigits="0" maximumIntegerDigits="42" id="lDw-xh-DkE">
|
|
||||||
<real key="minimum" value="1"/>
|
|
||||||
<real key="maximum" value="16777215"/>
|
|
||||||
</numberFormatter>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="WP2-cF-8Yn">
|
|
||||||
<rect key="frame" x="99" y="51" width="150" height="21"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="l17-gL-4s1">
|
|
||||||
<numberFormatter key="formatter" formatterBehavior="default10_4" usesGroupingSeparator="NO" groupingSize="0" minimumIntegerDigits="0" maximumIntegerDigits="42" id="7Pp-o2-CVo">
|
|
||||||
<real key="minimum" value="1"/>
|
|
||||||
<real key="maximum" value="4294967295"/>
|
|
||||||
</numberFormatter>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="hTL-dO-6q2">
|
|
||||||
<rect key="frame" x="99" y="20" width="129" height="21"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="Plq-0Q-Nbz">
|
|
||||||
<byteCountFormatter key="formatter" countStyle="binary" allowsNonnumericFormatting="NO" id="hNA-or-VKI"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="751" translatesAutoresizingMaskIntoConstraints="NO" id="nMa-If-DlK">
|
|
||||||
<rect key="frame" x="39" y="23" width="54" height="16"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Memory" id="a6j-l4-cht">
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="vWY-lB-Pf8">
|
|
||||||
<rect key="frame" x="233" y="17" width="19" height="28"/>
|
|
||||||
<stepperCell key="cell" continuous="YES" alignment="left" maxValue="100" id="yCT-QG-peR"/>
|
|
||||||
</stepper>
|
|
||||||
</subviews>
|
|
||||||
<constraints>
|
|
||||||
<constraint firstItem="iuw-vj-gSN" firstAttribute="top" secondItem="Oea-xa-gEP" secondAttribute="top" constant="8" id="4DQ-Fu-kf6"/>
|
|
||||||
<constraint firstItem="hTL-dO-6q2" firstAttribute="leading" secondItem="nMa-If-DlK" secondAttribute="trailing" constant="8" symbolic="YES" id="4u7-DH-3St"/>
|
|
||||||
<constraint firstItem="K9Z-pu-LP1" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="Oea-xa-gEP" secondAttribute="leading" constant="20" symbolic="YES" id="6P1-K1-ipG"/>
|
|
||||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="WP2-cF-8Yn" secondAttribute="trailing" constant="20" symbolic="YES" id="JQO-qt-7VW"/>
|
|
||||||
<constraint firstItem="hTL-dO-6q2" firstAttribute="top" secondItem="WP2-cF-8Yn" secondAttribute="bottom" constant="10" symbolic="YES" id="JnE-zB-3YJ"/>
|
|
||||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="iuw-vj-gSN" secondAttribute="trailing" constant="20" symbolic="YES" id="PvS-IB-aU2"/>
|
|
||||||
<constraint firstItem="iuw-vj-gSN" firstAttribute="centerX" secondItem="Oea-xa-gEP" secondAttribute="centerX" id="R6j-pK-Khq"/>
|
|
||||||
<constraint firstItem="X7R-6X-7ux" firstAttribute="baseline" secondItem="WP2-cF-8Yn" secondAttribute="baseline" id="RFo-ve-65t"/>
|
|
||||||
<constraint firstItem="nMa-If-DlK" firstAttribute="baseline" secondItem="hTL-dO-6q2" secondAttribute="baseline" id="Sh8-Kc-8uL"/>
|
|
||||||
<constraint firstItem="WP2-cF-8Yn" firstAttribute="leading" secondItem="X7R-6X-7ux" secondAttribute="trailing" constant="8" symbolic="YES" id="Sok-5z-4Rt"/>
|
|
||||||
<constraint firstItem="X7R-6X-7ux" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="Oea-xa-gEP" secondAttribute="leading" constant="20" symbolic="YES" id="VDL-cE-lO7"/>
|
|
||||||
<constraint firstItem="WP2-cF-8Yn" firstAttribute="top" secondItem="iuw-vj-gSN" secondAttribute="bottom" constant="10" symbolic="YES" id="VqL-Fm-RoJ"/>
|
|
||||||
<constraint firstItem="hTL-dO-6q2" firstAttribute="leading" secondItem="WP2-cF-8Yn" secondAttribute="leading" id="Y82-oB-ai8"/>
|
|
||||||
<constraint firstItem="vWY-lB-Pf8" firstAttribute="centerY" secondItem="hTL-dO-6q2" secondAttribute="centerY" id="Ym9-WO-PnN"/>
|
|
||||||
<constraint firstAttribute="trailing" secondItem="vWY-lB-Pf8" secondAttribute="trailing" constant="99" id="bDw-4Y-Hru"/>
|
|
||||||
<constraint firstItem="vWY-lB-Pf8" firstAttribute="trailing" secondItem="WP2-cF-8Yn" secondAttribute="trailing" id="dx7-Wo-Hr8"/>
|
|
||||||
<constraint firstAttribute="bottom" secondItem="hTL-dO-6q2" secondAttribute="bottom" constant="20" symbolic="YES" id="fIW-6w-dpK"/>
|
|
||||||
<constraint firstItem="K9Z-pu-LP1" firstAttribute="baseline" secondItem="iuw-vj-gSN" secondAttribute="baseline" id="fzO-7A-W1B"/>
|
|
||||||
<constraint firstItem="iuw-vj-gSN" firstAttribute="leading" secondItem="K9Z-pu-LP1" secondAttribute="trailing" constant="8" symbolic="YES" id="j1q-XB-Jkc"/>
|
|
||||||
<constraint firstItem="WP2-cF-8Yn" firstAttribute="width" secondItem="iuw-vj-gSN" secondAttribute="width" id="leV-SQ-7vq"/>
|
|
||||||
<constraint firstItem="vWY-lB-Pf8" firstAttribute="leading" secondItem="hTL-dO-6q2" secondAttribute="trailing" constant="8" symbolic="YES" id="olK-06-N4n"/>
|
|
||||||
<constraint firstItem="nMa-If-DlK" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="Oea-xa-gEP" secondAttribute="leading" constant="20" symbolic="YES" id="qhd-Nh-CeC"/>
|
|
||||||
<constraint firstItem="WP2-cF-8Yn" firstAttribute="leading" secondItem="iuw-vj-gSN" secondAttribute="leading" id="rwu-Ec-cw0"/>
|
|
||||||
</constraints>
|
|
||||||
</view>
|
|
||||||
</tabViewItem>
|
|
||||||
<tabViewItem label="Argon2id" identifier="" id="MhV-4d-F0N">
|
|
||||||
<view key="view" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Wf3-hl-5Ha">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="348" height="99"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
|
||||||
<subviews>
|
|
||||||
<gridView fixedFrame="YES" xPlacement="leading" yPlacement="bottom" rowAlignment="none" translatesAutoresizingMaskIntoConstraints="NO" id="Dnd-lw-Lx6">
|
|
||||||
<rect key="frame" x="103" y="500" width="232" height="75"/>
|
|
||||||
<rows>
|
|
||||||
<gridRow id="2qd-uz-DjI"/>
|
|
||||||
<gridRow id="RIb-pL-iNf"/>
|
|
||||||
<gridRow id="Ybl-pj-Fs8"/>
|
|
||||||
</rows>
|
|
||||||
<columns>
|
|
||||||
<gridColumn id="EfG-Js-yib"/>
|
|
||||||
<gridColumn id="el0-jc-con"/>
|
|
||||||
<gridColumn id="16p-uR-CXf"/>
|
|
||||||
</columns>
|
|
||||||
<gridCells>
|
|
||||||
<gridCell row="2qd-uz-DjI" column="EfG-Js-yib" id="t31-0C-rh6">
|
|
||||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="751" translatesAutoresizingMaskIntoConstraints="NO" id="qhy-8k-yt4">
|
|
||||||
<rect key="frame" x="-2" y="54" width="54" height="16"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Threads" id="ybN-m9-18o">
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
</gridCell>
|
|
||||||
<gridCell row="2qd-uz-DjI" column="el0-jc-con" id="8rz-Vs-ySs">
|
|
||||||
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="dgK-W7-6ko">
|
|
||||||
<rect key="frame" x="63" y="54" width="100" height="21"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="qPh-kc-YzV">
|
|
||||||
<numberFormatter key="formatter" formatterBehavior="default10_4" usesGroupingSeparator="NO" groupingSize="0" minimumIntegerDigits="0" maximumIntegerDigits="42" id="AHg-i0-PTD">
|
|
||||||
<real key="minimum" value="1"/>
|
|
||||||
<real key="maximum" value="4294967295"/>
|
|
||||||
</numberFormatter>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
</gridCell>
|
|
||||||
<gridCell row="2qd-uz-DjI" column="16p-uR-CXf" id="gv4-Si-lhF"/>
|
|
||||||
<gridCell row="RIb-pL-iNf" column="EfG-Js-yib" id="2ej-xN-lBd">
|
|
||||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="751" translatesAutoresizingMaskIntoConstraints="NO" id="8tk-pV-4UO">
|
|
||||||
<rect key="frame" x="-2" y="27" width="61" height="16"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Iterations" id="gF6-zY-Xuy">
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
</gridCell>
|
|
||||||
<gridCell row="RIb-pL-iNf" column="el0-jc-con" id="2Ut-37-UFd">
|
|
||||||
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="OhS-sE-xSm">
|
|
||||||
<rect key="frame" x="63" y="27" width="150" height="21"/>
|
|
||||||
<constraints>
|
|
||||||
<constraint firstAttribute="width" constant="150" id="33t-3W-BPt"/>
|
|
||||||
</constraints>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="mPi-fp-fb8">
|
|
||||||
<numberFormatter key="formatter" formatterBehavior="default10_4" usesGroupingSeparator="NO" groupingSize="0" minimumIntegerDigits="0" maximumIntegerDigits="42" id="Rir-3T-bXT">
|
|
||||||
<real key="minimum" value="1"/>
|
|
||||||
<real key="maximum" value="16777215"/>
|
|
||||||
</numberFormatter>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
</gridCell>
|
|
||||||
<gridCell row="RIb-pL-iNf" column="16p-uR-CXf" id="iFd-Ab-Mvj"/>
|
|
||||||
<gridCell row="Ybl-pj-Fs8" column="EfG-Js-yib" id="CCV-Ry-qvC">
|
|
||||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="751" translatesAutoresizingMaskIntoConstraints="NO" id="Df5-tn-zkM">
|
|
||||||
<rect key="frame" x="-2" y="0.0" width="54" height="16"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Memory" id="WCw-aH-Voy">
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
</gridCell>
|
|
||||||
<gridCell row="Ybl-pj-Fs8" column="el0-jc-con" id="4Ob-2O-VTc">
|
|
||||||
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="lYa-BF-Fpc">
|
|
||||||
<rect key="frame" x="63" y="0.0" width="8" height="21"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="ekf-A7-iLV">
|
|
||||||
<byteCountFormatter key="formatter" countStyle="binary" allowsNonnumericFormatting="NO" id="Z6U-IX-x3y"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
</gridCell>
|
|
||||||
<gridCell row="Ybl-pj-Fs8" column="16p-uR-CXf" id="Qwf-XF-JAV">
|
|
||||||
<stepper key="contentView" horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="WFx-rw-uRy">
|
|
||||||
<rect key="frame" x="216" y="-4" width="19" height="28"/>
|
|
||||||
<stepperCell key="cell" continuous="YES" alignment="left" maxValue="100" id="dgn-LC-ooe"/>
|
|
||||||
</stepper>
|
|
||||||
</gridCell>
|
|
||||||
</gridCells>
|
|
||||||
</gridView>
|
|
||||||
</subviews>
|
|
||||||
</view>
|
|
||||||
</tabViewItem>
|
|
||||||
</tabViewItems>
|
|
||||||
</tabView>
|
|
||||||
<popUpButton verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="HXH-FA-g4K">
|
|
||||||
<rect key="frame" x="84" y="-256" width="39" height="25"/>
|
|
||||||
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="D2Q-aS-Tbz">
|
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
|
||||||
<font key="font" metaFont="menu"/>
|
|
||||||
<menu key="menu" id="Yee-Ks-qOT"/>
|
|
||||||
</popUpButtonCell>
|
|
||||||
</popUpButton>
|
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="oN5-tL-jIX">
|
|
||||||
<rect key="frame" x="18" y="-249" width="63" height="16"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Algorithm" id="W8b-3A-xUr">
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<button verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="NQD-8z-yEk">
|
|
||||||
<rect key="frame" x="368" y="-351" width="146" height="23"/>
|
|
||||||
<buttonCell key="cell" type="roundTextured" title="Generate Parameters" bezelStyle="texturedRounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="z3n-Ae-2ux">
|
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
</button>
|
|
||||||
</subviews>
|
|
||||||
<constraints>
|
|
||||||
<constraint firstItem="NQD-8z-yEk" firstAttribute="top" secondItem="2Rh-L6-aPE" secondAttribute="bottom" constant="8" symbolic="YES" id="KLH-Ou-Og5"/>
|
|
||||||
<constraint firstItem="oN5-tL-jIX" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="MOf-XP-Xg8" secondAttribute="leading" constant="20" symbolic="YES" id="Ljd-Cw-pVl"/>
|
|
||||||
<constraint firstItem="2Rh-L6-aPE" firstAttribute="top" secondItem="MOf-XP-Xg8" secondAttribute="top" constant="260" id="Nh1-Rv-Rxv"/>
|
|
||||||
<constraint firstItem="oN5-tL-jIX" firstAttribute="leading" secondItem="NQD-8z-yEk" secondAttribute="leading" id="NrR-fv-6yG"/>
|
|
||||||
<constraint firstItem="HXH-FA-g4K" firstAttribute="baseline" secondItem="oN5-tL-jIX" secondAttribute="baseline" id="XG7-bI-SID"/>
|
|
||||||
<constraint firstItem="2Rh-L6-aPE" firstAttribute="top" secondItem="HXH-FA-g4K" secondAttribute="bottom" constant="8" symbolic="YES" id="b7X-jT-nEl"/>
|
|
||||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="HXH-FA-g4K" secondAttribute="trailing" constant="20" symbolic="YES" id="p0r-Ic-d1g"/>
|
|
||||||
<constraint firstItem="HXH-FA-g4K" firstAttribute="leading" secondItem="oN5-tL-jIX" secondAttribute="trailing" constant="8" symbolic="YES" id="qnP-XS-PSy"/>
|
|
||||||
</constraints>
|
|
||||||
</view>
|
|
||||||
<constraints>
|
|
||||||
<constraint firstAttribute="trailing" secondItem="2Rh-L6-aPE" secondAttribute="trailing" constant="12" id="1Yw-41-N7m"/>
|
|
||||||
<constraint firstItem="2Rh-L6-aPE" firstAttribute="leading" secondItem="qbM-un-eXz" secondAttribute="leading" constant="12" id="Xdy-aA-9ZJ"/>
|
|
||||||
</constraints>
|
|
||||||
</box>
|
|
||||||
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="CTT-PN-6DU">
|
|
||||||
<rect key="frame" x="210" y="664" width="157" height="25"/>
|
|
||||||
<constraints>
|
|
||||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="150" id="5bR-qy-CJq"/>
|
|
||||||
</constraints>
|
|
||||||
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="6ag-x0-Lnq">
|
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
|
||||||
<font key="font" metaFont="menu"/>
|
|
||||||
<menu key="menu" id="KmQ-ga-ebr"/>
|
|
||||||
</popUpButtonCell>
|
|
||||||
</popUpButton>
|
|
||||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Eyc-KQ-nb8">
|
|
||||||
<rect key="frame" x="134" y="671" width="73" height="16"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Encryption:" id="9wc-gg-Sye">
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
</subviews>
|
|
||||||
<constraints>
|
|
||||||
<constraint firstItem="Eyc-KQ-nb8" firstAttribute="baseline" secondItem="CTT-PN-6DU" secondAttribute="baseline" id="6Bk-f8-KKB"/>
|
|
||||||
<constraint firstAttribute="trailing" secondItem="qbM-un-eXz" secondAttribute="trailing" constant="20" symbolic="YES" id="BQp-8w-cbw"/>
|
|
||||||
<constraint firstItem="qbM-un-eXz" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" constant="20" symbolic="YES" id="Ceg-Qo-hZ0"/>
|
|
||||||
<constraint firstItem="CTT-PN-6DU" firstAttribute="leading" secondItem="Eyc-KQ-nb8" secondAttribute="trailing" constant="8" symbolic="YES" id="Piw-Jc-Caq"/>
|
|
||||||
<constraint firstItem="qbM-un-eXz" firstAttribute="top" secondItem="CTT-PN-6DU" secondAttribute="bottom" constant="8" symbolic="YES" id="XzC-ml-Ifw"/>
|
|
||||||
<constraint firstItem="CTT-PN-6DU" firstAttribute="centerX" secondItem="Hz6-mo-xeY" secondAttribute="centerX" id="isB-9i-xt3"/>
|
|
||||||
<constraint firstItem="qbM-un-eXz" firstAttribute="top" secondItem="CTT-PN-6DU" secondAttribute="bottom" constant="8" symbolic="YES" id="ivj-bF-foX"/>
|
|
||||||
<constraint firstItem="CTT-PN-6DU" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" constant="54" id="uhS-D4-zny"/>
|
|
||||||
</constraints>
|
|
||||||
<point key="canvasLocation" x="333.5" y="-243"/>
|
|
||||||
</customView>
|
</customView>
|
||||||
</objects>
|
</objects>
|
||||||
</document>
|
</document>
|
||||||
|
|||||||
@@ -1,29 +0,0 @@
|
|||||||
//
|
|
||||||
// MPSecurityPreferencesController.h
|
|
||||||
// MacPass
|
|
||||||
//
|
|
||||||
// Created by Michael Starke on 11.04.25.
|
|
||||||
// Copyright © 2025 HicknHack Software GmbH. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h>
|
|
||||||
#import "MPViewController.h"
|
|
||||||
#import "MPPreferencesTab.h"
|
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_BEGIN
|
|
||||||
|
|
||||||
@interface MPSecurityPreferencesController : MPViewController <MPPreferencesTab>
|
|
||||||
|
|
||||||
@property (strong) IBOutlet NSButton *clearPasteboardOnQuitCheckButton;
|
|
||||||
@property (strong) IBOutlet NSPopUpButton *clearPasteboardTimeoutPopup;
|
|
||||||
@property (strong) IBOutlet NSButton *preventUniversalClipboardSupportCheckButton;
|
|
||||||
@property (strong) IBOutlet NSPopUpButton *idleTimeOutPopup;
|
|
||||||
@property (strong) IBOutlet NSButton *lockOnSleepCheckButton;
|
|
||||||
@property (strong) IBOutlet NSButton *lockOnLogoutCheckButton;
|
|
||||||
@property (strong) IBOutlet NSButton *lockOnScreenSleepCheckButton;
|
|
||||||
@property (strong) IBOutlet NSButton *rememberKeyFileCheckButton;
|
|
||||||
@property (strong) IBOutlet NSButton *allowScreenshotsCheckButton;
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_END
|
|
||||||
@@ -1,68 +0,0 @@
|
|||||||
//
|
|
||||||
// MPSecurityPreferencesController.m
|
|
||||||
// MacPass
|
|
||||||
//
|
|
||||||
// Created by Michael Starke on 11.04.25.
|
|
||||||
// Copyright © 2025 HicknHack Software GmbH. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "MPSecurityPreferencesController.h"
|
|
||||||
#import "MPSettingsHelper.h"
|
|
||||||
|
|
||||||
@interface MPSecurityPreferencesController ()
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
@implementation MPSecurityPreferencesController
|
|
||||||
|
|
||||||
- (NSString *)identifier {
|
|
||||||
return @"SecurityPreferences";
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSImage *)image {
|
|
||||||
return [NSImage imageNamed:NSImageNameCaution];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSString *)label {
|
|
||||||
return NSLocalizedString(@"SECURITY_PREFERENCES", @"Security Settings Label");
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)viewDidLoad {
|
|
||||||
[self.clearPasteboardOnQuitCheckButton bind:NSValueBinding
|
|
||||||
toObject:NSUserDefaultsController.sharedUserDefaultsController
|
|
||||||
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyClearPasteboardOnQuit]
|
|
||||||
options:nil];
|
|
||||||
[self.clearPasteboardTimeoutPopup bind:NSSelectedTagBinding
|
|
||||||
toObject:NSUserDefaultsController.sharedUserDefaultsController
|
|
||||||
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyPasteboardClearTimeout]
|
|
||||||
options:nil];
|
|
||||||
[self.preventUniversalClipboardSupportCheckButton bind:NSValueBinding
|
|
||||||
toObject:NSUserDefaultsController.sharedUserDefaultsController
|
|
||||||
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyPreventUniversalClipboard]
|
|
||||||
options:nil];
|
|
||||||
[self.lockOnSleepCheckButton bind:NSValueBinding
|
|
||||||
toObject:NSUserDefaultsController.sharedUserDefaultsController
|
|
||||||
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyLockOnSleep]
|
|
||||||
options:nil];
|
|
||||||
[self.lockOnLogoutCheckButton bind:NSValueBinding
|
|
||||||
toObject:NSUserDefaultsController.sharedUserDefaultsController
|
|
||||||
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingskeyLockOnLogout]
|
|
||||||
options:nil];
|
|
||||||
[self.lockOnScreenSleepCheckButton bind:NSValueBinding
|
|
||||||
toObject:NSUserDefaultsController.sharedUserDefaultsController
|
|
||||||
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingskeyLockOnScreenSleep]
|
|
||||||
options:nil];
|
|
||||||
[self.idleTimeOutPopup bind:NSSelectedTagBinding
|
|
||||||
toObject:NSUserDefaultsController.sharedUserDefaultsController
|
|
||||||
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyIdleLockTimeOut]
|
|
||||||
options:nil];
|
|
||||||
[self.rememberKeyFileCheckButton bind:NSValueBinding
|
|
||||||
toObject:NSUserDefaultsController.sharedUserDefaultsController
|
|
||||||
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyRememberKeyFilesForDatabases]
|
|
||||||
options:nil];
|
|
||||||
[self.allowScreenshotsCheckButton bind:NSValueBinding
|
|
||||||
toObject:NSUserDefaultsController.sharedUserDefaultsController
|
|
||||||
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyAllowScreenshots]
|
|
||||||
options:nil];
|
|
||||||
}
|
|
||||||
@end
|
|
||||||
@@ -1,235 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
|
||||||
<dependencies>
|
|
||||||
<deployment identifier="macosx"/>
|
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22690"/>
|
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
|
||||||
</dependencies>
|
|
||||||
<objects>
|
|
||||||
<customObject id="-2" userLabel="File's Owner" customClass="MPSecurityPreferencesController">
|
|
||||||
<connections>
|
|
||||||
<outlet property="allowScreenshotsCheckButton" destination="HD6-39-SKh" id="mqC-bs-zCs"/>
|
|
||||||
<outlet property="clearPasteboardOnQuitCheckButton" destination="KP1-6g-Yqo" id="QhG-nU-EfN"/>
|
|
||||||
<outlet property="clearPasteboardTimeoutPopup" destination="zGo-3Q-WAA" id="PaR-LO-1so"/>
|
|
||||||
<outlet property="idleTimeOutPopup" destination="6lH-n8-hV9" id="YEZ-tR-Djs"/>
|
|
||||||
<outlet property="lockOnLogoutCheckButton" destination="ziJ-ht-p54" id="Tsf-gp-DwM"/>
|
|
||||||
<outlet property="lockOnScreenSleepCheckButton" destination="ROH-Zn-Ype" id="B01-PX-g04"/>
|
|
||||||
<outlet property="lockOnSleepCheckButton" destination="KkI-GK-w8c" id="9Ub-5u-uKI"/>
|
|
||||||
<outlet property="preventUniversalClipboardSupportCheckButton" destination="FmI-t1-V7h" id="TaZ-DV-zxI"/>
|
|
||||||
<outlet property="rememberKeyFileCheckButton" destination="ghE-Zl-B1s" id="Nq4-jV-9iF"/>
|
|
||||||
<outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
|
|
||||||
</connections>
|
|
||||||
</customObject>
|
|
||||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
|
||||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
|
||||||
<customView id="Hz6-mo-xeY">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="440" height="425"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<subviews>
|
|
||||||
<stackView distribution="fill" orientation="vertical" alignment="leading" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="W8T-QF-slI">
|
|
||||||
<rect key="frame" x="20" y="61" width="400" height="344"/>
|
|
||||||
<subviews>
|
|
||||||
<stackView distribution="fill" orientation="horizontal" alignment="firstBaseline" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="G3z-aN-Wk0">
|
|
||||||
<rect key="frame" x="0.0" y="324" width="261" height="20"/>
|
|
||||||
<subviews>
|
|
||||||
<textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="nVB-JC-BBE">
|
|
||||||
<rect key="frame" x="-2" y="2" width="120" height="17"/>
|
|
||||||
<constraints>
|
|
||||||
<constraint firstAttribute="height" constant="17" id="fSa-HW-qbP"/>
|
|
||||||
</constraints>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Clear Copied Items" id="NMx-H8-qw1">
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="zGo-3Q-WAA">
|
|
||||||
<rect key="frame" x="121" y="-4" width="144" height="25"/>
|
|
||||||
<popUpButtonCell key="cell" type="push" title="Never" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="3PG-ge-sez" id="7qH-SJ-n5N">
|
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
|
||||||
<font key="font" metaFont="menu"/>
|
|
||||||
<menu key="menu" title="ClipboardClearInterval" id="OvT-46-ItY">
|
|
||||||
<items>
|
|
||||||
<menuItem title="Never" state="on" id="3PG-ge-sez">
|
|
||||||
<modifierMask key="keyEquivalentModifierMask"/>
|
|
||||||
</menuItem>
|
|
||||||
<menuItem title="after 10 Seconds" tag="10" id="KPs-XT-xJQ"/>
|
|
||||||
<menuItem title="after 30 Seconds" tag="30" id="nXQ-XQ-OjR"/>
|
|
||||||
<menuItem title="after 1 Minute" tag="60" id="GjO-Rq-CcJ"/>
|
|
||||||
<menuItem title="after 5 Minutes" tag="300" id="GOb-x5-v3v"/>
|
|
||||||
</items>
|
|
||||||
</menu>
|
|
||||||
</popUpButtonCell>
|
|
||||||
</popUpButton>
|
|
||||||
</subviews>
|
|
||||||
<visibilityPriorities>
|
|
||||||
<integer value="1000"/>
|
|
||||||
<integer value="1000"/>
|
|
||||||
</visibilityPriorities>
|
|
||||||
<customSpacing>
|
|
||||||
<real value="3.4028234663852886e+38"/>
|
|
||||||
<real value="3.4028234663852886e+38"/>
|
|
||||||
</customSpacing>
|
|
||||||
</stackView>
|
|
||||||
<button verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="KP1-6g-Yqo">
|
|
||||||
<rect key="frame" x="18" y="299" width="168" height="18"/>
|
|
||||||
<buttonCell key="cell" type="check" title="Clear Clipboard on Quit" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="t4Z-bK-KMl">
|
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
</button>
|
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="FmI-t1-V7h">
|
|
||||||
<rect key="frame" x="-2" y="275" width="245" height="18"/>
|
|
||||||
<buttonCell key="cell" type="check" title="Prevent Universal Clipboard support" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="KvW-RN-z6j">
|
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
</button>
|
|
||||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="mNo-r9-dr0">
|
|
||||||
<rect key="frame" x="-2" y="226" width="404" height="42"/>
|
|
||||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" id="vCZ-9c-5s7">
|
|
||||||
<font key="font" metaFont="smallSystem"/>
|
|
||||||
<string key="title">Disabling this compromises security. If enabled, anything copied to the Clipboard in MacPass will be available on your connected iOS devices. You should clear the clipboard on those devices manually.</string>
|
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<stackView distribution="fill" orientation="horizontal" alignment="firstBaseline" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="nkh-qn-gd7">
|
|
||||||
<rect key="frame" x="0.0" y="198" width="215" height="20"/>
|
|
||||||
<subviews>
|
|
||||||
<textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Z1o-N4-bSv">
|
|
||||||
<rect key="frame" x="-2" y="3" width="93" height="16"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Lock while idle" id="mJZ-10-3aY">
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="6lH-n8-hV9">
|
|
||||||
<rect key="frame" x="94" y="-4" width="125" height="25"/>
|
|
||||||
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="V0L-v9-lbJ">
|
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
|
||||||
<font key="font" metaFont="menu"/>
|
|
||||||
<menu key="menu" title="LockTimes" id="3SU-Tz-vNr">
|
|
||||||
<items>
|
|
||||||
<menuItem title="Never" id="Eho-b6-2r3"/>
|
|
||||||
<menuItem title="for 1 Minute" tag="60" id="hcu-tg-UHB"/>
|
|
||||||
<menuItem title="for 5 Minutes" tag="300" id="DUt-fV-xPf"/>
|
|
||||||
<menuItem title="for 15 Minutes" tag="900" id="pPY-4B-V6t">
|
|
||||||
<modifierMask key="keyEquivalentModifierMask"/>
|
|
||||||
</menuItem>
|
|
||||||
</items>
|
|
||||||
</menu>
|
|
||||||
</popUpButtonCell>
|
|
||||||
</popUpButton>
|
|
||||||
</subviews>
|
|
||||||
<visibilityPriorities>
|
|
||||||
<integer value="1000"/>
|
|
||||||
<integer value="1000"/>
|
|
||||||
</visibilityPriorities>
|
|
||||||
<customSpacing>
|
|
||||||
<real value="3.4028234663852886e+38"/>
|
|
||||||
<real value="3.4028234663852886e+38"/>
|
|
||||||
</customSpacing>
|
|
||||||
</stackView>
|
|
||||||
<button translatesAutoresizingMaskIntoConstraints="NO" id="KkI-GK-w8c">
|
|
||||||
<rect key="frame" x="18" y="173" width="123" height="18"/>
|
|
||||||
<buttonCell key="cell" type="check" title="Lock after sleep" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="zjF-CD-1DV">
|
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
</button>
|
|
||||||
<button translatesAutoresizingMaskIntoConstraints="NO" id="ziJ-ht-p54">
|
|
||||||
<rect key="frame" x="18" y="149" width="133" height="18"/>
|
|
||||||
<buttonCell key="cell" type="check" title="Lock after log out" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="fdI-0a-VRg">
|
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
</button>
|
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ROH-Zn-Ype">
|
|
||||||
<rect key="frame" x="18" y="125" width="168" height="18"/>
|
|
||||||
<buttonCell key="cell" type="check" title="Lock after screen sleep" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="8mt-iT-q7d">
|
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
</button>
|
|
||||||
<button verticalHuggingPriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="ghE-Zl-B1s">
|
|
||||||
<rect key="frame" x="-2" y="101" width="224" height="18"/>
|
|
||||||
<buttonCell key="cell" type="check" title="Remember Keyfile for Databases" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="Q9B-M0-yCP">
|
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
</button>
|
|
||||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="E0U-Bs-qDP">
|
|
||||||
<rect key="frame" x="-2" y="52" width="404" height="42"/>
|
|
||||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" id="5aM-bw-1qA">
|
|
||||||
<font key="font" metaFont="smallSystem"/>
|
|
||||||
<string key="title">Enabling this compromises security. If enabled, your preferences will contain mappings from database to keyfile. Key locations for databases without a password will not be saved.</string>
|
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2MH-GR-gb7">
|
|
||||||
<rect key="frame" x="-7" y="17" width="184" height="32"/>
|
|
||||||
<buttonCell key="cell" type="push" title="Clear all stored locations" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="uaC-TX-Vza">
|
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
<connections>
|
|
||||||
<action selector="clearRememberdKeyFiles:" target="-1" id="oTL-Bw-cAm"/>
|
|
||||||
</connections>
|
|
||||||
</button>
|
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="HD6-39-SKh">
|
|
||||||
<rect key="frame" x="-2" y="-1" width="190" height="18"/>
|
|
||||||
<buttonCell key="cell" type="check" title="Allow Window Screenshots" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="8Ik-1T-6SR">
|
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
</button>
|
|
||||||
</subviews>
|
|
||||||
<constraints>
|
|
||||||
<constraint firstItem="ziJ-ht-p54" firstAttribute="leading" secondItem="W8T-QF-slI" secondAttribute="leading" constant="20" symbolic="YES" id="2eb-vH-1lz"/>
|
|
||||||
<constraint firstItem="ROH-Zn-Ype" firstAttribute="leading" secondItem="W8T-QF-slI" secondAttribute="leading" constant="20" symbolic="YES" id="FFq-cG-Pf8"/>
|
|
||||||
<constraint firstItem="KkI-GK-w8c" firstAttribute="leading" secondItem="W8T-QF-slI" secondAttribute="leading" constant="20" symbolic="YES" id="JRu-lW-FBA"/>
|
|
||||||
<constraint firstItem="KP1-6g-Yqo" firstAttribute="leading" secondItem="W8T-QF-slI" secondAttribute="leading" constant="20" symbolic="YES" id="Yi0-UQ-ri3"/>
|
|
||||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="400" id="fym-rW-PhG"/>
|
|
||||||
</constraints>
|
|
||||||
<visibilityPriorities>
|
|
||||||
<integer value="1000"/>
|
|
||||||
<integer value="1000"/>
|
|
||||||
<integer value="1000"/>
|
|
||||||
<integer value="1000"/>
|
|
||||||
<integer value="1000"/>
|
|
||||||
<integer value="1000"/>
|
|
||||||
<integer value="1000"/>
|
|
||||||
<integer value="1000"/>
|
|
||||||
<integer value="1000"/>
|
|
||||||
<integer value="1000"/>
|
|
||||||
<integer value="1000"/>
|
|
||||||
<integer value="1000"/>
|
|
||||||
</visibilityPriorities>
|
|
||||||
<customSpacing>
|
|
||||||
<real value="3.4028234663852886e+38"/>
|
|
||||||
<real value="3.4028234663852886e+38"/>
|
|
||||||
<real value="3.4028234663852886e+38"/>
|
|
||||||
<real value="3.4028234663852886e+38"/>
|
|
||||||
<real value="3.4028234663852886e+38"/>
|
|
||||||
<real value="3.4028234663852886e+38"/>
|
|
||||||
<real value="3.4028234663852886e+38"/>
|
|
||||||
<real value="3.4028234663852886e+38"/>
|
|
||||||
<real value="3.4028234663852886e+38"/>
|
|
||||||
<real value="3.4028234663852886e+38"/>
|
|
||||||
<real value="3.4028234663852886e+38"/>
|
|
||||||
<real value="3.4028234663852886e+38"/>
|
|
||||||
</customSpacing>
|
|
||||||
</stackView>
|
|
||||||
</subviews>
|
|
||||||
<constraints>
|
|
||||||
<constraint firstAttribute="trailing" secondItem="W8T-QF-slI" secondAttribute="trailing" constant="20" symbolic="YES" id="Mm9-Gi-0Wc"/>
|
|
||||||
<constraint firstItem="W8T-QF-slI" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" constant="20" symbolic="YES" id="Reh-hK-XaU"/>
|
|
||||||
<constraint firstItem="W8T-QF-slI" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" constant="20" symbolic="YES" id="ejB-oC-c7T"/>
|
|
||||||
</constraints>
|
|
||||||
<point key="canvasLocation" x="-540" y="-107"/>
|
|
||||||
</customView>
|
|
||||||
</objects>
|
|
||||||
</document>
|
|
||||||
@@ -22,10 +22,6 @@
|
|||||||
|
|
||||||
#import <Cocoa/Cocoa.h>
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
/* TouchID */
|
|
||||||
APPKIT_EXTERN NSString *const kMPSettingsKeyTouchIdEnabled;
|
|
||||||
APPKIT_EXTERN NSString *const kMPSettingsKeyTouchIdEncryptedKeyStore; // NSDictionary with hased file names mapped to keys
|
|
||||||
|
|
||||||
/* Clipboard */
|
/* Clipboard */
|
||||||
APPKIT_EXTERN NSString *const kMPSettingsKeyPasteboardClearTimeout;
|
APPKIT_EXTERN NSString *const kMPSettingsKeyPasteboardClearTimeout;
|
||||||
APPKIT_EXTERN NSString *const kMPSettingsKeyClearPasteboardOnQuit;
|
APPKIT_EXTERN NSString *const kMPSettingsKeyClearPasteboardOnQuit;
|
||||||
@@ -105,7 +101,6 @@ APPKIT_EXTERN NSString *const kMPSettingsKeyFaviconDownloadMethod;
|
|||||||
|
|
||||||
/* UI */
|
/* UI */
|
||||||
APPKIT_EXTERN NSString *const kMPSettingsKeyUseUnifiedToolbar;
|
APPKIT_EXTERN NSString *const kMPSettingsKeyUseUnifiedToolbar;
|
||||||
APPKIT_EXTERN NSString *const kMPSettingsKeyAllowScreenshots;
|
|
||||||
|
|
||||||
typedef NS_ENUM(NSUInteger, MPFileChangeStrategy) {
|
typedef NS_ENUM(NSUInteger, MPFileChangeStrategy) {
|
||||||
MPFileChangeStrategyAsk,
|
MPFileChangeStrategyAsk,
|
||||||
@@ -130,14 +125,6 @@ typedef NS_ENUM(NSUInteger, MPFaviconDownloadMethod) {
|
|||||||
MPFaviconDownloadMethodGoogle,
|
MPFaviconDownloadMethodGoogle,
|
||||||
};
|
};
|
||||||
|
|
||||||
// the values are mapped to NSControlStateValue for backwards compatibilty
|
|
||||||
// older implementations did use a checkbox to store this setting
|
|
||||||
typedef NS_ENUM(NSInteger, MPTouchIDKeyStorage) {
|
|
||||||
MPTouchIDKeyStorageTransient = NSControlStateValueMixed,
|
|
||||||
MPTouchIDKeyStorageDisabled = NSControlStateValueOff,
|
|
||||||
MPTouchIDKeyStoragePersistent = NSControlStateValueOn
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Password Generation */
|
/* Password Generation */
|
||||||
APPKIT_EXTERN NSString *const kMPSettingsKeyCopyGeneratedPasswordToClipboard;
|
APPKIT_EXTERN NSString *const kMPSettingsKeyCopyGeneratedPasswordToClipboard;
|
||||||
APPKIT_EXTERN NSString *const kMPSettingsKeyDefaultPasswordLength;
|
APPKIT_EXTERN NSString *const kMPSettingsKeyDefaultPasswordLength;
|
||||||
|
|||||||
@@ -26,8 +26,6 @@
|
|||||||
#import "MPEntrySearchContext.h"
|
#import "MPEntrySearchContext.h"
|
||||||
#import "DDHotKey+MacPassAdditions.h" // Default hotkey;
|
#import "DDHotKey+MacPassAdditions.h" // Default hotkey;
|
||||||
|
|
||||||
#import "NSString+MPHash.h"
|
|
||||||
|
|
||||||
NSString *const kMPSettingsKeyPasteboardClearTimeout = @"ClipboardClearTimeout";
|
NSString *const kMPSettingsKeyPasteboardClearTimeout = @"ClipboardClearTimeout";
|
||||||
NSString *const kMPSettingsKeyClearPasteboardOnQuit = @"ClearClipboardOnQuit";
|
NSString *const kMPSettingsKeyClearPasteboardOnQuit = @"ClearClipboardOnQuit";
|
||||||
NSString *const kMPSettingsKeyPreventUniversalClipboard = @"PreventUniversalClipboard";
|
NSString *const kMPSettingsKeyPreventUniversalClipboard = @"PreventUniversalClipboard";
|
||||||
@@ -69,9 +67,6 @@ NSString *const kMPSettingsKeyAutotypeMatchHost
|
|||||||
NSString *const kMPSettingsKeyAutotypeMatchTags = @"AutotypeMatchTags";
|
NSString *const kMPSettingsKeyAutotypeMatchTags = @"AutotypeMatchTags";
|
||||||
NSString *const kMPSettingsKeyGloablAutotypeAlwaysShowCandidateSelection = @"GloablAutotypeAlwaysShowCandidateSelection";
|
NSString *const kMPSettingsKeyGloablAutotypeAlwaysShowCandidateSelection = @"GloablAutotypeAlwaysShowCandidateSelection";
|
||||||
|
|
||||||
NSString *const kMPSettingsKeyTouchIdEnabled = @"EnableSubsequentUnlocksWithTouchID";
|
|
||||||
NSString *const kMPSettingsKeyTouchIdEncryptedKeyStore = @"TouchIdEncryptedKeyStore";
|
|
||||||
|
|
||||||
NSString *const kMPSettingsKeyEntrySearchFilterContext = @"EntrySearchFilterContext";
|
NSString *const kMPSettingsKeyEntrySearchFilterContext = @"EntrySearchFilterContext";
|
||||||
|
|
||||||
NSString *const kMPSettingsKeyEnableQuicklookPreview = @"EnableQuicklookPreview";
|
NSString *const kMPSettingsKeyEnableQuicklookPreview = @"EnableQuicklookPreview";
|
||||||
@@ -101,7 +96,6 @@ NSString *const kMPSettingsKeyAllowRemoteFetchOfPluginRepository
|
|||||||
NSString *const kMPSettingsKeyFaviconDownloadMethod = @"FaviconDownloadMethod";
|
NSString *const kMPSettingsKeyFaviconDownloadMethod = @"FaviconDownloadMethod";
|
||||||
|
|
||||||
NSString *const kMPSettingsKeyUseUnifiedToolbar =@"UseUnifiedToolbar";
|
NSString *const kMPSettingsKeyUseUnifiedToolbar =@"UseUnifiedToolbar";
|
||||||
NSString *const kMPSettingsKeyAllowScreenshots = @"AllowScreenshots";
|
|
||||||
|
|
||||||
/* Deprecated */
|
/* Deprecated */
|
||||||
NSString *const kMPDeprecatedSettingsKeyRememberKeyFilesForDatabases = @"kMPSettingsKeyRememberKeyFilesForDatabases";
|
NSString *const kMPDeprecatedSettingsKeyRememberKeyFilesForDatabases = @"kMPSettingsKeyRememberKeyFilesForDatabases";
|
||||||
@@ -115,7 +109,6 @@ NSString *const kMPDeprecatedSettingsKeyShowMenuItem
|
|||||||
NSString *const kMPDeprecatedSettingsKeyDefaultPasswordRounds = @"KeyDefaultPasswordRounds";
|
NSString *const kMPDeprecatedSettingsKeyDefaultPasswordRounds = @"KeyDefaultPasswordRounds";
|
||||||
NSString *const kMPDepricatedSettingsKeyLoadUnsecurePlugins = @"MPLoadUnsecurePlugins";
|
NSString *const kMPDepricatedSettingsKeyLoadUnsecurePlugins = @"MPLoadUnsecurePlugins";
|
||||||
NSString *const kMPDepricatedSettingsKeyAutotypeHideAccessibiltyWarning = @"AutotypeHideAccessibiltyWarning";
|
NSString *const kMPDepricatedSettingsKeyAutotypeHideAccessibiltyWarning = @"AutotypeHideAccessibiltyWarning";
|
||||||
NSString *const kMPDepricatedSettingsKeyEntryTouchIdDatabaseEncryptedKeyFormat = @"EncryptedDatabaseKeyForTouchID-%@";
|
|
||||||
|
|
||||||
@implementation MPSettingsHelper
|
@implementation MPSettingsHelper
|
||||||
|
|
||||||
@@ -129,7 +122,6 @@ NSString *const kMPDepricatedSettingsKeyEntryTouchIdDatabaseEncryptedKeyFormat
|
|||||||
[self _migrateEntrySearchFlags];
|
[self _migrateEntrySearchFlags];
|
||||||
[self _migrateRememberedKeyFiles];
|
[self _migrateRememberedKeyFiles];
|
||||||
[self _migrateLoadUnsecurePlugins];
|
[self _migrateLoadUnsecurePlugins];
|
||||||
[self _migrateTouchIdKeyStore];
|
|
||||||
[self _removeDeprecatedValues];
|
[self _removeDeprecatedValues];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -187,7 +179,6 @@ NSString *const kMPDepricatedSettingsKeyEntryTouchIdDatabaseEncryptedKeyFormat
|
|||||||
kMPSettingsKeyFaviconDownloadMethod: @(MPFaviconDownloadMethodDirect), // Download directly from host
|
kMPSettingsKeyFaviconDownloadMethod: @(MPFaviconDownloadMethodDirect), // Download directly from host
|
||||||
kMPSettingsKeyGloablAutotypeAlwaysShowCandidateSelection: @NO,
|
kMPSettingsKeyGloablAutotypeAlwaysShowCandidateSelection: @NO,
|
||||||
kMPSettingsKeyUseUnifiedToolbar: @YES, // Do not use unified toolbar under Big Sur and above
|
kMPSettingsKeyUseUnifiedToolbar: @YES, // Do not use unified toolbar under Big Sur and above
|
||||||
kMPSettingsKeyAllowScreenshots: @NO, // Do not allow screenshots or screen recordings of MacPass
|
|
||||||
kMPSettingsKeyFocusSearchAfterUnlock: @NO, // Do not enter search directly after unlocking the database
|
kMPSettingsKeyFocusSearchAfterUnlock: @NO, // Do not enter search directly after unlocking the database
|
||||||
kMPSettingsKeyUsePrivateBrowsingWhenOpeningURLs: @NO // No private mode when option URLs by default
|
kMPSettingsKeyUsePrivateBrowsingWhenOpeningURLs: @NO // No private mode when option URLs by default
|
||||||
};
|
};
|
||||||
@@ -316,27 +307,7 @@ return deprecatedSettings;
|
|||||||
if(oldValue != [[self _standardDefaults][kMPDepricatedSettingsKeyLoadUnsecurePlugins] boolValue]) {
|
if(oldValue != [[self _standardDefaults][kMPDepricatedSettingsKeyLoadUnsecurePlugins] boolValue]) {
|
||||||
[NSUserDefaults.standardUserDefaults setBool:oldValue forKey:kMPSettingsKeyLoadUnsecurePlugins];
|
[NSUserDefaults.standardUserDefaults setBool:oldValue forKey:kMPSettingsKeyLoadUnsecurePlugins];
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
+ (void)_migrateTouchIdKeyStore {
|
|
||||||
// Read keys stored in new format
|
|
||||||
NSMutableDictionary *storedKeys = [[NSUserDefaults.standardUserDefaults dictionaryForKey:kMPSettingsKeyTouchIdEncryptedKeyStore] mutableCopy];
|
|
||||||
NSArray *defaultKeys = [NSUserDefaults.standardUserDefaults dictionaryRepresentation].allKeys;
|
|
||||||
// find all keys in old format
|
|
||||||
for(NSString *key in defaultKeys) {
|
|
||||||
NSString *prefix = [NSString stringWithFormat:kMPDepricatedSettingsKeyEntryTouchIdDatabaseEncryptedKeyFormat, @""];
|
|
||||||
if([key hasPrefix:prefix]) {
|
|
||||||
// database name was added
|
|
||||||
NSString *databaseNameHash = [key substringFromIndex:prefix.length].sha1HexDigest;
|
|
||||||
NSData *encryptedKey = [NSUserDefaults.standardUserDefaults dataForKey:key];
|
|
||||||
if(!storedKeys[databaseNameHash] && encryptedKey) {
|
|
||||||
storedKeys[databaseNameHash] = encryptedKey;
|
|
||||||
}
|
|
||||||
[NSUserDefaults.standardUserDefaults removeObjectForKey:key];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Put it all back in
|
|
||||||
[NSUserDefaults.standardUserDefaults setObject:storedKeys forKey:kMPSettingsKeyTouchIdEncryptedKeyStore];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -91,7 +91,6 @@ typedef NS_ENUM(NSUInteger, MPOTPType) {
|
|||||||
- (IBAction)save:(id)sender {
|
- (IBAction)save:(id)sender {
|
||||||
// Update entry settings!
|
// Update entry settings!
|
||||||
// FIXME: add model observing to ensure correct history recording
|
// FIXME: add model observing to ensure correct history recording
|
||||||
[self.view.window makeFirstResponder:nil];
|
|
||||||
[self.generator saveToEntry:self.representedEntry];
|
[self.generator saveToEntry:self.representedEntry];
|
||||||
[self.presentingViewController dismissViewController:self];
|
[self.presentingViewController dismissViewController:self];
|
||||||
}
|
}
|
||||||
@@ -206,7 +205,7 @@ typedef NS_ENUM(NSUInteger, MPOTPType) {
|
|||||||
case MPOTPUpdateSourceQRImage: {
|
case MPOTPUpdateSourceQRImage: {
|
||||||
NSString *qrCodeString = self.qrCodeImageView.image.QRCodeString;
|
NSString *qrCodeString = self.qrCodeImageView.image.QRCodeString;
|
||||||
NSURL *otpURL = [NSURL URLWithString:qrCodeString];
|
NSURL *otpURL = [NSURL URLWithString:qrCodeString];
|
||||||
self.generator = otpURL.isSteamOTPURL ? [[KPKSteamOTPGenerator alloc] initWithURL:qrCodeString] : [[KPKTimeOTPGenerator alloc] initWithURL:qrCodeString];
|
self.generator = otpURL.isSteamOTPURL ? [[KPKSteamOTPGenerator alloc] initWithURL:self.urlTextField.stringValue] : [[KPKTimeOTPGenerator alloc] initWithURL:self.urlTextField.stringValue];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case MPOTPUpdateSourceURL:{
|
case MPOTPUpdateSourceURL:{
|
||||||
|
|||||||
@@ -97,4 +97,11 @@
|
|||||||
self.toptValueTextField.stringValue = @"";
|
self.toptValueTextField.stringValue = @"";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (BOOL)commitEditing {
|
||||||
|
NSLog(@"%@: %@", NSStringFromClass(self.class), NSStringFromSelector(_cmd));
|
||||||
|
return [super commitEditing];
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -315,11 +315,11 @@ NSString *const MPToolbarItemIdentifierAutotype = @"TOOLBAR_AUTOTYPE";
|
|||||||
item.tag = NSSearchFieldRecentsTitleMenuItemTag;
|
item.tag = NSSearchFieldRecentsTitleMenuItemTag;
|
||||||
[menu addItem:item];
|
[menu addItem:item];
|
||||||
|
|
||||||
item = [[NSMenuItem alloc] initWithTitle:@"" action:NULL keyEquivalent:@""];
|
item = [[NSMenuItem alloc] initWithTitle:@"Recents" action:NULL keyEquivalent:@""];
|
||||||
item.tag = NSSearchFieldRecentsMenuItemTag;
|
item.tag = NSSearchFieldRecentsMenuItemTag;
|
||||||
[menu addItem:item];
|
[menu addItem:item];
|
||||||
|
|
||||||
item = [[NSMenuItem alloc] initWithTitle:@"" action:NULL keyEquivalent:@""];
|
item = [[NSMenuItem alloc] initWithTitle:@"NoEntries" action:NULL keyEquivalent:@""];
|
||||||
item.tag = NSSearchFieldNoRecentsMenuItemTag;
|
item.tag = NSSearchFieldNoRecentsMenuItemTag;
|
||||||
[menu addItem:item];
|
[menu addItem:item];
|
||||||
|
|
||||||
|
|||||||
@@ -1,32 +0,0 @@
|
|||||||
//
|
|
||||||
// MPTouchIdCompositeKeyStore.h
|
|
||||||
// MacPass
|
|
||||||
//
|
|
||||||
// Created by Julius Zint on 14.03.21.
|
|
||||||
// Copyright © 2021 HicknHack Software GmbH. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_BEGIN
|
|
||||||
|
|
||||||
@class KPKCompositeKey;
|
|
||||||
|
|
||||||
@interface MPTouchIdCompositeKeyStore : NSObject
|
|
||||||
|
|
||||||
@property (class, strong, readonly) MPTouchIdCompositeKeyStore *defaultStore;
|
|
||||||
|
|
||||||
/// Securely stores the provided compoiste key in the key store.
|
|
||||||
/// The key is encrypted and then stored to the corresponding location (transient or permanent)
|
|
||||||
/// @param compositeKey the composite key to store
|
|
||||||
/// @param documentKey the document key to store the composite key for
|
|
||||||
- (void)saveCompositeKey:(KPKCompositeKey *)compositeKey forDocumentKey:(NSString*)documentKey;
|
|
||||||
|
|
||||||
/// Load the encrypted composite key for the given key if anyone is found
|
|
||||||
/// @param documentKey the key to identify the document. Normally you should use the file name
|
|
||||||
- (NSData * _Nullable)loadEncryptedCompositeKeyForDocumentKey:(NSString *)documentKey;
|
|
||||||
|
|
||||||
- (KPKCompositeKey * _Nullable)compositeKeyForEncryptedKeyData:(NSData *)data error:(NSError **)error;
|
|
||||||
- (NSData * _Nullable)encryptedDataForCompositeKey:(KPKCompositeKey *)compositeKey error:(NSError **)error;
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_END
|
|
||||||
@@ -1,273 +0,0 @@
|
|||||||
//
|
|
||||||
// MPTouchIdCompositeKeyStore.m
|
|
||||||
// MacPass
|
|
||||||
//
|
|
||||||
// Created by Julius Zint on 14.03.21.
|
|
||||||
// Copyright © 2021 HicknHack Software GmbH. All rights reserved.
|
|
||||||
//
|
|
||||||
#import "MPSettingsHelper.h"
|
|
||||||
#import "MPTouchIdCompositeKeyStore.h"
|
|
||||||
#import "MPConstants.h"
|
|
||||||
#import "MPSettingsHelper.h"
|
|
||||||
|
|
||||||
#import "NSError+Messages.h"
|
|
||||||
|
|
||||||
@interface MPTouchIdCompositeKeyStore ()
|
|
||||||
@property (readonly, strong) NSMutableDictionary* keys;
|
|
||||||
@property (nonatomic) MPTouchIDKeyStorage touchIdEnabledState;
|
|
||||||
@end
|
|
||||||
|
|
||||||
@implementation MPTouchIdCompositeKeyStore
|
|
||||||
|
|
||||||
+ (instancetype)defaultStore {
|
|
||||||
static MPTouchIdCompositeKeyStore *instance;
|
|
||||||
static dispatch_once_t onceToken;
|
|
||||||
dispatch_once(&onceToken, ^{
|
|
||||||
instance = [[MPTouchIdCompositeKeyStore alloc] init];
|
|
||||||
});
|
|
||||||
return instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (instancetype)init {
|
|
||||||
self = [super init];
|
|
||||||
if(self) {
|
|
||||||
_keys = [[NSMutableDictionary alloc] init];
|
|
||||||
[self bind:NSStringFromSelector(@selector(touchIdEnabledState))
|
|
||||||
toObject:NSUserDefaultsController.sharedUserDefaultsController
|
|
||||||
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyTouchIdEnabled]
|
|
||||||
options:nil];
|
|
||||||
}
|
|
||||||
return self;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)setTouchIdEnabledState:(MPTouchIDKeyStorage)touchIdEnabledState {
|
|
||||||
switch(touchIdEnabledState) {
|
|
||||||
case MPTouchIDKeyStorageTransient:
|
|
||||||
// clear persistent store
|
|
||||||
[self _clearPersistenCompositeKeyData];
|
|
||||||
break;
|
|
||||||
case MPTouchIDKeyStoragePersistent:
|
|
||||||
// clear transient store
|
|
||||||
[self.keys removeAllObjects];
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
// clear persitent and transient store
|
|
||||||
[self _clearPersistenCompositeKeyData];
|
|
||||||
[self.keys removeAllObjects];
|
|
||||||
}
|
|
||||||
_touchIdEnabledState = touchIdEnabledState;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)saveCompositeKey:(KPKCompositeKey *)compositeKey forDocumentKey:(NSString *)documentKey {
|
|
||||||
NSError *error;
|
|
||||||
NSData *encryptedCompositeKey = [self encryptedDataForCompositeKey:compositeKey error:&error];
|
|
||||||
if(!encryptedCompositeKey) {
|
|
||||||
NSLog(@"Unable ot encrypt composite key: %@", error);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch(self.touchIdEnabledState) {
|
|
||||||
case MPTouchIDKeyStorageTransient:
|
|
||||||
[self _clearPersistenCompositeKeyData];
|
|
||||||
if(nil != encryptedCompositeKey) {
|
|
||||||
self.keys[documentKey] = encryptedCompositeKey;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MPTouchIDKeyStoragePersistent:
|
|
||||||
self.keys[documentKey] = nil;
|
|
||||||
if(nil != encryptedCompositeKey) {
|
|
||||||
[self _persistCompositeKeyData:encryptedCompositeKey forDocumentKey:documentKey];
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MPTouchIDKeyStorageDisabled:
|
|
||||||
[self _clearPersistenCompositeKeyData];
|
|
||||||
self.keys[documentKey] = nil;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
NSAssert(NO,@"Unsupported internal touchID preferences value.");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
- (NSData *)loadEncryptedCompositeKeyForDocumentKey:(NSString *)documentKey {
|
|
||||||
NSInteger touchIdMode = [NSUserDefaults.standardUserDefaults integerForKey:kMPSettingsKeyTouchIdEnabled];
|
|
||||||
NSData* transientKey = self.keys[documentKey];
|
|
||||||
NSData* persistentKey = [self _persitentCompositeKeyDataForDocumentKey:documentKey];
|
|
||||||
if(nil == transientKey && nil == persistentKey) {
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
if(nil == transientKey || nil == persistentKey) {
|
|
||||||
return transientKey == nil ? persistentKey : transientKey;
|
|
||||||
}
|
|
||||||
if(touchIdMode == NSControlStateValueOn) {
|
|
||||||
return persistentKey;
|
|
||||||
}
|
|
||||||
return transientKey;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (KPKCompositeKey *)compositeKeyForEncryptedKeyData:(NSData *)data error:(NSError *__autoreleasing _Nullable *)error {
|
|
||||||
if(nil == data) {
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
NSData* tag = [MPTouchIdUnlockPrivateKeyTag dataUsingEncoding:NSUTF8StringEncoding];
|
|
||||||
NSDictionary *queryPrivateKey = @{
|
|
||||||
(id)kSecClass: (id)kSecClassKey,
|
|
||||||
(id)kSecAttrApplicationTag: tag,
|
|
||||||
(id)kSecAttrKeyType: (id)kSecAttrKeyTypeRSA,
|
|
||||||
(id)kSecReturnRef: @YES,
|
|
||||||
};
|
|
||||||
SecKeyRef privateKey = NULL;
|
|
||||||
OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)queryPrivateKey, (CFTypeRef *)&privateKey);
|
|
||||||
if(status != errSecSuccess) {
|
|
||||||
if(error != NULL) {
|
|
||||||
NSString* description = CFBridgingRelease(SecCopyErrorMessageString(status, NULL));
|
|
||||||
*error = [NSError errorWithCode:status description:description];
|
|
||||||
}
|
|
||||||
if(privateKey) {
|
|
||||||
CFRelease(privateKey);
|
|
||||||
}
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
SecKeyAlgorithm algorithm = kSecKeyAlgorithmRSAEncryptionOAEPSHA256AESGCM;
|
|
||||||
BOOL canDecrypt = SecKeyIsAlgorithmSupported(privateKey, kSecKeyOperationTypeDecrypt, algorithm);
|
|
||||||
if(!canDecrypt) {
|
|
||||||
if(error != NULL) {
|
|
||||||
*error = [NSError errorWithCode:MPErrorTouchIdUnsupportedKeyForEncrpytion description:NSLocalizedString(@"ERROR_TOUCH_ID_UNSUPPORTED_KEY", @"The key stored for TouchID is not suitable for encrpytion")];
|
|
||||||
}
|
|
||||||
if(privateKey) {
|
|
||||||
CFRelease(privateKey);
|
|
||||||
}
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
CFErrorRef errorRef = NULL; // FIXME: Release?
|
|
||||||
NSData* clearText = (NSData*)CFBridgingRelease(SecKeyCreateDecryptedData(privateKey, algorithm, (__bridge CFDataRef)data, &errorRef));
|
|
||||||
if(clearText) {
|
|
||||||
return [NSKeyedUnarchiver unarchiveObjectWithData:clearText];
|
|
||||||
}
|
|
||||||
if(error != NULL) {
|
|
||||||
*error = CFBridgingRelease(errorRef);
|
|
||||||
}
|
|
||||||
if(privateKey) {
|
|
||||||
CFRelease(privateKey);
|
|
||||||
}
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
- (NSData *)encryptedDataForCompositeKey:(KPKCompositeKey *)compositeKey error:(NSError *__autoreleasing _Nullable *)error {
|
|
||||||
NSData* keyData = [NSKeyedArchiver archivedDataWithRootObject:compositeKey];
|
|
||||||
NSData* tag = [MPTouchIdUnlockPublicKeyTag dataUsingEncoding:NSUTF8StringEncoding];
|
|
||||||
NSDictionary *getquery = @{
|
|
||||||
(id)kSecClass: (id)kSecClassKey,
|
|
||||||
(id)kSecAttrApplicationTag: tag,
|
|
||||||
(id)kSecReturnRef: @YES,
|
|
||||||
};
|
|
||||||
SecKeyRef publicKey = NULL;
|
|
||||||
OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)getquery, (CFTypeRef *)&publicKey);
|
|
||||||
if (status != errSecSuccess) {
|
|
||||||
[self _createAndAddRSAKeyPair];
|
|
||||||
OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)getquery, (CFTypeRef *)&publicKey);
|
|
||||||
if (status != errSecSuccess) {
|
|
||||||
NSString* description = CFBridgingRelease(SecCopyErrorMessageString(status, NULL));
|
|
||||||
NSLog(@"Error while trying to query public key from Keychain: %@", description);
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SecKeyAlgorithm algorithm = kSecKeyAlgorithmRSAEncryptionOAEPSHA256AESGCM;
|
|
||||||
BOOL canEncrypt = SecKeyIsAlgorithmSupported(publicKey, kSecKeyOperationTypeEncrypt, algorithm);
|
|
||||||
NSData *encryptedKey;
|
|
||||||
if(canEncrypt) {
|
|
||||||
CFErrorRef error = NULL;
|
|
||||||
encryptedKey = (NSData*)CFBridgingRelease(SecKeyCreateEncryptedData(publicKey, algorithm, (__bridge CFDataRef)keyData, &error));
|
|
||||||
if (!encryptedKey) {
|
|
||||||
NSError *err = CFBridgingRelease(error);
|
|
||||||
NSLog(@"Error while trying to decrypt the CompositeKey for TouchID unlock: %@", [err description]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
NSLog(@"The key retreived from the Keychain is unable to encrypt data");
|
|
||||||
}
|
|
||||||
if (publicKey) {
|
|
||||||
CFRelease(publicKey);
|
|
||||||
}
|
|
||||||
return encryptedKey;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)_createAndAddRSAKeyPair {
|
|
||||||
CFErrorRef error = NULL;
|
|
||||||
NSString* publicKeyLabel = @"MacPass TouchID Feature Public Key";
|
|
||||||
NSString* privateKeyLabel = @"MacPass TouchID Feature Private Key";
|
|
||||||
NSData* publicKeyTag = [MPTouchIdUnlockPublicKeyTag dataUsingEncoding:NSUTF8StringEncoding];
|
|
||||||
NSData* privateKeyTag = [MPTouchIdUnlockPrivateKeyTag dataUsingEncoding:NSUTF8StringEncoding];
|
|
||||||
SecAccessControlRef access = NULL;
|
|
||||||
if (@available(macOS 10.13.4, *)) {
|
|
||||||
SecAccessControlCreateFlags flags = kSecAccessControlBiometryCurrentSet;
|
|
||||||
if (@available(macOS 10.15, *)) {
|
|
||||||
flags |= kSecAccessControlWatch | kSecAccessControlOr;
|
|
||||||
}
|
|
||||||
access = SecAccessControlCreateWithFlags(kCFAllocatorDefault,
|
|
||||||
kSecAttrAccessibleWhenUnlockedThisDeviceOnly,
|
|
||||||
flags,
|
|
||||||
&error);
|
|
||||||
if(access == NULL) {
|
|
||||||
NSError *err = CFBridgingRelease(error);
|
|
||||||
NSLog(@"Error while trying to create AccessControl for TouchID unlock feature: %@", [err description]);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
NSDictionary* attributes = @{
|
|
||||||
(id)kSecAttrKeyType: (id)kSecAttrKeyTypeRSA,
|
|
||||||
(id)kSecAttrKeySizeInBits: @2048,
|
|
||||||
(id)kSecAttrSynchronizable: @NO,
|
|
||||||
(id)kSecPrivateKeyAttrs:
|
|
||||||
@{ (id)kSecAttrIsPermanent: @YES,
|
|
||||||
(id)kSecAttrApplicationTag: privateKeyTag,
|
|
||||||
(id)kSecAttrLabel: privateKeyLabel,
|
|
||||||
(id)kSecAttrAccessControl: (__bridge id)access
|
|
||||||
},
|
|
||||||
(id)kSecPublicKeyAttrs:
|
|
||||||
@{ (id)kSecAttrIsPermanent: @YES,
|
|
||||||
(id)kSecAttrApplicationTag: publicKeyTag,
|
|
||||||
(id)kSecAttrLabel: publicKeyLabel,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
SecKeyRef result = SecKeyCreateRandomKey((__bridge CFDictionaryRef)attributes, &error);
|
|
||||||
if(result == NULL) {
|
|
||||||
NSError *err = CFBridgingRelease(error);
|
|
||||||
NSLog(@"Error while trying to create a RSA keypair for TouchID unlock feature: %@", [err description]);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
CFRelease(result);
|
|
||||||
}
|
|
||||||
CFRelease(access);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSData *)_persitentCompositeKeyDataForDocumentKey:(NSString *)key {
|
|
||||||
if(key.length == 0) {
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
return [NSUserDefaults.standardUserDefaults objectForKey:kMPSettingsKeyTouchIdEncryptedKeyStore][key];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)_persistCompositeKeyData:(NSData *)data forDocumentKey:(NSString *)key {
|
|
||||||
if(data.length == 0 || key.length == 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
NSMutableDictionary *dict = [[NSUserDefaults.standardUserDefaults objectForKey:kMPSettingsKeyTouchIdEncryptedKeyStore] mutableCopy];
|
|
||||||
if(nil == dict) {
|
|
||||||
dict = [[NSMutableDictionary alloc] init];
|
|
||||||
}
|
|
||||||
dict[key] = data;
|
|
||||||
[NSUserDefaults.standardUserDefaults setObject:[dict copy] forKey:kMPSettingsKeyTouchIdEncryptedKeyStore];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)_clearPersistenCompositeKeyData {
|
|
||||||
[NSUserDefaults.standardUserDefaults removeObjectForKey:kMPSettingsKeyTouchIdEncryptedKeyStore];
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user