reworked layout for advanced tab in database settings windows

This commit is contained in:
michael starke
2017-10-16 11:56:02 +02:00
parent f066038476
commit b3e9603390
7 changed files with 324 additions and 193 deletions

View File

@@ -93,6 +93,7 @@
4C3826CC1AD04D8E007D7D67 /* 65_WikiTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4C3826A21AD04D8E007D7D67 /* 65_WikiTemplate.pdf */; };
4C3826CD1AD04D8E007D7D67 /* 66_MoneyTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4C3826A31AD04D8E007D7D67 /* 66_MoneyTemplate.pdf */; };
4C3826CE1AD04D8E007D7D67 /* 67_CertificatTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4C3826A41AD04D8E007D7D67 /* 67_CertificatTemplate.pdf */; };
4C3B42871F935316007B04FD /* MPDayCountFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C3B42861F935316007B04FD /* MPDayCountFormatter.m */; };
4C3BD51516D276F800389F1F /* MPToolbarDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C3BD51416D276F800389F1F /* MPToolbarDelegate.m */; };
4C3C4EAF18D7039300153127 /* MPValueTransformerHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C3C4EAE18D7039300153127 /* MPValueTransformerHelper.m */; };
4C3FFD9E16DAF60600DF9186 /* ContextBar.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C3FFD9D16DAF60600DF9186 /* ContextBar.xib */; };
@@ -408,6 +409,8 @@
4C3826A21AD04D8E007D7D67 /* 65_WikiTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = 65_WikiTemplate.pdf; sourceTree = "<group>"; };
4C3826A31AD04D8E007D7D67 /* 66_MoneyTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = 66_MoneyTemplate.pdf; sourceTree = "<group>"; };
4C3826A41AD04D8E007D7D67 /* 67_CertificatTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = 67_CertificatTemplate.pdf; sourceTree = "<group>"; };
4C3B42851F935316007B04FD /* MPDayCountFormatter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPDayCountFormatter.h; sourceTree = "<group>"; };
4C3B42861F935316007B04FD /* MPDayCountFormatter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPDayCountFormatter.m; sourceTree = "<group>"; };
4C3BD51316D276F800389F1F /* MPToolbarDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPToolbarDelegate.h; sourceTree = "<group>"; };
4C3BD51416D276F800389F1F /* MPToolbarDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPToolbarDelegate.m; sourceTree = "<group>"; };
4C3C4EAD18D7039300153127 /* MPValueTransformerHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPValueTransformerHelper.h; sourceTree = "<group>"; };
@@ -963,6 +966,8 @@
4C4B7EF717A4B335000234C7 /* MPUniqueCharactersFormatter.m */,
4C224B4017DFCB2300FF6AEE /* MPNumericalInputFormatter.h */,
4C224B4117DFCB2400FF6AEE /* MPNumericalInputFormatter.m */,
4C3B42851F935316007B04FD /* MPDayCountFormatter.h */,
4C3B42861F935316007B04FD /* MPDayCountFormatter.m */,
4C3C4EAD18D7039300153127 /* MPValueTransformerHelper.h */,
4C3C4EAE18D7039300153127 /* MPValueTransformerHelper.m */,
4C26C33D18D8C92100CF1A1C /* MPTemporaryFileStorage.h */,
@@ -1844,6 +1849,7 @@
4CE3E62617AB0D2D00D9E4B4 /* MPAttachmentTableDataSource.m in Sources */,
4C0728BD17B5B7F7005A7DD9 /* MPPasswordEditWindowController.m in Sources */,
4C0F647B17B6BC9C00D9522A /* MPSavePanelAccessoryViewController.m in Sources */,
4C3B42871F935316007B04FD /* MPDayCountFormatter.m in Sources */,
4C57AE1417BA422B00CA4F34 /* MPSegmentedContextCell.m in Sources */,
4CE2961518429AA5005F01CE /* MPAutotypeKeyPress.m in Sources */,
4C32B0E71A1D4436007E12F1 /* KPKFormat+MPUTIDetection.m in Sources */,

View File

@@ -23,17 +23,20 @@
<outlet property="databaseDescriptionTextView" destination="1531" id="1553"/>
<outlet property="databaseNameTextField" destination="231" id="655"/>
<outlet property="defaultUsernameTextField" destination="1730" id="1819"/>
<outlet property="emptyTrashOnQuitCheckButton" destination="539" id="pgQ-AP-HB2"/>
<outlet property="enableHistoryCheckButton" destination="531" id="erw-Xj-ENh"/>
<outlet property="enableTrashCheckButton" destination="535" id="UNd-h9-aw3"/>
<outlet property="enforceKeyChangeCheckButton" destination="upv-b3-vCc" id="JjM-CX-15q"/>
<outlet property="enforceKeyChangeIntervalStepper" destination="lH4-xp-5QF" id="K1S-Og-OGK"/>
<outlet property="enforceKeyChangeIntervalTextField" destination="VYh-cm-fix" id="aqu-Dm-tlH"/>
<outlet property="enforceKeyChangeOnceCheckButton" destination="VMc-Qg-eCr" id="Ith-Jn-JVX"/>
<outlet property="historyMaximumItemsStepper" destination="599" id="aRL-wb-JSA"/>
<outlet property="historyMaximumItemsTextField" destination="593" id="NrX-e0-8Dw"/>
<outlet property="historyMaxiumSizeTextField" destination="1273" id="5Fo-Pp-8dY"/>
<outlet property="historyMaximumSizeStepper" destination="1294" id="Jbo-ZY-5h6"/>
<outlet property="historyMaximumSizeTextField" destination="1273" id="5Fo-Pp-8dY"/>
<outlet property="keyDerivationPopupButton" destination="5D9-bT-JAr" id="90K-97-HQW"/>
<outlet property="keyDerivationSettingsTabView" destination="2MY-PW-kzL" id="1iZ-jt-nxi"/>
<outlet property="recommendKeyChangeCheckButton" destination="Hqc-B0-xyz" id="3CK-D7-b8S"/>
<outlet property="recommendKeyChangeIntervalStepper" destination="GUO-6H-UI2" id="gIQ-c2-pkx"/>
<outlet property="recommendKeyChangeIntervalTextField" destination="19r-LE-7X5" id="c5C-1h-LpD"/>
<outlet property="sectionTabView" destination="357" id="699"/>
<outlet property="selectTrashGoupPopUpButton" destination="678" id="MmE-QI-reD"/>
@@ -46,14 +49,14 @@
<window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="1">
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
<rect key="contentRect" x="196" y="240" width="548" height="411"/>
<rect key="contentRect" x="196" y="240" width="553" height="319"/>
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
<view key="contentView" id="2">
<rect key="frame" x="0.0" y="0.0" width="548" height="335"/>
<rect key="frame" x="0.0" y="0.0" width="553" height="484"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="288">
<rect key="frame" x="475" y="13" width="59" height="32"/>
<rect key="frame" x="480" y="13" width="59" height="32"/>
<buttonCell key="cell" type="push" title="OK" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="289">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
@@ -66,7 +69,7 @@ DQ
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="956">
<rect key="frame" x="393" y="13" width="82" height="32"/>
<rect key="frame" x="398" y="13" width="82" height="32"/>
<buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="957">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
@@ -79,7 +82,7 @@ Gw
</connections>
</button>
<tabView translatesAutoresizingMaskIntoConstraints="NO" id="357">
<rect key="frame" x="13" y="41" width="522" height="288"/>
<rect key="frame" x="13" y="41" width="527" height="437"/>
<font key="font" metaFont="system"/>
<tabViewItems>
<tabViewItem label="General" identifier="1" id="358">
@@ -424,101 +427,88 @@ Gw
</tabViewItem>
<tabViewItem label="Advanced" identifier="" id="368">
<view key="view" id="369">
<rect key="frame" x="10" y="33" width="502" height="335"/>
<rect key="frame" x="10" y="33" width="507" height="391"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button verticalHuggingPriority="1000" translatesAutoresizingMaskIntoConstraints="NO" id="531">
<rect key="frame" x="70" y="299" width="145" height="18"/>
<buttonCell key="cell" type="check" title="Enable Entry History" bezelStyle="regularSquare" imagePosition="left" enabled="NO" state="on" inset="2" id="532">
<rect key="frame" x="184" y="355" width="145" height="18"/>
<buttonCell key="cell" type="check" title="Enable Entry History" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="532">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<button translatesAutoresizingMaskIntoConstraints="NO" id="535">
<rect key="frame" x="70" y="201" width="137" height="18"/>
<buttonCell key="cell" type="check" title="Enable Recycle Bin" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="536">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="557">
<rect key="frame" x="110" y="274" width="103" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" enabled="NO" sendsActionOnEndEditing="YES" title="Maximum Items:" id="558">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="593">
<rect key="frame" x="219" y="271" width="96" height="22"/>
<constraints>
<constraint firstAttribute="width" constant="96" id="pYi-8G-RA7"/>
</constraints>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" enabled="NO" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="594">
<font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="599">
<rect key="frame" x="320" y="268" width="19" height="27"/>
<stepperCell key="cell" continuous="YES" enabled="NO" alignment="left" maxValue="100" id="600"/>
</stepper>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="678">
<rect key="frame" x="217" y="195" width="220" height="26"/>
<constraints>
<constraint firstAttribute="width" constant="215" id="AIY-63-gl0"/>
</constraints>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="679">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" title="OtherViews" id="680"/>
</popUpButtonCell>
</popUpButton>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1268">
<rect key="frame" x="117" y="242" width="96" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" enabled="NO" sendsActionOnEndEditing="YES" title="Maximum Size:" id="1269">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1273">
<rect key="frame" x="219" y="239" width="96" height="22"/>
<rect key="frame" x="186" y="327" width="64" height="22"/>
<constraints>
<constraint firstAttribute="width" constant="96" id="lRA-HE-AaF"/>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="64" id="PRg-vx-8QK"/>
</constraints>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" enabled="NO" 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"/>
<font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1294">
<rect key="frame" x="320" y="236" width="19" height="27"/>
<stepperCell key="cell" continuous="YES" enabled="NO" alignment="left" maxValue="100" id="1295"/>
<rect key="frame" x="255" y="324" width="19" height="27"/>
<stepperCell key="cell" continuous="YES" alignment="left" maxValue="100" id="1295"/>
</stepper>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1268">
<rect key="frame" x="52" y="330" width="128" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" enabled="NO" sendsActionOnEndEditing="YES" title="Maxium history size:" id="1269">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="557">
<rect key="frame" x="18" y="302" width="162" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" enabled="NO" sendsActionOnEndEditing="YES" title="Maximum items in history:" id="558">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="593">
<rect key="frame" x="186" y="299" width="64" height="22"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="594">
<font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="599">
<rect key="frame" x="255" y="296" width="19" height="27"/>
<stepperCell key="cell" continuous="YES" alignment="left" maxValue="100" id="600"/>
</stepper>
<button translatesAutoresizingMaskIntoConstraints="NO" id="535">
<rect key="frame" x="184" y="265" width="137" height="18"/>
<buttonCell key="cell" type="check" title="Enable Recycle Bin" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="536">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="678">
<rect key="frame" x="184" y="235" width="37" height="26"/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="679">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" title="OtherViews" id="680"/>
</popUpButtonCell>
</popUpButton>
<box verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="U7M-MH-EFw">
<rect key="frame" x="20" y="287" width="467" height="5"/>
</box>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1582">
<rect key="frame" x="96" y="149" width="117" height="17"/>
<rect key="frame" x="63" y="199" width="117" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Default Username:" id="1591">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1584">
<rect key="frame" x="108" y="108" width="105" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Template Group:" id="1588">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1730">
<rect key="frame" x="219" y="146" width="215" height="22"/>
<constraints>
<constraint firstAttribute="width" constant="215" id="J2z-RZ-eS1"/>
</constraints>
<rect key="frame" x="186" y="196" width="301" height="22"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="1731">
<font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
@@ -526,10 +516,7 @@ Gw
</textFieldCell>
</textField>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1738">
<rect key="frame" x="217" y="102" width="220" height="26"/>
<constraints>
<constraint firstAttribute="width" constant="215" id="5P2-dy-dfo"/>
</constraints>
<rect key="frame" x="184" y="152" width="76" height="26"/>
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="1741" id="1739">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
@@ -542,59 +529,70 @@ Gw
</menu>
</popUpButtonCell>
</popUpButton>
<button verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Hqc-B0-xyz">
<rect key="frame" x="70" y="77" width="211" height="18"/>
<buttonCell key="cell" type="check" title="Recommend key change every:" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="CtU-Eq-dgy">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<button translatesAutoresizingMaskIntoConstraints="NO" id="upv-b3-vCc">
<rect key="frame" x="70" y="45" width="211" height="18"/>
<buttonCell key="cell" type="check" title="Force key change every:" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="z6u-YT-7LE">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="19r-LE-7X5">
<rect key="frame" x="287" y="75" width="38" height="22"/>
<rect key="frame" x="186" y="94" width="128" height="22"/>
<constraints>
<constraint firstAttribute="width" constant="38" id="Zyg-Bo-eBy"/>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="128" id="COb-0V-OmT"/>
</constraints>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="days" drawsBackground="YES" id="Nca-aw-6rR">
<font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="VYh-cm-fix">
<rect key="frame" x="287" y="43" width="38" height="22"/>
<constraints>
<constraint firstAttribute="width" constant="38" id="hgc-dE-uYj"/>
</constraints>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="days" drawsBackground="YES" id="M9G-Yy-1s4">
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="Nca-aw-6rR">
<customFormatter key="formatter" id="fXZ-RM-4M7" customClass="MPDayCountFormatter"/>
<font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="GUO-6H-UI2">
<rect key="frame" x="330" y="72" width="19" height="27"/>
<stepperCell key="cell" continuous="YES" enabled="NO" alignment="left" maxValue="100" id="qQV-3d-GpK"/>
<rect key="frame" x="319" y="92" width="19" height="27"/>
<stepperCell key="cell" continuous="YES" alignment="left" maxValue="100" id="qQV-3d-GpK"/>
</stepper>
<stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="lH4-xp-5QF">
<rect key="frame" x="330" y="40" width="19" height="27"/>
<stepperCell key="cell" continuous="YES" enabled="NO" alignment="left" maxValue="100" id="7Hw-Qf-zWf"/>
</stepper>
<button verticalHuggingPriority="1000" translatesAutoresizingMaskIntoConstraints="NO" id="539">
<rect key="frame" x="110" y="174" width="182" height="18"/>
<buttonCell key="cell" type="check" title="Empty Recycle Bin on Quit" bezelStyle="regularSquare" imagePosition="left" enabled="NO" state="on" inset="2" id="540">
<button verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Hqc-B0-xyz">
<rect key="frame" x="184" y="122" width="175" height="18"/>
<buttonCell key="cell" type="check" title="Recommend key change:" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="CtU-Eq-dgy">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<button translatesAutoresizingMaskIntoConstraints="NO" id="upv-b3-vCc">
<rect key="frame" x="184" y="70" 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">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="VYh-cm-fix">
<rect key="frame" x="186" y="42" width="128" height="22"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="M9G-Yy-1s4">
<customFormatter key="formatter" id="3Ax-U4-Ofb" customClass="MPDayCountFormatter"/>
<font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="lH4-xp-5QF">
<rect key="frame" x="319" y="40" width="19" height="27"/>
<stepperCell key="cell" continuous="YES" alignment="left" maxValue="100" id="7Hw-Qf-zWf"/>
</stepper>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1584">
<rect key="frame" x="75" y="158" width="105" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Template Group:" id="1588">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<box verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="I0d-r2-ySf">
<rect key="frame" x="20" y="144" width="467" height="5"/>
</box>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="NPm-5h-2Mz">
<rect key="frame" x="72" y="242" width="108" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Recylebin 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>
<button translatesAutoresizingMaskIntoConstraints="NO" id="VMc-Qg-eCr">
<rect key="frame" x="70" y="18" width="257" height="18"/>
<rect key="frame" x="184" y="18" width="257" height="18"/>
<buttonCell key="cell" type="check" title="Force key change once after unlocking" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="pA1-aL-KjT">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
@@ -602,51 +600,77 @@ Gw
</button>
</subviews>
<constraints>
<constraint firstItem="GUO-6H-UI2" firstAttribute="centerY" secondItem="19r-LE-7X5" secondAttribute="centerY" id="0fF-mc-ILf"/>
<constraint firstItem="1582" firstAttribute="baseline" secondItem="1730" secondAttribute="baseline" id="53m-Go-qj7"/>
<constraint firstItem="678" firstAttribute="leading" secondItem="1273" secondAttribute="leading" id="7jg-oH-RBQ"/>
<constraint firstItem="lH4-xp-5QF" firstAttribute="leading" secondItem="VYh-cm-fix" secondAttribute="trailing" constant="8" symbolic="YES" id="7mR-Hk-xAf"/>
<constraint firstItem="539" firstAttribute="top" secondItem="678" secondAttribute="bottom" constant="8" symbolic="YES" id="7wg-Ok-FP0"/>
<constraint firstItem="557" firstAttribute="trailing" secondItem="1268" secondAttribute="trailing" id="8Is-lg-ht1"/>
<constraint firstItem="VYh-cm-fix" firstAttribute="top" secondItem="19r-LE-7X5" secondAttribute="bottom" constant="10" symbolic="YES" id="AfZ-8U-Tew"/>
<constraint firstItem="lH4-xp-5QF" firstAttribute="centerY" secondItem="VYh-cm-fix" secondAttribute="centerY" id="Aq5-9d-gTM"/>
<constraint firstItem="19r-LE-7X5" firstAttribute="baseline" secondItem="Hqc-B0-xyz" secondAttribute="baseline" id="CvP-WC-EMv"/>
<constraint firstItem="1273" firstAttribute="leading" secondItem="593" secondAttribute="leading" id="Cxq-Js-tRX"/>
<constraint firstItem="upv-b3-vCc" firstAttribute="baseline" secondItem="VYh-cm-fix" secondAttribute="baseline" id="Dfq-TI-0Fb"/>
<constraint firstItem="1730" firstAttribute="leading" secondItem="1582" secondAttribute="trailing" constant="8" id="EEF-5l-QJ1"/>
<constraint firstItem="GUO-6H-UI2" firstAttribute="leading" secondItem="19r-LE-7X5" secondAttribute="trailing" constant="8" symbolic="YES" id="G2W-PR-I5F"/>
<constraint firstItem="531" firstAttribute="top" secondItem="369" secondAttribute="top" constant="20" symbolic="YES" id="G3I-RI-dcb"/>
<constraint firstItem="599" firstAttribute="leading" secondItem="593" secondAttribute="trailing" constant="8" id="Gso-aR-tMT"/>
<constraint firstItem="VYh-cm-fix" firstAttribute="leading" secondItem="upv-b3-vCc" secondAttribute="trailing" constant="8" symbolic="YES" id="Gvz-cw-gyJ"/>
<constraint firstItem="535" firstAttribute="baseline" secondItem="678" secondAttribute="baseline" id="IOP-Cc-JfA"/>
<constraint firstItem="1273" firstAttribute="baseline" secondItem="1268" secondAttribute="baseline" id="KbL-8w-fEa"/>
<constraint firstItem="1738" firstAttribute="leading" secondItem="1584" secondAttribute="trailing" constant="8" id="Mvn-4e-Z7D"/>
<constraint firstItem="531" firstAttribute="leading" secondItem="Hqc-B0-xyz" secondAttribute="leading" id="Nxh-YG-snR"/>
<constraint firstItem="1273" firstAttribute="top" secondItem="593" secondAttribute="bottom" constant="10" symbolic="YES" id="QhO-OW-itG"/>
<constraint firstItem="531" firstAttribute="leading" secondItem="369" secondAttribute="leading" constant="72" id="ToY-AF-7CZ"/>
<constraint firstItem="531" firstAttribute="leading" secondItem="upv-b3-vCc" secondAttribute="leading" id="UKO-82-vrB"/>
<constraint firstAttribute="bottom" secondItem="VMc-Qg-eCr" secondAttribute="bottom" constant="20" symbolic="YES" id="UVL-oZ-gGY"/>
<constraint firstItem="VMc-Qg-eCr" firstAttribute="top" secondItem="VYh-cm-fix" secondAttribute="bottom" constant="9" id="WDt-qR-mMT"/>
<constraint firstItem="593" firstAttribute="leading" secondItem="557" secondAttribute="trailing" constant="8" id="bgR-yS-2b7"/>
<constraint firstItem="1730" firstAttribute="top" secondItem="539" secondAttribute="bottom" constant="8" symbolic="YES" id="bkx-0b-opr"/>
<constraint firstItem="1730" firstAttribute="leading" secondItem="678" secondAttribute="leading" id="cgb-Lx-8GP"/>
<constraint firstItem="1294" firstAttribute="centerY" secondItem="1273" secondAttribute="centerY" id="cpr-BN-2DZ"/>
<constraint firstItem="19r-LE-7X5" firstAttribute="top" secondItem="1738" secondAttribute="bottom" constant="8" symbolic="YES" id="dM9-Fh-j6y"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="VMc-Qg-eCr" secondAttribute="trailing" constant="20" symbolic="YES" id="eAd-MK-G1o"/>
<constraint firstItem="557" firstAttribute="baseline" secondItem="593" secondAttribute="baseline" id="edx-L7-RYQ"/>
<constraint firstItem="1584" firstAttribute="baseline" secondItem="1738" secondAttribute="baseline" id="fEL-DR-qHv"/>
<constraint firstItem="19r-LE-7X5" firstAttribute="leading" secondItem="Hqc-B0-xyz" secondAttribute="trailing" constant="8" symbolic="YES" id="fVi-fB-ndY"/>
<constraint firstItem="593" firstAttribute="top" secondItem="531" secondAttribute="bottom" constant="8" symbolic="YES" id="fjr-93-a9u"/>
<constraint firstItem="678" firstAttribute="top" secondItem="1273" secondAttribute="bottom" constant="20" symbolic="YES" id="h5r-kC-cd1"/>
<constraint firstItem="535" firstAttribute="leading" secondItem="539" secondAttribute="leading" constant="-40" id="hPW-3h-ls3"/>
<constraint firstItem="599" firstAttribute="centerY" secondItem="593" secondAttribute="centerY" id="jJ1-FH-tRt"/>
<constraint firstItem="557" firstAttribute="leading" secondItem="531" secondAttribute="leading" constant="40" id="p0B-Z6-af2"/>
<constraint firstItem="1294" firstAttribute="leading" secondItem="1273" secondAttribute="trailing" constant="8" id="rgy-cX-WKJ"/>
<constraint firstItem="1738" firstAttribute="leading" secondItem="1730" secondAttribute="leading" id="smv-y7-Jkl"/>
<constraint firstItem="VYh-cm-fix" firstAttribute="leading" secondItem="19r-LE-7X5" secondAttribute="leading" id="tmY-iX-cZh"/>
<constraint firstItem="531" firstAttribute="leading" secondItem="535" secondAttribute="leading" id="ucf-w0-brS"/>
<constraint firstItem="1738" firstAttribute="top" secondItem="1730" secondAttribute="bottom" constant="20" symbolic="YES" id="wPN-zn-tg4"/>
<constraint firstItem="VMc-Qg-eCr" firstAttribute="leading" secondItem="531" secondAttribute="leading" id="zl6-Bu-eJC"/>
<constraint firstItem="1273" firstAttribute="leading" secondItem="531" secondAttribute="leading" id="1oM-2t-AOv"/>
<constraint firstItem="GUO-6H-UI2" firstAttribute="leading" secondItem="19r-LE-7X5" secondAttribute="trailing" constant="8" symbolic="YES" id="2PV-sa-5h6"/>
<constraint firstItem="VYh-cm-fix" firstAttribute="leading" secondItem="531" secondAttribute="leading" id="2Xr-j4-fRh"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="GUO-6H-UI2" secondAttribute="trailing" constant="20" symbolic="YES" id="3y6-lK-yT4"/>
<constraint firstItem="593" firstAttribute="width" secondItem="1273" secondAttribute="width" id="4Ee-i1-ZVV"/>
<constraint firstItem="U7M-MH-EFw" firstAttribute="leading" secondItem="369" secondAttribute="leading" constant="20" symbolic="YES" id="4vC-yz-H7O"/>
<constraint firstItem="VYh-cm-fix" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="369" secondAttribute="leading" constant="20" symbolic="YES" id="5FH-au-cde"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="Hqc-B0-xyz" secondAttribute="trailing" constant="20" symbolic="YES" id="5c0-xg-zUq"/>
<constraint firstItem="531" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="369" secondAttribute="leading" constant="181" id="6zN-79-Qnu"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="678" secondAttribute="trailing" constant="20" symbolic="YES" id="7i3-v0-KzW"/>
<constraint firstItem="1730" firstAttribute="leading" secondItem="531" secondAttribute="leading" id="8U5-xL-RFD"/>
<constraint firstItem="1294" firstAttribute="centerY" secondItem="1273" secondAttribute="centerY" id="9N2-YI-gkU"/>
<constraint firstItem="upv-b3-vCc" firstAttribute="top" secondItem="19r-LE-7X5" secondAttribute="bottom" constant="8" symbolic="YES" id="9b8-i8-WsG"/>
<constraint firstItem="593" firstAttribute="leading" secondItem="1273" secondAttribute="leading" id="BEV-US-Ovh"/>
<constraint firstItem="19r-LE-7X5" firstAttribute="leading" secondItem="531" secondAttribute="leading" id="Bxq-DB-Mdf"/>
<constraint firstItem="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 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="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="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="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>
</view>
</tabViewItem>
@@ -664,7 +688,7 @@ Gw
<constraint firstItem="956" firstAttribute="top" secondItem="357" secondAttribute="bottom" constant="10" id="1096"/>
</constraints>
</view>
<point key="canvasLocation" x="-570" y="-191"/>
<point key="canvasLocation" x="-1440" y="-331"/>
</window>
</objects>
</document>

View File

@@ -58,7 +58,11 @@ typedef NS_ENUM(NSUInteger, MPDatabaseSettingsTab) {
/* Advanced Tab*/
@property (weak) IBOutlet NSButton *enableHistoryCheckButton;
@property (weak) IBOutlet NSTextField *historyMaximumItemsTextField;
@property (weak) IBOutlet NSTextField *historyMaxiumSizeTextField;
@property (weak) IBOutlet NSStepper *historyMaximumItemsStepper;
@property (weak) IBOutlet NSTextField *historyMaximumSizeTextField;
@property (weak) IBOutlet NSStepper *historyMaximumSizeStepper;
@property (weak) IBOutlet NSButton *enableTrashCheckButton;
@property (weak) IBOutlet NSButton *emptyTrashOnQuitCheckButton;
@property (weak) IBOutlet NSPopUpButton *selectTrashGoupPopUpButton;
@@ -69,7 +73,9 @@ typedef NS_ENUM(NSUInteger, MPDatabaseSettingsTab) {
@property (weak) IBOutlet NSButton *enforceKeyChangeCheckButton;
@property (weak) IBOutlet NSButton *enforceKeyChangeOnceCheckButton;
@property (weak) IBOutlet NSTextField *recommendKeyChangeIntervalTextField;
@property (weak) IBOutlet NSStepper *recommendKeyChangeIntervalStepper;
@property (weak) IBOutlet NSTextField *enforceKeyChangeIntervalTextField;
@property (weak) IBOutlet NSStepper *enforceKeyChangeIntervalStepper;
- (void)showSettingsTab:(MPDatabaseSettingsTab)tab;

View File

@@ -37,7 +37,15 @@
@interface MPDatabaseSettingsWindowController () {
NSString *_missingFeature;
}
@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
@@ -82,9 +90,6 @@
self.cipherPopupButton.menu = cipherMenu;
self.keyDerivationSettingsTabView.tabViewItems[0].identifier = [KPKAESKeyDerivation uuid];
self.keyDerivationSettingsTabView.tabViewItems[1].identifier = [KPKArgon2KeyDerivation uuid];
}
#pragma mark Actions
@@ -119,11 +124,11 @@
((MPDocument *)self.document).tree.trash = trashGroup;
BOOL requiresHistoryMaintainance = NO;
requiresHistoryMaintainance = (metaData.historyMaxSize > self.historyMaxiumSizeTextField.integerValue ||
requiresHistoryMaintainance = (metaData.historyMaxSize > self.historyMaximumSizeTextField.integerValue ||
metaData.historyMaxItems > self.historyMaximumItemsTextField.integerValue);
metaData.historyMaxItems = self.historyMaximumItemsTextField.integerValue;
metaData.historyMaxSize = self.historyMaxiumSizeTextField.integerValue;
metaData.historyMaxItems = self.enableHistory ? self.maxiumHistoryItems : -1;
metaData.historyMaxSize = self.maxiumHistorySize;
/* only maintain history if actually needed */
if(requiresHistoryMaintainance) {
@@ -277,11 +282,28 @@
- (void)_setupAdvancedTab:(KPKTree *)tree {
/* history */
self.enableHistory = tree.metaData.isHistoryEnabled;
[self.enableHistoryCheckButton bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(enableHistory)) options:nil];
self.historyMaximumItemsTextField.stringValue = [NSString stringWithFormat:@"%ld", tree.metaData.historyMaxItems];
self.historyMaxiumSizeTextField.stringValue = [NSString stringWithFormat:@"%ld", tree.metaData.historyMaxSize];
[self.historyMaximumItemsTextField bind:NSEnabledBinding toObject:self withKeyPath:NSStringFromSelector(@selector(enableHistory)) options:nil];
[self.historyMaxiumSizeTextField bind:NSEnabledBinding toObject:self withKeyPath:NSStringFromSelector(@selector(enableHistory)) options:nil];
[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: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:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(maxiumHistoryItems)) options:nil];
/* trash */
HNHUISetStateFromBool(self.enableTrashCheckButton, tree.metaData.useTrash);
@@ -295,22 +317,29 @@
[self _updateTemplateGroup:tree];
/* key changes */
self.enforceKeyChange = tree.metaData.enforceMasterKeyChange;
self.recommendKeyChange = tree.metaData.recommendMasterKeyChange;
HNHUISetStateFromBool(self.enforceKeyChangeOnceCheckButton, tree.metaData.enforceMasterKeyChangeOnce);
HNHUISetStateFromBool(self.enforceKeyChangeCheckButton, tree.metaData.enforceMasterKeyChange);
HNHUISetStateFromBool(self.recommendKeyChangeCheckButton, tree.metaData.recommendMasterKeyChange);
[self.enforceKeyChangeIntervalTextField setEnabled:tree.metaData.enforceMasterKeyChange];
[self.recommendKeyChangeIntervalTextField setEnabled:tree.metaData.recommendMasterKeyChange];
[self.enforceKeyChangeCheckButton bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(enforceKeyChange)) options:nil];
[self.recommendKeyChangeCheckButton bind:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(recommendKeyChange)) options:nil];
self.enforceKeyChangeIntervalTextField.stringValue = @"";
if(tree.metaData.enforceMasterKeyChange) {
self.enforceKeyChangeIntervalTextField.integerValue = tree.metaData.masterKeyChangeEnforcementInterval;
}
self.recommendKeyChangeIntervalTextField.stringValue = @"";
if(tree.metaData.recommendMasterKeyChange) {
self.recommendKeyChangeIntervalTextField.integerValue = tree.metaData.masterKeyChangeRecommendationInterval;
}
[self.enforceKeyChangeCheckButton bind:NSValueBinding toObject:self.enforceKeyChangeIntervalTextField withKeyPath:NSEnabledBinding options:nil];
[self.recommendKeyChangeCheckButton bind:NSValueBinding toObject:self.recommendKeyChangeIntervalTextField withKeyPath:NSEnabledBinding 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:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(enforceKeyChangeInterval)) options:nil];
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:NSValueBinding toObject:self withKeyPath:NSStringFromSelector(@selector(recommendKeyChangeInterval)) options:nil];
}
- (void)_updateFirstResponder {

View File

@@ -0,0 +1,16 @@
//
// MPDayCountFormatter.h
// MacPass
//
// Created by Michael Starke on 15.10.17.
// Copyright © 2017 HicknHack Software GmbH. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface MPDayCountFormatter : NSFormatter
@property (copy) NSString *zeroFormat; // Supply this to override the default format for a 0-value. Default will localize: "ZERO_DAYS"
@property (copy) NSString *valueFormat; // Supply this to override the defualt format for all values not 0. Default will localized "%ld_DAYS"
@end

View File

@@ -0,0 +1,48 @@
//
// MPDayCountFormatter.m
// MacPass
//
// Created by Michael Starke on 15.10.17.
// Copyright © 2017 HicknHack Software GmbH. All rights reserved.
//
#import "MPDayCountFormatter.h"
@implementation MPDayCountFormatter
- (instancetype)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if(self) {
[self _setupDefaults];
}
return self;
}
- (instancetype)init {
self = [super init];
if(self) {
[self _setupDefaults];
}
return self;
}
- (void)_setupDefaults {
self.zeroFormat = NSLocalizedString(@"ZERO_DAYS", @"String to be displayed instead of valueformat with 0 days");
self.valueFormat = NSLocalizedString(@"%ld_DAYS", @"Display format for days. Should contain a long decimal placeholder!");
}
- (NSString *)stringForObjectValue:(id)obj {
NSAssert([obj isKindOfClass:NSNumber.class], @"Unsupporded object class. Only NSNumber objects are allowed!");
NSNumber *number = obj;
if(number.integerValue == 0) {
return self.zeroFormat;
}
return [NSString stringWithFormat:self.valueFormat, number.integerValue];
}
- (BOOL)getObjectValue:(out id _Nullable __autoreleasing *)obj forString:(NSString *)string errorDescription:(out NSString *__autoreleasing _Nullable *)error {
NSAssert(NO,@"Value from string extraction not supported!");
return NO;
}
@end

View File

@@ -523,8 +523,10 @@ typedef void (^MPPasswordChangedBlock)(BOOL didChangePassword);
if(NSModalResponseOK == result) {
document.tree.metaData.enforceMasterKeyChangeOnce = NO;
}
/* password was not changes, so keep nagging the user! */
[self _presentPasswordIntervalAlerts];
else {
/* password was not changes, so keep nagging the user! */
[self _presentPasswordIntervalAlerts];
}
}];
});
}];