mirror of
https://github.com/MacPass/MacPass.git
synced 2025-12-14 01:12:31 +00:00
model changes are propagates for all changes to an entry
This commit is contained in:
@@ -103,7 +103,6 @@
|
||||
4C46B88517063A070046109A /* NSString+MPPasswordCreation.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C46B88417063A070046109A /* NSString+MPPasswordCreation.m */; };
|
||||
4C473A8718AFD85B0073FD2E /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C473A8518AFD7250073FD2E /* XCTest.framework */; };
|
||||
4C4A100F176286FD00BBF2CA /* MPTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C4A100E176286FD00BBF2CA /* MPTableView.m */; };
|
||||
4C4B5B3A1D759A4E005F329A /* MPDocument+ModelChange.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C4B5B391D759A4E005F329A /* MPDocument+ModelChange.m */; };
|
||||
4C4B728518E4B9B400A1A5D5 /* MPDockTileHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C4B728418E4B9B400A1A5D5 /* MPDockTileHelper.m */; };
|
||||
4C4B7EE917A45EC6000234C7 /* MPDatePickingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C4B7EE717A45EC5000234C7 /* MPDatePickingViewController.m */; };
|
||||
4C4B7EEE17A467E1000234C7 /* MPGroupInspectorViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C4B7EEC17A467E1000234C7 /* MPGroupInspectorViewController.m */; };
|
||||
@@ -415,7 +414,6 @@
|
||||
4C473A8518AFD7250073FD2E /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
|
||||
4C4A100D176286FD00BBF2CA /* MPTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPTableView.h; sourceTree = "<group>"; };
|
||||
4C4A100E176286FD00BBF2CA /* MPTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPTableView.m; sourceTree = "<group>"; };
|
||||
4C4B5B391D759A4E005F329A /* MPDocument+ModelChange.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MPDocument+ModelChange.m"; sourceTree = "<group>"; };
|
||||
4C4B728318E4B9B400A1A5D5 /* MPDockTileHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPDockTileHelper.h; sourceTree = "<group>"; };
|
||||
4C4B728418E4B9B400A1A5D5 /* MPDockTileHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPDockTileHelper.m; sourceTree = "<group>"; };
|
||||
4C4B7EE617A45EC5000234C7 /* MPDatePickingViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPDatePickingViewController.h; sourceTree = "<group>"; };
|
||||
@@ -500,6 +498,7 @@
|
||||
4C7615771764C4A40015A1A6 /* de */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; lineEnding = 0; name = de; path = de.lproj/Localizable.strings; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.simpleColoring; };
|
||||
4C7615781764C4A50015A1A6 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = de; path = de.lproj/Credits.rtf; sourceTree = "<group>"; };
|
||||
4C7615791764C4A50015A1A6 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
4C7679BC1D75E690001F33D6 /* MPModelChangeObserving.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPModelChangeObserving.h; sourceTree = "<group>"; };
|
||||
4C7714A9176C998F00549F2A /* 43_TrashTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = 43_TrashTemplate.pdf; sourceTree = "<group>"; };
|
||||
4C77547316E55FE800970E02 /* MPInspectorViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPInspectorViewController.h; sourceTree = "<group>"; };
|
||||
4C77547416E55FE800970E02 /* MPInspectorViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPInspectorViewController.m; sourceTree = "<group>"; };
|
||||
@@ -966,7 +965,6 @@
|
||||
4C1FA07A18231900003A3F8C /* MPDocument+Autotype.m */,
|
||||
4C15B74518BCA3B1003F8008 /* MPDocument+Search.m */,
|
||||
4C6B7C7C18BE7EB0001D5D77 /* MPDocument+HistoryBrowsing.m */,
|
||||
4C4B5B391D759A4E005F329A /* MPDocument+ModelChange.m */,
|
||||
4C0AF62D195C1F2B009E658D /* MPEntrySearchContext.h */,
|
||||
4C0AF62E195C1F2B009E658D /* MPEntrySearchContext.m */,
|
||||
4CB44EEE1C972BFD00EE2D60 /* Proxies */,
|
||||
@@ -1297,6 +1295,7 @@
|
||||
children = (
|
||||
4CA0B30D15BCB6FD00654E32 /* MPSettingsTab.h */,
|
||||
4C2B0B7419F66F6400E48913 /* MPTargetNodeResolving.h */,
|
||||
4C7679BC1D75E690001F33D6 /* MPModelChangeObserving.h */,
|
||||
);
|
||||
name = Protocolls;
|
||||
sourceTree = "<group>";
|
||||
@@ -1689,7 +1688,6 @@
|
||||
4CA0B2FC15BCAF8600654E32 /* MPSettingsWindowController.m in Sources */,
|
||||
4C4F72D118DF704400E8D378 /* DDHotKeyTextField.m in Sources */,
|
||||
4C83814215BF4677001AE468 /* MPDocumentWindowController.m in Sources */,
|
||||
4C4B5B3A1D759A4E005F329A /* MPDocument+ModelChange.m in Sources */,
|
||||
4CD034AB1BFE113B003C002C /* MPPluginHost.m in Sources */,
|
||||
4C2E382316D1421B00037A9D /* MPIconHelper.m in Sources */,
|
||||
4C2E382616D1470200037A9D /* MPViewController.m in Sources */,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="9060" systemVersion="15B42" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="10117" systemVersion="15G31" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||
<dependencies>
|
||||
<deployment identifier="macosx"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="9060"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="10117"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<customObject id="-2" userLabel="File's Owner" customClass="MPDatabaseSettingsWindowController">
|
||||
@@ -14,10 +14,13 @@
|
||||
<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="encryptionRoundsTextField" destination="1647" id="1773"/>
|
||||
<outlet property="enforceKeyChangeCheckButton" destination="upv-b3-vCc" id="JjM-CX-15q"/>
|
||||
<outlet property="enforceKeyChangeIntervalTextField" destination="VYh-cm-fix" id="aqu-Dm-tlH"/>
|
||||
<outlet property="historyMaximumItemsTextField" destination="593" id="NrX-e0-8Dw"/>
|
||||
<outlet property="historyMaxiumSizeTextField" destination="1273" id="5Fo-Pp-8dY"/>
|
||||
<outlet property="protectNotesCheckButton" destination="513" id="677"/>
|
||||
<outlet property="protectPasswortCheckButton" destination="504" id="662"/>
|
||||
<outlet property="protectTitleCheckButton" destination="463" id="660"/>
|
||||
@@ -36,15 +39,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="547" height="335"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="1680" height="1027"/>
|
||||
<rect key="contentRect" x="196" y="240" width="547" height="405"/>
|
||||
<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="547" height="335"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="547" height="405"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="288">
|
||||
<rect key="frame" x="474" y="13" width="59" height="32"/>
|
||||
<animations/>
|
||||
<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"/>
|
||||
@@ -58,7 +60,6 @@ DQ
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="956">
|
||||
<rect key="frame" x="392" y="13" width="82" height="32"/>
|
||||
<animations/>
|
||||
<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"/>
|
||||
@@ -71,8 +72,7 @@ Gw
|
||||
</connections>
|
||||
</button>
|
||||
<tabView translatesAutoresizingMaskIntoConstraints="NO" id="357">
|
||||
<rect key="frame" x="13" y="41" width="521" height="288"/>
|
||||
<animations/>
|
||||
<rect key="frame" x="13" y="41" width="521" height="358"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
<tabViewItems>
|
||||
<tabViewItem label="General" identifier="1" id="358">
|
||||
@@ -85,7 +85,6 @@ Gw
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="280" id="cra-uC-nCv"/>
|
||||
</constraints>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="232">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
@@ -94,7 +93,6 @@ Gw
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="256">
|
||||
<rect key="frame" x="115" y="175" width="80" height="17"/>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Description:" id="257">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
@@ -103,7 +101,6 @@ Gw
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="189">
|
||||
<rect key="frame" x="90" y="203" width="105" height="17"/>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Database name:" id="190">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
@@ -112,7 +109,6 @@ Gw
|
||||
</textField>
|
||||
<popUpButton verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="1394">
|
||||
<rect key="frame" x="199" y="48" width="67" height="26"/>
|
||||
<animations/>
|
||||
<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"/>
|
||||
<font key="font" metaFont="menu"/>
|
||||
@@ -126,7 +122,6 @@ Gw
|
||||
</popUpButton>
|
||||
<textField verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="1404">
|
||||
<rect key="frame" x="105" y="53" width="90" height="17"/>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Compression:" id="1405">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
@@ -135,7 +130,6 @@ Gw
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="1434">
|
||||
<rect key="frame" x="152" y="23" width="43" height="17"/>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Color:" id="1435">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
@@ -148,7 +142,6 @@ Gw
|
||||
<constraint firstAttribute="width" constant="44" id="XBF-V3-71G"/>
|
||||
<constraint firstAttribute="height" constant="23" id="fgN-h5-Mr8"/>
|
||||
</constraints>
|
||||
<animations/>
|
||||
<color key="color" red="0.05813049898" green="0.055541899059999997" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||
</colorWell>
|
||||
<scrollView horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1530">
|
||||
@@ -160,7 +153,6 @@ Gw
|
||||
<textView importsGraphics="NO" findStyle="panel" continuousSpellChecking="YES" allowsUndo="YES" usesRuler="YES" usesFontPanel="YES" verticallyResizable="YES" allowsNonContiguousLayout="YES" spellingCorrection="YES" smartInsertDelete="YES" id="1531">
|
||||
<rect key="frame" x="0.0" y="0.0" width="278" height="98"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<animations/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<size key="minSize" width="278" height="98"/>
|
||||
<size key="maxSize" width="463" height="10000000"/>
|
||||
@@ -169,23 +161,19 @@ Gw
|
||||
<size key="maxSize" width="463" height="10000000"/>
|
||||
</textView>
|
||||
</subviews>
|
||||
<animations/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</clipView>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="100" id="8fE-cP-ksD"/>
|
||||
<constraint firstAttribute="width" constant="280" id="J06-kE-yVi"/>
|
||||
</constraints>
|
||||
<animations/>
|
||||
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="YES" id="1532">
|
||||
<rect key="frame" x="-100" y="-100" width="87" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<animations/>
|
||||
</scroller>
|
||||
<scroller key="verticalScroller" verticalHuggingPriority="750" horizontal="NO" id="1533">
|
||||
<rect key="frame" x="263" y="1" width="16" height="98"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<animations/>
|
||||
</scroller>
|
||||
</scrollView>
|
||||
</subviews>
|
||||
@@ -212,72 +200,65 @@ Gw
|
||||
<constraint firstItem="231" firstAttribute="leading" secondItem="189" secondAttribute="trailing" constant="8" symbolic="YES" id="uMg-uh-Qq6"/>
|
||||
<constraint firstItem="256" firstAttribute="top" secondItem="189" secondAttribute="bottom" constant="11" id="z3y-bc-AMm"/>
|
||||
</constraints>
|
||||
<animations/>
|
||||
</view>
|
||||
</tabViewItem>
|
||||
<tabViewItem label="Security" identifier="" id="370">
|
||||
<view key="view" id="371">
|
||||
<rect key="frame" x="10" y="33" width="501" height="242"/>
|
||||
<view key="view" misplaced="YES" id="371">
|
||||
<rect key="frame" x="10" y="33" width="501" height="312"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<button misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="463">
|
||||
<rect key="frame" x="172" y="206" width="98" height="18"/>
|
||||
<rect key="frame" x="172" y="276" width="98" height="18"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="14" id="ioE-LF-mdV"/>
|
||||
</constraints>
|
||||
<animations/>
|
||||
<buttonCell key="cell" type="check" title="Protect Title" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="464">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
</button>
|
||||
<button misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="476">
|
||||
<rect key="frame" x="172" y="186" width="133" height="18"/>
|
||||
<rect key="frame" x="172" y="256" width="133" height="18"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="14" id="muU-FJ-1tF"/>
|
||||
</constraints>
|
||||
<animations/>
|
||||
<buttonCell key="cell" type="check" title="Protect Username" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="477">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
</button>
|
||||
<button misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="504">
|
||||
<rect key="frame" x="172" y="166" width="129" height="18"/>
|
||||
<rect key="frame" x="172" y="236" width="129" height="18"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="14" id="7r7-zz-ay2"/>
|
||||
</constraints>
|
||||
<animations/>
|
||||
<buttonCell key="cell" type="check" title="Protect Password" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="505">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
</button>
|
||||
<button misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="509">
|
||||
<rect key="frame" x="172" y="94" width="95" height="18"/>
|
||||
<rect key="frame" x="172" y="164" width="95" height="18"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="14" id="ifc-cz-8Ge"/>
|
||||
</constraints>
|
||||
<animations/>
|
||||
<buttonCell key="cell" type="check" title="Protect URL" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="510">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
</button>
|
||||
<button misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="513">
|
||||
<rect key="frame" x="172" y="74" width="106" height="18"/>
|
||||
<rect key="frame" x="172" y="144" width="106" height="18"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="14" id="rVu-uf-euL"/>
|
||||
</constraints>
|
||||
<animations/>
|
||||
<buttonCell key="cell" type="check" title="Protect Notes" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="514">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
</button>
|
||||
<textField verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="1643">
|
||||
<rect key="frame" x="18" y="48" width="150" height="17"/>
|
||||
<animations/>
|
||||
<rect key="frame" x="18" y="118" width="150" height="17"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Key encryption rounds:" id="1644">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
@@ -285,11 +266,10 @@ Gw
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="1647">
|
||||
<rect key="frame" x="174" y="46" width="130" height="22"/>
|
||||
<rect key="frame" x="174" y="116" width="130" height="22"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="130" id="Lgz-kV-K0Y"/>
|
||||
</constraints>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" usesSingleLineMode="YES" id="1648">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
@@ -297,8 +277,7 @@ Gw
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<button verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="1774">
|
||||
<rect key="frame" x="174" y="19" width="79" height="19"/>
|
||||
<animations/>
|
||||
<rect key="frame" x="174" y="89" width="79" height="19"/>
|
||||
<buttonCell key="cell" type="roundRect" title="Benchmark" bezelStyle="roundedRect" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="1775">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
@@ -308,8 +287,7 @@ Gw
|
||||
</connections>
|
||||
</button>
|
||||
<textField horizontalHuggingPriority="249" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" misplaced="YES" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="69F-ej-1NB">
|
||||
<rect key="frame" x="172" y="118" width="314" height="42"/>
|
||||
<animations/>
|
||||
<rect key="frame" x="172" y="188" width="314" height="42"/>
|
||||
<textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" title="Disabling password protection will remove unallowed characters in passwords. This will cause data loss after saving." id="iZR-sj-MHg">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
@@ -346,7 +324,6 @@ Gw
|
||||
<constraint firstItem="1643" firstAttribute="baseline" secondItem="1647" secondAttribute="baseline" id="tCe-Sq-PLK"/>
|
||||
<constraint firstItem="504" firstAttribute="leading" secondItem="69F-ej-1NB" secondAttribute="leading" id="vU0-RG-dBk"/>
|
||||
</constraints>
|
||||
<animations/>
|
||||
</view>
|
||||
</tabViewItem>
|
||||
<tabViewItem label="Advanced" identifier="" id="368">
|
||||
@@ -354,122 +331,109 @@ Gw
|
||||
<rect key="frame" x="10" y="33" width="501" height="312"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<button verticalHuggingPriority="1000" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="531">
|
||||
<rect key="frame" x="70" y="276" width="148" height="18"/>
|
||||
<animations/>
|
||||
<button verticalHuggingPriority="1000" translatesAutoresizingMaskIntoConstraints="NO" id="531">
|
||||
<rect key="frame" x="70" y="276" 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">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
</button>
|
||||
<button misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="535">
|
||||
<rect key="frame" x="70" y="178" width="138" height="18"/>
|
||||
<animations/>
|
||||
<button translatesAutoresizingMaskIntoConstraints="NO" id="535">
|
||||
<rect key="frame" x="70" y="178" 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" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="557">
|
||||
<rect key="frame" x="110" y="250" width="96" height="17"/>
|
||||
<animations/>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="557">
|
||||
<rect key="frame" x="110" y="251" 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" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="593">
|
||||
<rect key="frame" x="212" y="248" width="96" height="22"/>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="593">
|
||||
<rect key="frame" x="219" y="248" width="96" height="22"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="96" id="pYi-8G-RA7"/>
|
||||
</constraints>
|
||||
<animations/>
|
||||
<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" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="599">
|
||||
<rect key="frame" x="313" y="245" width="19" height="27"/>
|
||||
<animations/>
|
||||
<stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="599">
|
||||
<rect key="frame" x="320" y="245" width="19" height="27"/>
|
||||
<stepperCell key="cell" continuous="YES" enabled="NO" alignment="left" maxValue="100" id="600"/>
|
||||
</stepper>
|
||||
<popUpButton verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="678">
|
||||
<rect key="frame" x="210" y="172" width="220" height="26"/>
|
||||
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="678">
|
||||
<rect key="frame" x="217" y="172" width="220" height="26"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="215" id="AIY-63-gl0"/>
|
||||
</constraints>
|
||||
<animations/>
|
||||
<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" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="1268">
|
||||
<rect key="frame" x="118" y="218" width="88" height="17"/>
|
||||
<animations/>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1268">
|
||||
<rect key="frame" x="117" y="219" 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" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="1273">
|
||||
<rect key="frame" x="212" y="216" width="96" height="22"/>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1273">
|
||||
<rect key="frame" x="219" y="216" width="96" height="22"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="96" id="lRA-HE-AaF"/>
|
||||
</constraints>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" enabled="NO" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="1275">
|
||||
<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" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="1294">
|
||||
<rect key="frame" x="313" y="213" width="19" height="27"/>
|
||||
<animations/>
|
||||
<stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1294">
|
||||
<rect key="frame" x="320" y="213" width="19" height="27"/>
|
||||
<stepperCell key="cell" continuous="YES" enabled="NO" alignment="left" maxValue="100" id="1295"/>
|
||||
</stepper>
|
||||
<textField verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="1582">
|
||||
<rect key="frame" x="85" y="125" width="121" height="17"/>
|
||||
<animations/>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1582">
|
||||
<rect key="frame" x="96" y="126" 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" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="1584">
|
||||
<rect key="frame" x="96" y="85" width="110" height="17"/>
|
||||
<animations/>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1584">
|
||||
<rect key="frame" x="108" y="85" 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" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="1730">
|
||||
<rect key="frame" x="212" y="123" width="215" height="22"/>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1730">
|
||||
<rect key="frame" x="219" y="123" width="215" height="22"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="215" id="J2z-RZ-eS1"/>
|
||||
</constraints>
|
||||
<animations/>
|
||||
<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"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<popUpButton verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="1738">
|
||||
<rect key="frame" x="210" y="79" width="220" height="26"/>
|
||||
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1738">
|
||||
<rect key="frame" x="217" y="79" width="220" height="26"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="215" id="5P2-dy-dfo"/>
|
||||
</constraints>
|
||||
<animations/>
|
||||
<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"/>
|
||||
@@ -482,59 +446,52 @@ Gw
|
||||
</menu>
|
||||
</popUpButtonCell>
|
||||
</popUpButton>
|
||||
<button verticalHuggingPriority="251" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Hqc-B0-xyz">
|
||||
<rect key="frame" x="70" y="53" width="217" height="18"/>
|
||||
<animations/>
|
||||
<button verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Hqc-B0-xyz">
|
||||
<rect key="frame" x="70" y="54" 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 misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="upv-b3-vCc">
|
||||
<rect key="frame" x="70" y="21" width="217" height="18"/>
|
||||
<animations/>
|
||||
<button translatesAutoresizingMaskIntoConstraints="NO" id="upv-b3-vCc">
|
||||
<rect key="frame" x="70" y="22" 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" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="19r-LE-7X5">
|
||||
<rect key="frame" x="293" y="52" width="38" height="22"/>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="19r-LE-7X5">
|
||||
<rect key="frame" x="287" y="52" width="38" height="22"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="38" id="Zyg-Bo-eBy"/>
|
||||
</constraints>
|
||||
<animations/>
|
||||
<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" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="VYh-cm-fix">
|
||||
<rect key="frame" x="293" y="20" width="38" height="22"/>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="VYh-cm-fix">
|
||||
<rect key="frame" x="287" y="20" width="38" height="22"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="38" id="hgc-dE-uYj"/>
|
||||
</constraints>
|
||||
<animations/>
|
||||
<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">
|
||||
<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" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="GUO-6H-UI2">
|
||||
<rect key="frame" x="336" y="49" width="19" height="27"/>
|
||||
<animations/>
|
||||
<stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="GUO-6H-UI2">
|
||||
<rect key="frame" x="330" y="49" width="19" height="27"/>
|
||||
<stepperCell key="cell" continuous="YES" enabled="NO" alignment="left" maxValue="100" id="qQV-3d-GpK"/>
|
||||
</stepper>
|
||||
<stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="lH4-xp-5QF">
|
||||
<rect key="frame" x="336" y="17" width="19" height="27"/>
|
||||
<animations/>
|
||||
<stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="lH4-xp-5QF">
|
||||
<rect key="frame" x="330" y="17" width="19" height="27"/>
|
||||
<stepperCell key="cell" continuous="YES" enabled="NO" alignment="left" maxValue="100" id="7Hw-Qf-zWf"/>
|
||||
</stepper>
|
||||
<button verticalHuggingPriority="1000" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="539">
|
||||
<rect key="frame" x="110" y="151" width="186" height="18"/>
|
||||
<animations/>
|
||||
<button verticalHuggingPriority="1000" translatesAutoresizingMaskIntoConstraints="NO" id="539">
|
||||
<rect key="frame" x="110" y="151" 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">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -585,7 +542,6 @@ Gw
|
||||
<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"/>
|
||||
</constraints>
|
||||
<animations/>
|
||||
</view>
|
||||
</tabViewItem>
|
||||
</tabViewItems>
|
||||
@@ -601,9 +557,8 @@ Gw
|
||||
<constraint firstItem="288" firstAttribute="leading" secondItem="956" secondAttribute="trailing" constant="12" symbolic="YES" id="959"/>
|
||||
<constraint firstItem="956" firstAttribute="top" secondItem="357" secondAttribute="bottom" constant="10" id="1096"/>
|
||||
</constraints>
|
||||
<animations/>
|
||||
</view>
|
||||
<point key="canvasLocation" x="94.5" y="112.5"/>
|
||||
<point key="canvasLocation" x="535.5" y="227.5"/>
|
||||
</window>
|
||||
</objects>
|
||||
</document>
|
||||
|
||||
@@ -8,10 +8,10 @@
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
@class MPDocument;
|
||||
@protocol MPModelChangeObserving;
|
||||
|
||||
@interface MPArrayController : NSArrayController
|
||||
|
||||
@property (weak) MPDocument *document;
|
||||
@property (weak) id<MPModelChangeObserving> observer;
|
||||
|
||||
@end
|
||||
|
||||
@@ -7,16 +7,15 @@
|
||||
//
|
||||
|
||||
#import "MPArrayController.h"
|
||||
#import "MPDocument.h"
|
||||
#import "MPModelChangeObserving.h"
|
||||
|
||||
@implementation MPArrayController
|
||||
|
||||
|
||||
- (void)setValue:(id)value forKeyPath:(NSString *)keyPath {
|
||||
if([keyPath hasPrefix:@"selection."]) {
|
||||
[self.document willChangeModelProperty];
|
||||
[self.observer willChangeModelProperty];
|
||||
[super setValue:value forKeyPath:keyPath];
|
||||
[self.document didChangeModelProperty];
|
||||
[self.observer didChangeModelProperty];
|
||||
}
|
||||
else {
|
||||
[super setValue:value forKeyPath:keyPath];
|
||||
|
||||
@@ -38,6 +38,9 @@ typedef NS_ENUM(NSUInteger, MPDatabaseSettingsTab) {
|
||||
@property (weak) IBOutlet NSButton *benchmarkButton;
|
||||
|
||||
/* Advanced Tab*/
|
||||
@property (weak) IBOutlet NSButton *enableHistoryCheckButton;
|
||||
@property (weak) IBOutlet NSTextField *historyMaximumItemsTextField;
|
||||
@property (weak) IBOutlet NSTextField *historyMaxiumSizeTextField;
|
||||
@property (weak) IBOutlet NSButton *enableTrashCheckButton;
|
||||
@property (weak) IBOutlet NSButton *emptyTrashOnQuitCheckButton;
|
||||
@property (weak) IBOutlet NSPopUpButton *selectTrashGoupPopUpButton;
|
||||
|
||||
@@ -15,8 +15,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface MPDatePickingViewController : MPViewController
|
||||
|
||||
@property (nullable, weak) MPDocument *document;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@@ -62,9 +62,9 @@ typedef NS_ENUM(NSUInteger, MPDatePreset) {
|
||||
}
|
||||
|
||||
- (IBAction)useDate:(id)sender {
|
||||
[self.document willChangeModelProperty];
|
||||
[self.observer willChangeModelProperty];
|
||||
[self.representedObject timeInfo].expirationDate = self.datePicker.dateValue;
|
||||
[self.document didChangeModelProperty];
|
||||
[self.observer didChangeModelProperty];
|
||||
[self.view.window performClose:sender];
|
||||
}
|
||||
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
//
|
||||
// MPDocument+ModelChange.m
|
||||
// MacPass
|
||||
//
|
||||
// Created by Michael Starke on 30/08/16.
|
||||
// Copyright © 2016 HicknHack Software GmbH. All rights reserved.
|
||||
//
|
||||
|
||||
#import "MPDocument.h"
|
||||
|
||||
NSString *const MPDocumentWillChangeModelPropertyNotification = @"com.hicknhack.macpass.MPDocumentWillChangeModelPropertyNotification";
|
||||
NSString *const MPDocumentDidChangeModelPropertyNotification = @"com.hicknhack.macpass.MPDocumentDidChangeModelPropertyNotification";
|
||||
|
||||
@implementation MPDocument (ModelChange)
|
||||
|
||||
- (void)willChangeModelProperty {
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:MPDocumentWillChangeModelPropertyNotification object:self];
|
||||
}
|
||||
|
||||
- (void)didChangeModelProperty {
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:MPDocumentDidChangeModelPropertyNotification object:self];
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -24,6 +24,7 @@
|
||||
#import <KeePassKit/KeePassKit.h>
|
||||
#import "MPEntrySearchContext.h"
|
||||
#import "MPTargetNodeResolving.h"
|
||||
#import "MPModelChangeObserving.h"
|
||||
|
||||
/**
|
||||
* Posted when a new group was added to the document.
|
||||
@@ -31,23 +32,30 @@
|
||||
* Undo/Redo will not cause this notification to be reposted
|
||||
* The userInfo dictionary contains the added group at MPDocumentGroupKey
|
||||
*/
|
||||
APPKIT_EXTERN NSString *const MPDocumentDidAddGroupNotification;
|
||||
FOUNDATION_EXPORT NSString *const MPDocumentDidAddGroupNotification;
|
||||
/**
|
||||
* Posted when the user has added a new entry to the document.
|
||||
* Undo/redo will not cause this notification to be reposted.
|
||||
* The userInfo dictionary contains the added entry at MPDocumentEntryKey
|
||||
*/
|
||||
APPKIT_EXTERN NSString *const MPDocumentDidAddEntryNotification;
|
||||
APPKIT_EXTERN NSString *const MPDocumentDidRevertNotifiation;
|
||||
FOUNDATION_EXPORT NSString *const MPDocumentDidAddEntryNotification;
|
||||
FOUNDATION_EXPORT NSString *const MPDocumentDidRevertNotifiation;
|
||||
|
||||
APPKIT_EXTERN NSString *const MPDocumentDidLockDatabaseNotification;
|
||||
APPKIT_EXTERN NSString *const MPDocumentDidUnlockDatabaseNotification;
|
||||
FOUNDATION_EXPORT NSString *const MPDocumentDidLockDatabaseNotification;
|
||||
FOUNDATION_EXPORT NSString *const MPDocumentDidUnlockDatabaseNotification;
|
||||
|
||||
APPKIT_EXTERN NSString *const MPDocumentCurrentItemChangedNotification;
|
||||
FOUNDATION_EXPORT NSString *const MPDocumentCurrentItemChangedNotification;
|
||||
|
||||
/**
|
||||
* Posted whenever a model change is initated via the user. This is mainly to broadcast changes
|
||||
* to an entry done via the ui throuhgout the app.
|
||||
*/
|
||||
FOUNDATION_EXPORT NSString *const MPDocumentWillChangeModelPropertyNotification;
|
||||
FOUNDATION_EXPORT NSString *const MPDocumentDidChangeModelPropertyNotification;
|
||||
|
||||
/* Keys used in userInfo NSDictionaries on notifications */
|
||||
APPKIT_EXTERN NSString *const MPDocumentEntryKey;
|
||||
APPKIT_EXTERN NSString *const MPDocumentGroupKey;
|
||||
FOUNDATION_EXPORT NSString *const MPDocumentEntryKey;
|
||||
FOUNDATION_EXPORT NSString *const MPDocumentGroupKey;
|
||||
|
||||
@class KPKGroup;
|
||||
@class KPKEntry;
|
||||
@@ -57,7 +65,7 @@ APPKIT_EXTERN NSString *const MPDocumentGroupKey;
|
||||
@class KPKCompositeKey;
|
||||
@class KPKNode;
|
||||
|
||||
@interface MPDocument : NSDocument <MPTargetNodeResolving>
|
||||
@interface MPDocument : NSDocument <MPTargetNodeResolving, MPModelChangeObserving>
|
||||
|
||||
@property (nonatomic, readonly, assign) BOOL encrypted;
|
||||
@property (nonatomic, readonly, assign) NSUInteger unlockCount; // Amount of times the Document was unlocked;
|
||||
@@ -224,27 +232,6 @@ FOUNDATION_EXPORT NSString *const MPDocumentDidExitHistoryNotification;
|
||||
|
||||
@end
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark ModelChanges
|
||||
/**
|
||||
* Notifications will be posted by the document to inform about changes to a model property being displayed
|
||||
*/
|
||||
FOUNDATION_EXPORT NSString *const MPDocumentWillChangeModelPropertyNotification;
|
||||
FOUNDATION_EXPORT NSString *const MPDocumentDidChangeModelPropertyNotification;
|
||||
|
||||
@interface MPDocument (ModelChange)
|
||||
|
||||
/**
|
||||
* Call this on the document ot inform it about changes about to happen. This is an entry point for views and controllers to notify others about changes done to the model.
|
||||
* You coudl also observer modification times on objects but this way it's impossible to determine the source of the change. Undo/Redo or external plugins or merging can all introduce
|
||||
* changes to a database that aren't relevant.
|
||||
* The main use case for this is to update the history of entries on editing
|
||||
*/
|
||||
- (void)willChangeModelProperty;
|
||||
- (void)didChangeModelProperty;
|
||||
|
||||
@end
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark Search
|
||||
|
||||
|
||||
@@ -49,6 +49,9 @@ NSString *const MPDocumentDidUnlockDatabaseNotification = @"com.hicknhack.
|
||||
|
||||
NSString *const MPDocumentCurrentItemChangedNotification = @"com.hicknhack.macpass.MPDocumentCurrentItemChangedNotification";
|
||||
|
||||
NSString *const MPDocumentWillChangeModelPropertyNotification = @"com.hicknhack.macpass.MPDocumentWillChangeModelPropertyNotification";
|
||||
NSString *const MPDocumentDidChangeModelPropertyNotification = @"com.hicknhack.macpass.MPDocumentDidChangeModelPropertyNotification";
|
||||
|
||||
NSString *const MPDocumentEntryKey = @"MPDocumentEntryKey";
|
||||
NSString *const MPDocumentGroupKey = @"MPDocumentGroupKey";
|
||||
|
||||
@@ -780,4 +783,16 @@ NSString *const MPDocumentGroupKey = @"MPDocumentGrou
|
||||
return self.selectedGroups;
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark MPModelChangeObserving
|
||||
|
||||
- (void)willChangeModelProperty {
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:MPDocumentWillChangeModelPropertyNotification object:self];
|
||||
}
|
||||
|
||||
- (void)didChangeModelProperty {
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:MPDocumentDidChangeModelPropertyNotification object:self];
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
|
||||
@@ -129,6 +129,7 @@ typedef NS_ENUM(NSUInteger, MPEntryTab) {
|
||||
selector:@selector(_didAddEntry:)
|
||||
name:MPDocumentDidAddEntryNotification
|
||||
object:document];
|
||||
_windowAssociationsController.observer = document;
|
||||
}
|
||||
|
||||
- (void)dealloc {
|
||||
@@ -139,12 +140,16 @@ typedef NS_ENUM(NSUInteger, MPEntryTab) {
|
||||
#pragma mark Actions
|
||||
|
||||
- (void)addCustomField:(id)sender {
|
||||
[self.observer willChangeModelProperty];
|
||||
[self.windowController.document createCustomAttribute:self.representedObject];
|
||||
[self.observer didChangeModelProperty];
|
||||
}
|
||||
- (void)removeCustomField:(id)sender {
|
||||
NSUInteger index = [sender tag];
|
||||
KPKAttribute *attribute = self.representedEntry.customAttributes[index];
|
||||
[self.observer willChangeModelProperty];
|
||||
[self.representedEntry removeCustomAttribute:attribute];
|
||||
[self.observer didChangeModelProperty];
|
||||
}
|
||||
|
||||
- (void)saveAttachment:(id)sender {
|
||||
@@ -177,7 +182,9 @@ typedef NS_ENUM(NSUInteger, MPEntryTab) {
|
||||
if(result == NSFileHandlingPanelOKButton) {
|
||||
for (NSURL *attachmentURL in openPanel.URLs) {
|
||||
KPKBinary *binary = [[KPKBinary alloc] initWithContentsOfURL:attachmentURL];
|
||||
[self.observer willChangeModelProperty];
|
||||
[self.representedEntry addBinary:binary];
|
||||
[self.observer didChangeModelProperty];
|
||||
}
|
||||
}
|
||||
}];
|
||||
@@ -189,18 +196,24 @@ typedef NS_ENUM(NSUInteger, MPEntryTab) {
|
||||
return; // no selection
|
||||
}
|
||||
KPKBinary *binary = self.representedEntry.binaries[row];
|
||||
[self.observer willChangeModelProperty];
|
||||
[self.representedEntry removeBinary:binary];
|
||||
[self.observer didChangeModelProperty];
|
||||
}
|
||||
|
||||
- (void)addWindowAssociation:(id)sender {
|
||||
KPKWindowAssociation *associtation = [[KPKWindowAssociation alloc] initWithWindowTitle:NSLocalizedString(@"DEFAULT_WINDOW_TITLE", "") keystrokeSequence:nil];
|
||||
[self.observer willChangeModelProperty];
|
||||
[self.representedEntry.autotype addAssociation:associtation];
|
||||
[self.observer didChangeModelProperty];
|
||||
}
|
||||
|
||||
- (void)removeWindowAssociation:(id)sender {
|
||||
NSInteger row = self.windowAssociationsTableView.selectedRow;
|
||||
if(row > - 1 && row < [self.representedEntry.autotype.associations count]) {
|
||||
if(row > - 1 && row < self.representedEntry.autotype.associations.count) {
|
||||
[self.observer willChangeModelProperty];
|
||||
[self.representedEntry.autotype removeAssociation:self.representedEntry.autotype.associations[row]];
|
||||
[self.observer didChangeModelProperty];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -267,7 +280,7 @@ typedef NS_ENUM(NSUInteger, MPEntryTab) {
|
||||
MPPasswordCreatorViewController *viewController = [[MPPasswordCreatorViewController alloc] init];
|
||||
viewController.allowsEntryDefaults = YES;
|
||||
viewController.representedObject = self.representedObject;
|
||||
viewController.document = self.windowController.document;
|
||||
viewController.observer = self.windowController.document;
|
||||
[self _showPopopver:viewController atView:self.passwordTextField onEdge:NSMinYEdge];
|
||||
}
|
||||
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
|
||||
@interface MPIconSelectViewController : MPViewController <NSCollectionViewDelegate>
|
||||
|
||||
@property (weak, nullable) MPDocument *document;
|
||||
@property (weak, nullable) NSPopover *popover;
|
||||
|
||||
@end
|
||||
|
||||
@@ -34,9 +34,9 @@
|
||||
|
||||
- (IBAction)useDefault:(id)sender {
|
||||
KPKNode *node = self.representedObject;
|
||||
[self.document willChangeModelProperty];
|
||||
[self.observer willChangeModelProperty];
|
||||
node.iconId = [[node class] defaultIcon];
|
||||
[self.document didChangeModelProperty];
|
||||
[self.observer didChangeModelProperty];
|
||||
[self.view.window performClose:sender];
|
||||
}
|
||||
|
||||
@@ -50,9 +50,9 @@
|
||||
NSUInteger buttonIndex = [self.iconCollectionView.content indexOfObject:image];
|
||||
NSInteger newIconId = ((NSNumber *)[MPIconHelper databaseIconTypes][buttonIndex]).integerValue;
|
||||
KPKNode *node = self.representedObject;
|
||||
[self.document willChangeModelProperty];
|
||||
[self.observer willChangeModelProperty];
|
||||
node.iconId = newIconId;
|
||||
[self.document didChangeModelProperty];
|
||||
[self.observer didChangeModelProperty];
|
||||
[self.view.window performClose:sender];
|
||||
}
|
||||
|
||||
|
||||
@@ -119,6 +119,8 @@ typedef NS_ENUM(NSUInteger, MPContentTab) {
|
||||
name:MPDocumentWillChangeModelPropertyNotification
|
||||
object:document];
|
||||
|
||||
self.entryViewController.observer = document;
|
||||
|
||||
[self.entryViewController registerNotificationsForDocument:document];
|
||||
}
|
||||
|
||||
@@ -176,7 +178,7 @@ typedef NS_ENUM(NSUInteger, MPContentTab) {
|
||||
MPIconSelectViewController *vc = [[MPIconSelectViewController alloc] init];
|
||||
vc.representedObject = self.representedObject;
|
||||
vc.popover = self.popover;
|
||||
vc.document = self.windowController.document;
|
||||
vc.observer = self.windowController.document;
|
||||
self.popover.contentViewController = vc;
|
||||
[self.popover showRelativeToRect:NSZeroRect ofView:sender preferredEdge:NSMinYEdge];
|
||||
}
|
||||
@@ -191,7 +193,7 @@ typedef NS_ENUM(NSUInteger, MPContentTab) {
|
||||
self.popover.behavior = NSPopoverBehaviorTransient;
|
||||
MPDatePickingViewController *vc = [[MPDatePickingViewController alloc] init];
|
||||
vc.representedObject = self.representedObject;
|
||||
vc.document = self.windowController.document;
|
||||
vc.observer = self.windowController.document;
|
||||
self.popover.contentViewController = vc;
|
||||
[self.popover showRelativeToRect:NSZeroRect ofView:sender preferredEdge:NSMinYEdge];
|
||||
}
|
||||
|
||||
17
MacPass/MPModelChangeObserving.h
Normal file
17
MacPass/MPModelChangeObserving.h
Normal file
@@ -0,0 +1,17 @@
|
||||
//
|
||||
// MPModelChangeNotification.h
|
||||
// MacPass
|
||||
//
|
||||
// Created by Michael Starke on 30/08/16.
|
||||
// Copyright © 2016 HicknHack Software GmbH. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@protocol MPModelChangeObserving <NSObject>
|
||||
|
||||
@required
|
||||
- (void)willChangeModelProperty;
|
||||
- (void)didChangeModelProperty;
|
||||
|
||||
@end
|
||||
@@ -12,10 +12,10 @@
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@class MPDocument;
|
||||
@protocol MPModelChangeObserving;
|
||||
|
||||
@interface MPPasswordCreatorViewController : MPViewController <NSTextFieldDelegate>
|
||||
|
||||
@property (weak, nullable) MPDocument *document;
|
||||
@property (assign) BOOL allowsEntryDefaults;
|
||||
|
||||
/**
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#import "MPUniqueCharactersFormatter.h"
|
||||
#import "MPSettingsHelper.h"
|
||||
#import "MPDocument.h"
|
||||
#import "MPModelChangeObserving.h"
|
||||
|
||||
#import "MPFlagsHelper.h"
|
||||
|
||||
@@ -177,9 +178,9 @@ typedef NS_ENUM(NSUInteger, MPPasswordRating) {
|
||||
}
|
||||
KPKEntry *entry = self.representedObject;
|
||||
if(entry && self.password.length > 0) {
|
||||
[self.document willChangeModelProperty];
|
||||
[self.observer willChangeModelProperty];
|
||||
entry.password = self.password;
|
||||
[self.document didChangeModelProperty];
|
||||
[self.observer didChangeModelProperty];
|
||||
}
|
||||
[self.view.window performClose:sender];
|
||||
}
|
||||
|
||||
@@ -7,13 +7,15 @@
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import "MPModelChangeObserving.h"
|
||||
|
||||
@interface MPViewController : NSViewController
|
||||
|
||||
@property (nonatomic, readonly) NSWindowController *windowController;
|
||||
@property (nonatomic, readonly, nullable) NSWindowController *windowController;
|
||||
@property (weak, nullable) id<MPModelChangeObserving> observer;
|
||||
@property (nonatomic, readonly, nullable) NSResponder *reconmendedFirstResponder;
|
||||
|
||||
- (void)didLoadView;
|
||||
- (NSResponder *)reconmendedFirstResponder;
|
||||
- (void)updateResponderChain;
|
||||
|
||||
@end
|
||||
@@ -41,9 +41,9 @@
|
||||
#pragma mark Binding observation
|
||||
- (void)setValue:(id)value forKeyPath:(NSString *)keyPath {
|
||||
if([keyPath hasPrefix:@"representedObject."]) {
|
||||
[((MPDocument *)self.windowController.document) willChangeModelProperty];
|
||||
[self.observer willChangeModelProperty];
|
||||
[super setValue:value forKeyPath:keyPath];
|
||||
[((MPDocument *)self.windowController.document) didChangeModelProperty];
|
||||
[self.observer didChangeModelProperty];
|
||||
}
|
||||
else {
|
||||
[super setValue:value forKeyPath:keyPath];
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="4510" systemVersion="12F45" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="10117" systemVersion="15G31" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||
<dependencies>
|
||||
<deployment defaultVersion="1080" identifier="macosx"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="4510"/>
|
||||
<deployment identifier="macosx"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="10117"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<customObject id="-2" userLabel="File's Owner" customClass="MPSettingsWindowController">
|
||||
@@ -11,11 +11,11 @@
|
||||
</connections>
|
||||
</customObject>
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
<customObject id="-3" userLabel="Application"/>
|
||||
<window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" showsToolbarButton="NO" wantsToBeColor="NO" visibleAtLaunch="NO" animationBehavior="default" id="1">
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" showsToolbarButton="NO" visibleAtLaunch="NO" animationBehavior="default" id="1">
|
||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
|
||||
<rect key="contentRect" x="196" y="240" width="400" height="300"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="1920" height="1058"/>
|
||||
<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="400" height="300"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
|
||||
Reference in New Issue
Block a user