mirror of
https://github.com/MacPass/MacPass.git
synced 2026-01-30 14:28:20 +00:00
Compare commits
327 Commits
0.3.8-alph
...
0.4-alpha
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2f5691f1dd | ||
|
|
a837d8cd44 | ||
|
|
e6a14dc7ae | ||
|
|
00da9013a8 | ||
|
|
51a59d73c6 | ||
|
|
6bbaccdb25 | ||
|
|
b0a664ab3f | ||
|
|
1f75722e67 | ||
|
|
43b835d518 | ||
|
|
8dee783c4c | ||
|
|
3678161802 | ||
|
|
24274f472c | ||
|
|
e99414a318 | ||
|
|
c93bdc6e1c | ||
|
|
ef0d6e55d6 | ||
|
|
5b69453868 | ||
|
|
fa4a805f8f | ||
|
|
4d29c351ff | ||
|
|
f0964d04b9 | ||
|
|
2e0613dad5 | ||
|
|
9161a8b8f3 | ||
|
|
1a2659d311 | ||
|
|
41ba8f57ba | ||
|
|
fd2256917e | ||
|
|
856a470ee5 | ||
|
|
a55773919c | ||
|
|
4bffe388ba | ||
|
|
febead0751 | ||
|
|
f90c126f03 | ||
|
|
33a367c676 | ||
|
|
08c7dfa650 | ||
|
|
b00c7258f6 | ||
|
|
0af0d08082 | ||
|
|
de30cf5407 | ||
|
|
9dff3070c9 | ||
|
|
aa716dd5f8 | ||
|
|
7643d1982d | ||
|
|
0c4ddf3127 | ||
|
|
7f03985eff | ||
|
|
90d5bc9ef2 | ||
|
|
4273e41142 | ||
|
|
c1d6574172 | ||
|
|
ffabda0242 | ||
|
|
61310d2300 | ||
|
|
51bb22a9b7 | ||
|
|
ff6b29d23c | ||
|
|
f6dc2193de | ||
|
|
21f299bdff | ||
|
|
de00a42f02 | ||
|
|
81dc24d9b2 | ||
|
|
c084d49d95 | ||
|
|
1122cfbbde | ||
|
|
4db333fbc5 | ||
|
|
a2b8a15e46 | ||
|
|
ae38cdce32 | ||
|
|
f899fdca0f | ||
|
|
4b6db6c07a | ||
|
|
6e50d2bc5e | ||
|
|
a046555aee | ||
|
|
ae544ae810 | ||
|
|
5dd0f8234c | ||
|
|
7f16310a4d | ||
|
|
24d0c3a6ee | ||
|
|
84cd196d54 | ||
|
|
a73986de28 | ||
|
|
9575777cc7 | ||
|
|
81bcd15d80 | ||
|
|
e976398a5e | ||
|
|
c4b7dc1c64 | ||
|
|
530bb7ce30 | ||
|
|
356a8f524e | ||
|
|
1f1c6d5dcb | ||
|
|
edd2d89d30 | ||
|
|
f634ed09d0 | ||
|
|
62bec29ec8 | ||
|
|
20908fe161 | ||
|
|
944114309f | ||
|
|
5d64951ef2 | ||
|
|
d98f4b40da | ||
|
|
ed5d048028 | ||
|
|
aa6fd74ce7 | ||
|
|
4e7cc1edb0 | ||
|
|
5661765dbf | ||
|
|
422d74ee5c | ||
|
|
b82bc8c9e9 | ||
|
|
4f55d93451 | ||
|
|
0d66451e0c | ||
|
|
fe2acc1827 | ||
|
|
929c4f121c | ||
|
|
2df1a1f36a | ||
|
|
d6dcb96ba5 | ||
|
|
c5cc511dcd | ||
|
|
4c107644b4 | ||
|
|
e84bebb4d4 | ||
|
|
9ba441b002 | ||
|
|
1bd68d0194 | ||
|
|
b1b1ac35b4 | ||
|
|
500140d5a2 | ||
|
|
8abd9ab2c9 | ||
|
|
09d5efa38e | ||
|
|
3385f09c2c | ||
|
|
76ab4b8489 | ||
|
|
33aceee511 | ||
|
|
4abe4940ae | ||
|
|
5c7e387ac3 | ||
|
|
744ecc4f2a | ||
|
|
3e5133c5ff | ||
|
|
da93396ee7 | ||
|
|
ce838f6b7a | ||
|
|
1bb753173a | ||
|
|
35400ec2eb | ||
|
|
f125e2fb41 | ||
|
|
dea89d2360 | ||
|
|
3b5f1698d3 | ||
|
|
88240deb3e | ||
|
|
80808efe6c | ||
|
|
dd5c46c23a | ||
|
|
37f7f8123a | ||
|
|
aa52079664 | ||
|
|
758cce4e9f | ||
|
|
6cb7d49e69 | ||
|
|
ab9560c414 | ||
|
|
b293baad34 | ||
|
|
08f897437b | ||
|
|
9fbf42322f | ||
|
|
92d963a9ef | ||
|
|
21355101ed | ||
|
|
6b1aff9449 | ||
|
|
28fdf9f57a | ||
|
|
a01e5ce54f | ||
|
|
467b600673 | ||
|
|
5a4cf2152a | ||
|
|
b1e392abbe | ||
|
|
24126c00cb | ||
|
|
20fbf29b92 | ||
|
|
7215677b86 | ||
|
|
8bb2428a96 | ||
|
|
fe08f5fee7 | ||
|
|
4d9aa8cc02 | ||
|
|
fa52de144c | ||
|
|
c59ce56f4d | ||
|
|
385a56c489 | ||
|
|
02a670ac7c | ||
|
|
1964adb439 | ||
|
|
336fe02e2d | ||
|
|
3f1e7d36c9 | ||
|
|
bb88534daa | ||
|
|
f266375a09 | ||
|
|
d16ebfc4d7 | ||
|
|
2c22a75d82 | ||
|
|
2bc5e8a337 | ||
|
|
1a6d5114b9 | ||
|
|
36e493101a | ||
|
|
871b3a5c45 | ||
|
|
ebfc0f91eb | ||
|
|
96f854133e | ||
|
|
c14bcf497e | ||
|
|
213bb3d51f | ||
|
|
839c87102c | ||
|
|
4173141108 | ||
|
|
b0856ad2df | ||
|
|
ce61fafc53 | ||
|
|
4f0fc87037 | ||
|
|
e38be4e147 | ||
|
|
7c103abd53 | ||
|
|
582bc52532 | ||
|
|
77461a12e2 | ||
|
|
503acbad42 | ||
|
|
fd269c0701 | ||
|
|
41d17b678e | ||
|
|
504459564b | ||
|
|
245524e260 | ||
|
|
71939a4497 | ||
|
|
62a4f9f3e3 | ||
|
|
4290e92535 | ||
|
|
5fba430335 | ||
|
|
d186a2f318 | ||
|
|
73f21c06e0 | ||
|
|
ee4d100ce1 | ||
|
|
e67413bc94 | ||
|
|
7f08157363 | ||
|
|
806534d5ea | ||
|
|
65e1c01282 | ||
|
|
12a29121e5 | ||
|
|
9192504939 | ||
|
|
cb64396172 | ||
|
|
8450fa210d | ||
|
|
d2e3582221 | ||
|
|
42dbe388ed | ||
|
|
04bc714352 | ||
|
|
c7b5bdac74 | ||
|
|
3e56f2269d | ||
|
|
14130d0aa0 | ||
|
|
190bca5201 | ||
|
|
eeb440fa1c | ||
|
|
c4a4996082 | ||
|
|
e8a44117f4 | ||
|
|
56938909df | ||
|
|
952489089e | ||
|
|
82f5d812e5 | ||
|
|
2ed2346c92 | ||
|
|
00c43ef50f | ||
|
|
52b734239f | ||
|
|
2c8dba441a | ||
|
|
2accaada1a | ||
|
|
514318a156 | ||
|
|
8f6622102b | ||
|
|
55b4ce648f | ||
|
|
620be11f0d | ||
|
|
89105c6e90 | ||
|
|
5711f82d13 | ||
|
|
373b7f6381 | ||
|
|
09263b4559 | ||
|
|
5d90b23569 | ||
|
|
8a7b2f8085 | ||
|
|
63a756039c | ||
|
|
e54790b745 | ||
|
|
d9f457e1cb | ||
|
|
accfdbc4f2 | ||
|
|
71eec7d86a | ||
|
|
61490cfb65 | ||
|
|
868950e873 | ||
|
|
6a6b1e1ba5 | ||
|
|
98a58ba3ea | ||
|
|
9a0b64de6e | ||
|
|
c2922d5ead | ||
|
|
d7f82bf88f | ||
|
|
eeb6cfbe95 | ||
|
|
dc84dd86e9 | ||
|
|
c1ae159260 | ||
|
|
7a3fdca30b | ||
|
|
64e56fd876 | ||
|
|
bd9587dddd | ||
|
|
a7114b3ef2 | ||
|
|
2d84f2f8f8 | ||
|
|
5796333a2e | ||
|
|
5511dd1207 | ||
|
|
fb88d8d498 | ||
|
|
add5074daa | ||
|
|
2e5f03b515 | ||
|
|
b903fa1ee2 | ||
|
|
b21d375278 | ||
|
|
6bfa2b87ee | ||
|
|
7ba43eceec | ||
|
|
34f031a372 | ||
|
|
b162fcb7c3 | ||
|
|
5b15e466c7 | ||
|
|
4a8b1207c5 | ||
|
|
06862e7a42 | ||
|
|
957e8bab5a | ||
|
|
aea17f4428 | ||
|
|
91c9a720e7 | ||
|
|
a915c4fcf8 | ||
|
|
e7cdf352f8 | ||
|
|
de13be4db8 | ||
|
|
9c28e27ffa | ||
|
|
2829e66877 | ||
|
|
0ae2946466 | ||
|
|
95b60a9624 | ||
|
|
5e4254b45f | ||
|
|
319d165141 | ||
|
|
a427cdec6d | ||
|
|
79d423df95 | ||
|
|
b9ff153346 | ||
|
|
a82a552011 | ||
|
|
4c12ec324c | ||
|
|
4cfd124d9d | ||
|
|
9ef3aeb857 | ||
|
|
899c65d8fd | ||
|
|
3cacbd33a8 | ||
|
|
84f91361a6 | ||
|
|
214a192a4d | ||
|
|
30a5f1d0b0 | ||
|
|
e8124b0415 | ||
|
|
f80226ee6c | ||
|
|
724644c1bf | ||
|
|
aa4b6dc08e | ||
|
|
46dfb19c95 | ||
|
|
032b9a32ee | ||
|
|
d30bcac236 | ||
|
|
bbd0062301 | ||
|
|
f335825c44 | ||
|
|
dcef431c5c | ||
|
|
5ce44e909c | ||
|
|
9c69bd6528 | ||
|
|
16f10942ee | ||
|
|
fc7aa100b9 | ||
|
|
706a06e389 | ||
|
|
3a4d72767b | ||
|
|
e0f2351c80 | ||
|
|
5254ce0fe4 | ||
|
|
b6d6485c60 | ||
|
|
86e97ad767 | ||
|
|
116b3b3253 | ||
|
|
714563250b | ||
|
|
f586127cd1 | ||
|
|
4b42493376 | ||
|
|
bc0af02be4 | ||
|
|
7f7bd010b2 | ||
|
|
e688eaa776 | ||
|
|
864dea83f4 | ||
|
|
28488d4eb9 | ||
|
|
9b31caf577 | ||
|
|
fab5618634 | ||
|
|
b913d37797 | ||
|
|
f87e60442e | ||
|
|
450bc3d4dd | ||
|
|
9d22494bf4 | ||
|
|
560d9ce941 | ||
|
|
115537c95b | ||
|
|
83eb0edad2 | ||
|
|
8efcd79581 | ||
|
|
780c8782e6 | ||
|
|
31f456929c | ||
|
|
80d9dfb1cb | ||
|
|
2fc8e801ab | ||
|
|
ad07c0de6c | ||
|
|
e33a9fdc93 | ||
|
|
514477d6fc | ||
|
|
07dae46b4c | ||
|
|
e050840b6f | ||
|
|
7ffcc0e43e | ||
|
|
5378410937 | ||
|
|
3dfadd7af1 | ||
|
|
5920697811 | ||
|
|
b96810db1b | ||
|
|
4172d10aa7 |
12
.gitmodules
vendored
12
.gitmodules
vendored
@@ -1,9 +1,6 @@
|
|||||||
[submodule "KissXML"]
|
[submodule "KissXML"]
|
||||||
path = KissXML
|
path = KissXML
|
||||||
url = https://github.com/robbiehanson/KissXML.git
|
url = https://github.com/robbiehanson/KissXML.git
|
||||||
[submodule "MiniKeePassLib"]
|
|
||||||
path = MiniKeePassLib
|
|
||||||
url = https://mstarke@github.com/mstarke/MiniKeePassLib.git
|
|
||||||
[submodule "HNHUi"]
|
[submodule "HNHUi"]
|
||||||
path = HNHUi
|
path = HNHUi
|
||||||
url = https://mstarke@github.com/mstarke/HNHUi.git
|
url = https://mstarke@github.com/mstarke/HNHUi.git
|
||||||
@@ -13,3 +10,12 @@
|
|||||||
[submodule "KeePassKit"]
|
[submodule "KeePassKit"]
|
||||||
path = KeePassKit
|
path = KeePassKit
|
||||||
url = https://mstarke@github.com/mstarke/KeePassKit
|
url = https://mstarke@github.com/mstarke/KeePassKit
|
||||||
|
[submodule "DDHotKey"]
|
||||||
|
path = DDHotKey
|
||||||
|
url = https://github.com/davedelong/DDHotKey.git
|
||||||
|
[submodule "Sparkle"]
|
||||||
|
path = Sparkle
|
||||||
|
url = https://github.com/mstarke/Sparkle.git
|
||||||
|
[submodule "TransformerKit"]
|
||||||
|
path = TransformerKit
|
||||||
|
url = https://github.com/mattt/TransformerKit.git
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
1
DDHotKey
Submodule
1
DDHotKey
Submodule
Submodule DDHotKey added at 6e52b1f475
2
HNHUi
2
HNHUi
Submodule HNHUi updated: 9546c4088c...90ff9d2e35
Submodule KeePassKit updated: e52882661c...9295d6fff7
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "0460"
|
LastUpgradeVersion = "0510"
|
||||||
version = "1.7">
|
version = "1.7">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
<TestAction
|
<TestAction
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
shouldUseLaunchSchemeArgsEnv = "NO"
|
||||||
buildConfiguration = "Debug">
|
buildConfiguration = "Debug">
|
||||||
<Testables>
|
<Testables>
|
||||||
<TestableReference
|
<TestableReference
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "4C45FB19178E09ED0010007D"
|
BlueprintIdentifier = "4C45FB19178E09ED0010007D"
|
||||||
BuildableName = "MacPassTests.octest"
|
BuildableName = "MacPassTests.xctest"
|
||||||
BlueprintName = "MacPassTests"
|
BlueprintName = "MacPassTests"
|
||||||
ReferencedContainer = "container:MacPass.xcodeproj">
|
ReferencedContainer = "container:MacPass.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
@@ -48,6 +48,13 @@
|
|||||||
ReferencedContainer = "container:MacPass.xcodeproj">
|
ReferencedContainer = "container:MacPass.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</MacroExpansion>
|
</MacroExpansion>
|
||||||
|
<EnvironmentVariables>
|
||||||
|
<EnvironmentVariable
|
||||||
|
key = "NSZombieEnabled"
|
||||||
|
value = "YES"
|
||||||
|
isEnabled = "YES">
|
||||||
|
</EnvironmentVariable>
|
||||||
|
</EnvironmentVariables>
|
||||||
</TestAction>
|
</TestAction>
|
||||||
<LaunchAction
|
<LaunchAction
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
|||||||
98
MacPass/AutotypeCandidateSelectionWindow.xib
Normal file
98
MacPass/AutotypeCandidateSelectionWindow.xib
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="4514" systemVersion="13B42" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||||
|
<dependencies>
|
||||||
|
<deployment defaultVersion="1080" identifier="macosx"/>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="4514"/>
|
||||||
|
</dependencies>
|
||||||
|
<objects>
|
||||||
|
<customObject id="-2" userLabel="File's Owner" customClass="MPAutotypeDaemon">
|
||||||
|
<connections>
|
||||||
|
<outlet property="matchSelectionButton" destination="tAw-72-pSm" id="2a0-3C-UUB"/>
|
||||||
|
<outlet property="matchSelectionWindow" destination="1" id="ZYa-oC-Nfs"/>
|
||||||
|
<outlet property="performAutotypeButton" destination="Jlm-i9-jVy" id="Qjk-sL-Yqk"/>
|
||||||
|
</connections>
|
||||||
|
</customObject>
|
||||||
|
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||||
|
<customObject id="-3" userLabel="Application"/>
|
||||||
|
<window title="Autotype Selection" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" restorable="NO" oneShot="NO" releasedWhenClosed="NO" wantsToBeColor="NO" visibleAtLaunch="NO" animationBehavior="default" id="1">
|
||||||
|
<windowStyleMask key="styleMask" titled="YES"/>
|
||||||
|
<rect key="contentRect" x="196" y="240" width="370" height="156"/>
|
||||||
|
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1418"/>
|
||||||
|
<view key="contentView" id="2">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="370" height="156"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<subviews>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="NdQ-vM-dHT">
|
||||||
|
<rect key="frame" x="123" y="13" width="82" height="32"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="WJJ-kW-fak">
|
||||||
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<string key="keyEquivalent" base64-UTF8="YES">
|
||||||
|
Gw
|
||||||
|
</string>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="orderOut:" target="-1" id="dcI-TT-kq3"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Jlm-i9-jVy">
|
||||||
|
<rect key="frame" x="205" y="13" width="151" height="32"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="push" title="Perform Autotype" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="AER-eU-kcu">
|
||||||
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
</button>
|
||||||
|
<popUpButton verticalHuggingPriority="750" horizontalCompressionResistancePriority="499" translatesAutoresizingMaskIntoConstraints="NO" id="tAw-72-pSm">
|
||||||
|
<rect key="frame" x="111" y="58" width="242" height="26"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="TAr-ZQ-aDu">
|
||||||
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="menu"/>
|
||||||
|
<menu key="menu" title="OtherViews" id="7RT-wh-F0R">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Item 3" id="HzV-Dh-6B9"/>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</popUpButtonCell>
|
||||||
|
</popUpButton>
|
||||||
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="q1d-ED-T5M">
|
||||||
|
<rect key="frame" x="18" y="102" width="334" height="34"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="There are multiple matches for the current Window. Please select which macht should be used." id="ehp-xc-B5g">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Epz-xU-9TM">
|
||||||
|
<rect key="frame" x="18" y="64" width="89" height="17"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Match to use:" id="pLz-Kc-yPh">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="NdQ-vM-dHT" firstAttribute="top" secondItem="tAw-72-pSm" secondAttribute="bottom" constant="20" symbolic="YES" id="7nN-gT-KRY"/>
|
||||||
|
<constraint firstItem="tAw-72-pSm" firstAttribute="trailing" secondItem="Jlm-i9-jVy" secondAttribute="trailing" id="BUy-GV-a8U"/>
|
||||||
|
<constraint firstItem="tAw-72-pSm" firstAttribute="top" secondItem="q1d-ED-T5M" secondAttribute="bottom" constant="20" id="Bwf-bJ-2AY"/>
|
||||||
|
<constraint firstItem="Jlm-i9-jVy" firstAttribute="leading" secondItem="NdQ-vM-dHT" secondAttribute="trailing" constant="12" symbolic="YES" id="DHs-Xz-gcZ"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="NdQ-vM-dHT" secondAttribute="bottom" constant="20" symbolic="YES" id="Eua-I4-kKg"/>
|
||||||
|
<constraint firstItem="tAw-72-pSm" firstAttribute="trailing" secondItem="q1d-ED-T5M" secondAttribute="trailing" id="MsD-dU-YC8"/>
|
||||||
|
<constraint firstItem="Epz-xU-9TM" firstAttribute="baseline" secondItem="tAw-72-pSm" secondAttribute="baseline" id="O99-nG-qmf"/>
|
||||||
|
<constraint firstItem="Epz-xU-9TM" firstAttribute="leading" secondItem="q1d-ED-T5M" secondAttribute="leading" id="Vcg-aa-5pd"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="q1d-ED-T5M" secondAttribute="trailing" constant="20" symbolic="YES" id="Wcu-aH-ONq"/>
|
||||||
|
<constraint firstItem="q1d-ED-T5M" firstAttribute="top" secondItem="2" secondAttribute="top" constant="20" symbolic="YES" id="eAk-Qk-bjO"/>
|
||||||
|
<constraint firstItem="q1d-ED-T5M" firstAttribute="top" relation="greaterThanOrEqual" secondItem="2" secondAttribute="top" constant="20" symbolic="YES" id="fCH-CB-BfF"/>
|
||||||
|
<constraint firstItem="Jlm-i9-jVy" firstAttribute="baseline" secondItem="NdQ-vM-dHT" secondAttribute="baseline" id="tOu-bn-J1u"/>
|
||||||
|
<constraint firstItem="q1d-ED-T5M" firstAttribute="leading" secondItem="2" secondAttribute="leading" constant="20" symbolic="YES" id="uCQ-aQ-3je"/>
|
||||||
|
<constraint firstItem="tAw-72-pSm" firstAttribute="leading" secondItem="Epz-xU-9TM" secondAttribute="trailing" constant="8" symbolic="YES" id="wJ9-T1-rT8"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
</window>
|
||||||
|
</objects>
|
||||||
|
</document>
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
69
MacPass/CloneEntryWindow.xib
Normal file
69
MacPass/CloneEntryWindow.xib
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="4514" systemVersion="13C64" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||||
|
<dependencies>
|
||||||
|
<deployment defaultVersion="1080" identifier="macosx"/>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="4514"/>
|
||||||
|
</dependencies>
|
||||||
|
<objects>
|
||||||
|
<customObject id="-2" userLabel="File's Owner"/>
|
||||||
|
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||||
|
<customObject id="-3" userLabel="Application"/>
|
||||||
|
<window title="Clone Entry" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" releasedWhenClosed="NO" wantsToBeColor="NO" animationBehavior="default" id="1">
|
||||||
|
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
|
||||||
|
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
||||||
|
<rect key="contentRect" x="196" y="240" width="287" height="115"/>
|
||||||
|
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1418"/>
|
||||||
|
<view key="contentView" id="2">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="287" height="115"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<subviews>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="SZv-a7-ifG">
|
||||||
|
<rect key="frame" x="196" y="13" width="77" height="32"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="push" title="Clone" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="SfB-Er-9Rw">
|
||||||
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
</button>
|
||||||
|
<button translatesAutoresizingMaskIntoConstraints="NO" id="XpT-SI-BXo">
|
||||||
|
<rect key="frame" x="75" y="79" width="103" height="18"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="check" title="clone history" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="oD5-qB-8vK">
|
||||||
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
</button>
|
||||||
|
<button translatesAutoresizingMaskIntoConstraints="NO" id="r9h-fj-Sew">
|
||||||
|
<rect key="frame" x="75" y="59" width="137" height="18"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="check" title="clone attachments" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="hah-2H-RqN">
|
||||||
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
</button>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="j5y-Yw-WYI">
|
||||||
|
<rect key="frame" x="111" y="13" width="82" height="32"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="XYx-Ie-si3">
|
||||||
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<string key="keyEquivalent" base64-UTF8="YES">
|
||||||
|
Gw
|
||||||
|
</string>
|
||||||
|
</buttonCell>
|
||||||
|
</button>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="XpT-SI-BXo" firstAttribute="top" secondItem="2" secondAttribute="top" constant="20" symbolic="YES" id="9Ro-Kb-xO4"/>
|
||||||
|
<constraint firstItem="r9h-fj-Sew" firstAttribute="top" secondItem="XpT-SI-BXo" secondAttribute="bottom" constant="6" symbolic="YES" id="JFD-Va-WFi"/>
|
||||||
|
<constraint firstItem="r9h-fj-Sew" firstAttribute="centerX" secondItem="2" secondAttribute="centerX" id="fDQ-Tk-yhX"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="SZv-a7-ifG" secondAttribute="trailing" constant="20" symbolic="YES" id="hhb-E3-WP7"/>
|
||||||
|
<constraint firstItem="j5y-Yw-WYI" firstAttribute="baseline" secondItem="SZv-a7-ifG" secondAttribute="baseline" id="kkG-ta-sym"/>
|
||||||
|
<constraint firstItem="j5y-Yw-WYI" firstAttribute="top" secondItem="r9h-fj-Sew" secondAttribute="bottom" constant="20" symbolic="YES" id="mAF-ad-rDG"/>
|
||||||
|
<constraint firstItem="SZv-a7-ifG" firstAttribute="leading" secondItem="j5y-Yw-WYI" secondAttribute="trailing" constant="15" id="vId-Wx-Snz"/>
|
||||||
|
<constraint firstItem="XpT-SI-BXo" firstAttribute="leading" secondItem="r9h-fj-Sew" secondAttribute="leading" id="vUr-UJ-DzQ"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
</window>
|
||||||
|
</objects>
|
||||||
|
</document>
|
||||||
230
MacPass/ContextBar.xib
Normal file
230
MacPass/ContextBar.xib
Normal file
@@ -0,0 +1,230 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="4514" systemVersion="13C64" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||||
|
<dependencies>
|
||||||
|
<deployment defaultVersion="1080" identifier="macosx"/>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="4514"/>
|
||||||
|
</dependencies>
|
||||||
|
<objects>
|
||||||
|
<customObject id="-2" userLabel="File's Owner" customClass="MPContextBarViewController">
|
||||||
|
<connections>
|
||||||
|
<outlet property="duplicatePasswordsButton" destination="hMB-2T-pBD" id="dWH-3p-fy6"/>
|
||||||
|
<outlet property="emptyTrashButton" destination="szx-Hx-OrV" id="i1Y-qB-TW3"/>
|
||||||
|
<outlet property="exitHistoryButton" destination="pqx-su-vAh" id="JmV-vC-F48"/>
|
||||||
|
<outlet property="filterLabelTextField" destination="6" id="60"/>
|
||||||
|
<outlet property="historyBar" destination="S8L-rB-h0h" id="6yZ-El-fVs"/>
|
||||||
|
<outlet property="historyLabel" destination="gGR-f0-dcr" id="slx-9D-8k8"/>
|
||||||
|
<outlet property="notesButton" destination="SaV-5p-jIX" id="sQc-nE-BOP"/>
|
||||||
|
<outlet property="passwordButton" destination="Uhl-ck-vVQ" id="I35-Nv-6jK"/>
|
||||||
|
<outlet property="titleButton" destination="O7W-cn-eUP" id="Vlg-KG-62R"/>
|
||||||
|
<outlet property="trashBar" destination="DXf-SC-gVG" id="3aZ-Xc-VDk"/>
|
||||||
|
<outlet property="urlButton" destination="Bn2-iY-mQ3" id="PNG-kv-PQN"/>
|
||||||
|
<outlet property="usernameButton" destination="0R1-PX-dgn" id="TWQ-1y-9cl"/>
|
||||||
|
<outlet property="view" destination="8MB-fC-M2Q" id="wYX-Cc-yoV"/>
|
||||||
|
</connections>
|
||||||
|
</customObject>
|
||||||
|
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||||
|
<customObject id="-3" userLabel="Application"/>
|
||||||
|
<tabView type="noTabsNoBorder" translatesAutoresizingMaskIntoConstraints="NO" id="8MB-fC-M2Q">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="576" height="30"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<tabViewItems>
|
||||||
|
<tabViewItem label="Filter" identifier="1" id="Ud6-Nz-6PS">
|
||||||
|
<view key="view" id="caQ-XO-RkM">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="576" height="30"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<customView translatesAutoresizingMaskIntoConstraints="NO" id="1" customClass="HNHGradientView">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="576" height="30"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="6">
|
||||||
|
<rect key="frame" x="6" y="8" width="45" height="14"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Search:" id="7">
|
||||||
|
<font key="font" metaFont="smallSystemBold"/>
|
||||||
|
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="O7W-cn-eUP">
|
||||||
|
<rect key="frame" x="57" y="6" width="42" height="17"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="recessed" title="Title" bezelStyle="recessed" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="53D-ne-nv6">
|
||||||
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
|
||||||
|
<font key="font" metaFont="systemBold" size="12"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleSearchFlags:" target="-1" id="gUm-y4-CDb"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="0R1-PX-dgn">
|
||||||
|
<rect key="frame" x="107" y="6" width="77" height="17"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="recessed" title="Username" bezelStyle="recessed" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="jfQ-Jh-2gl">
|
||||||
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
|
||||||
|
<font key="font" metaFont="systemBold" size="12"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleSearchFlags:" target="-1" id="DEi-hq-N39"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Uhl-ck-vVQ">
|
||||||
|
<rect key="frame" x="192" y="6" width="74" height="17"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="recessed" title="Password" bezelStyle="recessed" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="rvQ-4V-SsS">
|
||||||
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
|
||||||
|
<font key="font" metaFont="systemBold" size="12"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleSearchFlags:" target="-1" id="xYd-Fp-jxn"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Bn2-iY-mQ3">
|
||||||
|
<rect key="frame" x="274" y="6" width="38" height="17"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="recessed" title="URL" bezelStyle="recessed" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="92o-gN-Psj">
|
||||||
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
|
||||||
|
<font key="font" metaFont="systemBold" size="12"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleSearchFlags:" target="-1" id="Ykb-ye-FqF"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="SaV-5p-jIX">
|
||||||
|
<rect key="frame" x="320" y="6" width="50" height="17"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="recessed" title="Notes" bezelStyle="recessed" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="iDN-2E-hwt">
|
||||||
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
|
||||||
|
<font key="font" metaFont="systemBold" size="12"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleSearchFlags:" target="-1" id="cuN-5p-vZD"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="hMB-2T-pBD">
|
||||||
|
<rect key="frame" x="378" y="6" width="144" height="17"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="recessed" title="Duplicate Passwords" bezelStyle="recessed" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="G1B-En-dc2">
|
||||||
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
|
||||||
|
<font key="font" metaFont="systemBold" size="12"/>
|
||||||
|
</buttonCell>
|
||||||
|
</button>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="centerY" secondItem="O7W-cn-eUP" secondAttribute="centerY" id="2uC-wS-HDi"/>
|
||||||
|
<constraint firstAttribute="centerY" secondItem="hMB-2T-pBD" secondAttribute="centerY" id="4rl-iO-76L"/>
|
||||||
|
<constraint firstItem="O7W-cn-eUP" firstAttribute="leading" secondItem="6" secondAttribute="trailing" constant="8" symbolic="YES" id="5hN-x3-XlX"/>
|
||||||
|
<constraint firstItem="0R1-PX-dgn" firstAttribute="leading" secondItem="O7W-cn-eUP" secondAttribute="trailing" constant="8" symbolic="YES" id="67f-i6-eOb"/>
|
||||||
|
<constraint firstAttribute="centerY" secondItem="SaV-5p-jIX" secondAttribute="centerY" id="7ch-eZ-Hzh"/>
|
||||||
|
<constraint firstAttribute="centerY" secondItem="0R1-PX-dgn" secondAttribute="centerY" id="Huh-PB-cbs"/>
|
||||||
|
<constraint firstItem="6" firstAttribute="leading" secondItem="1" secondAttribute="leading" constant="8" id="Seo-dI-FzX"/>
|
||||||
|
<constraint firstItem="Bn2-iY-mQ3" firstAttribute="leading" secondItem="Uhl-ck-vVQ" secondAttribute="trailing" constant="8" id="TCJ-vg-IIt"/>
|
||||||
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="hMB-2T-pBD" secondAttribute="trailing" constant="20" symbolic="YES" id="jAm-sk-ErW"/>
|
||||||
|
<constraint firstItem="SaV-5p-jIX" firstAttribute="leading" secondItem="Bn2-iY-mQ3" secondAttribute="trailing" constant="8" symbolic="YES" id="pAA-uU-moF"/>
|
||||||
|
<constraint firstAttribute="centerY" secondItem="6" secondAttribute="centerY" id="qak-8F-xbj"/>
|
||||||
|
<constraint firstItem="Uhl-ck-vVQ" firstAttribute="leading" secondItem="0R1-PX-dgn" secondAttribute="trailing" constant="8" id="u8d-C2-O9h"/>
|
||||||
|
<constraint firstAttribute="centerY" secondItem="Uhl-ck-vVQ" secondAttribute="centerY" id="uvE-ch-ysK"/>
|
||||||
|
<constraint firstAttribute="centerY" secondItem="Bn2-iY-mQ3" secondAttribute="centerY" id="xZJ-EZ-Nic"/>
|
||||||
|
<constraint firstItem="hMB-2T-pBD" firstAttribute="leading" secondItem="SaV-5p-jIX" secondAttribute="trailing" constant="8" symbolic="YES" id="zRT-y1-oMu"/>
|
||||||
|
</constraints>
|
||||||
|
</customView>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="1" firstAttribute="leading" secondItem="caQ-XO-RkM" secondAttribute="leading" id="3yS-J0-xZL"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="1" secondAttribute="bottom" id="Z4A-sK-v8K"/>
|
||||||
|
<constraint firstItem="1" firstAttribute="top" secondItem="caQ-XO-RkM" secondAttribute="top" id="a5u-p3-ay5"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="1" secondAttribute="trailing" id="hTR-dg-7Ql"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
</tabViewItem>
|
||||||
|
<tabViewItem label="Trash" identifier="2" id="na6-h9-r9q">
|
||||||
|
<view key="view" id="F6S-GS-AwI">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="576" height="30"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<customView translatesAutoresizingMaskIntoConstraints="NO" id="DXf-SC-gVG" customClass="HNHGradientView">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="576" height="30"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="szx-Hx-OrV">
|
||||||
|
<rect key="frame" x="478" y="5" width="78" height="19"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="roundTextured" title="Empty Trash" bezelStyle="texturedRounded" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="8Ok-oe-6AB">
|
||||||
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="smallSystem"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="emptyTrash:" target="-1" id="uIZ-CN-kXB"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="szx-Hx-OrV" secondAttribute="trailing" constant="20" symbolic="YES" id="J9z-j0-T14"/>
|
||||||
|
<constraint firstItem="szx-Hx-OrV" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="DXf-SC-gVG" secondAttribute="leading" constant="20" symbolic="YES" id="s8f-1l-4Yy"/>
|
||||||
|
<constraint firstAttribute="centerY" secondItem="szx-Hx-OrV" secondAttribute="centerY" id="sG5-pc-EzQ"/>
|
||||||
|
</constraints>
|
||||||
|
</customView>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="DXf-SC-gVG" firstAttribute="leading" secondItem="F6S-GS-AwI" secondAttribute="leading" id="8z9-Fw-xiU"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="DXf-SC-gVG" secondAttribute="bottom" id="FUk-Mw-Kld"/>
|
||||||
|
<constraint firstItem="DXf-SC-gVG" firstAttribute="top" secondItem="F6S-GS-AwI" secondAttribute="top" id="j4h-gk-JVJ"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="DXf-SC-gVG" secondAttribute="trailing" id="wap-ZJ-5Rw"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
<connections>
|
||||||
|
<outlet property="initialFirstResponder" destination="szx-Hx-OrV" id="Cqa-Po-xMe"/>
|
||||||
|
</connections>
|
||||||
|
</tabViewItem>
|
||||||
|
<tabViewItem label="History" identifier="3" id="z4I-cp-nhf">
|
||||||
|
<view key="view" id="iPb-SZ-Lfm">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="576" height="30"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<customView translatesAutoresizingMaskIntoConstraints="NO" id="S8L-rB-h0h" customClass="HNHGradientView">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="576" height="30"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="gGR-f0-dcr">
|
||||||
|
<rect key="frame" x="18" y="6" width="38" height="17"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Label" id="8LU-cT-rsU">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="pqx-su-vAh">
|
||||||
|
<rect key="frame" x="483" y="5" width="73" height="19"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="roundTextured" title="Exit History" bezelStyle="texturedRounded" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="ewQ-8F-e1E">
|
||||||
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="smallSystem"/>
|
||||||
|
</buttonCell>
|
||||||
|
</button>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="centerY" secondItem="pqx-su-vAh" secondAttribute="centerY" id="7T6-QP-uaM"/>
|
||||||
|
<constraint firstAttribute="centerY" secondItem="gGR-f0-dcr" secondAttribute="centerY" id="KMF-ev-v2h"/>
|
||||||
|
<constraint firstItem="pqx-su-vAh" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="gGR-f0-dcr" secondAttribute="trailing" constant="8" symbolic="YES" id="Wb1-xK-zZF"/>
|
||||||
|
<constraint firstItem="gGR-f0-dcr" firstAttribute="leading" secondItem="S8L-rB-h0h" secondAttribute="leading" constant="20" symbolic="YES" id="gFm-N8-pwn"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="pqx-su-vAh" secondAttribute="trailing" constant="20" symbolic="YES" id="mao-02-HsJ"/>
|
||||||
|
</constraints>
|
||||||
|
</customView>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="S8L-rB-h0h" firstAttribute="leading" secondItem="iPb-SZ-Lfm" secondAttribute="leading" id="5jN-VU-DkD"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="S8L-rB-h0h" secondAttribute="trailing" id="VAt-ZA-0A2"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="S8L-rB-h0h" secondAttribute="bottom" id="bz5-FS-Gg2"/>
|
||||||
|
<constraint firstItem="S8L-rB-h0h" firstAttribute="top" secondItem="iPb-SZ-Lfm" secondAttribute="top" id="mW1-xp-CdF"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
<connections>
|
||||||
|
<outlet property="initialFirstResponder" destination="pqx-su-vAh" id="bi5-CA-b4P"/>
|
||||||
|
</connections>
|
||||||
|
</tabViewItem>
|
||||||
|
</tabViewItems>
|
||||||
|
</tabView>
|
||||||
|
</objects>
|
||||||
|
</document>
|
||||||
File diff suppressed because it is too large
Load Diff
103
MacPass/DatePickingView.xib
Normal file
103
MacPass/DatePickingView.xib
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="5053" systemVersion="13C64" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||||
|
<dependencies>
|
||||||
|
<deployment version="1070" defaultVersion="1080" identifier="macosx"/>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="5053"/>
|
||||||
|
</dependencies>
|
||||||
|
<objects>
|
||||||
|
<customObject id="-2" userLabel="File's Owner" customClass="MPDatePickingViewController">
|
||||||
|
<connections>
|
||||||
|
<outlet property="datePicker" destination="3" id="YOw-gi-A02"/>
|
||||||
|
<outlet property="presetPopupButton" destination="15" id="VJh-of-PEU"/>
|
||||||
|
<outlet property="view" destination="1" id="2"/>
|
||||||
|
</connections>
|
||||||
|
</customObject>
|
||||||
|
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||||
|
<customObject id="-3" userLabel="Application"/>
|
||||||
|
<customView id="1">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="316" height="259"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<datePicker horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="3">
|
||||||
|
<rect key="frame" x="20" y="91" width="277" height="148"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<datePickerCell key="cell" borderStyle="bezel" alignment="left" datePickerStyle="clockAndCalendar" id="4">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<calendarDate key="date" timeIntervalSinceReferenceDate="-595929600" calendarFormat="%Y-%m-%d %H:%M:%S %z">
|
||||||
|
<!--1982-02-12 08:00:00 -0800-->
|
||||||
|
<timeZone key="timeZone" name="US/Pacific">
|
||||||
|
<data key="data">
|
||||||
|
VFppZgAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAC5AAAABAAAABCepkign7sVkKCGKqChmveQ
|
||||||
|
y4kaoNIj9HDSYSYQ1v50INiArZDa/tGg28CQENzes6DdqayQ3r6VoN+JjpDgnneg4WlwkOJ+WaDjSVKQ
|
||||||
|
5F47oOUpNJDmR1gg5xJREOgnOiDo8jMQ6gccIOrSFRDr5v4g7LH3EO3G4CDukdkQ76/8oPBxuxDxj96g
|
||||||
|
8n/BkPNvwKD0X6OQ9U+ioPY/hZD3L4Sg+CiiEPkPZqD6CIQQ+viDIPvoZhD82GUg/chIEP64RyD/qCoQ
|
||||||
|
AJgpIAGIDBACeAsgA3EokARhJ6AFUQqQBkEJoAcw7JAHjUOgCRDOkAmtvyAK8LCQC+CvoAzZzRANwJGg
|
||||||
|
DrmvEA+priAQmZEQEYmQIBJ5cxATaXIgFFlVEBVJVCAWOTcQFyk2IBgiU5AZCRggGgI1kBryNKAb4heQ
|
||||||
|
HNIWoB3B+ZAesfigH6HbkCB2KyAhgb2QIlYNICNq2hAkNe8gJUq8ECYV0SAnKp4QJ/7toCkKgBAp3s+g
|
||||||
|
KupiECu+saAs036QLZ6ToC6zYJAvfnWgMJNCkDFnkiAycySQM0d0IDRTBpA1J1YgNjLokDcHOCA4HAUQ
|
||||||
|
OOcaIDn75xA6xvwgO9vJEDywGKA9u6sQPo/6oD+bjRBAb9ygQYSpkEJPvqBDZIuQRC+goEVEbZBF89Mg
|
||||||
|
Ry2KEEfTtSBJDWwQSbOXIErtThBLnLOgTNZqkE18laBOtkyQT1x3oFCWLpBRPFmgUnYQkFMcO6BUVfKQ
|
||||||
|
VPwdoFY11JBW5TogWB7xEFjFHCBZ/tMQWqT+IFvetRBchOAgXb6XEF5kwiBfnnkQYE3eoGGHlZBiLcCg
|
||||||
|
Y2d3kGQNoqBlR1mQZe2EoGcnO5BnzWagaQcdkGmtSKBq5v+Qa5ZlIGzQHBBtdkcgbq/+EG9WKSBwj+AQ
|
||||||
|
cTYLIHJvwhBzFe0gdE+kEHT/CaB2OMCQdt7roHgYopB4vs2gefiEkHqer6B72GaQfH6RoH24SJB+XnOg
|
||||||
|
f5gqkAABAAECAwEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
|
||||||
|
AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
|
||||||
|
AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
|
||||||
|
AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA
|
||||||
|
</data>
|
||||||
|
</timeZone>
|
||||||
|
</calendarDate>
|
||||||
|
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<datePickerElements key="datePickerElements" year="YES" month="YES" day="YES" hour="YES" minute="YES" second="YES"/>
|
||||||
|
</datePickerCell>
|
||||||
|
</datePicker>
|
||||||
|
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="15">
|
||||||
|
<rect key="frame" x="18" y="47" width="281" height="26"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="16">
|
||||||
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="menu"/>
|
||||||
|
<menu key="menu" title="OtherViews" id="17"/>
|
||||||
|
</popUpButtonCell>
|
||||||
|
</popUpButton>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="25">
|
||||||
|
<rect key="frame" x="226" y="18" width="70" height="25"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="roundTextured" title="Use Date" bezelStyle="texturedRounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="26">
|
||||||
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="useDate:" target="-2" id="34n-E5-FQq"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="29">
|
||||||
|
<rect key="frame" x="162" y="18" width="56" height="25"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="roundTextured" title="Cancel" bezelStyle="texturedRounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="30">
|
||||||
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="cancel:" target="-2" id="eww-6g-58Z"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="3" firstAttribute="leading" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="13"/>
|
||||||
|
<constraint firstItem="3" firstAttribute="top" secondItem="1" secondAttribute="top" constant="20" symbolic="YES" id="14"/>
|
||||||
|
<constraint firstItem="15" firstAttribute="top" secondItem="3" secondAttribute="bottom" constant="20" symbolic="YES" id="21"/>
|
||||||
|
<constraint firstItem="15" firstAttribute="leading" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="22"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="15" secondAttribute="trailing" constant="20" symbolic="YES" id="24"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="25" secondAttribute="trailing" constant="20" symbolic="YES" id="27"/>
|
||||||
|
<constraint firstItem="29" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="35"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="25" secondAttribute="bottom" constant="20" symbolic="YES" id="36"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="3" secondAttribute="trailing" constant="20" id="6Qs-OP-VRr"/>
|
||||||
|
<constraint firstItem="25" firstAttribute="centerY" secondItem="29" secondAttribute="centerY" id="M8N-5g-ClS"/>
|
||||||
|
<constraint firstItem="25" firstAttribute="leading" secondItem="29" secondAttribute="trailing" constant="8" symbolic="YES" id="on5-xg-jcC"/>
|
||||||
|
<constraint firstItem="25" firstAttribute="top" secondItem="15" secondAttribute="bottom" constant="8" symbolic="YES" id="sxX-fk-xaJ"/>
|
||||||
|
</constraints>
|
||||||
|
</customView>
|
||||||
|
</objects>
|
||||||
|
</document>
|
||||||
@@ -1,205 +1,31 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="4514" systemVersion="13A603" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||||
<data>
|
<dependencies>
|
||||||
<int key="IBDocument.SystemTarget">1080</int>
|
<deployment defaultVersion="1080" identifier="macosx"/>
|
||||||
<string key="IBDocument.SystemVersion">12E55</string>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="4514"/>
|
||||||
<string key="IBDocument.InterfaceBuilderVersion">3084</string>
|
</dependencies>
|
||||||
<string key="IBDocument.AppKitVersion">1187.39</string>
|
<objects>
|
||||||
<string key="IBDocument.HIToolboxVersion">626.00</string>
|
<customObject id="-2" userLabel="File's Owner" customClass="MPDocumentWindowController">
|
||||||
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
|
<connections>
|
||||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
<outlet property="splitView" destination="697" id="700"/>
|
||||||
<string key="NS.object.0">3084</string>
|
<outlet property="window" destination="1" id="501"/>
|
||||||
</object>
|
</connections>
|
||||||
<array key="IBDocument.IntegratedClassDependencies">
|
</customObject>
|
||||||
<string>NSCustomObject</string>
|
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||||
<string>NSSplitView</string>
|
<customObject id="-3" userLabel="Application"/>
|
||||||
<string>NSView</string>
|
<window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" releasedWhenClosed="NO" wantsToBeColor="NO" visibleAtLaunch="NO" frameAutosaveName="DatabaseWindow" animationBehavior="default" id="1">
|
||||||
<string>NSWindowTemplate</string>
|
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
|
||||||
</array>
|
<windowCollectionBehavior key="collectionBehavior" fullScreenPrimary="YES"/>
|
||||||
<array key="IBDocument.PluginDependencies">
|
<rect key="contentRect" x="196" y="240" width="700" height="500"/>
|
||||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
<rect key="screenRect" x="0.0" y="0.0" width="1680" height="1028"/>
|
||||||
</array>
|
<view key="contentView" id="2">
|
||||||
<object class="NSMutableDictionary" key="IBDocument.Metadata">
|
<rect key="frame" x="0.0" y="0.0" width="700" height="500"/>
|
||||||
<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<integer value="1" key="NS.object.0"/>
|
</view>
|
||||||
</object>
|
</window>
|
||||||
<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
|
<splitView autosaveName="" dividerStyle="thin" vertical="YES" translatesAutoresizingMaskIntoConstraints="NO" id="697">
|
||||||
<object class="NSCustomObject" id="1001">
|
<rect key="frame" x="0.0" y="0.0" width="560" height="194"/>
|
||||||
<string key="NSClassName">MPDocumentWindowController</string>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
</object>
|
</splitView>
|
||||||
<object class="NSCustomObject" id="1003">
|
</objects>
|
||||||
<string key="NSClassName">FirstResponder</string>
|
</document>
|
||||||
</object>
|
|
||||||
<object class="NSCustomObject" id="1004">
|
|
||||||
<string key="NSClassName">NSApplication</string>
|
|
||||||
</object>
|
|
||||||
<object class="NSWindowTemplate" id="1005">
|
|
||||||
<int key="NSWindowStyleMask">15</int>
|
|
||||||
<int key="NSWindowBacking">2</int>
|
|
||||||
<string key="NSWindowRect">{{196, 240}, {700, 500}}</string>
|
|
||||||
<int key="NSWTFlags">1618477056</int>
|
|
||||||
<string key="NSWindowTitle">Window</string>
|
|
||||||
<string key="NSWindowClass">NSWindow</string>
|
|
||||||
<nil key="NSViewClass"/>
|
|
||||||
<nil key="NSUserInterfaceItemIdentifier"/>
|
|
||||||
<object class="NSView" key="NSWindowView" id="1006">
|
|
||||||
<reference key="NSNextResponder"/>
|
|
||||||
<int key="NSvFlags">256</int>
|
|
||||||
<array class="NSMutableArray" key="NSSubviews"/>
|
|
||||||
<string key="NSFrameSize">{700, 500}</string>
|
|
||||||
<reference key="NSSuperview"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
</object>
|
|
||||||
<string key="NSScreenRect">{{0, 0}, {2560, 1418}}</string>
|
|
||||||
<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
|
|
||||||
<string key="NSFrameAutosaveName">DatabaseWindow</string>
|
|
||||||
<bool key="NSWindowIsRestorable">YES</bool>
|
|
||||||
</object>
|
|
||||||
<object class="NSSplitView" id="903506498">
|
|
||||||
<reference key="NSNextResponder"/>
|
|
||||||
<int key="NSvFlags">268</int>
|
|
||||||
<array class="NSMutableArray" key="NSSubviews"/>
|
|
||||||
<string key="NSFrameSize">{560, 194}</string>
|
|
||||||
<reference key="NSSuperview"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<string key="NSReuseIdentifierKey">_NS:9</string>
|
|
||||||
<bool key="NSIsVertical">YES</bool>
|
|
||||||
<int key="NSDividerStyle">2</int>
|
|
||||||
<string key="NSAutosaveName"/>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<object class="IBObjectContainer" key="IBDocument.Objects">
|
|
||||||
<array class="NSMutableArray" key="connectionRecords">
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBOutletConnection" key="connection">
|
|
||||||
<string key="label">window</string>
|
|
||||||
<reference key="source" ref="1001"/>
|
|
||||||
<reference key="destination" ref="1005"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">501</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBOutletConnection" key="connection">
|
|
||||||
<string key="label">splitView</string>
|
|
||||||
<reference key="source" ref="1001"/>
|
|
||||||
<reference key="destination" ref="903506498"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">700</int>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<object class="IBMutableOrderedSet" key="objectRecords">
|
|
||||||
<array key="orderedObjects">
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">0</int>
|
|
||||||
<array key="object" id="0"/>
|
|
||||||
<reference key="children" ref="1000"/>
|
|
||||||
<nil key="parent"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">-2</int>
|
|
||||||
<reference key="object" ref="1001"/>
|
|
||||||
<reference key="parent" ref="0"/>
|
|
||||||
<string key="objectName">File's Owner</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">-1</int>
|
|
||||||
<reference key="object" ref="1003"/>
|
|
||||||
<reference key="parent" ref="0"/>
|
|
||||||
<string key="objectName">First Responder</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">-3</int>
|
|
||||||
<reference key="object" ref="1004"/>
|
|
||||||
<reference key="parent" ref="0"/>
|
|
||||||
<string key="objectName">Application</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">1</int>
|
|
||||||
<reference key="object" ref="1005"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="1006"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="0"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">2</int>
|
|
||||||
<reference key="object" ref="1006"/>
|
|
||||||
<array class="NSMutableArray" key="children"/>
|
|
||||||
<reference key="parent" ref="1005"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">697</int>
|
|
||||||
<reference key="object" ref="903506498"/>
|
|
||||||
<reference key="parent" ref="0"/>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
</object>
|
|
||||||
<dictionary class="NSMutableDictionary" key="flattenedProperties">
|
|
||||||
<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="-3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<boolean value="YES" key="1.IBNSWindowAutoPositionCentersHorizontal"/>
|
|
||||||
<boolean value="YES" key="1.IBNSWindowAutoPositionCentersVertical"/>
|
|
||||||
<string key="1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="1.IBWindowTemplateEditedContentRect">{{357, 418}, {480, 270}}</string>
|
|
||||||
<boolean value="NO" key="1.NSWindowTemplate.visibleAtLaunch"/>
|
|
||||||
<string key="2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<boolean value="NO" key="697.IBNSViewMetadataLastInspectedTranslatesAutoresizingMaskIntoConstraints"/>
|
|
||||||
<boolean value="NO" key="697.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
|
|
||||||
<string key="697.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
|
|
||||||
<nil key="activeLocalization"/>
|
|
||||||
<dictionary class="NSMutableDictionary" key="localizations"/>
|
|
||||||
<nil key="sourceID"/>
|
|
||||||
<int key="maxID">743</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBClassDescriber" key="IBDocument.Classes">
|
|
||||||
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
|
|
||||||
<object class="IBPartialClassDescription">
|
|
||||||
<string key="className">MPDocumentWindowController</string>
|
|
||||||
<string key="superclassName">NSWindowController</string>
|
|
||||||
<dictionary class="NSMutableDictionary" key="actions">
|
|
||||||
<string key="editPassword:">id</string>
|
|
||||||
<string key="exportDatabase:">id</string>
|
|
||||||
<string key="showDatabaseSettings:">id</string>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary class="NSMutableDictionary" key="actionInfosByName">
|
|
||||||
<object class="IBActionInfo" key="editPassword:">
|
|
||||||
<string key="name">editPassword:</string>
|
|
||||||
<string key="candidateClassName">id</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBActionInfo" key="exportDatabase:">
|
|
||||||
<string key="name">exportDatabase:</string>
|
|
||||||
<string key="candidateClassName">id</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBActionInfo" key="showDatabaseSettings:">
|
|
||||||
<string key="name">showDatabaseSettings:</string>
|
|
||||||
<string key="candidateClassName">id</string>
|
|
||||||
</object>
|
|
||||||
</dictionary>
|
|
||||||
<object class="NSMutableDictionary" key="outlets">
|
|
||||||
<string key="NS.key.0">splitView</string>
|
|
||||||
<string key="NS.object.0">NSSplitView</string>
|
|
||||||
</object>
|
|
||||||
<object class="NSMutableDictionary" key="toOneOutletInfosByName">
|
|
||||||
<string key="NS.key.0">splitView</string>
|
|
||||||
<object class="IBToOneOutletInfo" key="NS.object.0">
|
|
||||||
<string key="name">splitView</string>
|
|
||||||
<string key="candidateClassName">NSSplitView</string>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
|
||||||
<string key="majorKey">IBProjectSource</string>
|
|
||||||
<string key="minorKey">./Classes/MPDocumentWindowController.h</string>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
</object>
|
|
||||||
<int key="IBDocument.localizationMode">0</int>
|
|
||||||
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
|
|
||||||
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
|
|
||||||
<int key="IBDocument.defaultPropertyAccessControl">3</int>
|
|
||||||
<bool key="IBDocument.UseAutolayout">YES</bool>
|
|
||||||
</data>
|
|
||||||
</archive>
|
|
||||||
886
MacPass/EntryInspectorView.xib
Normal file
886
MacPass/EntryInspectorView.xib
Normal file
@@ -0,0 +1,886 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="5053" systemVersion="13C64" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||||
|
<dependencies>
|
||||||
|
<deployment version="1070" defaultVersion="1080" identifier="macosx"/>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="5053"/>
|
||||||
|
</dependencies>
|
||||||
|
<objects>
|
||||||
|
<customObject id="-2" userLabel="File's Owner" customClass="MPEntryInspectorViewController">
|
||||||
|
<connections>
|
||||||
|
<outlet property="URLTextField" destination="56" id="262"/>
|
||||||
|
<outlet property="addAssociationButton" destination="Iy9-9L-Aev" id="HQH-Ad-9my"/>
|
||||||
|
<outlet property="associationSequenceTextField" destination="NjR-ea-Y7k" id="kTb-Y5-XrZ"/>
|
||||||
|
<outlet property="attachmentTableView" destination="137" id="265"/>
|
||||||
|
<outlet property="autotypView" destination="zv7-wE-Bmg" id="m1g-dk-hFv"/>
|
||||||
|
<outlet property="customEntrySequenceTextField" destination="cDK-DM-F5z" id="CDU-Oq-AHP"/>
|
||||||
|
<outlet property="customFieldsTableView" destination="193" id="266"/>
|
||||||
|
<outlet property="enableAutotypeCheckButton" destination="kdV-Xa-8p3" id="vlC-HP-lBv"/>
|
||||||
|
<outlet property="expiresCheckButton" destination="7" id="286"/>
|
||||||
|
<outlet property="generalView" destination="4" id="270"/>
|
||||||
|
<outlet property="generatePasswordButton" destination="59" id="282"/>
|
||||||
|
<outlet property="infoTabControl" destination="82" id="264"/>
|
||||||
|
<outlet property="passwordTextField" destination="60" id="263"/>
|
||||||
|
<outlet property="removeAssociationButton" destination="AAj-Ak-z46" id="7Xj-Tf-8CI"/>
|
||||||
|
<outlet property="tabView" destination="83" id="269"/>
|
||||||
|
<outlet property="tagsTokenField" destination="5" id="287"/>
|
||||||
|
<outlet property="titleTextField" destination="53" id="260"/>
|
||||||
|
<outlet property="togglePassword" destination="61" id="268"/>
|
||||||
|
<outlet property="usernameTextField" destination="55" id="261"/>
|
||||||
|
<outlet property="view" destination="3" id="250"/>
|
||||||
|
<outlet property="windowAssociationsTableView" destination="caM-L6-UHC" id="n5M-f8-z24"/>
|
||||||
|
<outlet property="windowTitleComboBox" destination="rD3-Wn-ZFX" id="rd3-kO-jfj"/>
|
||||||
|
</connections>
|
||||||
|
</customObject>
|
||||||
|
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||||
|
<customObject id="-3" userLabel="Application"/>
|
||||||
|
<view translatesAutoresizingMaskIntoConstraints="NO" id="3">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="293" height="529"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<subviews>
|
||||||
|
<segmentedControl verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="82">
|
||||||
|
<rect key="frame" x="35" y="505" width="223" height="19"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<segmentedCell key="cell" controlSize="small" alignment="left" style="texturedSquare" trackingMode="selectOne" id="238">
|
||||||
|
<font key="font" metaFont="smallSystem"/>
|
||||||
|
<segments>
|
||||||
|
<segment label="General" selected="YES"/>
|
||||||
|
<segment label="Files" tag="1"/>
|
||||||
|
<segment label="Custom"/>
|
||||||
|
<segment label="Autotype"/>
|
||||||
|
</segments>
|
||||||
|
</segmentedCell>
|
||||||
|
</segmentedControl>
|
||||||
|
<tabView drawsBackground="NO" type="noTabsNoBorder" initialItem="110" translatesAutoresizingMaskIntoConstraints="NO" id="83">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="293" height="503"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<tabViewItems>
|
||||||
|
<tabViewItem label="General" identifier="1" id="110">
|
||||||
|
<view key="view" id="111">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="293" height="503"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
</view>
|
||||||
|
</tabViewItem>
|
||||||
|
<tabViewItem label="Attachments" identifier="" id="109">
|
||||||
|
<view key="view" id="123">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="293" height="503"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<button focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="124">
|
||||||
|
<rect key="frame" x="241" y="466" width="32" height="19"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="width" constant="32" id="176"/>
|
||||||
|
</constraints>
|
||||||
|
<buttonCell key="cell" type="roundRect" bezelStyle="roundedRect" image="NSAddTemplate" imagePosition="overlaps" alignment="center" state="on" borderStyle="border" focusRingType="none" imageScaling="proportionallyDown" inset="2" id="177">
|
||||||
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="cellTitle"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="addAttachment:" target="-2" id="271"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="126">
|
||||||
|
<rect key="frame" x="18" y="469" width="77" height="14"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="width" constant="73" id="136"/>
|
||||||
|
</constraints>
|
||||||
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Attachments" id="135">
|
||||||
|
<font key="font" metaFont="smallSystem"/>
|
||||||
|
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<scrollView autohidesScrollers="YES" horizontalLineScroll="38" horizontalPageScroll="10" verticalLineScroll="38" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="125" customClass="HNHScrollView">
|
||||||
|
<rect key="frame" x="20" y="26" width="253" height="432"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="F3N-QI-Di5">
|
||||||
|
<rect key="frame" x="1" y="1" width="251" height="430"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" columnSelection="YES" multipleSelection="NO" autosaveColumns="NO" rowHeight="36" rowSizeStyle="automatic" viewBased="YES" id="137">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="251" height="430"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<size key="intercellSpacing" width="3" height="2"/>
|
||||||
|
<color key="backgroundColor" name="alternateSelectedControlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<tableColumns>
|
||||||
|
<tableColumn width="248" minWidth="40" maxWidth="1000" id="140">
|
||||||
|
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left">
|
||||||
|
<font key="font" metaFont="smallSystem"/>
|
||||||
|
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" white="0.33333298560000002" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
|
</tableHeaderCell>
|
||||||
|
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" alignment="left" title="Text Cell" id="142">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||||
|
<prototypeCellViews>
|
||||||
|
<tableCellView identifier="NormalCell" id="143">
|
||||||
|
<rect key="frame" x="1" y="1" width="248" height="36"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<imageView translatesAutoresizingMaskIntoConstraints="NO" id="144">
|
||||||
|
<rect key="frame" x="3" y="2" width="32" height="32"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="width" constant="32" id="153"/>
|
||||||
|
<constraint firstAttribute="height" constant="32" id="154"/>
|
||||||
|
</constraints>
|
||||||
|
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="NSActionTemplate" id="152"/>
|
||||||
|
</imageView>
|
||||||
|
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="145">
|
||||||
|
<rect key="frame" x="41" y="10" width="206" height="17"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="151">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="144" firstAttribute="leading" secondItem="143" secondAttribute="leading" constant="3" id="146"/>
|
||||||
|
<constraint firstItem="144" firstAttribute="centerY" secondItem="143" secondAttribute="centerY" id="147"/>
|
||||||
|
<constraint firstItem="144" firstAttribute="centerY" secondItem="145" secondAttribute="centerY" id="148"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="145" secondAttribute="trailing" constant="3" id="149"/>
|
||||||
|
<constraint firstItem="145" firstAttribute="leading" secondItem="144" secondAttribute="trailing" constant="8" symbolic="YES" id="150"/>
|
||||||
|
</constraints>
|
||||||
|
<connections>
|
||||||
|
<outlet property="imageView" destination="144" id="239"/>
|
||||||
|
<outlet property="textField" destination="145" id="240"/>
|
||||||
|
</connections>
|
||||||
|
</tableCellView>
|
||||||
|
<tableCellView identifier="SelectedCell" id="141" customClass="MPSelectedAttachmentTableCellView">
|
||||||
|
<rect key="frame" x="1" y="39" width="248" height="36"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<imageView translatesAutoresizingMaskIntoConstraints="NO" id="167">
|
||||||
|
<rect key="frame" x="3" y="2" width="32" height="32"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="32" id="168"/>
|
||||||
|
<constraint firstAttribute="width" constant="32" id="169"/>
|
||||||
|
</constraints>
|
||||||
|
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="NSActionTemplate" id="170"/>
|
||||||
|
</imageView>
|
||||||
|
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="166">
|
||||||
|
<rect key="frame" x="41" y="10" width="126" height="17"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="171">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="156">
|
||||||
|
<rect key="frame" x="213" y="8" width="32" height="19"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="width" constant="32" id="172"/>
|
||||||
|
</constraints>
|
||||||
|
<buttonCell key="cell" type="roundRect" bezelStyle="roundedRect" image="NSRemoveTemplate" imagePosition="overlaps" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="173">
|
||||||
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="cellTitle"/>
|
||||||
|
<string key="keyEquivalent" base64-UTF8="YES">
|
||||||
|
CA
|
||||||
|
</string>
|
||||||
|
</buttonCell>
|
||||||
|
</button>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="155">
|
||||||
|
<rect key="frame" x="173" y="8" width="32" height="19"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="width" constant="32" id="174"/>
|
||||||
|
</constraints>
|
||||||
|
<buttonCell key="cell" type="roundRect" bezelStyle="roundedRect" image="26_FileSaveTemplate" imagePosition="only" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="175">
|
||||||
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="cellTitle"/>
|
||||||
|
</buttonCell>
|
||||||
|
</button>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="167" firstAttribute="leading" secondItem="141" secondAttribute="leading" constant="3" id="157"/>
|
||||||
|
<constraint firstItem="167" firstAttribute="centerY" secondItem="166" secondAttribute="centerY" id="158"/>
|
||||||
|
<constraint firstItem="167" firstAttribute="centerY" secondItem="141" secondAttribute="centerY" id="159"/>
|
||||||
|
<constraint firstItem="166" firstAttribute="leading" secondItem="167" secondAttribute="trailing" constant="8" symbolic="YES" id="160"/>
|
||||||
|
<constraint firstItem="155" firstAttribute="baseline" secondItem="156" secondAttribute="baseline" id="161"/>
|
||||||
|
<constraint firstItem="155" firstAttribute="top" secondItem="166" secondAttribute="top" id="162"/>
|
||||||
|
<constraint firstItem="155" firstAttribute="leading" secondItem="166" secondAttribute="trailing" constant="8" symbolic="YES" id="163"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="156" secondAttribute="trailing" constant="3" id="164"/>
|
||||||
|
<constraint firstItem="156" firstAttribute="leading" secondItem="155" secondAttribute="trailing" constant="8" symbolic="YES" id="165"/>
|
||||||
|
</constraints>
|
||||||
|
<connections>
|
||||||
|
<outlet property="imageView" destination="167" id="244"/>
|
||||||
|
<outlet property="removeButton" destination="156" id="247"/>
|
||||||
|
<outlet property="saveButton" destination="155" id="246"/>
|
||||||
|
<outlet property="textField" destination="166" id="245"/>
|
||||||
|
</connections>
|
||||||
|
</tableCellView>
|
||||||
|
</prototypeCellViews>
|
||||||
|
</tableColumn>
|
||||||
|
</tableColumns>
|
||||||
|
</tableView>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</clipView>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="100" id="KFw-Ma-DSd"/>
|
||||||
|
</constraints>
|
||||||
|
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="138">
|
||||||
|
<rect key="frame" x="1" y="147" width="52" height="16"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
</scroller>
|
||||||
|
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="139">
|
||||||
|
<rect key="frame" x="37" y="1" width="16" height="2"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
</scroller>
|
||||||
|
</scrollView>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="126" firstAttribute="top" secondItem="123" secondAttribute="top" constant="20" symbolic="YES" id="127"/>
|
||||||
|
<constraint firstItem="126" firstAttribute="leading" secondItem="123" secondAttribute="leading" constant="20" symbolic="YES" id="128"/>
|
||||||
|
<constraint firstItem="125" firstAttribute="leading" secondItem="123" secondAttribute="leading" constant="20" symbolic="YES" id="129"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="125" secondAttribute="trailing" constant="20" symbolic="YES" id="130"/>
|
||||||
|
<constraint firstItem="125" firstAttribute="top" secondItem="123" secondAttribute="top" constant="45" id="131"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="124" secondAttribute="trailing" constant="20" symbolic="YES" id="133"/>
|
||||||
|
<constraint firstItem="124" firstAttribute="baseline" secondItem="126" secondAttribute="baseline" id="134"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="125" secondAttribute="bottom" constant="26" id="281"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
<connections>
|
||||||
|
<outlet property="initialFirstResponder" destination="124" id="HDR-d9-QyI"/>
|
||||||
|
</connections>
|
||||||
|
</tabViewItem>
|
||||||
|
<tabViewItem label="Fields" identifier="" id="108">
|
||||||
|
<view key="view" id="178">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="293" height="503"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<button focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="179">
|
||||||
|
<rect key="frame" x="241" y="466" width="32" height="19"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="width" constant="32" id="231"/>
|
||||||
|
</constraints>
|
||||||
|
<buttonCell key="cell" type="roundRect" bezelStyle="roundedRect" image="NSAddTemplate" imagePosition="only" alignment="center" state="on" borderStyle="border" focusRingType="none" imageScaling="proportionallyDown" inset="2" id="232">
|
||||||
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="cellTitle"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="addCustomField:" target="-2" id="273"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="181">
|
||||||
|
<rect key="frame" x="18" y="469" width="79" height="14"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Custom Fields" id="190">
|
||||||
|
<font key="font" metaFont="smallSystem"/>
|
||||||
|
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<scrollView borderType="line" autohidesScrollers="YES" horizontalLineScroll="56" horizontalPageScroll="10" verticalLineScroll="56" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="180" customClass="HNHScrollView">
|
||||||
|
<rect key="frame" x="16" y="26" width="261" height="433"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="k8G-zp-BXZ">
|
||||||
|
<rect key="frame" x="1" y="1" width="259" height="431"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" selectionHighlightStyle="none" columnSelection="YES" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowHeight="54" rowSizeStyle="automatic" viewBased="YES" id="193">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="259" height="431"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<size key="intercellSpacing" width="3" height="2"/>
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
|
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<tableColumns>
|
||||||
|
<tableColumn width="256" minWidth="40" maxWidth="1000" id="194">
|
||||||
|
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left">
|
||||||
|
<font key="font" metaFont="smallSystem"/>
|
||||||
|
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" white="0.33333298560000002" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
|
</tableHeaderCell>
|
||||||
|
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" alignment="left" title="Text Cell" id="197">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||||
|
<prototypeCellViews>
|
||||||
|
<tableCellView identifier="SelectedCell" id="196" customClass="MPCustomFieldTableCellView">
|
||||||
|
<rect key="frame" x="1" y="1" width="256" height="54"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="199">
|
||||||
|
<rect key="frame" x="3" y="10" width="212" height="22"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="22" id="212"/>
|
||||||
|
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="50" id="213"/>
|
||||||
|
</constraints>
|
||||||
|
<textFieldCell key="cell" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="Value" drawsBackground="YES" id="214" customClass="HNHRoundedTextFieldCell">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="200">
|
||||||
|
<rect key="frame" x="1" y="40" width="256" height="14"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="14" id="210"/>
|
||||||
|
</constraints>
|
||||||
|
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" placeholderString="Title" id="211">
|
||||||
|
<font key="font" metaFont="smallSystem"/>
|
||||||
|
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="198">
|
||||||
|
<rect key="frame" x="223" y="11" width="32" height="19"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="width" constant="32" id="215"/>
|
||||||
|
</constraints>
|
||||||
|
<buttonCell key="cell" type="roundRect" bezelStyle="roundedRect" image="NSRemoveTemplate" imagePosition="overlaps" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="216">
|
||||||
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="cellTitle"/>
|
||||||
|
</buttonCell>
|
||||||
|
</button>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="200" firstAttribute="leading" secondItem="196" secondAttribute="leading" constant="3" id="201"/>
|
||||||
|
<constraint firstItem="200" firstAttribute="trailing" secondItem="198" secondAttribute="trailing" id="202"/>
|
||||||
|
<constraint firstItem="200" firstAttribute="top" secondItem="196" secondAttribute="top" id="203"/>
|
||||||
|
<constraint firstItem="199" firstAttribute="leading" secondItem="196" secondAttribute="leading" constant="3" id="204"/>
|
||||||
|
<constraint firstItem="199" firstAttribute="top" secondItem="200" secondAttribute="bottom" constant="8" symbolic="YES" id="205"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="199" secondAttribute="bottom" constant="10" id="206"/>
|
||||||
|
<constraint firstItem="198" firstAttribute="centerY" secondItem="199" secondAttribute="centerY" id="207"/>
|
||||||
|
<constraint firstItem="198" firstAttribute="leading" secondItem="199" secondAttribute="trailing" constant="8" symbolic="YES" id="208"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="198" secondAttribute="trailing" constant="1" id="209"/>
|
||||||
|
</constraints>
|
||||||
|
<connections>
|
||||||
|
<outlet property="labelTextField" destination="200" id="242"/>
|
||||||
|
<outlet property="removeButton" destination="198" id="243"/>
|
||||||
|
<outlet property="valueTextField" destination="199" id="241"/>
|
||||||
|
</connections>
|
||||||
|
</tableCellView>
|
||||||
|
<tableCellView identifier="NormalCell" id="195" customClass="MPCustomFieldTableCellView">
|
||||||
|
<rect key="frame" x="1" y="57" width="256" height="54"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="224">
|
||||||
|
<rect key="frame" x="3" y="10" width="250" height="22"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="22" id="226"/>
|
||||||
|
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="50" id="227"/>
|
||||||
|
</constraints>
|
||||||
|
<textFieldCell key="cell" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="Value" drawsBackground="YES" id="225" customClass="HNHRoundedTextFieldCell">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="223">
|
||||||
|
<rect key="frame" x="1" y="40" width="256" height="14"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="14" id="229"/>
|
||||||
|
<constraint firstAttribute="width" constant="252" id="230"/>
|
||||||
|
</constraints>
|
||||||
|
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" placeholderString="Title" id="228">
|
||||||
|
<font key="font" metaFont="smallSystem"/>
|
||||||
|
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="223" firstAttribute="leading" secondItem="195" secondAttribute="leading" constant="3" id="217"/>
|
||||||
|
<constraint firstItem="223" firstAttribute="top" secondItem="195" secondAttribute="top" id="218"/>
|
||||||
|
<constraint firstItem="224" firstAttribute="leading" secondItem="195" secondAttribute="leading" constant="3" id="219"/>
|
||||||
|
<constraint firstItem="224" firstAttribute="top" secondItem="223" secondAttribute="bottom" constant="8" symbolic="YES" id="220"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="224" secondAttribute="bottom" constant="10" id="221"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="224" secondAttribute="trailing" constant="3" id="222"/>
|
||||||
|
</constraints>
|
||||||
|
<connections>
|
||||||
|
<outlet property="labelTextField" destination="223" id="249"/>
|
||||||
|
<outlet property="valueTextField" destination="224" id="248"/>
|
||||||
|
</connections>
|
||||||
|
</tableCellView>
|
||||||
|
</prototypeCellViews>
|
||||||
|
</tableColumn>
|
||||||
|
</tableColumns>
|
||||||
|
</tableView>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</clipView>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="100" id="Car-Dj-KWv"/>
|
||||||
|
</constraints>
|
||||||
|
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="192">
|
||||||
|
<rect key="frame" x="1" y="119" width="223" height="15"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
</scroller>
|
||||||
|
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="191">
|
||||||
|
<rect key="frame" x="224" y="17" width="15" height="102"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
</scroller>
|
||||||
|
</scrollView>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="181" firstAttribute="top" secondItem="178" secondAttribute="top" constant="20" symbolic="YES" id="182"/>
|
||||||
|
<constraint firstItem="181" firstAttribute="leading" secondItem="178" secondAttribute="leading" constant="20" symbolic="YES" id="183"/>
|
||||||
|
<constraint firstItem="180" firstAttribute="leading" secondItem="178" secondAttribute="leading" constant="16" id="184" userLabel="Horizontal Space - Scroll View - Table View - View"/>
|
||||||
|
<constraint firstItem="180" firstAttribute="top" secondItem="179" secondAttribute="bottom" constant="8" symbolic="YES" id="185"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="180" secondAttribute="trailing" constant="16" id="186"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="179" secondAttribute="trailing" constant="20" symbolic="YES" id="188"/>
|
||||||
|
<constraint firstItem="179" firstAttribute="baseline" secondItem="181" secondAttribute="baseline" id="189"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="180" secondAttribute="bottom" constant="26" id="280"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
<connections>
|
||||||
|
<outlet property="initialFirstResponder" destination="179" id="wSu-XB-L1r"/>
|
||||||
|
</connections>
|
||||||
|
</tabViewItem>
|
||||||
|
<tabViewItem label="Autotype" identifier="" id="hK7-Dx-yjH">
|
||||||
|
<view key="view" id="2py-ab-4ZU">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="293" height="503"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
</view>
|
||||||
|
</tabViewItem>
|
||||||
|
</tabViewItems>
|
||||||
|
</tabView>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="83" firstAttribute="leading" secondItem="3" secondAttribute="leading" id="85"/>
|
||||||
|
<constraint firstItem="83" firstAttribute="trailing" secondItem="3" secondAttribute="trailing" id="86"/>
|
||||||
|
<constraint firstItem="82" firstAttribute="top" secondItem="3" secondAttribute="top" constant="5" id="89"/>
|
||||||
|
<constraint firstAttribute="centerX" secondItem="82" secondAttribute="centerX" id="90"/>
|
||||||
|
<constraint firstItem="83" firstAttribute="bottom" secondItem="3" secondAttribute="bottom" id="254"/>
|
||||||
|
<constraint firstItem="83" firstAttribute="top" secondItem="3" secondAttribute="top" constant="26" id="279"/>
|
||||||
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="82" secondAttribute="trailing" constant="20" symbolic="YES" id="4df-0Y-ggz"/>
|
||||||
|
<constraint firstItem="82" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="3" secondAttribute="leading" constant="20" symbolic="YES" id="zU6-5h-Swa"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
<customView translatesAutoresizingMaskIntoConstraints="NO" id="4" customClass="HNHScrollDocumentViewAdapter">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="252" height="398"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="52">
|
||||||
|
<rect key="frame" x="18" y="379" width="28" height="14"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Title" id="71">
|
||||||
|
<font key="font" metaFont="smallSystem"/>
|
||||||
|
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="53" customClass="HNHRoundedTextField">
|
||||||
|
<rect key="frame" x="20" y="349" width="212" height="22"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" lineBreakMode="truncatingTail" truncatesLastVisibleLine="YES" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" usesSingleLineMode="YES" id="70">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
<connections>
|
||||||
|
<outlet property="nextKeyView" destination="55" id="zdp-8L-2De"/>
|
||||||
|
</connections>
|
||||||
|
</textField>
|
||||||
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="54">
|
||||||
|
<rect key="frame" x="18" y="323" width="57" height="14"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Username" id="69">
|
||||||
|
<font key="font" metaFont="smallSystem"/>
|
||||||
|
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="55" customClass="HNHRoundedTextField">
|
||||||
|
<rect key="frame" x="20" y="293" width="212" height="22"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" lineBreakMode="truncatingTail" truncatesLastVisibleLine="YES" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" usesSingleLineMode="YES" id="68">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
<connections>
|
||||||
|
<outlet property="nextKeyView" destination="56" id="XBy-DG-08B"/>
|
||||||
|
</connections>
|
||||||
|
</textField>
|
||||||
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="56" customClass="HNHRoundedTextField">
|
||||||
|
<rect key="frame" x="20" y="237" width="212" height="22"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" lineBreakMode="truncatingTail" truncatesLastVisibleLine="YES" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" usesSingleLineMode="YES" id="67">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
<connections>
|
||||||
|
<outlet property="nextKeyView" destination="60" id="1Df-fB-wSk"/>
|
||||||
|
</connections>
|
||||||
|
</textField>
|
||||||
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="57">
|
||||||
|
<rect key="frame" x="18" y="267" width="25" height="14"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="URL" id="66">
|
||||||
|
<font key="font" metaFont="smallSystem"/>
|
||||||
|
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="58">
|
||||||
|
<rect key="frame" x="18" y="211" width="57" height="14"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Password" id="65">
|
||||||
|
<font key="font" metaFont="smallSystem"/>
|
||||||
|
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="59">
|
||||||
|
<rect key="frame" x="20" y="152" width="212" height="19"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="roundRect" title="Generate" bezelStyle="roundedRect" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="64">
|
||||||
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="cellTitle"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="_popUpPasswordGenerator:" target="-2" id="272"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<secureTextField verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="60" customClass="HNHRoundedSecureTextField">
|
||||||
|
<rect key="frame" x="20" y="179" width="173" height="24"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<secureTextFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" usesSingleLineMode="YES" id="63">
|
||||||
|
<font key="font" size="13" name="Menlo-Regular"/>
|
||||||
|
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<allowedInputSourceLocales>
|
||||||
|
<string>NSAllRomanInputSourcesLocaleIdentifier</string>
|
||||||
|
</allowedInputSourceLocales>
|
||||||
|
</secureTextFieldCell>
|
||||||
|
<connections>
|
||||||
|
<outlet property="nextKeyView" destination="61" id="5yc-GS-oVG"/>
|
||||||
|
</connections>
|
||||||
|
</secureTextField>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="61">
|
||||||
|
<rect key="frame" x="201" y="177" width="31" height="25"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" image="NSQuickLookTemplate" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="62">
|
||||||
|
<behavior key="behavior" pushIn="YES" changeContents="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<outlet property="nextKeyView" destination="59" id="ZRe-l9-kNq"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="7">
|
||||||
|
<rect key="frame" x="18" y="129" width="67" height="18"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="check" title="Expires" bezelStyle="regularSquare" imagePosition="left" lineBreakMode="truncatingMiddle" state="on" inset="2" id="78">
|
||||||
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<outlet property="nextKeyView" destination="8" id="SbJ-ZA-mXZ"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="8">
|
||||||
|
<rect key="frame" x="201" y="128" width="31" height="19"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="width" constant="31" id="Ped-nx-uti"/>
|
||||||
|
</constraints>
|
||||||
|
<buttonCell key="cell" type="roundRect" bezelStyle="roundedRect" image="NSActionTemplate" imagePosition="only" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="77">
|
||||||
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="cellTitle"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="pickExpiryDate:" target="-1" id="DQK-sp-SIL"/>
|
||||||
|
<outlet property="nextKeyView" destination="5" id="Yg4-Ua-HVe"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<tokenField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="5">
|
||||||
|
<rect key="frame" x="20" y="20" width="212" height="77"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="77" id="80"/>
|
||||||
|
</constraints>
|
||||||
|
<tokenFieldCell key="cell" selectable="YES" editable="YES" borderStyle="bezel" alignment="left" drawsBackground="YES" allowsEditingTextAttributes="YES" id="81">
|
||||||
|
<font key="font" metaFont="cellTitle"/>
|
||||||
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</tokenFieldCell>
|
||||||
|
</tokenField>
|
||||||
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="6">
|
||||||
|
<rect key="frame" x="18" y="105" width="29" height="14"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Tags" id="79">
|
||||||
|
<font key="font" metaFont="smallSystem"/>
|
||||||
|
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="52" firstAttribute="top" secondItem="4" secondAttribute="top" constant="5" id="11"/>
|
||||||
|
<constraint firstItem="52" firstAttribute="leading" secondItem="4" secondAttribute="leading" constant="20" symbolic="YES" id="12"/>
|
||||||
|
<constraint firstItem="53" firstAttribute="leading" secondItem="4" secondAttribute="leading" constant="20" symbolic="YES" id="13"/>
|
||||||
|
<constraint firstItem="53" firstAttribute="top" secondItem="52" secondAttribute="bottom" constant="8" symbolic="YES" id="14"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="53" secondAttribute="trailing" constant="20" symbolic="YES" id="15"/>
|
||||||
|
<constraint firstItem="54" firstAttribute="leading" secondItem="4" secondAttribute="leading" constant="20" symbolic="YES" id="16"/>
|
||||||
|
<constraint firstItem="54" firstAttribute="top" secondItem="53" secondAttribute="bottom" constant="12" id="17"/>
|
||||||
|
<constraint firstItem="55" firstAttribute="leading" secondItem="4" secondAttribute="leading" constant="20" symbolic="YES" id="18"/>
|
||||||
|
<constraint firstItem="55" firstAttribute="top" secondItem="54" secondAttribute="bottom" constant="8" symbolic="YES" id="19"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="55" secondAttribute="trailing" constant="20" symbolic="YES" id="20"/>
|
||||||
|
<constraint firstItem="57" firstAttribute="leading" secondItem="4" secondAttribute="leading" constant="20" symbolic="YES" id="21"/>
|
||||||
|
<constraint firstItem="57" firstAttribute="top" secondItem="55" secondAttribute="bottom" constant="12" id="22"/>
|
||||||
|
<constraint firstItem="56" firstAttribute="leading" secondItem="4" secondAttribute="leading" constant="20" symbolic="YES" id="23"/>
|
||||||
|
<constraint firstItem="56" firstAttribute="top" secondItem="57" secondAttribute="bottom" constant="8" symbolic="YES" id="24"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="56" secondAttribute="trailing" constant="20" symbolic="YES" id="25"/>
|
||||||
|
<constraint firstItem="58" firstAttribute="leading" secondItem="4" secondAttribute="leading" constant="20" symbolic="YES" id="26"/>
|
||||||
|
<constraint firstItem="58" firstAttribute="trailing" secondItem="54" secondAttribute="trailing" id="27"/>
|
||||||
|
<constraint firstItem="58" firstAttribute="top" secondItem="56" secondAttribute="bottom" constant="12" id="28"/>
|
||||||
|
<constraint firstItem="60" firstAttribute="top" secondItem="58" secondAttribute="bottom" constant="8" symbolic="YES" id="29"/>
|
||||||
|
<constraint firstItem="60" firstAttribute="leading" secondItem="4" secondAttribute="leading" constant="20" symbolic="YES" id="30"/>
|
||||||
|
<constraint firstItem="59" firstAttribute="top" secondItem="61" secondAttribute="bottom" constant="8" symbolic="YES" id="31"/>
|
||||||
|
<constraint firstItem="59" firstAttribute="top" secondItem="60" secondAttribute="bottom" constant="8" symbolic="YES" id="32"/>
|
||||||
|
<constraint firstItem="59" firstAttribute="leading" secondItem="4" secondAttribute="leading" constant="20" symbolic="YES" id="33"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="59" secondAttribute="trailing" constant="20" symbolic="YES" id="34"/>
|
||||||
|
<constraint firstItem="61" firstAttribute="leading" secondItem="60" secondAttribute="trailing" constant="8" symbolic="YES" id="40"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="61" secondAttribute="trailing" constant="20" symbolic="YES" id="41"/>
|
||||||
|
<constraint firstItem="7" firstAttribute="leading" secondItem="4" secondAttribute="leading" constant="20" symbolic="YES" id="42"/>
|
||||||
|
<constraint firstItem="7" firstAttribute="centerY" secondItem="8" secondAttribute="centerY" id="43"/>
|
||||||
|
<constraint firstItem="6" firstAttribute="top" secondItem="7" secondAttribute="bottom" constant="12" id="44"/>
|
||||||
|
<constraint firstItem="6" firstAttribute="leading" secondItem="4" secondAttribute="leading" constant="20" symbolic="YES" id="45"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="8" secondAttribute="trailing" constant="20" symbolic="YES" id="47"/>
|
||||||
|
<constraint firstItem="5" firstAttribute="top" secondItem="6" secondAttribute="bottom" constant="8" symbolic="YES" id="48"/>
|
||||||
|
<constraint firstItem="5" firstAttribute="leading" secondItem="4" secondAttribute="leading" constant="20" symbolic="YES" id="49"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="5" secondAttribute="trailing" constant="20" symbolic="YES" id="50"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="5" secondAttribute="bottom" constant="20" symbolic="YES" id="51"/>
|
||||||
|
<constraint firstItem="7" firstAttribute="top" secondItem="59" secondAttribute="bottom" constant="8" symbolic="YES" id="QPJ-9m-AzZ"/>
|
||||||
|
<constraint firstItem="8" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="7" secondAttribute="trailing" constant="8" symbolic="YES" id="Xa5-Ir-XNC"/>
|
||||||
|
</constraints>
|
||||||
|
</customView>
|
||||||
|
<view translatesAutoresizingMaskIntoConstraints="NO" id="zv7-wE-Bmg" customClass="HNHScrollDocumentViewAdapter">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="301" height="420"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<button translatesAutoresizingMaskIntoConstraints="NO" id="kdV-Xa-8p3">
|
||||||
|
<rect key="frame" x="18" y="394" width="125" height="18"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="14" id="KzZ-r3-FPC"/>
|
||||||
|
</constraints>
|
||||||
|
<buttonCell key="cell" type="check" title="Enable Autotype" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="9Nx-mE-DK3">
|
||||||
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
</button>
|
||||||
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="cDK-DM-F5z" customClass="HNHRoundedTextField">
|
||||||
|
<rect key="frame" x="20" y="340" width="261" height="22"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="Custom Entry Sequence" drawsBackground="YES" id="R2X-Ex-c6q">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="45R-v4-ywl">
|
||||||
|
<rect key="frame" x="18" y="370" width="107" height="14"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Autotype Sequence" id="bQ5-0E-h3O">
|
||||||
|
<font key="font" metaFont="smallSystem"/>
|
||||||
|
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<scrollView autohidesScrollers="YES" horizontalLineScroll="19" horizontalPageScroll="10" verticalLineScroll="19" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2YH-c2-Cwc">
|
||||||
|
<rect key="frame" x="20" y="152" width="261" height="150"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<clipView key="contentView" id="aDE-WT-YIv">
|
||||||
|
<rect key="frame" x="1" y="1" width="259" height="148"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" alternatingRowBackgroundColors="YES" columnReordering="NO" columnSelection="YES" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowSizeStyle="automatic" viewBased="YES" id="caM-L6-UHC">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="259" height="148"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<size key="intercellSpacing" width="3" height="2"/>
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
|
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<tableColumns>
|
||||||
|
<tableColumn width="256" minWidth="40" maxWidth="1000" id="Wdn-k1-39b">
|
||||||
|
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left">
|
||||||
|
<font key="font" metaFont="smallSystem"/>
|
||||||
|
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" white="0.33333298560000002" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
|
</tableHeaderCell>
|
||||||
|
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" alignment="left" title="Text Cell" id="ep5-bQ-cfZ">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||||
|
<prototypeCellViews>
|
||||||
|
<tableCellView identifier="WindowAssociationCell" id="jI3-t8-8bp">
|
||||||
|
<rect key="frame" x="1" y="1" width="256" height="17"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="JgP-7K-Ugw">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="256" height="17"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="dyA-lo-PGa">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
</subviews>
|
||||||
|
<connections>
|
||||||
|
<outlet property="textField" destination="JgP-7K-Ugw" id="EIY-vk-jbY"/>
|
||||||
|
</connections>
|
||||||
|
</tableCellView>
|
||||||
|
</prototypeCellViews>
|
||||||
|
</tableColumn>
|
||||||
|
</tableColumns>
|
||||||
|
</tableView>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</clipView>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="150" id="oXw-x1-wDN"/>
|
||||||
|
</constraints>
|
||||||
|
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="Y4S-4R-dwJ">
|
||||||
|
<rect key="frame" x="1" y="1" width="0.0" height="16"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
</scroller>
|
||||||
|
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="abK-py-K7A">
|
||||||
|
<rect key="frame" x="236" y="17" width="16" height="0.0"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
</scroller>
|
||||||
|
</scrollView>
|
||||||
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="iR3-FU-MYu">
|
||||||
|
<rect key="frame" x="18" y="314" width="115" height="14"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Window Associations" id="ned-1Q-FXA">
|
||||||
|
<font key="font" metaFont="smallSystem"/>
|
||||||
|
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<comboBox verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="rD3-Wn-ZFX">
|
||||||
|
<rect key="frame" x="20" y="72" width="264" height="26"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="1" id="VLq-Hn-aei">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</comboBoxCell>
|
||||||
|
</comboBox>
|
||||||
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="HQa-of-iwh">
|
||||||
|
<rect key="frame" x="18" y="104" width="73" height="14"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Window Title" id="bkO-Bk-AuX">
|
||||||
|
<font key="font" metaFont="smallSystem"/>
|
||||||
|
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="NjR-ea-Y7k" customClass="HNHRoundedTextField">
|
||||||
|
<rect key="frame" x="20" y="20" width="261" height="22"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="Custom Window Sequence" drawsBackground="YES" id="fW9-9p-wwR">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="z03-zW-GN3">
|
||||||
|
<rect key="frame" x="18" y="50" width="100" height="14"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Window Sequence" id="RQB-bR-MC0">
|
||||||
|
<font key="font" metaFont="smallSystem"/>
|
||||||
|
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Iy9-9L-Aev">
|
||||||
|
<rect key="frame" x="249" y="125" width="32" height="19"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="width" constant="32" id="Hrx-IM-m0t"/>
|
||||||
|
</constraints>
|
||||||
|
<buttonCell key="cell" type="roundRect" bezelStyle="roundedRect" image="NSAddTemplate" imagePosition="only" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="5J6-uD-iK6">
|
||||||
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="cellTitle"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="addWindowAssociation:" target="-2" id="U5q-Gf-tsI"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="AAj-Ak-z46">
|
||||||
|
<rect key="frame" x="209" y="125" width="32" height="19"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="width" constant="32" id="MWF-fs-BGy"/>
|
||||||
|
</constraints>
|
||||||
|
<buttonCell key="cell" type="roundRect" bezelStyle="roundedRect" image="NSRemoveTemplate" imagePosition="overlaps" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="86n-d4-lOW">
|
||||||
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="cellTitle"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="removeWindowAssociation:" target="-2" id="hAz-SO-hJ0"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="Iy9-9L-Aev" secondAttribute="trailing" constant="20" symbolic="YES" id="2tF-0S-Uh3"/>
|
||||||
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="HQa-of-iwh" secondAttribute="trailing" constant="20" symbolic="YES" id="49X-og-jiH"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="NjR-ea-Y7k" secondAttribute="bottom" constant="20" id="6O4-ax-cRS"/>
|
||||||
|
<constraint firstItem="iR3-FU-MYu" firstAttribute="leading" secondItem="zv7-wE-Bmg" secondAttribute="leading" constant="20" id="A9A-s9-Uxd"/>
|
||||||
|
<constraint firstItem="rD3-Wn-ZFX" firstAttribute="top" secondItem="HQa-of-iwh" secondAttribute="bottom" constant="8" symbolic="YES" id="CsD-L7-GWP"/>
|
||||||
|
<constraint firstItem="45R-v4-ywl" firstAttribute="leading" secondItem="zv7-wE-Bmg" secondAttribute="leading" constant="20" symbolic="YES" id="Edh-ho-Lv4"/>
|
||||||
|
<constraint firstItem="AAj-Ak-z46" firstAttribute="top" secondItem="2YH-c2-Cwc" secondAttribute="bottom" constant="8" symbolic="YES" id="IhT-0P-coR"/>
|
||||||
|
<constraint firstItem="z03-zW-GN3" firstAttribute="top" secondItem="rD3-Wn-ZFX" secondAttribute="bottom" constant="12" id="LUT-jk-X5v"/>
|
||||||
|
<constraint firstItem="2YH-c2-Cwc" firstAttribute="top" secondItem="iR3-FU-MYu" secondAttribute="bottom" constant="12" id="MCI-NO-05E"/>
|
||||||
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="2YH-c2-Cwc" secondAttribute="trailing" constant="20" symbolic="YES" id="O3C-Hb-iDd"/>
|
||||||
|
<constraint firstItem="HQa-of-iwh" firstAttribute="leading" secondItem="zv7-wE-Bmg" secondAttribute="leading" constant="20" symbolic="YES" id="UCa-5s-YxT"/>
|
||||||
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="z03-zW-GN3" secondAttribute="trailing" constant="20" symbolic="YES" id="W9F-Zp-Y1T"/>
|
||||||
|
<constraint firstItem="Iy9-9L-Aev" firstAttribute="top" secondItem="2YH-c2-Cwc" secondAttribute="bottom" constant="8" symbolic="YES" id="Xta-1Z-L0X"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="rD3-Wn-ZFX" secondAttribute="trailing" constant="20" symbolic="YES" id="Yey-Zd-zuV"/>
|
||||||
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="iR3-FU-MYu" secondAttribute="trailing" constant="20" symbolic="YES" id="ZsL-PU-USs"/>
|
||||||
|
<constraint firstItem="rD3-Wn-ZFX" firstAttribute="top" secondItem="AAj-Ak-z46" secondAttribute="bottom" constant="30" id="aiS-LW-IeX"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="NjR-ea-Y7k" secondAttribute="trailing" constant="20" symbolic="YES" id="cN1-2d-o3C"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="cDK-DM-F5z" secondAttribute="trailing" constant="20" id="fqg-py-wYA"/>
|
||||||
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="45R-v4-ywl" secondAttribute="trailing" constant="20" symbolic="YES" id="iU3-O5-N9P"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="2YH-c2-Cwc" secondAttribute="trailing" constant="20" symbolic="YES" id="joZ-Xp-GWa"/>
|
||||||
|
<constraint firstItem="2YH-c2-Cwc" firstAttribute="leading" secondItem="zv7-wE-Bmg" secondAttribute="leading" constant="20" symbolic="YES" id="l4D-Ut-RDl"/>
|
||||||
|
<constraint firstItem="rD3-Wn-ZFX" firstAttribute="leading" secondItem="zv7-wE-Bmg" secondAttribute="leading" constant="20" symbolic="YES" id="mOq-z9-gZ7"/>
|
||||||
|
<constraint firstItem="Iy9-9L-Aev" firstAttribute="leading" secondItem="AAj-Ak-z46" secondAttribute="trailing" constant="8" symbolic="YES" id="od1-7v-pgA"/>
|
||||||
|
<constraint firstItem="kdV-Xa-8p3" firstAttribute="leading" secondItem="zv7-wE-Bmg" secondAttribute="leading" constant="20" symbolic="YES" id="oy3-gl-jXr"/>
|
||||||
|
<constraint firstItem="cDK-DM-F5z" firstAttribute="top" secondItem="45R-v4-ywl" secondAttribute="bottom" constant="8" symbolic="YES" id="pPJ-Lz-E1A"/>
|
||||||
|
<constraint firstItem="z03-zW-GN3" firstAttribute="leading" secondItem="zv7-wE-Bmg" secondAttribute="leading" constant="20" symbolic="YES" id="qB3-Td-jrt"/>
|
||||||
|
<constraint firstItem="45R-v4-ywl" firstAttribute="top" secondItem="kdV-Xa-8p3" secondAttribute="bottom" constant="12" id="smb-K4-i2A"/>
|
||||||
|
<constraint firstItem="NjR-ea-Y7k" firstAttribute="leading" secondItem="zv7-wE-Bmg" secondAttribute="leading" constant="20" symbolic="YES" id="tD5-lh-PpM"/>
|
||||||
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="kdV-Xa-8p3" secondAttribute="trailing" constant="20" symbolic="YES" id="u88-Ma-UHS"/>
|
||||||
|
<constraint firstItem="iR3-FU-MYu" firstAttribute="top" secondItem="cDK-DM-F5z" secondAttribute="bottom" constant="12" id="w6Y-lj-fSi"/>
|
||||||
|
<constraint firstItem="kdV-Xa-8p3" firstAttribute="top" secondItem="zv7-wE-Bmg" secondAttribute="top" constant="10" id="xEZ-mY-WzX"/>
|
||||||
|
<constraint firstItem="cDK-DM-F5z" firstAttribute="leading" secondItem="zv7-wE-Bmg" secondAttribute="leading" constant="20" id="zPT-KL-YRT"/>
|
||||||
|
<constraint firstItem="NjR-ea-Y7k" firstAttribute="top" secondItem="z03-zW-GN3" secondAttribute="bottom" constant="8" symbolic="YES" id="zc6-0f-Uhk"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
</objects>
|
||||||
|
<resources>
|
||||||
|
<image name="26_FileSaveTemplate" width="16" height="16"/>
|
||||||
|
<image name="NSActionTemplate" width="14" height="14"/>
|
||||||
|
<image name="NSAddTemplate" width="8" height="8"/>
|
||||||
|
<image name="NSQuickLookTemplate" width="21" height="16"/>
|
||||||
|
<image name="NSRemoveTemplate" width="8" height="8"/>
|
||||||
|
</resources>
|
||||||
|
</document>
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,998 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
|
|
||||||
<data>
|
|
||||||
<int key="IBDocument.SystemTarget">1080</int>
|
|
||||||
<string key="IBDocument.SystemVersion">12E55</string>
|
|
||||||
<string key="IBDocument.InterfaceBuilderVersion">3084</string>
|
|
||||||
<string key="IBDocument.AppKitVersion">1187.39</string>
|
|
||||||
<string key="IBDocument.HIToolboxVersion">626.00</string>
|
|
||||||
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
|
|
||||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="NS.object.0">3084</string>
|
|
||||||
</object>
|
|
||||||
<array key="IBDocument.IntegratedClassDependencies">
|
|
||||||
<string>IBNSLayoutConstraint</string>
|
|
||||||
<string>NSButton</string>
|
|
||||||
<string>NSButtonCell</string>
|
|
||||||
<string>NSCustomObject</string>
|
|
||||||
<string>NSCustomView</string>
|
|
||||||
<string>NSSearchField</string>
|
|
||||||
<string>NSSearchFieldCell</string>
|
|
||||||
<string>NSTextField</string>
|
|
||||||
<string>NSTextFieldCell</string>
|
|
||||||
</array>
|
|
||||||
<array key="IBDocument.PluginDependencies">
|
|
||||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
</array>
|
|
||||||
<object class="NSMutableDictionary" key="IBDocument.Metadata">
|
|
||||||
<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
|
|
||||||
<integer value="1" key="NS.object.0"/>
|
|
||||||
</object>
|
|
||||||
<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
|
|
||||||
<object class="NSCustomObject" id="1001">
|
|
||||||
<string key="NSClassName">MPEntryViewController</string>
|
|
||||||
</object>
|
|
||||||
<object class="NSCustomObject" id="1003">
|
|
||||||
<string key="NSClassName">FirstResponder</string>
|
|
||||||
</object>
|
|
||||||
<object class="NSCustomObject" id="1004">
|
|
||||||
<string key="NSClassName">NSApplication</string>
|
|
||||||
</object>
|
|
||||||
<object class="NSCustomView" id="1005">
|
|
||||||
<reference key="NSNextResponder"/>
|
|
||||||
<int key="NSvFlags">268</int>
|
|
||||||
<array class="NSMutableArray" key="NSSubviews">
|
|
||||||
<object class="NSSearchField" id="498286707">
|
|
||||||
<reference key="NSNextResponder" ref="1005"/>
|
|
||||||
<int key="NSvFlags">268</int>
|
|
||||||
<string key="NSFrame">{{242, 6}, {100, 19}}</string>
|
|
||||||
<reference key="NSSuperview" ref="1005"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="113591000"/>
|
|
||||||
<string key="NSReuseIdentifierKey">_NS:9</string>
|
|
||||||
<bool key="NSEnabled">YES</bool>
|
|
||||||
<object class="NSSearchFieldCell" key="NSCell" id="456364439">
|
|
||||||
<int key="NSCellFlags">342884416</int>
|
|
||||||
<int key="NSCellFlags2">268567616</int>
|
|
||||||
<string key="NSContents"/>
|
|
||||||
<object class="NSFont" key="NSSupport" id="26">
|
|
||||||
<string key="NSName">LucidaGrande</string>
|
|
||||||
<double key="NSSize">11</double>
|
|
||||||
<int key="NSfFlags">3100</int>
|
|
||||||
</object>
|
|
||||||
<string key="NSCellIdentifier">_NS:9</string>
|
|
||||||
<reference key="NSControlView" ref="498286707"/>
|
|
||||||
<bool key="NSDrawsBackground">YES</bool>
|
|
||||||
<int key="NSTextBezelStyle">1</int>
|
|
||||||
<object class="NSColor" key="NSBackgroundColor">
|
|
||||||
<int key="NSColorSpace">6</int>
|
|
||||||
<string key="NSCatalogName">System</string>
|
|
||||||
<string key="NSColorName">textBackgroundColor</string>
|
|
||||||
<object class="NSColor" key="NSColor">
|
|
||||||
<int key="NSColorSpace">3</int>
|
|
||||||
<bytes key="NSWhite">MQA</bytes>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="NSColor" key="NSTextColor">
|
|
||||||
<int key="NSColorSpace">6</int>
|
|
||||||
<string key="NSCatalogName">System</string>
|
|
||||||
<string key="NSColorName">controlTextColor</string>
|
|
||||||
<object class="NSColor" key="NSColor">
|
|
||||||
<int key="NSColorSpace">3</int>
|
|
||||||
<bytes key="NSWhite">MAA</bytes>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="NSButtonCell" key="NSSearchButtonCell">
|
|
||||||
<int key="NSCellFlags">0</int>
|
|
||||||
<int key="NSCellFlags2">0</int>
|
|
||||||
<string key="NSContents">search</string>
|
|
||||||
<reference key="NSControlView" ref="498286707"/>
|
|
||||||
<string key="NSAction">_searchFieldSearch:</string>
|
|
||||||
<reference key="NSTarget" ref="456364439"/>
|
|
||||||
<int key="NSButtonFlags">138690560</int>
|
|
||||||
<int key="NSButtonFlags2">0</int>
|
|
||||||
<string key="NSKeyEquivalent"/>
|
|
||||||
<int key="NSPeriodicDelay">400</int>
|
|
||||||
<int key="NSPeriodicInterval">75</int>
|
|
||||||
</object>
|
|
||||||
<object class="NSButtonCell" key="NSCancelButtonCell">
|
|
||||||
<int key="NSCellFlags">0</int>
|
|
||||||
<int key="NSCellFlags2">0</int>
|
|
||||||
<string key="NSContents">clear</string>
|
|
||||||
<array class="NSMutableArray" key="NSAccessibilityOverriddenAttributes">
|
|
||||||
<dictionary class="NSMutableDictionary">
|
|
||||||
<string key="AXDescription">cancel</string>
|
|
||||||
<integer value="1" key="NSAccessibilityEncodedAttributesValueType"/>
|
|
||||||
</dictionary>
|
|
||||||
</array>
|
|
||||||
<reference key="NSControlView" ref="498286707"/>
|
|
||||||
<string key="NSAction">_searchFieldCancel:</string>
|
|
||||||
<reference key="NSTarget" ref="456364439"/>
|
|
||||||
<int key="NSButtonFlags">138690560</int>
|
|
||||||
<int key="NSButtonFlags2">0</int>
|
|
||||||
<string key="NSKeyEquivalent"/>
|
|
||||||
<int key="NSPeriodicDelay">400</int>
|
|
||||||
<int key="NSPeriodicInterval">75</int>
|
|
||||||
</object>
|
|
||||||
<int key="NSMaximumRecents">255</int>
|
|
||||||
</object>
|
|
||||||
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
|
|
||||||
</object>
|
|
||||||
<object class="NSButton" id="113591000">
|
|
||||||
<reference key="NSNextResponder" ref="1005"/>
|
|
||||||
<int key="NSvFlags">268</int>
|
|
||||||
<string key="NSFrame">{{350, 6}, {42, 17}}</string>
|
|
||||||
<reference key="NSSuperview" ref="1005"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<string key="NSReuseIdentifierKey">_NS:9</string>
|
|
||||||
<bool key="NSEnabled">YES</bool>
|
|
||||||
<object class="NSButtonCell" key="NSCell" id="791616402">
|
|
||||||
<int key="NSCellFlags">-2080374784</int>
|
|
||||||
<int key="NSCellFlags2">134348800</int>
|
|
||||||
<string key="NSContents">Done</string>
|
|
||||||
<reference key="NSSupport" ref="26"/>
|
|
||||||
<string key="NSCellIdentifier">_NS:9</string>
|
|
||||||
<reference key="NSControlView" ref="113591000"/>
|
|
||||||
<int key="NSButtonFlags">-2038153216</int>
|
|
||||||
<int key="NSButtonFlags2">164</int>
|
|
||||||
<string key="NSAlternateContents"/>
|
|
||||||
<string key="NSKeyEquivalent"/>
|
|
||||||
<int key="NSPeriodicDelay">400</int>
|
|
||||||
<int key="NSPeriodicInterval">75</int>
|
|
||||||
</object>
|
|
||||||
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
|
|
||||||
</object>
|
|
||||||
<object class="NSButton" id="340435610">
|
|
||||||
<reference key="NSNextResponder" ref="1005"/>
|
|
||||||
<int key="NSvFlags">268</int>
|
|
||||||
<string key="NSFrame">{{188, 6}, {38, 17}}</string>
|
|
||||||
<reference key="NSSuperview" ref="1005"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="498286707"/>
|
|
||||||
<string key="NSReuseIdentifierKey">_NS:9</string>
|
|
||||||
<bool key="NSEnabled">YES</bool>
|
|
||||||
<object class="NSButtonCell" key="NSCell" id="149174717">
|
|
||||||
<int key="NSCellFlags">-2080374784</int>
|
|
||||||
<int key="NSCellFlags2">134348800</int>
|
|
||||||
<string key="NSContents">URL</string>
|
|
||||||
<object class="NSFont" key="NSSupport" id="29">
|
|
||||||
<string key="NSName">LucidaGrande-Bold</string>
|
|
||||||
<double key="NSSize">12</double>
|
|
||||||
<int key="NSfFlags">16</int>
|
|
||||||
</object>
|
|
||||||
<string key="NSCellIdentifier">_NS:9</string>
|
|
||||||
<reference key="NSControlView" ref="340435610"/>
|
|
||||||
<int key="NSButtonFlags">-1232846848</int>
|
|
||||||
<int key="NSButtonFlags2">173</int>
|
|
||||||
<string key="NSAlternateContents"/>
|
|
||||||
<string key="NSKeyEquivalent"/>
|
|
||||||
<int key="NSPeriodicDelay">400</int>
|
|
||||||
<int key="NSPeriodicInterval">75</int>
|
|
||||||
</object>
|
|
||||||
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
|
|
||||||
</object>
|
|
||||||
<object class="NSButton" id="902262560">
|
|
||||||
<reference key="NSNextResponder" ref="1005"/>
|
|
||||||
<int key="NSvFlags">268</int>
|
|
||||||
<string key="NSFrame">{{104, 6}, {76, 17}}</string>
|
|
||||||
<reference key="NSSuperview" ref="1005"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="340435610"/>
|
|
||||||
<string key="NSReuseIdentifierKey">_NS:9</string>
|
|
||||||
<bool key="NSEnabled">YES</bool>
|
|
||||||
<object class="NSButtonCell" key="NSCell" id="397857591">
|
|
||||||
<int key="NSCellFlags">-2080374784</int>
|
|
||||||
<int key="NSCellFlags2">134348800</int>
|
|
||||||
<string key="NSContents">Username</string>
|
|
||||||
<reference key="NSSupport" ref="29"/>
|
|
||||||
<string key="NSCellIdentifier">_NS:9</string>
|
|
||||||
<reference key="NSControlView" ref="902262560"/>
|
|
||||||
<int key="NSButtonFlags">-1232846848</int>
|
|
||||||
<int key="NSButtonFlags2">173</int>
|
|
||||||
<string key="NSAlternateContents"/>
|
|
||||||
<string key="NSKeyEquivalent"/>
|
|
||||||
<int key="NSPeriodicDelay">400</int>
|
|
||||||
<int key="NSPeriodicInterval">75</int>
|
|
||||||
</object>
|
|
||||||
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
|
|
||||||
</object>
|
|
||||||
<object class="NSTextField" id="906526407">
|
|
||||||
<reference key="NSNextResponder" ref="1005"/>
|
|
||||||
<int key="NSvFlags">268</int>
|
|
||||||
<string key="NSFrame">{{5, 7}, {44, 14}}</string>
|
|
||||||
<reference key="NSSuperview" ref="1005"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="7073340"/>
|
|
||||||
<string key="NSReuseIdentifierKey">_NS:1535</string>
|
|
||||||
<bool key="NSEnabled">YES</bool>
|
|
||||||
<object class="NSTextFieldCell" key="NSCell" id="169652421">
|
|
||||||
<int key="NSCellFlags">68157504</int>
|
|
||||||
<int key="NSCellFlags2">272761856</int>
|
|
||||||
<string key="NSContents">Search:</string>
|
|
||||||
<object class="NSFont" key="NSSupport">
|
|
||||||
<string key="NSName">LucidaGrande-Bold</string>
|
|
||||||
<double key="NSSize">11</double>
|
|
||||||
<int key="NSfFlags">3357</int>
|
|
||||||
</object>
|
|
||||||
<string key="NSCellIdentifier">_NS:1535</string>
|
|
||||||
<reference key="NSControlView" ref="906526407"/>
|
|
||||||
<object class="NSColor" key="NSBackgroundColor">
|
|
||||||
<int key="NSColorSpace">6</int>
|
|
||||||
<string key="NSCatalogName">System</string>
|
|
||||||
<string key="NSColorName">controlColor</string>
|
|
||||||
<object class="NSColor" key="NSColor">
|
|
||||||
<int key="NSColorSpace">3</int>
|
|
||||||
<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="NSColor" key="NSTextColor">
|
|
||||||
<int key="NSColorSpace">6</int>
|
|
||||||
<string key="NSCatalogName">System</string>
|
|
||||||
<string key="NSColorName">disabledControlTextColor</string>
|
|
||||||
<object class="NSColor" key="NSColor">
|
|
||||||
<int key="NSColorSpace">3</int>
|
|
||||||
<bytes key="NSWhite">MC4zMzMzMzMzMzMzAA</bytes>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
|
|
||||||
</object>
|
|
||||||
<object class="NSButton" id="7073340">
|
|
||||||
<reference key="NSNextResponder" ref="1005"/>
|
|
||||||
<int key="NSvFlags">268</int>
|
|
||||||
<string key="NSFrame">{{54, 5}, {42, 19}}</string>
|
|
||||||
<reference key="NSSuperview" ref="1005"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="902262560"/>
|
|
||||||
<string key="NSReuseIdentifierKey">_NS:9</string>
|
|
||||||
<bool key="NSEnabled">YES</bool>
|
|
||||||
<object class="NSButtonCell" key="NSCell" id="819315342">
|
|
||||||
<int key="NSCellFlags">-2080374784</int>
|
|
||||||
<int key="NSCellFlags2">134348800</int>
|
|
||||||
<string key="NSContents">Title</string>
|
|
||||||
<reference key="NSSupport" ref="29"/>
|
|
||||||
<string key="NSCellIdentifier">_NS:9</string>
|
|
||||||
<reference key="NSControlView" ref="7073340"/>
|
|
||||||
<int key="NSButtonFlags">-1232846848</int>
|
|
||||||
<int key="NSButtonFlags2">173</int>
|
|
||||||
<string key="NSAlternateContents"/>
|
|
||||||
<string key="NSKeyEquivalent"/>
|
|
||||||
<int key="NSPeriodicDelay">400</int>
|
|
||||||
<int key="NSPeriodicInterval">75</int>
|
|
||||||
</object>
|
|
||||||
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<string key="NSFrameSize">{400, 30}</string>
|
|
||||||
<reference key="NSSuperview"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="906526407"/>
|
|
||||||
<string key="NSClassName">HNHGradientView</string>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<object class="IBObjectContainer" key="IBDocument.Objects">
|
|
||||||
<array class="NSMutableArray" key="connectionRecords">
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBOutletConnection" key="connection">
|
|
||||||
<string key="label">filterBar</string>
|
|
||||||
<reference key="source" ref="1001"/>
|
|
||||||
<reference key="destination" ref="1005"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">48</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBOutletConnection" key="connection">
|
|
||||||
<string key="label">filterTitleButton</string>
|
|
||||||
<reference key="source" ref="1001"/>
|
|
||||||
<reference key="destination" ref="7073340"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">57</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBOutletConnection" key="connection">
|
|
||||||
<string key="label">filterUsernameButton</string>
|
|
||||||
<reference key="source" ref="1001"/>
|
|
||||||
<reference key="destination" ref="902262560"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">58</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBOutletConnection" key="connection">
|
|
||||||
<string key="label">filterURLButton</string>
|
|
||||||
<reference key="source" ref="1001"/>
|
|
||||||
<reference key="destination" ref="340435610"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">59</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBOutletConnection" key="connection">
|
|
||||||
<string key="label">filterLabelTextField</string>
|
|
||||||
<reference key="source" ref="1001"/>
|
|
||||||
<reference key="destination" ref="906526407"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">60</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBActionConnection" key="connection">
|
|
||||||
<string key="label">clearFilter:</string>
|
|
||||||
<reference key="source" ref="1001"/>
|
|
||||||
<reference key="destination" ref="113591000"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">75</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBOutletConnection" key="connection">
|
|
||||||
<string key="label">filterDoneButton</string>
|
|
||||||
<reference key="source" ref="1001"/>
|
|
||||||
<reference key="destination" ref="113591000"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">76</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBActionConnection" key="connection">
|
|
||||||
<string key="label">_toggleFilterSpace:</string>
|
|
||||||
<reference key="source" ref="1001"/>
|
|
||||||
<reference key="destination" ref="902262560"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">77</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBActionConnection" key="connection">
|
|
||||||
<string key="label">_toggleFilterSpace:</string>
|
|
||||||
<reference key="source" ref="1001"/>
|
|
||||||
<reference key="destination" ref="340435610"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">78</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBActionConnection" key="connection">
|
|
||||||
<string key="label">_toggleFilterSpace:</string>
|
|
||||||
<reference key="source" ref="1001"/>
|
|
||||||
<reference key="destination" ref="7073340"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">79</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBOutletConnection" key="connection">
|
|
||||||
<string key="label">filterSearchField</string>
|
|
||||||
<reference key="source" ref="1001"/>
|
|
||||||
<reference key="destination" ref="498286707"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">95</int>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<object class="IBMutableOrderedSet" key="objectRecords">
|
|
||||||
<array key="orderedObjects">
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">0</int>
|
|
||||||
<array key="object" id="0"/>
|
|
||||||
<reference key="children" ref="1000"/>
|
|
||||||
<nil key="parent"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">-2</int>
|
|
||||||
<reference key="object" ref="1001"/>
|
|
||||||
<reference key="parent" ref="0"/>
|
|
||||||
<string key="objectName">File's Owner</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">-1</int>
|
|
||||||
<reference key="object" ref="1003"/>
|
|
||||||
<reference key="parent" ref="0"/>
|
|
||||||
<string key="objectName">First Responder</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">-3</int>
|
|
||||||
<reference key="object" ref="1004"/>
|
|
||||||
<reference key="parent" ref="0"/>
|
|
||||||
<string key="objectName">Application</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">1</int>
|
|
||||||
<reference key="object" ref="1005"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<object class="IBNSLayoutConstraint" id="548170831">
|
|
||||||
<reference key="firstItem" ref="113591000"/>
|
|
||||||
<int key="firstAttribute">5</int>
|
|
||||||
<int key="relation">0</int>
|
|
||||||
<reference key="secondItem" ref="498286707"/>
|
|
||||||
<int key="secondAttribute">6</int>
|
|
||||||
<float key="multiplier">1</float>
|
|
||||||
<object class="IBNSLayoutSymbolicConstant" key="constant">
|
|
||||||
<double key="value">8</double>
|
|
||||||
</object>
|
|
||||||
<float key="priority">1000</float>
|
|
||||||
<reference key="containingView" ref="1005"/>
|
|
||||||
<int key="scoringType">9</int>
|
|
||||||
<float key="scoringTypeFloat">40</float>
|
|
||||||
<int key="contentType">3</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBNSLayoutConstraint" id="533969344">
|
|
||||||
<reference key="firstItem" ref="1005"/>
|
|
||||||
<int key="firstAttribute">10</int>
|
|
||||||
<int key="relation">0</int>
|
|
||||||
<reference key="secondItem" ref="113591000"/>
|
|
||||||
<int key="secondAttribute">10</int>
|
|
||||||
<float key="multiplier">1</float>
|
|
||||||
<object class="IBLayoutConstant" key="constant">
|
|
||||||
<double key="value">0.0</double>
|
|
||||||
</object>
|
|
||||||
<float key="priority">1000</float>
|
|
||||||
<reference key="containingView" ref="1005"/>
|
|
||||||
<int key="scoringType">9</int>
|
|
||||||
<float key="scoringTypeFloat">40</float>
|
|
||||||
<int key="contentType">2</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBNSLayoutConstraint" id="207946731">
|
|
||||||
<reference key="firstItem" ref="1005"/>
|
|
||||||
<int key="firstAttribute">6</int>
|
|
||||||
<int key="relation">0</int>
|
|
||||||
<reference key="secondItem" ref="113591000"/>
|
|
||||||
<int key="secondAttribute">6</int>
|
|
||||||
<float key="multiplier">1</float>
|
|
||||||
<object class="IBLayoutConstant" key="constant">
|
|
||||||
<double key="value">8</double>
|
|
||||||
</object>
|
|
||||||
<float key="priority">1000</float>
|
|
||||||
<reference key="containingView" ref="1005"/>
|
|
||||||
<int key="scoringType">9</int>
|
|
||||||
<float key="scoringTypeFloat">40</float>
|
|
||||||
<int key="contentType">3</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBNSLayoutConstraint" id="312382951">
|
|
||||||
<reference key="firstItem" ref="498286707"/>
|
|
||||||
<int key="firstAttribute">5</int>
|
|
||||||
<int key="relation">1</int>
|
|
||||||
<reference key="secondItem" ref="340435610"/>
|
|
||||||
<int key="secondAttribute">6</int>
|
|
||||||
<float key="multiplier">1</float>
|
|
||||||
<object class="IBNSLayoutSymbolicConstant" key="constant">
|
|
||||||
<double key="value">8</double>
|
|
||||||
</object>
|
|
||||||
<float key="priority">1000</float>
|
|
||||||
<reference key="containingView" ref="1005"/>
|
|
||||||
<int key="scoringType">9</int>
|
|
||||||
<float key="scoringTypeFloat">40</float>
|
|
||||||
<int key="contentType">3</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBNSLayoutConstraint" id="120785100">
|
|
||||||
<reference key="firstItem" ref="1005"/>
|
|
||||||
<int key="firstAttribute">10</int>
|
|
||||||
<int key="relation">0</int>
|
|
||||||
<reference key="secondItem" ref="498286707"/>
|
|
||||||
<int key="secondAttribute">10</int>
|
|
||||||
<float key="multiplier">1</float>
|
|
||||||
<object class="IBLayoutConstant" key="constant">
|
|
||||||
<double key="value">0.0</double>
|
|
||||||
</object>
|
|
||||||
<float key="priority">1000</float>
|
|
||||||
<reference key="containingView" ref="1005"/>
|
|
||||||
<int key="scoringType">9</int>
|
|
||||||
<float key="scoringTypeFloat">40</float>
|
|
||||||
<int key="contentType">2</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBNSLayoutConstraint" id="959342076">
|
|
||||||
<reference key="firstItem" ref="1005"/>
|
|
||||||
<int key="firstAttribute">10</int>
|
|
||||||
<int key="relation">0</int>
|
|
||||||
<reference key="secondItem" ref="340435610"/>
|
|
||||||
<int key="secondAttribute">10</int>
|
|
||||||
<float key="multiplier">1</float>
|
|
||||||
<object class="IBLayoutConstant" key="constant">
|
|
||||||
<double key="value">0.0</double>
|
|
||||||
</object>
|
|
||||||
<float key="priority">1000</float>
|
|
||||||
<reference key="containingView" ref="1005"/>
|
|
||||||
<int key="scoringType">9</int>
|
|
||||||
<float key="scoringTypeFloat">40</float>
|
|
||||||
<int key="contentType">2</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBNSLayoutConstraint" id="112675040">
|
|
||||||
<reference key="firstItem" ref="340435610"/>
|
|
||||||
<int key="firstAttribute">5</int>
|
|
||||||
<int key="relation">0</int>
|
|
||||||
<reference key="secondItem" ref="902262560"/>
|
|
||||||
<int key="secondAttribute">6</int>
|
|
||||||
<float key="multiplier">1</float>
|
|
||||||
<object class="IBNSLayoutSymbolicConstant" key="constant">
|
|
||||||
<double key="value">8</double>
|
|
||||||
</object>
|
|
||||||
<float key="priority">1000</float>
|
|
||||||
<reference key="containingView" ref="1005"/>
|
|
||||||
<int key="scoringType">9</int>
|
|
||||||
<float key="scoringTypeFloat">40</float>
|
|
||||||
<int key="contentType">3</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBNSLayoutConstraint" id="160109106">
|
|
||||||
<reference key="firstItem" ref="902262560"/>
|
|
||||||
<int key="firstAttribute">11</int>
|
|
||||||
<int key="relation">0</int>
|
|
||||||
<reference key="secondItem" ref="340435610"/>
|
|
||||||
<int key="secondAttribute">11</int>
|
|
||||||
<float key="multiplier">1</float>
|
|
||||||
<object class="IBLayoutConstant" key="constant">
|
|
||||||
<double key="value">0.0</double>
|
|
||||||
</object>
|
|
||||||
<float key="priority">1000</float>
|
|
||||||
<reference key="containingView" ref="1005"/>
|
|
||||||
<int key="scoringType">6</int>
|
|
||||||
<float key="scoringTypeFloat">24</float>
|
|
||||||
<int key="contentType">2</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBNSLayoutConstraint" id="900015786">
|
|
||||||
<reference key="firstItem" ref="1005"/>
|
|
||||||
<int key="firstAttribute">10</int>
|
|
||||||
<int key="relation">0</int>
|
|
||||||
<reference key="secondItem" ref="902262560"/>
|
|
||||||
<int key="secondAttribute">10</int>
|
|
||||||
<float key="multiplier">1</float>
|
|
||||||
<object class="IBLayoutConstant" key="constant">
|
|
||||||
<double key="value">0.0</double>
|
|
||||||
</object>
|
|
||||||
<float key="priority">1000</float>
|
|
||||||
<reference key="containingView" ref="1005"/>
|
|
||||||
<int key="scoringType">9</int>
|
|
||||||
<float key="scoringTypeFloat">40</float>
|
|
||||||
<int key="contentType">2</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBNSLayoutConstraint" id="1039511012">
|
|
||||||
<reference key="firstItem" ref="902262560"/>
|
|
||||||
<int key="firstAttribute">5</int>
|
|
||||||
<int key="relation">0</int>
|
|
||||||
<reference key="secondItem" ref="7073340"/>
|
|
||||||
<int key="secondAttribute">6</int>
|
|
||||||
<float key="multiplier">1</float>
|
|
||||||
<object class="IBNSLayoutSymbolicConstant" key="constant">
|
|
||||||
<double key="value">8</double>
|
|
||||||
</object>
|
|
||||||
<float key="priority">1000</float>
|
|
||||||
<reference key="containingView" ref="1005"/>
|
|
||||||
<int key="scoringType">9</int>
|
|
||||||
<float key="scoringTypeFloat">40</float>
|
|
||||||
<int key="contentType">3</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBNSLayoutConstraint" id="441665485">
|
|
||||||
<reference key="firstItem" ref="1005"/>
|
|
||||||
<int key="firstAttribute">10</int>
|
|
||||||
<int key="relation">0</int>
|
|
||||||
<reference key="secondItem" ref="7073340"/>
|
|
||||||
<int key="secondAttribute">10</int>
|
|
||||||
<float key="multiplier">1</float>
|
|
||||||
<object class="IBLayoutConstant" key="constant">
|
|
||||||
<double key="value">0.0</double>
|
|
||||||
</object>
|
|
||||||
<float key="priority">1000</float>
|
|
||||||
<reference key="containingView" ref="1005"/>
|
|
||||||
<int key="scoringType">9</int>
|
|
||||||
<float key="scoringTypeFloat">40</float>
|
|
||||||
<int key="contentType">2</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBNSLayoutConstraint" id="181006535">
|
|
||||||
<reference key="firstItem" ref="7073340"/>
|
|
||||||
<int key="firstAttribute">5</int>
|
|
||||||
<int key="relation">0</int>
|
|
||||||
<reference key="secondItem" ref="906526407"/>
|
|
||||||
<int key="secondAttribute">6</int>
|
|
||||||
<float key="multiplier">1</float>
|
|
||||||
<object class="IBNSLayoutSymbolicConstant" key="constant">
|
|
||||||
<double key="value">8</double>
|
|
||||||
</object>
|
|
||||||
<float key="priority">1000</float>
|
|
||||||
<reference key="containingView" ref="1005"/>
|
|
||||||
<int key="scoringType">9</int>
|
|
||||||
<float key="scoringTypeFloat">40</float>
|
|
||||||
<int key="contentType">3</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBNSLayoutConstraint" id="274700398">
|
|
||||||
<reference key="firstItem" ref="906526407"/>
|
|
||||||
<int key="firstAttribute">4</int>
|
|
||||||
<int key="relation">0</int>
|
|
||||||
<reference key="secondItem" ref="902262560"/>
|
|
||||||
<int key="secondAttribute">4</int>
|
|
||||||
<float key="multiplier">1</float>
|
|
||||||
<object class="IBLayoutConstant" key="constant">
|
|
||||||
<double key="value">0.0</double>
|
|
||||||
</object>
|
|
||||||
<float key="priority">1000</float>
|
|
||||||
<reference key="containingView" ref="1005"/>
|
|
||||||
<int key="scoringType">6</int>
|
|
||||||
<float key="scoringTypeFloat">24</float>
|
|
||||||
<int key="contentType">2</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBNSLayoutConstraint" id="201173489">
|
|
||||||
<reference key="firstItem" ref="906526407"/>
|
|
||||||
<int key="firstAttribute">11</int>
|
|
||||||
<int key="relation">0</int>
|
|
||||||
<reference key="secondItem" ref="7073340"/>
|
|
||||||
<int key="secondAttribute">11</int>
|
|
||||||
<float key="multiplier">1</float>
|
|
||||||
<object class="IBLayoutConstant" key="constant">
|
|
||||||
<double key="value">0.0</double>
|
|
||||||
</object>
|
|
||||||
<float key="priority">1000</float>
|
|
||||||
<reference key="containingView" ref="1005"/>
|
|
||||||
<int key="scoringType">6</int>
|
|
||||||
<float key="scoringTypeFloat">24</float>
|
|
||||||
<int key="contentType">2</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBNSLayoutConstraint" id="777287174">
|
|
||||||
<reference key="firstItem" ref="906526407"/>
|
|
||||||
<int key="firstAttribute">5</int>
|
|
||||||
<int key="relation">0</int>
|
|
||||||
<reference key="secondItem" ref="1005"/>
|
|
||||||
<int key="secondAttribute">5</int>
|
|
||||||
<float key="multiplier">1</float>
|
|
||||||
<object class="IBLayoutConstant" key="constant">
|
|
||||||
<double key="value">8</double>
|
|
||||||
</object>
|
|
||||||
<float key="priority">1000</float>
|
|
||||||
<reference key="containingView" ref="1005"/>
|
|
||||||
<int key="scoringType">9</int>
|
|
||||||
<float key="scoringTypeFloat">40</float>
|
|
||||||
<int key="contentType">3</int>
|
|
||||||
</object>
|
|
||||||
<reference ref="7073340"/>
|
|
||||||
<reference ref="906526407"/>
|
|
||||||
<reference ref="902262560"/>
|
|
||||||
<reference ref="340435610"/>
|
|
||||||
<reference ref="113591000"/>
|
|
||||||
<reference ref="498286707"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="0"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">2</int>
|
|
||||||
<reference key="object" ref="7073340"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="819315342"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="1005"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">3</int>
|
|
||||||
<reference key="object" ref="819315342"/>
|
|
||||||
<reference key="parent" ref="7073340"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">6</int>
|
|
||||||
<reference key="object" ref="906526407"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="169652421"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="1005"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">7</int>
|
|
||||||
<reference key="object" ref="169652421"/>
|
|
||||||
<reference key="parent" ref="906526407"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">30</int>
|
|
||||||
<reference key="object" ref="777287174"/>
|
|
||||||
<reference key="parent" ref="1005"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">32</int>
|
|
||||||
<reference key="object" ref="181006535"/>
|
|
||||||
<reference key="parent" ref="1005"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">34</int>
|
|
||||||
<reference key="object" ref="201173489"/>
|
|
||||||
<reference key="parent" ref="1005"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">35</int>
|
|
||||||
<reference key="object" ref="902262560"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="397857591"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="1005"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">36</int>
|
|
||||||
<reference key="object" ref="397857591"/>
|
|
||||||
<reference key="parent" ref="902262560"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">38</int>
|
|
||||||
<reference key="object" ref="1039511012"/>
|
|
||||||
<reference key="parent" ref="1005"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">40</int>
|
|
||||||
<reference key="object" ref="340435610"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="149174717"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="1005"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">41</int>
|
|
||||||
<reference key="object" ref="149174717"/>
|
|
||||||
<reference key="parent" ref="340435610"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">43</int>
|
|
||||||
<reference key="object" ref="112675040"/>
|
|
||||||
<reference key="parent" ref="1005"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">54</int>
|
|
||||||
<reference key="object" ref="959342076"/>
|
|
||||||
<reference key="parent" ref="1005"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">55</int>
|
|
||||||
<reference key="object" ref="441665485"/>
|
|
||||||
<reference key="parent" ref="1005"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">56</int>
|
|
||||||
<reference key="object" ref="900015786"/>
|
|
||||||
<reference key="parent" ref="1005"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">61</int>
|
|
||||||
<reference key="object" ref="113591000"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="791616402"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="1005"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">62</int>
|
|
||||||
<reference key="object" ref="791616402"/>
|
|
||||||
<reference key="parent" ref="113591000"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">66</int>
|
|
||||||
<reference key="object" ref="274700398"/>
|
|
||||||
<reference key="parent" ref="1005"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">69</int>
|
|
||||||
<reference key="object" ref="533969344"/>
|
|
||||||
<reference key="parent" ref="1005"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">73</int>
|
|
||||||
<reference key="object" ref="160109106"/>
|
|
||||||
<reference key="parent" ref="1005"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">80</int>
|
|
||||||
<reference key="object" ref="498286707"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="456364439"/>
|
|
||||||
<object class="IBNSLayoutConstraint" id="817657248">
|
|
||||||
<reference key="firstItem" ref="498286707"/>
|
|
||||||
<int key="firstAttribute">7</int>
|
|
||||||
<int key="relation">0</int>
|
|
||||||
<nil key="secondItem"/>
|
|
||||||
<int key="secondAttribute">0</int>
|
|
||||||
<float key="multiplier">1</float>
|
|
||||||
<object class="IBLayoutConstant" key="constant">
|
|
||||||
<double key="value">100</double>
|
|
||||||
</object>
|
|
||||||
<float key="priority">1000</float>
|
|
||||||
<reference key="containingView" ref="498286707"/>
|
|
||||||
<int key="scoringType">3</int>
|
|
||||||
<float key="scoringTypeFloat">9</float>
|
|
||||||
<int key="contentType">1</int>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="1005"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">81</int>
|
|
||||||
<reference key="object" ref="456364439"/>
|
|
||||||
<reference key="parent" ref="498286707"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">86</int>
|
|
||||||
<reference key="object" ref="120785100"/>
|
|
||||||
<reference key="parent" ref="1005"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">87</int>
|
|
||||||
<reference key="object" ref="312382951"/>
|
|
||||||
<reference key="parent" ref="1005"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">83</int>
|
|
||||||
<reference key="object" ref="548170831"/>
|
|
||||||
<reference key="parent" ref="1005"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">63</int>
|
|
||||||
<reference key="object" ref="207946731"/>
|
|
||||||
<reference key="parent" ref="1005"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">93</int>
|
|
||||||
<reference key="object" ref="817657248"/>
|
|
||||||
<reference key="parent" ref="498286707"/>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
</object>
|
|
||||||
<dictionary class="NSMutableDictionary" key="flattenedProperties">
|
|
||||||
<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="-3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<array class="NSMutableArray" key="1.IBNSViewMetadataConstraints">
|
|
||||||
<reference ref="777287174"/>
|
|
||||||
<reference ref="201173489"/>
|
|
||||||
<reference ref="274700398"/>
|
|
||||||
<reference ref="181006535"/>
|
|
||||||
<reference ref="441665485"/>
|
|
||||||
<reference ref="1039511012"/>
|
|
||||||
<reference ref="900015786"/>
|
|
||||||
<reference ref="160109106"/>
|
|
||||||
<reference ref="112675040"/>
|
|
||||||
<reference ref="959342076"/>
|
|
||||||
<reference ref="120785100"/>
|
|
||||||
<reference ref="312382951"/>
|
|
||||||
<reference ref="207946731"/>
|
|
||||||
<reference ref="533969344"/>
|
|
||||||
<reference ref="548170831"/>
|
|
||||||
</array>
|
|
||||||
<boolean value="NO" key="1.IBNSViewMetadataLastInspectedTranslatesAutoresizingMaskIntoConstraints"/>
|
|
||||||
<boolean value="NO" key="1.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
|
|
||||||
<string key="1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<boolean value="NO" key="2.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
|
|
||||||
<string key="2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="30.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="32.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="34.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<boolean value="NO" key="35.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
|
|
||||||
<string key="35.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="36.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="38.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<boolean value="NO" key="40.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
|
|
||||||
<string key="40.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="41.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="43.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="54.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="55.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="56.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<boolean value="NO" key="6.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
|
|
||||||
<string key="6.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<boolean value="NO" key="61.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
|
|
||||||
<string key="61.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="62.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="63.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="66.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="69.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="7.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="73.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<array key="80.IBNSViewMetadataConstraints">
|
|
||||||
<reference ref="817657248"/>
|
|
||||||
</array>
|
|
||||||
<boolean value="NO" key="80.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
|
|
||||||
<string key="80.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="81.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="83.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="86.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="87.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="93.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
|
|
||||||
<nil key="activeLocalization"/>
|
|
||||||
<dictionary class="NSMutableDictionary" key="localizations"/>
|
|
||||||
<nil key="sourceID"/>
|
|
||||||
<int key="maxID">95</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBClassDescriber" key="IBDocument.Classes">
|
|
||||||
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
|
|
||||||
<object class="IBPartialClassDescription">
|
|
||||||
<string key="className">HNHGradientView</string>
|
|
||||||
<string key="superclassName">NSView</string>
|
|
||||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
|
||||||
<string key="majorKey">IBProjectSource</string>
|
|
||||||
<string key="minorKey">./Classes/HNHGradientView.h</string>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="IBPartialClassDescription">
|
|
||||||
<string key="className">MPEntryViewController</string>
|
|
||||||
<string key="superclassName">MPViewController</string>
|
|
||||||
<dictionary class="NSMutableDictionary" key="outlets">
|
|
||||||
<string key="addEntryButton">NSButton</string>
|
|
||||||
<string key="bottomBar">HNHGradientView</string>
|
|
||||||
<string key="entryCountTextField">NSTextField</string>
|
|
||||||
<string key="entryTable">NSTableView</string>
|
|
||||||
<string key="filterBar">NSView</string>
|
|
||||||
<string key="filterDoneButton">NSButton</string>
|
|
||||||
<string key="filterLabelTextField">NSTextField</string>
|
|
||||||
<string key="filterSearchField">NSSearchField</string>
|
|
||||||
<string key="filterTitleButton">NSButton</string>
|
|
||||||
<string key="filterURLButton">NSButton</string>
|
|
||||||
<string key="filterUsernameButton">NSButton</string>
|
|
||||||
<string key="tableToTop">NSLayoutConstraint</string>
|
|
||||||
<string key="trashBar">HNHGradientView</string>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
|
|
||||||
<object class="IBToOneOutletInfo" key="addEntryButton">
|
|
||||||
<string key="name">addEntryButton</string>
|
|
||||||
<string key="candidateClassName">NSButton</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBToOneOutletInfo" key="bottomBar">
|
|
||||||
<string key="name">bottomBar</string>
|
|
||||||
<string key="candidateClassName">HNHGradientView</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBToOneOutletInfo" key="entryCountTextField">
|
|
||||||
<string key="name">entryCountTextField</string>
|
|
||||||
<string key="candidateClassName">NSTextField</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBToOneOutletInfo" key="entryTable">
|
|
||||||
<string key="name">entryTable</string>
|
|
||||||
<string key="candidateClassName">NSTableView</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBToOneOutletInfo" key="filterBar">
|
|
||||||
<string key="name">filterBar</string>
|
|
||||||
<string key="candidateClassName">NSView</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBToOneOutletInfo" key="filterDoneButton">
|
|
||||||
<string key="name">filterDoneButton</string>
|
|
||||||
<string key="candidateClassName">NSButton</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBToOneOutletInfo" key="filterLabelTextField">
|
|
||||||
<string key="name">filterLabelTextField</string>
|
|
||||||
<string key="candidateClassName">NSTextField</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBToOneOutletInfo" key="filterSearchField">
|
|
||||||
<string key="name">filterSearchField</string>
|
|
||||||
<string key="candidateClassName">NSSearchField</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBToOneOutletInfo" key="filterTitleButton">
|
|
||||||
<string key="name">filterTitleButton</string>
|
|
||||||
<string key="candidateClassName">NSButton</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBToOneOutletInfo" key="filterURLButton">
|
|
||||||
<string key="name">filterURLButton</string>
|
|
||||||
<string key="candidateClassName">NSButton</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBToOneOutletInfo" key="filterUsernameButton">
|
|
||||||
<string key="name">filterUsernameButton</string>
|
|
||||||
<string key="candidateClassName">NSButton</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBToOneOutletInfo" key="tableToTop">
|
|
||||||
<string key="name">tableToTop</string>
|
|
||||||
<string key="candidateClassName">NSLayoutConstraint</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBToOneOutletInfo" key="trashBar">
|
|
||||||
<string key="name">trashBar</string>
|
|
||||||
<string key="candidateClassName">HNHGradientView</string>
|
|
||||||
</object>
|
|
||||||
</dictionary>
|
|
||||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
|
||||||
<string key="majorKey">IBProjectSource</string>
|
|
||||||
<string key="minorKey">./Classes/MPEntryViewController.h</string>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="IBPartialClassDescription">
|
|
||||||
<string key="className">MPViewController</string>
|
|
||||||
<string key="superclassName">NSViewController</string>
|
|
||||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
|
||||||
<string key="majorKey">IBProjectSource</string>
|
|
||||||
<string key="minorKey">./Classes/MPViewController.h</string>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="IBPartialClassDescription">
|
|
||||||
<string key="className">NSLayoutConstraint</string>
|
|
||||||
<string key="superclassName">NSObject</string>
|
|
||||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
|
||||||
<string key="majorKey">IBProjectSource</string>
|
|
||||||
<string key="minorKey">./Classes/NSLayoutConstraint.h</string>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
</object>
|
|
||||||
<int key="IBDocument.localizationMode">0</int>
|
|
||||||
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
|
|
||||||
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
|
|
||||||
<int key="IBDocument.defaultPropertyAccessControl">3</int>
|
|
||||||
<bool key="IBDocument.UseAutolayout">YES</bool>
|
|
||||||
</data>
|
|
||||||
</archive>
|
|
||||||
168
MacPass/GroupInspectorView.xib
Normal file
168
MacPass/GroupInspectorView.xib
Normal file
@@ -0,0 +1,168 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="5053" systemVersion="13C64" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||||
|
<dependencies>
|
||||||
|
<deployment version="1070" defaultVersion="1080" identifier="macosx"/>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="5053"/>
|
||||||
|
</dependencies>
|
||||||
|
<objects>
|
||||||
|
<customObject id="-2" userLabel="File's Owner" customClass="MPGroupInspectorViewController">
|
||||||
|
<connections>
|
||||||
|
<outlet property="autotypePopupButton" destination="240" id="285"/>
|
||||||
|
<outlet property="contentView" destination="38" id="Dv7-1B-VeH"/>
|
||||||
|
<outlet property="expireDateSelectButton" destination="4" id="Bzg-8k-0OS"/>
|
||||||
|
<outlet property="expiresCheckButton" destination="5" id="283"/>
|
||||||
|
<outlet property="searchPopupButton" destination="229" id="284"/>
|
||||||
|
<outlet property="titleTextField" destination="23" id="35"/>
|
||||||
|
<outlet property="view" destination="37" id="45"/>
|
||||||
|
</connections>
|
||||||
|
</customObject>
|
||||||
|
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||||
|
<customObject id="-3" userLabel="Application"/>
|
||||||
|
<scrollView borderType="none" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasVerticalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="37" customClass="HNHScrollView">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="257" height="201"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<clipView key="contentView" id="HjA-kA-fcX">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="257" height="201"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<view translatesAutoresizingMaskIntoConstraints="NO" id="38" customClass="HNHScrollDocumentViewAdapter">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="257" height="201"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="24">
|
||||||
|
<rect key="frame" x="18" y="182" width="35" height="14"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Name" id="25">
|
||||||
|
<font key="font" metaFont="smallSystem"/>
|
||||||
|
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="23" customClass="HNHRoundedTextField">
|
||||||
|
<rect key="frame" x="20" y="152" width="217" height="22"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" lineBreakMode="truncatingTail" truncatesLastVisibleLine="YES" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" usesSingleLineMode="YES" id="26">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<button horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="5">
|
||||||
|
<rect key="frame" x="18" y="128" width="67" height="18"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="check" title="Expires" bezelStyle="regularSquare" imagePosition="left" lineBreakMode="truncatingMiddle" state="on" inset="2" id="32">
|
||||||
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
</button>
|
||||||
|
<button focusRingType="exterior" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="4">
|
||||||
|
<rect key="frame" x="206" y="127" width="31" height="19"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="width" constant="31" id="l5I-EF-dHs"/>
|
||||||
|
</constraints>
|
||||||
|
<buttonCell key="cell" type="roundRect" bezelStyle="roundedRect" image="NSActionTemplate" imagePosition="only" alignment="center" state="on" borderStyle="border" focusRingType="exterior" imageScaling="proportionallyDown" inset="2" id="33">
|
||||||
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="cellTitle"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="pickExpiryDate:" target="-1" id="KIc-p2-zJQ"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<popUpButton verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="229">
|
||||||
|
<rect key="frame" x="18" y="72" width="222" height="26"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="230">
|
||||||
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="menu"/>
|
||||||
|
<menu key="menu" title="OtherViews" id="231">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Inherit Search Settings" tag="-1" id="232">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Include in Search" id="233"/>
|
||||||
|
<menuItem title="Exclude from Search" tag="1" id="234"/>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</popUpButtonCell>
|
||||||
|
</popUpButton>
|
||||||
|
<popUpButton verticalHuggingPriority="750" horizontalCompressionResistancePriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="240">
|
||||||
|
<rect key="frame" x="18" y="17" width="222" height="26"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="242">
|
||||||
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="menu"/>
|
||||||
|
<menu key="menu" title="OtherViews" id="243">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Inherit Autotype Settings" tag="-1" id="246"/>
|
||||||
|
<menuItem title="Enable Autotype" id="245"/>
|
||||||
|
<menuItem title="Disable Autotype" tag="1" id="244"/>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</popUpButtonCell>
|
||||||
|
</popUpButton>
|
||||||
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="264">
|
||||||
|
<rect key="frame" x="18" y="104" width="40" height="14"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Search" id="265">
|
||||||
|
<font key="font" metaFont="smallSystem"/>
|
||||||
|
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="276">
|
||||||
|
<rect key="frame" x="18" y="49" width="53" height="14"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Autotype" id="277">
|
||||||
|
<font key="font" metaFont="smallSystem"/>
|
||||||
|
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="240" firstAttribute="top" secondItem="276" secondAttribute="bottom" constant="8" id="6Pu-PB-xxy"/>
|
||||||
|
<constraint firstItem="23" firstAttribute="leading" secondItem="38" secondAttribute="leading" constant="20" id="ABR-Ef-1ss"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="229" secondAttribute="trailing" constant="20" symbolic="YES" id="Anv-gp-aTi"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="4" secondAttribute="trailing" constant="20" id="D99-L7-ojR"/>
|
||||||
|
<constraint firstItem="240" firstAttribute="leading" secondItem="38" secondAttribute="leading" constant="20" id="E0a-1e-KR9"/>
|
||||||
|
<constraint firstItem="5" firstAttribute="centerY" secondItem="4" secondAttribute="centerY" id="FdF-Pn-yY2"/>
|
||||||
|
<constraint firstItem="5" firstAttribute="top" secondItem="23" secondAttribute="bottom" constant="8" symbolic="YES" id="GFF-xs-Nuj"/>
|
||||||
|
<constraint firstItem="4" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="5" secondAttribute="trailing" constant="8" symbolic="YES" id="HDo-Yu-P02"/>
|
||||||
|
<constraint firstItem="24" firstAttribute="leading" secondItem="38" secondAttribute="leading" constant="20" id="OhC-BP-oPg"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="240" secondAttribute="trailing" constant="20" symbolic="YES" id="V4d-R9-46P"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="23" secondAttribute="trailing" constant="20" id="Vej-zI-z2w"/>
|
||||||
|
<constraint firstItem="24" firstAttribute="top" secondItem="38" secondAttribute="top" constant="5" id="Wk6-kJ-fTY"/>
|
||||||
|
<constraint firstItem="5" firstAttribute="leading" secondItem="38" secondAttribute="leading" constant="20" id="ZaF-lS-pN8"/>
|
||||||
|
<constraint firstItem="276" firstAttribute="top" secondItem="229" secondAttribute="bottom" constant="12" id="c0H-cE-rnF"/>
|
||||||
|
<constraint firstItem="23" firstAttribute="top" secondItem="24" secondAttribute="bottom" constant="8" id="kbc-Eb-FPr"/>
|
||||||
|
<constraint firstItem="229" firstAttribute="top" secondItem="264" secondAttribute="bottom" constant="8" id="pDa-nw-ByQ"/>
|
||||||
|
<constraint firstItem="264" firstAttribute="leading" secondItem="38" secondAttribute="leading" constant="20" id="qnB-Pd-MqU"/>
|
||||||
|
<constraint firstItem="229" firstAttribute="leading" secondItem="38" secondAttribute="leading" constant="20" id="sCg-Na-ouj"/>
|
||||||
|
<constraint firstItem="276" firstAttribute="leading" secondItem="38" secondAttribute="leading" constant="20" id="xLc-Rz-374"/>
|
||||||
|
<constraint firstItem="264" firstAttribute="top" secondItem="5" secondAttribute="bottom" constant="12" id="xe7-ue-Wip"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="240" secondAttribute="bottom" constant="20" symbolic="YES" id="zhA-eR-h1f"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="38" firstAttribute="top" secondItem="HjA-kA-fcX" secondAttribute="top" id="Alo-CY-dgK"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="38" secondAttribute="bottom" id="FbE-Hu-Y9V"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="38" secondAttribute="trailing" id="HP8-rS-ooi"/>
|
||||||
|
<constraint firstItem="38" firstAttribute="leading" secondItem="HjA-kA-fcX" secondAttribute="leading" id="h7m-U5-sA4"/>
|
||||||
|
</constraints>
|
||||||
|
</clipView>
|
||||||
|
<scroller key="horizontalScroller" verticalHuggingPriority="750" horizontal="YES" id="39">
|
||||||
|
<rect key="frame" x="0.0" y="185" width="257" height="16"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
</scroller>
|
||||||
|
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="40">
|
||||||
|
<rect key="frame" x="-100" y="-100" width="16" height="413"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
</scroller>
|
||||||
|
</scrollView>
|
||||||
|
</objects>
|
||||||
|
<resources>
|
||||||
|
<image name="NSActionTemplate" width="14" height="14"/>
|
||||||
|
</resources>
|
||||||
|
</document>
|
||||||
@@ -1,694 +1,114 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="4514" systemVersion="13A603" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||||
<data>
|
<dependencies>
|
||||||
<int key="IBDocument.SystemTarget">1080</int>
|
<deployment defaultVersion="1080" identifier="macosx"/>
|
||||||
<string key="IBDocument.SystemVersion">12D78</string>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="4514"/>
|
||||||
<string key="IBDocument.InterfaceBuilderVersion">3084</string>
|
</dependencies>
|
||||||
<string key="IBDocument.AppKitVersion">1187.37</string>
|
<objects>
|
||||||
<string key="IBDocument.HIToolboxVersion">626.00</string>
|
<customObject id="-2" userLabel="File's Owner" customClass="MPIconSelectViewController">
|
||||||
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
|
<connections>
|
||||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
<outlet property="iconCollectionView" destination="58" id="77"/>
|
||||||
<string key="NS.object.0">3084</string>
|
<outlet property="view" destination="1" id="56"/>
|
||||||
</object>
|
</connections>
|
||||||
<array key="IBDocument.IntegratedClassDependencies">
|
</customObject>
|
||||||
<string>IBNSLayoutConstraint</string>
|
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||||
<string>NSButton</string>
|
<customObject id="-3" userLabel="Application"/>
|
||||||
<string>NSButtonCell</string>
|
<customView id="1">
|
||||||
<string>NSCollectionView</string>
|
<rect key="frame" x="0.0" y="0.0" width="400" height="340"/>
|
||||||
<string>NSCollectionViewItem</string>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
<string>NSCustomObject</string>
|
<subviews>
|
||||||
<string>NSCustomView</string>
|
<scrollView focusRingType="none" borderType="none" autohidesScrollers="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="57" customClass="HNHScrollView">
|
||||||
<string>NSScrollView</string>
|
<rect key="frame" x="10" y="50" width="380" height="280"/>
|
||||||
<string>NSScroller</string>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
</array>
|
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="Gwf-zs-lPT">
|
||||||
<array key="IBDocument.PluginDependencies">
|
<rect key="frame" x="0.0" y="0.0" width="380" height="280"/>
|
||||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
</array>
|
<subviews>
|
||||||
<object class="NSMutableDictionary" key="IBDocument.Metadata">
|
<collectionView focusRingType="none" id="58">
|
||||||
<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
|
<rect key="frame" x="0.0" y="0.0" width="380" height="280"/>
|
||||||
<integer value="1" key="NS.object.0"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
</object>
|
<color key="primaryBackgroundColor" name="windowBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
|
<connections>
|
||||||
<object class="NSCustomObject" id="1001">
|
<outlet property="itemPrototype" destination="61" id="63"/>
|
||||||
<string key="NSClassName">MPIconSelectViewController</string>
|
</connections>
|
||||||
</object>
|
</collectionView>
|
||||||
<object class="NSCustomObject" id="1003">
|
</subviews>
|
||||||
<string key="NSClassName">FirstResponder</string>
|
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
</object>
|
</clipView>
|
||||||
<object class="NSCustomObject" id="1004">
|
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="59">
|
||||||
<string key="NSClassName">NSApplication</string>
|
<rect key="frame" x="1" y="144" width="233" height="15"/>
|
||||||
</object>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<object class="NSCustomView" id="1005">
|
</scroller>
|
||||||
<reference key="NSNextResponder"/>
|
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="60">
|
||||||
<int key="NSvFlags">268</int>
|
<rect key="frame" x="234" y="1" width="15" height="143"/>
|
||||||
<array class="NSMutableArray" key="NSSubviews">
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<object class="NSButton" id="317760263">
|
</scroller>
|
||||||
<reference key="NSNextResponder" ref="1005"/>
|
</scrollView>
|
||||||
<int key="NSvFlags">268</int>
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="101">
|
||||||
<string key="NSFrame">{{147, 18}, {118, 25}}</string>
|
<rect key="frame" x="263" y="18" width="117" height="25"/>
|
||||||
<reference key="NSSuperview" ref="1005"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
<reference key="NSWindow"/>
|
<buttonCell key="cell" type="roundTextured" title="Use Default Icon" bezelStyle="texturedRounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="102">
|
||||||
<reference key="NSNextKeyView"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<string key="NSReuseIdentifierKey">_NS:22</string>
|
<font key="font" metaFont="system"/>
|
||||||
<bool key="NSEnabled">YES</bool>
|
</buttonCell>
|
||||||
<object class="NSButtonCell" key="NSCell" id="619274271">
|
<connections>
|
||||||
<int key="NSCellFlags">-2080374784</int>
|
<action selector="useDefault:" target="-2" id="129"/>
|
||||||
<int key="NSCellFlags2">134217728</int>
|
</connections>
|
||||||
<string key="NSContents">Use Default Icon</string>
|
</button>
|
||||||
<object class="NSFont" key="NSSupport" id="747112258">
|
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="His-4A-hcY">
|
||||||
<string key="NSName">LucidaGrande</string>
|
<rect key="frame" x="199" y="18" width="56" height="25"/>
|
||||||
<double key="NSSize">13</double>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
<int key="NSfFlags">1044</int>
|
<buttonCell key="cell" type="roundTextured" title="Cancel" bezelStyle="texturedRounded" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="1kM-cI-P1o">
|
||||||
</object>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<string key="NSCellIdentifier">_NS:22</string>
|
<font key="font" metaFont="system"/>
|
||||||
<reference key="NSControlView" ref="317760263"/>
|
</buttonCell>
|
||||||
<int key="NSButtonFlags">-2038153216</int>
|
<connections>
|
||||||
<int key="NSButtonFlags2">163</int>
|
<action selector="cancel:" target="-2" id="cRO-8u-npC"/>
|
||||||
<string key="NSAlternateContents"/>
|
</connections>
|
||||||
<string key="NSKeyEquivalent"/>
|
</button>
|
||||||
<int key="NSPeriodicDelay">400</int>
|
</subviews>
|
||||||
<int key="NSPeriodicInterval">75</int>
|
<constraints>
|
||||||
</object>
|
<constraint firstItem="57" firstAttribute="top" secondItem="1" secondAttribute="top" constant="10" id="88"/>
|
||||||
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
|
<constraint firstAttribute="bottom" secondItem="101" secondAttribute="bottom" constant="20" symbolic="YES" id="107"/>
|
||||||
</object>
|
<constraint firstAttribute="trailing" secondItem="101" secondAttribute="trailing" constant="20" symbolic="YES" id="108"/>
|
||||||
<object class="NSScrollView" id="170990502">
|
<constraint firstAttribute="trailing" secondItem="57" secondAttribute="trailing" constant="10" id="110"/>
|
||||||
<reference key="NSNextResponder" ref="1005"/>
|
<constraint firstItem="57" firstAttribute="leading" secondItem="1" secondAttribute="leading" constant="10" id="111"/>
|
||||||
<int key="NSvFlags">4364</int>
|
<constraint firstItem="101" firstAttribute="top" secondItem="57" secondAttribute="bottom" constant="8" symbolic="YES" id="112"/>
|
||||||
<array class="NSMutableArray" key="NSSubviews">
|
</constraints>
|
||||||
<object class="NSClipView" id="785205210">
|
</customView>
|
||||||
<reference key="NSNextResponder" ref="170990502"/>
|
<collectionViewItem id="61">
|
||||||
<int key="NSvFlags">2304</int>
|
<connections>
|
||||||
<array class="NSMutableArray" key="NSSubviews">
|
<outlet property="view" destination="113" id="128"/>
|
||||||
<object class="NSCollectionView" id="697027275">
|
</connections>
|
||||||
<reference key="NSNextResponder" ref="785205210"/>
|
</collectionViewItem>
|
||||||
<int key="NSvFlags">4370</int>
|
<customView id="113">
|
||||||
<string key="NSFrameSize">{243, 238}</string>
|
<rect key="frame" x="0.0" y="0.0" width="40" height="40"/>
|
||||||
<reference key="NSSuperview" ref="785205210"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
<reference key="NSWindow"/>
|
<subviews>
|
||||||
<reference key="NSNextKeyView" ref="319187659"/>
|
<button translatesAutoresizingMaskIntoConstraints="NO" id="114">
|
||||||
<string key="NSReuseIdentifierKey">_NS:80</string>
|
<rect key="frame" x="4" y="4" width="32" height="32"/>
|
||||||
<string key="NSMinGridSize">{0, 0}</string>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
<string key="NSMaxGridSize">{0, 0}</string>
|
<constraints>
|
||||||
<int key="NSMaxNumberOfGridRows">0</int>
|
<constraint firstAttribute="width" constant="32" id="161"/>
|
||||||
<int key="NSMaxNumberOfGridColumns">0</int>
|
<constraint firstAttribute="height" constant="32" id="162"/>
|
||||||
<array key="NSBackgroundColors">
|
</constraints>
|
||||||
<object class="NSColor" id="228713979">
|
<buttonCell key="cell" type="bevel" bezelStyle="regularSquare" image="NSAddTemplate" imagePosition="only" alignment="center" imageScaling="proportionallyUpOrDown" inset="2" id="115">
|
||||||
<int key="NSColorSpace">6</int>
|
<behavior key="behavior" lightByContents="YES"/>
|
||||||
<string key="NSCatalogName">System</string>
|
<font key="font" metaFont="system"/>
|
||||||
<string key="NSColorName">windowBackgroundColor</string>
|
</buttonCell>
|
||||||
<object class="NSColor" key="NSColor">
|
<connections>
|
||||||
<int key="NSColorSpace">3</int>
|
<action selector="_selectImage:" target="-2" id="eFg-h5-9jy"/>
|
||||||
<bytes key="NSWhite">MC41AA</bytes>
|
<binding destination="61" name="image" keyPath="representedObject" id="139"/>
|
||||||
</object>
|
</connections>
|
||||||
</object>
|
</button>
|
||||||
</array>
|
</subviews>
|
||||||
<int key="NSDraggingSourceMaskForLocal">-1</int>
|
<constraints>
|
||||||
<int key="NSDraggingSourceMaskForNonLocal">0</int>
|
<constraint firstItem="114" firstAttribute="centerY" secondItem="113" secondAttribute="centerY" id="168"/>
|
||||||
</object>
|
<constraint firstItem="114" firstAttribute="centerX" secondItem="113" secondAttribute="centerX" id="169"/>
|
||||||
</array>
|
</constraints>
|
||||||
<string key="NSFrame">{{1, 1}, {243, 238}}</string>
|
</customView>
|
||||||
<reference key="NSSuperview" ref="170990502"/>
|
</objects>
|
||||||
<reference key="NSWindow"/>
|
<resources>
|
||||||
<reference key="NSNextKeyView" ref="697027275"/>
|
<image name="NSAddTemplate" width="8" height="8"/>
|
||||||
<string key="NSReuseIdentifierKey">_NS:78</string>
|
</resources>
|
||||||
<reference key="NSDocView" ref="697027275"/>
|
</document>
|
||||||
<object class="NSColor" key="NSBGColor">
|
|
||||||
<int key="NSColorSpace">6</int>
|
|
||||||
<string key="NSCatalogName">System</string>
|
|
||||||
<string key="NSColorName">controlBackgroundColor</string>
|
|
||||||
<object class="NSColor" key="NSColor">
|
|
||||||
<int key="NSColorSpace">3</int>
|
|
||||||
<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<int key="NScvFlags">2</int>
|
|
||||||
</object>
|
|
||||||
<object class="NSScroller" id="319187659">
|
|
||||||
<reference key="NSNextResponder" ref="170990502"/>
|
|
||||||
<int key="NSvFlags">-2147483392</int>
|
|
||||||
<string key="NSFrame">{{234, 1}, {15, 143}}</string>
|
|
||||||
<reference key="NSSuperview" ref="170990502"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="775158265"/>
|
|
||||||
<string key="NSReuseIdentifierKey">_NS:82</string>
|
|
||||||
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
|
|
||||||
<reference key="NSTarget" ref="170990502"/>
|
|
||||||
<string key="NSAction">_doScroller:</string>
|
|
||||||
<double key="NSCurValue">1</double>
|
|
||||||
<double key="NSPercent">0.89655172824859619</double>
|
|
||||||
</object>
|
|
||||||
<object class="NSScroller" id="775158265">
|
|
||||||
<reference key="NSNextResponder" ref="170990502"/>
|
|
||||||
<int key="NSvFlags">-2147483392</int>
|
|
||||||
<string key="NSFrame">{{1, 144}, {233, 15}}</string>
|
|
||||||
<reference key="NSSuperview" ref="170990502"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="317760263"/>
|
|
||||||
<string key="NSReuseIdentifierKey">_NS:91</string>
|
|
||||||
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
|
|
||||||
<int key="NSsFlags">1</int>
|
|
||||||
<reference key="NSTarget" ref="170990502"/>
|
|
||||||
<string key="NSAction">_doScroller:</string>
|
|
||||||
<double key="NSPercent">0.63157892227172852</double>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<string key="NSFrame">{{20, 50}, {245, 240}}</string>
|
|
||||||
<reference key="NSSuperview" ref="1005"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="785205210"/>
|
|
||||||
<string key="NSReuseIdentifierKey">_NS:76</string>
|
|
||||||
<int key="NSsFlags">133682</int>
|
|
||||||
<reference key="NSVScroller" ref="319187659"/>
|
|
||||||
<reference key="NSHScroller" ref="775158265"/>
|
|
||||||
<reference key="NSContentView" ref="785205210"/>
|
|
||||||
<double key="NSMinMagnification">0.25</double>
|
|
||||||
<double key="NSMaxMagnification">4</double>
|
|
||||||
<double key="NSMagnification">1</double>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<string key="NSFrameSize">{285, 310}</string>
|
|
||||||
<reference key="NSSuperview"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="170990502"/>
|
|
||||||
<string key="NSClassName">NSView</string>
|
|
||||||
</object>
|
|
||||||
<object class="NSCollectionViewItem" id="417473882"/>
|
|
||||||
<object class="NSCustomView" id="340719917">
|
|
||||||
<reference key="NSNextResponder"/>
|
|
||||||
<int key="NSvFlags">268</int>
|
|
||||||
<array class="NSMutableArray" key="NSSubviews">
|
|
||||||
<object class="NSButton" id="612603831">
|
|
||||||
<reference key="NSNextResponder" ref="340719917"/>
|
|
||||||
<int key="NSvFlags">268</int>
|
|
||||||
<string key="NSFrame">{{10, 10}, {40, 40}}</string>
|
|
||||||
<reference key="NSSuperview" ref="340719917"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView"/>
|
|
||||||
<string key="NSReuseIdentifierKey">_NS:9</string>
|
|
||||||
<bool key="NSEnabled">YES</bool>
|
|
||||||
<object class="NSButtonCell" key="NSCell" id="344314901">
|
|
||||||
<int key="NSCellFlags">67108864</int>
|
|
||||||
<int key="NSCellFlags2">134217728</int>
|
|
||||||
<string key="NSContents"/>
|
|
||||||
<reference key="NSSupport" ref="747112258"/>
|
|
||||||
<string key="NSCellIdentifier">_NS:9</string>
|
|
||||||
<reference key="NSControlView" ref="612603831"/>
|
|
||||||
<int key="NSButtonFlags">-2039201792</int>
|
|
||||||
<int key="NSButtonFlags2">65</int>
|
|
||||||
<object class="NSCustomResource" key="NSNormalImage">
|
|
||||||
<string key="NSClassName">NSImage</string>
|
|
||||||
<string key="NSResourceName">NSAddTemplate</string>
|
|
||||||
</object>
|
|
||||||
<string key="NSAlternateContents"/>
|
|
||||||
<string key="NSKeyEquivalent"/>
|
|
||||||
<int key="NSPeriodicDelay">200</int>
|
|
||||||
<int key="NSPeriodicInterval">25</int>
|
|
||||||
</object>
|
|
||||||
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<string key="NSFrameSize">{60, 60}</string>
|
|
||||||
<reference key="NSSuperview"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="612603831"/>
|
|
||||||
<string key="NSReuseIdentifierKey">_NS:9</string>
|
|
||||||
<string key="NSClassName">NSView</string>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<object class="IBObjectContainer" key="IBDocument.Objects">
|
|
||||||
<array class="NSMutableArray" key="connectionRecords">
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBOutletConnection" key="connection">
|
|
||||||
<string key="label">view</string>
|
|
||||||
<reference key="source" ref="1001"/>
|
|
||||||
<reference key="destination" ref="1005"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">56</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBOutletConnection" key="connection">
|
|
||||||
<string key="label">iconCollectionView</string>
|
|
||||||
<reference key="source" ref="1001"/>
|
|
||||||
<reference key="destination" ref="697027275"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">77</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBActionConnection" key="connection">
|
|
||||||
<string key="label">useDefault:</string>
|
|
||||||
<reference key="source" ref="1001"/>
|
|
||||||
<reference key="destination" ref="317760263"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">129</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBOutletConnection" key="connection">
|
|
||||||
<string key="label">itemPrototype</string>
|
|
||||||
<reference key="source" ref="697027275"/>
|
|
||||||
<reference key="destination" ref="417473882"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">63</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBOutletConnection" key="connection">
|
|
||||||
<string key="label">view</string>
|
|
||||||
<reference key="source" ref="417473882"/>
|
|
||||||
<reference key="destination" ref="340719917"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">128</int>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<object class="IBMutableOrderedSet" key="objectRecords">
|
|
||||||
<array key="orderedObjects">
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">0</int>
|
|
||||||
<array key="object" id="0"/>
|
|
||||||
<reference key="children" ref="1000"/>
|
|
||||||
<nil key="parent"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">-2</int>
|
|
||||||
<reference key="object" ref="1001"/>
|
|
||||||
<reference key="parent" ref="0"/>
|
|
||||||
<string key="objectName">File's Owner</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">-1</int>
|
|
||||||
<reference key="object" ref="1003"/>
|
|
||||||
<reference key="parent" ref="0"/>
|
|
||||||
<string key="objectName">First Responder</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">-3</int>
|
|
||||||
<reference key="object" ref="1004"/>
|
|
||||||
<reference key="parent" ref="0"/>
|
|
||||||
<string key="objectName">Application</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">1</int>
|
|
||||||
<reference key="object" ref="1005"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="170990502"/>
|
|
||||||
<object class="IBNSLayoutConstraint" id="494913411">
|
|
||||||
<reference key="firstItem" ref="317760263"/>
|
|
||||||
<int key="firstAttribute">3</int>
|
|
||||||
<int key="relation">0</int>
|
|
||||||
<reference key="secondItem" ref="170990502"/>
|
|
||||||
<int key="secondAttribute">4</int>
|
|
||||||
<float key="multiplier">1</float>
|
|
||||||
<object class="IBNSLayoutSymbolicConstant" key="constant">
|
|
||||||
<double key="value">8</double>
|
|
||||||
</object>
|
|
||||||
<float key="priority">1000</float>
|
|
||||||
<reference key="containingView" ref="1005"/>
|
|
||||||
<int key="scoringType">6</int>
|
|
||||||
<float key="scoringTypeFloat">24</float>
|
|
||||||
<int key="contentType">3</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBNSLayoutConstraint" id="851764901">
|
|
||||||
<reference key="firstItem" ref="1005"/>
|
|
||||||
<int key="firstAttribute">6</int>
|
|
||||||
<int key="relation">0</int>
|
|
||||||
<reference key="secondItem" ref="317760263"/>
|
|
||||||
<int key="secondAttribute">6</int>
|
|
||||||
<float key="multiplier">1</float>
|
|
||||||
<object class="IBNSLayoutSymbolicConstant" key="constant">
|
|
||||||
<double key="value">20</double>
|
|
||||||
</object>
|
|
||||||
<float key="priority">1000</float>
|
|
||||||
<reference key="containingView" ref="1005"/>
|
|
||||||
<int key="scoringType">8</int>
|
|
||||||
<float key="scoringTypeFloat">29</float>
|
|
||||||
<int key="contentType">3</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBNSLayoutConstraint" id="809281010">
|
|
||||||
<reference key="firstItem" ref="1005"/>
|
|
||||||
<int key="firstAttribute">4</int>
|
|
||||||
<int key="relation">0</int>
|
|
||||||
<reference key="secondItem" ref="317760263"/>
|
|
||||||
<int key="secondAttribute">4</int>
|
|
||||||
<float key="multiplier">1</float>
|
|
||||||
<object class="IBNSLayoutSymbolicConstant" key="constant">
|
|
||||||
<double key="value">20</double>
|
|
||||||
</object>
|
|
||||||
<float key="priority">1000</float>
|
|
||||||
<reference key="containingView" ref="1005"/>
|
|
||||||
<int key="scoringType">8</int>
|
|
||||||
<float key="scoringTypeFloat">29</float>
|
|
||||||
<int key="contentType">3</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBNSLayoutConstraint" id="1060216757">
|
|
||||||
<reference key="firstItem" ref="170990502"/>
|
|
||||||
<int key="firstAttribute">5</int>
|
|
||||||
<int key="relation">0</int>
|
|
||||||
<reference key="secondItem" ref="1005"/>
|
|
||||||
<int key="secondAttribute">5</int>
|
|
||||||
<float key="multiplier">1</float>
|
|
||||||
<object class="IBNSLayoutSymbolicConstant" key="constant">
|
|
||||||
<double key="value">20</double>
|
|
||||||
</object>
|
|
||||||
<float key="priority">1000</float>
|
|
||||||
<reference key="containingView" ref="1005"/>
|
|
||||||
<int key="scoringType">8</int>
|
|
||||||
<float key="scoringTypeFloat">29</float>
|
|
||||||
<int key="contentType">3</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBNSLayoutConstraint" id="523638618">
|
|
||||||
<reference key="firstItem" ref="1005"/>
|
|
||||||
<int key="firstAttribute">6</int>
|
|
||||||
<int key="relation">0</int>
|
|
||||||
<reference key="secondItem" ref="170990502"/>
|
|
||||||
<int key="secondAttribute">6</int>
|
|
||||||
<float key="multiplier">1</float>
|
|
||||||
<object class="IBNSLayoutSymbolicConstant" key="constant">
|
|
||||||
<double key="value">20</double>
|
|
||||||
</object>
|
|
||||||
<float key="priority">1000</float>
|
|
||||||
<reference key="containingView" ref="1005"/>
|
|
||||||
<int key="scoringType">8</int>
|
|
||||||
<float key="scoringTypeFloat">29</float>
|
|
||||||
<int key="contentType">3</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBNSLayoutConstraint" id="655672626">
|
|
||||||
<reference key="firstItem" ref="170990502"/>
|
|
||||||
<int key="firstAttribute">3</int>
|
|
||||||
<int key="relation">0</int>
|
|
||||||
<reference key="secondItem" ref="1005"/>
|
|
||||||
<int key="secondAttribute">3</int>
|
|
||||||
<float key="multiplier">1</float>
|
|
||||||
<object class="IBNSLayoutSymbolicConstant" key="constant">
|
|
||||||
<double key="value">20</double>
|
|
||||||
</object>
|
|
||||||
<float key="priority">1000</float>
|
|
||||||
<reference key="containingView" ref="1005"/>
|
|
||||||
<int key="scoringType">8</int>
|
|
||||||
<float key="scoringTypeFloat">29</float>
|
|
||||||
<int key="contentType">3</int>
|
|
||||||
</object>
|
|
||||||
<reference ref="317760263"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="0"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">57</int>
|
|
||||||
<reference key="object" ref="170990502"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="697027275"/>
|
|
||||||
<reference ref="775158265"/>
|
|
||||||
<reference ref="319187659"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="1005"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">58</int>
|
|
||||||
<reference key="object" ref="697027275"/>
|
|
||||||
<reference key="parent" ref="170990502"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">59</int>
|
|
||||||
<reference key="object" ref="775158265"/>
|
|
||||||
<reference key="parent" ref="170990502"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">60</int>
|
|
||||||
<reference key="object" ref="319187659"/>
|
|
||||||
<reference key="parent" ref="170990502"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">61</int>
|
|
||||||
<reference key="object" ref="417473882"/>
|
|
||||||
<reference key="parent" ref="0"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">88</int>
|
|
||||||
<reference key="object" ref="655672626"/>
|
|
||||||
<reference key="parent" ref="1005"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">101</int>
|
|
||||||
<reference key="object" ref="317760263"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="619274271"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="1005"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">102</int>
|
|
||||||
<reference key="object" ref="619274271"/>
|
|
||||||
<reference key="parent" ref="317760263"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">107</int>
|
|
||||||
<reference key="object" ref="809281010"/>
|
|
||||||
<reference key="parent" ref="1005"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">108</int>
|
|
||||||
<reference key="object" ref="851764901"/>
|
|
||||||
<reference key="parent" ref="1005"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">110</int>
|
|
||||||
<reference key="object" ref="523638618"/>
|
|
||||||
<reference key="parent" ref="1005"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">111</int>
|
|
||||||
<reference key="object" ref="1060216757"/>
|
|
||||||
<reference key="parent" ref="1005"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">112</int>
|
|
||||||
<reference key="object" ref="494913411"/>
|
|
||||||
<reference key="parent" ref="1005"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">113</int>
|
|
||||||
<reference key="object" ref="340719917"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<object class="IBNSLayoutConstraint" id="436230129">
|
|
||||||
<reference key="firstItem" ref="340719917"/>
|
|
||||||
<int key="firstAttribute">10</int>
|
|
||||||
<int key="relation">0</int>
|
|
||||||
<reference key="secondItem" ref="612603831"/>
|
|
||||||
<int key="secondAttribute">10</int>
|
|
||||||
<float key="multiplier">1</float>
|
|
||||||
<object class="IBLayoutConstant" key="constant">
|
|
||||||
<double key="value">0.0</double>
|
|
||||||
</object>
|
|
||||||
<float key="priority">1000</float>
|
|
||||||
<reference key="containingView" ref="340719917"/>
|
|
||||||
<int key="scoringType">9</int>
|
|
||||||
<float key="scoringTypeFloat">40</float>
|
|
||||||
<int key="contentType">2</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBNSLayoutConstraint" id="766436605">
|
|
||||||
<reference key="firstItem" ref="340719917"/>
|
|
||||||
<int key="firstAttribute">9</int>
|
|
||||||
<int key="relation">0</int>
|
|
||||||
<reference key="secondItem" ref="612603831"/>
|
|
||||||
<int key="secondAttribute">9</int>
|
|
||||||
<float key="multiplier">1</float>
|
|
||||||
<object class="IBLayoutConstant" key="constant">
|
|
||||||
<double key="value">0.0</double>
|
|
||||||
</object>
|
|
||||||
<float key="priority">1000</float>
|
|
||||||
<reference key="containingView" ref="340719917"/>
|
|
||||||
<int key="scoringType">9</int>
|
|
||||||
<float key="scoringTypeFloat">40</float>
|
|
||||||
<int key="contentType">2</int>
|
|
||||||
</object>
|
|
||||||
<reference ref="612603831"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="0"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">114</int>
|
|
||||||
<reference key="object" ref="612603831"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="344314901"/>
|
|
||||||
<object class="IBNSLayoutConstraint" id="463236706">
|
|
||||||
<reference key="firstItem" ref="612603831"/>
|
|
||||||
<int key="firstAttribute">8</int>
|
|
||||||
<int key="relation">0</int>
|
|
||||||
<nil key="secondItem"/>
|
|
||||||
<int key="secondAttribute">0</int>
|
|
||||||
<float key="multiplier">1</float>
|
|
||||||
<object class="IBLayoutConstant" key="constant">
|
|
||||||
<double key="value">40</double>
|
|
||||||
</object>
|
|
||||||
<float key="priority">1000</float>
|
|
||||||
<reference key="containingView" ref="612603831"/>
|
|
||||||
<int key="scoringType">3</int>
|
|
||||||
<float key="scoringTypeFloat">9</float>
|
|
||||||
<int key="contentType">1</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBNSLayoutConstraint" id="477773969">
|
|
||||||
<reference key="firstItem" ref="612603831"/>
|
|
||||||
<int key="firstAttribute">7</int>
|
|
||||||
<int key="relation">0</int>
|
|
||||||
<nil key="secondItem"/>
|
|
||||||
<int key="secondAttribute">0</int>
|
|
||||||
<float key="multiplier">1</float>
|
|
||||||
<object class="IBLayoutConstant" key="constant">
|
|
||||||
<double key="value">40</double>
|
|
||||||
</object>
|
|
||||||
<float key="priority">1000</float>
|
|
||||||
<reference key="containingView" ref="612603831"/>
|
|
||||||
<int key="scoringType">3</int>
|
|
||||||
<float key="scoringTypeFloat">9</float>
|
|
||||||
<int key="contentType">1</int>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="340719917"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">115</int>
|
|
||||||
<reference key="object" ref="344314901"/>
|
|
||||||
<reference key="parent" ref="612603831"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">121</int>
|
|
||||||
<reference key="object" ref="477773969"/>
|
|
||||||
<reference key="parent" ref="612603831"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">123</int>
|
|
||||||
<reference key="object" ref="463236706"/>
|
|
||||||
<reference key="parent" ref="612603831"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">126</int>
|
|
||||||
<reference key="object" ref="766436605"/>
|
|
||||||
<reference key="parent" ref="340719917"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">127</int>
|
|
||||||
<reference key="object" ref="436230129"/>
|
|
||||||
<reference key="parent" ref="340719917"/>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
</object>
|
|
||||||
<dictionary class="NSMutableDictionary" key="flattenedProperties">
|
|
||||||
<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="-3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<array class="NSMutableArray" key="1.IBNSViewMetadataConstraints">
|
|
||||||
<reference ref="655672626"/>
|
|
||||||
<reference ref="523638618"/>
|
|
||||||
<reference ref="1060216757"/>
|
|
||||||
<reference ref="809281010"/>
|
|
||||||
<reference ref="851764901"/>
|
|
||||||
<reference ref="494913411"/>
|
|
||||||
</array>
|
|
||||||
<string key="1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<boolean value="NO" key="101.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
|
|
||||||
<string key="101.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="102.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="107.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="108.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="110.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="111.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="112.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<array class="NSMutableArray" key="113.IBNSViewMetadataConstraints">
|
|
||||||
<reference ref="766436605"/>
|
|
||||||
<reference ref="436230129"/>
|
|
||||||
</array>
|
|
||||||
<string key="113.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<array key="114.IBNSViewMetadataConstraints">
|
|
||||||
<reference ref="477773969"/>
|
|
||||||
<reference ref="463236706"/>
|
|
||||||
</array>
|
|
||||||
<boolean value="NO" key="114.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
|
|
||||||
<string key="114.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="115.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="121.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="123.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="126.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="127.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<boolean value="NO" key="57.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
|
|
||||||
<string key="57.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<reference key="58.IBCollectionViewIntegration.primaryColor" ref="228713979"/>
|
|
||||||
<string key="58.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="59.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="60.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="61.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="88.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
|
|
||||||
<nil key="activeLocalization"/>
|
|
||||||
<dictionary class="NSMutableDictionary" key="localizations"/>
|
|
||||||
<nil key="sourceID"/>
|
|
||||||
<int key="maxID">129</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBClassDescriber" key="IBDocument.Classes">
|
|
||||||
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
|
|
||||||
<object class="IBPartialClassDescription">
|
|
||||||
<string key="className">MPIconSelectViewController</string>
|
|
||||||
<string key="superclassName">MPViewController</string>
|
|
||||||
<object class="NSMutableDictionary" key="outlets">
|
|
||||||
<string key="NS.key.0">iconCollectionView</string>
|
|
||||||
<string key="NS.object.0">NSCollectionView</string>
|
|
||||||
</object>
|
|
||||||
<object class="NSMutableDictionary" key="toOneOutletInfosByName">
|
|
||||||
<string key="NS.key.0">iconCollectionView</string>
|
|
||||||
<object class="IBToOneOutletInfo" key="NS.object.0">
|
|
||||||
<string key="name">iconCollectionView</string>
|
|
||||||
<string key="candidateClassName">NSCollectionView</string>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
|
||||||
<string key="majorKey">IBProjectSource</string>
|
|
||||||
<string key="minorKey">./Classes/MPIconSelectViewController.h</string>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="IBPartialClassDescription">
|
|
||||||
<string key="className">MPViewController</string>
|
|
||||||
<string key="superclassName">NSViewController</string>
|
|
||||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
|
||||||
<string key="majorKey">IBProjectSource</string>
|
|
||||||
<string key="minorKey">./Classes/MPViewController.h</string>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="IBPartialClassDescription">
|
|
||||||
<string key="className">NSCollectionViewItem</string>
|
|
||||||
<dictionary class="NSMutableDictionary" key="outlets">
|
|
||||||
<string key="imageView">NSImageView</string>
|
|
||||||
<string key="textField">NSTextField</string>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
|
|
||||||
<object class="IBToOneOutletInfo" key="imageView">
|
|
||||||
<string key="name">imageView</string>
|
|
||||||
<string key="candidateClassName">NSImageView</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBToOneOutletInfo" key="textField">
|
|
||||||
<string key="name">textField</string>
|
|
||||||
<string key="candidateClassName">NSTextField</string>
|
|
||||||
</object>
|
|
||||||
</dictionary>
|
|
||||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
|
||||||
<string key="majorKey">IBProjectSource</string>
|
|
||||||
<string key="minorKey">./Classes/NSCollectionViewItem.h</string>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="IBPartialClassDescription">
|
|
||||||
<string key="className">NSLayoutConstraint</string>
|
|
||||||
<string key="superclassName">NSObject</string>
|
|
||||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
|
||||||
<string key="majorKey">IBProjectSource</string>
|
|
||||||
<string key="minorKey">./Classes/NSLayoutConstraint.h</string>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
</object>
|
|
||||||
<int key="IBDocument.localizationMode">0</int>
|
|
||||||
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
|
|
||||||
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
|
|
||||||
<int key="IBDocument.defaultPropertyAccessControl">3</int>
|
|
||||||
<object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
|
|
||||||
<string key="NS.key.0">NSAddTemplate</string>
|
|
||||||
<string key="NS.object.0">{8, 8}</string>
|
|
||||||
</object>
|
|
||||||
<bool key="IBDocument.UseAutolayout">YES</bool>
|
|
||||||
</data>
|
|
||||||
</archive>
|
|
||||||
Binary file not shown.
BIN
MacPass/Icons/14_BatteryTemplate.pdf
Normal file
BIN
MacPass/Icons/14_BatteryTemplate.pdf
Normal file
Binary file not shown.
BIN
MacPass/Icons/15_ScannerTemplate.pdf
Normal file
BIN
MacPass/Icons/15_ScannerTemplate.pdf
Normal file
Binary file not shown.
BIN
MacPass/Icons/16_BrowserTemplate.pdf
Normal file
BIN
MacPass/Icons/16_BrowserTemplate.pdf
Normal file
Binary file not shown.
BIN
MacPass/Icons/17_CDRomTemplate.pdf
Normal file
BIN
MacPass/Icons/17_CDRomTemplate.pdf
Normal file
Binary file not shown.
BIN
MacPass/Icons/19_EmailTemplate.pdf
Normal file
BIN
MacPass/Icons/19_EmailTemplate.pdf
Normal file
Binary file not shown.
BIN
MacPass/Icons/20_MiscTemplate.pdf
Normal file
BIN
MacPass/Icons/20_MiscTemplate.pdf
Normal file
Binary file not shown.
BIN
MacPass/Icons/30_TerminalTemplate.pdf
Normal file
BIN
MacPass/Icons/30_TerminalTemplate.pdf
Normal file
Binary file not shown.
BIN
MacPass/Icons/31_PrintTemplate.pdf
Normal file
BIN
MacPass/Icons/31_PrintTemplate.pdf
Normal file
Binary file not shown.
BIN
MacPass/Icons/99_CreatedTemplate.pdf
Normal file
BIN
MacPass/Icons/99_CreatedTemplate.pdf
Normal file
Binary file not shown.
BIN
MacPass/Icons/addEntryTemplate.pdf
Normal file
BIN
MacPass/Icons/addEntryTemplate.pdf
Normal file
Binary file not shown.
BIN
MacPass/Icons/contextTriangleTemplate.pdf
Normal file
BIN
MacPass/Icons/contextTriangleTemplate.pdf
Normal file
Binary file not shown.
106
MacPass/IntegrationSettings.xib
Normal file
106
MacPass/IntegrationSettings.xib
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="4514" systemVersion="13B42" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||||
|
<dependencies>
|
||||||
|
<deployment defaultVersion="1080" identifier="macosx"/>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="4514"/>
|
||||||
|
</dependencies>
|
||||||
|
<objects>
|
||||||
|
<customObject id="-2" userLabel="File's Owner" customClass="MPIntegrationSettingsController">
|
||||||
|
<connections>
|
||||||
|
<outlet property="enableGlobalAutotypeCheckbutton" destination="tik-Ar-FJg" id="d2f-69-2BP"/>
|
||||||
|
<outlet property="enableServerCheckbutton" destination="2" id="17"/>
|
||||||
|
<outlet property="view" destination="1" id="18"/>
|
||||||
|
</connections>
|
||||||
|
</customObject>
|
||||||
|
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||||
|
<customObject id="-3" userLabel="Application"/>
|
||||||
|
<customView translatesAutoresizingMaskIntoConstraints="NO" id="1">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="400" height="179"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<box autoresizesSubviews="NO" verticalHuggingPriority="500" title="Keepass HTTP" borderType="line" translatesAutoresizingMaskIntoConstraints="NO" id="KbH-0Q-5Tw">
|
||||||
|
<rect key="frame" x="17" y="105" width="366" height="54"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<view key="contentView">
|
||||||
|
<rect key="frame" x="1" y="1" width="364" height="38"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<button translatesAutoresizingMaskIntoConstraints="NO" id="2">
|
||||||
|
<rect key="frame" x="16" y="12" width="187" height="18"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="check" title="Enable KeePassHttp server" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="3">
|
||||||
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
</button>
|
||||||
|
</subviews>
|
||||||
|
</view>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="2" firstAttribute="top" secondItem="KbH-0Q-5Tw" secondAttribute="top" constant="25" id="I1K-oc-SCv"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="2" secondAttribute="bottom" constant="11" id="IfW-lq-9Nf"/>
|
||||||
|
<constraint firstItem="2" firstAttribute="leading" secondItem="KbH-0Q-5Tw" secondAttribute="leading" constant="16" id="Xod-Hc-0rx"/>
|
||||||
|
</constraints>
|
||||||
|
<color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/>
|
||||||
|
<color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||||
|
</box>
|
||||||
|
<box autoresizesSubviews="NO" verticalHuggingPriority="500" title="Autotype" borderType="line" translatesAutoresizingMaskIntoConstraints="NO" id="P9N-HM-wER">
|
||||||
|
<rect key="frame" x="17" y="16" width="366" height="85"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<view key="contentView">
|
||||||
|
<rect key="frame" x="1" y="1" width="364" height="69"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Kvg-he-3c8">
|
||||||
|
<rect key="frame" x="79" y="15" width="46" height="22"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" title="⌘⌥M" drawsBackground="YES" id="sW8-rh-bhD">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<button translatesAutoresizingMaskIntoConstraints="NO" id="tik-Ar-FJg">
|
||||||
|
<rect key="frame" x="16" y="43" width="168" height="18"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="check" title="Enable global Autotype" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="1qb-Rd-jYu">
|
||||||
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
</button>
|
||||||
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="buI-Wb-o3V">
|
||||||
|
<rect key="frame" x="16" y="17" width="57" height="17"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Shortcut" id="6oN-CH-T0O">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
</subviews>
|
||||||
|
</view>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="tik-Ar-FJg" firstAttribute="top" secondItem="P9N-HM-wER" secondAttribute="top" constant="25" id="1HW-Ac-jq4"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="Kvg-he-3c8" secondAttribute="bottom" constant="12" id="3bK-25-sTQ"/>
|
||||||
|
<constraint firstItem="buI-Wb-o3V" firstAttribute="baseline" secondItem="Kvg-he-3c8" secondAttribute="baseline" id="49G-2q-5ye"/>
|
||||||
|
<constraint firstItem="Kvg-he-3c8" firstAttribute="leading" secondItem="buI-Wb-o3V" secondAttribute="trailing" constant="8" symbolic="YES" id="Khi-Pi-iBU"/>
|
||||||
|
<constraint firstItem="Kvg-he-3c8" firstAttribute="top" secondItem="tik-Ar-FJg" secondAttribute="bottom" constant="8" symbolic="YES" id="cn1-4v-XHZ"/>
|
||||||
|
<constraint firstItem="tik-Ar-FJg" firstAttribute="leading" secondItem="buI-Wb-o3V" secondAttribute="leading" id="eVT-oc-Oz8"/>
|
||||||
|
<constraint firstItem="tik-Ar-FJg" firstAttribute="leading" secondItem="P9N-HM-wER" secondAttribute="leading" constant="16" id="rMB-zA-WBv"/>
|
||||||
|
</constraints>
|
||||||
|
<color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/>
|
||||||
|
<color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||||
|
</box>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="width" constant="400" id="19"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="KbH-0Q-5Tw" secondAttribute="trailing" constant="20" symbolic="YES" id="0x4-nr-DuM"/>
|
||||||
|
<constraint firstItem="KbH-0Q-5Tw" firstAttribute="leading" secondItem="1" secondAttribute="leading" constant="20" symbolic="YES" id="dln-JS-u45"/>
|
||||||
|
<constraint firstItem="P9N-HM-wER" firstAttribute="leading" secondItem="KbH-0Q-5Tw" secondAttribute="leading" id="iZD-AQ-EeG"/>
|
||||||
|
<constraint firstItem="KbH-0Q-5Tw" firstAttribute="top" secondItem="1" secondAttribute="top" constant="20" symbolic="YES" id="mtr-dI-3QM"/>
|
||||||
|
<constraint firstItem="P9N-HM-wER" firstAttribute="top" secondItem="KbH-0Q-5Tw" secondAttribute="bottom" constant="8" symbolic="YES" id="oFy-uk-HLJ"/>
|
||||||
|
<constraint firstItem="P9N-HM-wER" firstAttribute="trailing" secondItem="KbH-0Q-5Tw" secondAttribute="trailing" id="sIZ-ZD-A8K"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="P9N-HM-wER" secondAttribute="bottom" constant="20" symbolic="YES" id="tUs-qA-SKq"/>
|
||||||
|
</constraints>
|
||||||
|
</customView>
|
||||||
|
</objects>
|
||||||
|
</document>
|
||||||
15
MacPass/KPKNode+IconImage.h
Normal file
15
MacPass/KPKNode+IconImage.h
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
//
|
||||||
|
// KPKNode+IconImage.h
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 31.08.13.
|
||||||
|
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "KPKNode.h"
|
||||||
|
|
||||||
|
@interface KPKNode (IconImage)
|
||||||
|
|
||||||
|
@property (nonatomic, readonly) NSImage *iconImage;
|
||||||
|
|
||||||
|
@end
|
||||||
32
MacPass/KPKNode+IconImage.m
Normal file
32
MacPass/KPKNode+IconImage.m
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
//
|
||||||
|
// KPKNode+IconImage.m
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 31.08.13.
|
||||||
|
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "KPKNode+IconImage.h"
|
||||||
|
|
||||||
|
#import "KPKIcon.h"
|
||||||
|
#import "KPKTree.h"
|
||||||
|
#import "KPKMetaData.h"
|
||||||
|
|
||||||
|
#import "MPIconHelper.h"
|
||||||
|
|
||||||
|
@implementation KPKNode (IconImage)
|
||||||
|
|
||||||
|
+ (NSSet *)keyPathsForValuesAffectingIconImage {
|
||||||
|
return [NSSet setWithArray:@[@"iconUUID", @"iconId"]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSImage *)iconImage {
|
||||||
|
if(self.iconUUID) {
|
||||||
|
KPKIcon *icon = [self.tree.metaData findIcon:self.iconUUID];
|
||||||
|
if(icon && icon.image) {
|
||||||
|
return icon.image;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return [MPIconHelper icon:(MPIconType)self.iconId];
|
||||||
|
}
|
||||||
|
@end
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
//
|
|
||||||
// Kdb3Entry+KVOAdditions.h
|
|
||||||
// MacPass
|
|
||||||
//
|
|
||||||
// Created by Michael Starke on 19.07.13.
|
|
||||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "Kdb3Node.h"
|
|
||||||
|
|
||||||
@interface Kdb3Entry (KVOAdditions)
|
|
||||||
|
|
||||||
- (NSUInteger)countOfBinaries;
|
|
||||||
- (id)objectInBinariesAtIndex:(NSUInteger)index;
|
|
||||||
- (void)removeObjectFromBinariesAtIndex:(NSUInteger)index;
|
|
||||||
- (void)insertObject:(id)binary inBinariesAtIndex:(NSUInteger)index;
|
|
||||||
|
|
||||||
@end
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
//
|
|
||||||
// Kdb3Entry+KVOAdditions.m
|
|
||||||
// MacPass
|
|
||||||
//
|
|
||||||
// Created by Michael Starke on 19.07.13.
|
|
||||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "Kdb3Entry+KVOAdditions.h"
|
|
||||||
|
|
||||||
@implementation Kdb3Entry (KVOAdditions)
|
|
||||||
|
|
||||||
- (NSUInteger)countOfBinaries {
|
|
||||||
return (self.binary != nil ? 1 : 0);
|
|
||||||
}
|
|
||||||
- (id)objectInBinariesAtIndex:(NSUInteger)index {
|
|
||||||
return self.binary;
|
|
||||||
}
|
|
||||||
- (void)removeObjectFromBinariesAtIndex:(NSUInteger)index {
|
|
||||||
if(self.binary ) {
|
|
||||||
self.binary = nil;
|
|
||||||
self.binaryDesc = nil;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
- (void)insertObject:(id)binary inBinariesAtIndex:(NSUInteger)index {
|
|
||||||
return;//
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@end
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
//
|
|
||||||
// Kdb3Tree+NewTree.h
|
|
||||||
// MacPass
|
|
||||||
//
|
|
||||||
// Created by Michael Starke on 21.06.13.
|
|
||||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "Kdb3Node.h"
|
|
||||||
|
|
||||||
@interface Kdb3Tree (NewTree)
|
|
||||||
|
|
||||||
+ (Kdb3Tree *)templateTree;
|
|
||||||
|
|
||||||
@end
|
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
//
|
|
||||||
// Kdb3Tree+NewTree.m
|
|
||||||
// MacPass
|
|
||||||
//
|
|
||||||
// Created by Michael Starke on 21.06.13.
|
|
||||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "Kdb3Tree+NewTree.h"
|
|
||||||
|
|
||||||
@implementation Kdb3Tree (NewTree)
|
|
||||||
|
|
||||||
+ (Kdb3Tree *)templateTree {
|
|
||||||
Kdb3Tree *tree = [[Kdb3Tree alloc] init];
|
|
||||||
|
|
||||||
Kdb3Group *rootGroup = [[Kdb3Group alloc] init];
|
|
||||||
rootGroup.name = @"%ROOT%";
|
|
||||||
tree.root = rootGroup;
|
|
||||||
|
|
||||||
KdbGroup *parentGroup = [tree createGroup:rootGroup];
|
|
||||||
parentGroup.name = NSLocalizedString(@"GENERAL", "General");
|
|
||||||
parentGroup.image = 48;
|
|
||||||
[rootGroup addGroup:parentGroup];
|
|
||||||
|
|
||||||
KdbGroup *group = [tree createGroup:parentGroup];
|
|
||||||
group.name = NSLocalizedString(@"WINDOWS", "Windows");
|
|
||||||
group.image = 38;
|
|
||||||
[parentGroup addGroup:group];
|
|
||||||
|
|
||||||
group = [tree createGroup:parentGroup];
|
|
||||||
group.name = NSLocalizedString(@"NETWORK", "Network");
|
|
||||||
group.image = 3;
|
|
||||||
[parentGroup addGroup:group];
|
|
||||||
|
|
||||||
group = [tree createGroup:parentGroup];
|
|
||||||
group.name = NSLocalizedString(@"INTERNET", "Internet");
|
|
||||||
group.image = 1;
|
|
||||||
[parentGroup addGroup:group];
|
|
||||||
|
|
||||||
group = [tree createGroup:parentGroup];
|
|
||||||
group.name = NSLocalizedString(@"EMAIL", "EMail");
|
|
||||||
group.image = 19;
|
|
||||||
[parentGroup addGroup:group];
|
|
||||||
|
|
||||||
group = [tree createGroup:parentGroup];
|
|
||||||
group.name = NSLocalizedString(@"HOMEBANKING", "Homebanking");
|
|
||||||
group.image = 37;
|
|
||||||
[parentGroup addGroup:group];
|
|
||||||
|
|
||||||
|
|
||||||
return tree;
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
//
|
|
||||||
// Kdb4Entry+KVOAdditions.h
|
|
||||||
// MacPass
|
|
||||||
//
|
|
||||||
// Created by Michael Starke on 28.06.13.
|
|
||||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "Kdb4Node.h"
|
|
||||||
|
|
||||||
@interface Kdb4Entry (KVOAdditions)
|
|
||||||
|
|
||||||
- (NSUInteger)countOfStringFields;
|
|
||||||
- (StringField *)objectInStringFieldsAtIndex:(NSUInteger)index;
|
|
||||||
- (void)removeObjectFromStringFieldsAtIndex:(NSUInteger)anIndex;
|
|
||||||
- (void)insertObject:(StringField *)stringfield inStringFieldsAtIndex:(NSUInteger)anIndex;
|
|
||||||
|
|
||||||
- (NSUInteger)countOfBinaries;
|
|
||||||
- (BinaryRef *)objectInBinariesAtIndex:(NSUInteger)index;
|
|
||||||
- (void)removeObjectFromBinariesAtIndex:(NSUInteger)index;
|
|
||||||
- (void)insertObject:(BinaryRef *)binary inBinariesAtIndex:(NSUInteger)index;
|
|
||||||
|
|
||||||
@end
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
//
|
|
||||||
// Kdb4Entry+KVOAdditions.m
|
|
||||||
// MacPass
|
|
||||||
//
|
|
||||||
// Created by Michael Starke on 28.06.13.
|
|
||||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "Kdb4Entry+KVOAdditions.h"
|
|
||||||
|
|
||||||
@implementation Kdb4Entry (KVOAdditions)
|
|
||||||
|
|
||||||
/* Entries */
|
|
||||||
- (NSUInteger)countOfStringFields {
|
|
||||||
return [self.stringFields count];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (StringField *)objectInStringFieldsAtIndex:(NSUInteger)index {
|
|
||||||
return (self.stringFields)[index];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)insertObject:(StringField *)stringfield inStringFieldsAtIndex:(NSUInteger)anIndex {
|
|
||||||
[self.stringFields insertObject:stringfield atIndex:anIndex];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)removeObjectFromStringFieldsAtIndex:(NSUInteger)anIndex {
|
|
||||||
[self.stringFields removeObjectAtIndex:anIndex];
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Binaries */
|
|
||||||
- (NSUInteger)countOfBinaries {
|
|
||||||
return [self.binaries count];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BinaryRef *)objectInBinariesAtIndex:(NSUInteger)index {
|
|
||||||
return (self.binaries)[index];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)insertObject:(BinaryRef *)binary inBinariesAtIndex:(NSUInteger)index {
|
|
||||||
[self.binaries insertObject:binary atIndex:index];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)removeObjectFromBinariesAtIndex:(NSUInteger)index {
|
|
||||||
[self.binaries removeObjectAtIndex:index];
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
//
|
|
||||||
// Kdb4Entry+MPAdditions.h
|
|
||||||
// MacPass
|
|
||||||
//
|
|
||||||
// Created by Michael Starke on 19.07.13.
|
|
||||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "Kdb4Node.h"
|
|
||||||
|
|
||||||
@interface Kdb4Entry (MPAdditions)
|
|
||||||
|
|
||||||
- (NSString *)uniqueKeyForProposal:(NSString *)key;
|
|
||||||
|
|
||||||
@end
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
//
|
|
||||||
// Kdb4Entry+MPAdditions.m
|
|
||||||
// MacPass
|
|
||||||
//
|
|
||||||
// Created by Michael Starke on 19.07.13.
|
|
||||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "Kdb4Entry+MPAdditions.h"
|
|
||||||
|
|
||||||
@implementation Kdb4Entry (MPAdditions)
|
|
||||||
|
|
||||||
- (NSString *)uniqueKeyForProposal:(NSString *)key {
|
|
||||||
/*
|
|
||||||
FIXME: Introduce some cachin behaviour. We iterate over after every single edit
|
|
||||||
*/
|
|
||||||
NSArray *defaultKeys = @[ FIELD_TITLE,
|
|
||||||
FIELD_USER_NAME,
|
|
||||||
FIELD_PASSWORD,
|
|
||||||
FIELD_URL,
|
|
||||||
FIELD_NOTES ];
|
|
||||||
NSMutableSet *keys = [[NSMutableSet alloc] initWithArray:defaultKeys];
|
|
||||||
for(StringField *field in self.stringFields) {
|
|
||||||
[keys addObject:field.key];
|
|
||||||
}
|
|
||||||
NSUInteger counter = 1;
|
|
||||||
NSString *base = key;
|
|
||||||
while([keys containsObject:key]) {
|
|
||||||
key = [NSString stringWithFormat:@"%@-%ld", base, counter++];
|
|
||||||
}
|
|
||||||
return key;
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
//
|
|
||||||
// Kdb4Tree+KVOAdditions.h
|
|
||||||
// MacPass
|
|
||||||
//
|
|
||||||
// Created by Michael Starke on 27.06.13.
|
|
||||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "Kdb4Node.h"
|
|
||||||
|
|
||||||
@interface Kdb4Tree (KVOAdditions)
|
|
||||||
|
|
||||||
- (void)insertObject:(Binary *)binary inBinariesAtIndex:(NSUInteger)index;
|
|
||||||
- (void)insertObject:(CustomIcon *)icon inCustomIconsAtIndex:(NSUInteger)index;
|
|
||||||
|
|
||||||
- (CustomIcon *)objectInCustomIconsAtIndex:(NSUInteger)index;
|
|
||||||
- (Binary *)objectInBinariesAtIndex:(NSUInteger)index;
|
|
||||||
|
|
||||||
@end
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
//
|
|
||||||
// Kdb4Tree+KVOAdditions.m
|
|
||||||
// MacPass
|
|
||||||
//
|
|
||||||
// Created by Michael Starke on 27.06.13.
|
|
||||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "Kdb4Tree+KVOAdditions.h"
|
|
||||||
|
|
||||||
@implementation Kdb4Tree (KVOAdditions)
|
|
||||||
|
|
||||||
- (void)insertObject:(Binary *)binary inBinariesAtIndex:(NSUInteger)index {
|
|
||||||
[self.binaries insertObject:binary atIndex:index];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)insertObject:(CustomIcon *)icon inCustomIconsAtIndex:(NSUInteger)index {
|
|
||||||
[self.customIcons insertObject:icon atIndex:index];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (Binary *)objectInBinariesAtIndex:(NSUInteger)index {
|
|
||||||
return (self.binaries)[index];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (CustomIcon *)objectInCustomIconsAtIndex:(NSUInteger)index {
|
|
||||||
return (self.customIcons)[index];
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
//
|
|
||||||
// Kdb4Tree+NewTree.h
|
|
||||||
// MacPass
|
|
||||||
//
|
|
||||||
// Created by Michael Starke on 21.06.13.
|
|
||||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "Kdb4Node.h"
|
|
||||||
|
|
||||||
@interface Kdb4Tree (NewTree)
|
|
||||||
|
|
||||||
+(Kdb4Tree *)templateTree;
|
|
||||||
+(Kdb4Tree *)demoTree;
|
|
||||||
|
|
||||||
@end
|
|
||||||
@@ -1,123 +0,0 @@
|
|||||||
//
|
|
||||||
// Kdb4Tree+NewTree.m
|
|
||||||
// MacPass
|
|
||||||
//
|
|
||||||
// Created by Michael Starke on 21.06.13.
|
|
||||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "Kdb4Tree+NewTree.h"
|
|
||||||
|
|
||||||
@implementation Kdb4Tree (NewTree)
|
|
||||||
|
|
||||||
+ (Kdb4Tree *)templateTree {
|
|
||||||
NSDate *currentTime = [NSDate date];
|
|
||||||
|
|
||||||
Kdb4Tree *tree = [[Kdb4Tree alloc] init];
|
|
||||||
tree.generator = @"MacPass";
|
|
||||||
tree.databaseName = NSLocalizedString(@"DATABASE", "");
|
|
||||||
tree.databaseNameChanged = currentTime;
|
|
||||||
tree.databaseDescription = @"";
|
|
||||||
tree.databaseDescriptionChanged = currentTime;
|
|
||||||
tree.defaultUserName = @"";
|
|
||||||
tree.defaultUserNameChanged = currentTime;
|
|
||||||
tree.maintenanceHistoryDays = 365;
|
|
||||||
tree.color = @"";
|
|
||||||
tree.masterKeyChanged = currentTime;
|
|
||||||
tree.masterKeyChangeRec = -1;
|
|
||||||
tree.masterKeyChangeForce = -1;
|
|
||||||
tree.protectTitle = NO;
|
|
||||||
tree.protectUserName = NO;
|
|
||||||
tree.protectPassword = YES;
|
|
||||||
tree.protectUrl = NO;
|
|
||||||
tree.protectNotes = NO;
|
|
||||||
tree.recycleBinEnabled = YES;
|
|
||||||
tree.recycleBinUuid = [UUID nullUuid];
|
|
||||||
tree.recycleBinChanged = currentTime;
|
|
||||||
tree.entryTemplatesGroup = [UUID nullUuid];
|
|
||||||
tree.entryTemplatesGroupChanged = currentTime;
|
|
||||||
tree.historyMaxItems = 10;
|
|
||||||
tree.historyMaxSize = 6 * 1024 * 1024; // 6 MB
|
|
||||||
tree.lastSelectedGroup = [UUID nullUuid];
|
|
||||||
tree.lastTopVisibleGroup = [UUID nullUuid];
|
|
||||||
|
|
||||||
KdbGroup *parentGroup = [tree createGroup:nil];
|
|
||||||
parentGroup.name = NSLocalizedString(@"GENERAL", "General");
|
|
||||||
parentGroup.image = 48;
|
|
||||||
tree.root = parentGroup;
|
|
||||||
|
|
||||||
KdbGroup *group = [tree createGroup:parentGroup];
|
|
||||||
group.name = NSLocalizedString(@"WINDOWS", "Windows");
|
|
||||||
group.image = 38;
|
|
||||||
[parentGroup addGroup:group];
|
|
||||||
|
|
||||||
group = [tree createGroup:parentGroup];
|
|
||||||
group.name = NSLocalizedString(@"NETWORK", "Network");
|
|
||||||
group.image = 3;
|
|
||||||
[parentGroup addGroup:group];
|
|
||||||
|
|
||||||
group = [tree createGroup:parentGroup];
|
|
||||||
group.name = NSLocalizedString(@"INTERNET", "Internet");
|
|
||||||
group.image = 1;
|
|
||||||
[parentGroup addGroup:group];
|
|
||||||
|
|
||||||
group = [tree createGroup:parentGroup];
|
|
||||||
group.name = NSLocalizedString(@"EMAIL", "EMail");
|
|
||||||
group.image = 19;
|
|
||||||
[parentGroup addGroup:group];
|
|
||||||
|
|
||||||
group = [tree createGroup:parentGroup];
|
|
||||||
group.name = NSLocalizedString(@"HOMEBANKING", "Homebanking");
|
|
||||||
group.image = 37;
|
|
||||||
[parentGroup addGroup:group];
|
|
||||||
|
|
||||||
return tree;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ (Kdb4Tree *)demoTree {
|
|
||||||
NSDate *currentTime = [NSDate date];
|
|
||||||
|
|
||||||
Kdb4Tree *tree = [[Kdb4Tree alloc] init];
|
|
||||||
tree.generator = @"MacPass";
|
|
||||||
tree.databaseName = @"Icon Demonstation";
|
|
||||||
tree.databaseNameChanged = currentTime;
|
|
||||||
tree.databaseDescription = @"This database just has all default icons as groups in the tree";
|
|
||||||
tree.databaseDescriptionChanged = currentTime;
|
|
||||||
tree.defaultUserName = @"";
|
|
||||||
tree.defaultUserNameChanged = currentTime;
|
|
||||||
tree.maintenanceHistoryDays = 365;
|
|
||||||
tree.color = @"";
|
|
||||||
tree.masterKeyChanged = currentTime;
|
|
||||||
tree.masterKeyChangeRec = -1;
|
|
||||||
tree.masterKeyChangeForce = -1;
|
|
||||||
tree.protectTitle = NO;
|
|
||||||
tree.protectUserName = NO;
|
|
||||||
tree.protectPassword = YES;
|
|
||||||
tree.protectUrl = NO;
|
|
||||||
tree.protectNotes = NO;
|
|
||||||
tree.recycleBinEnabled = YES;
|
|
||||||
tree.recycleBinUuid = [UUID nullUuid];
|
|
||||||
tree.recycleBinChanged = currentTime;
|
|
||||||
tree.entryTemplatesGroup = [UUID nullUuid];
|
|
||||||
tree.entryTemplatesGroupChanged = currentTime;
|
|
||||||
tree.historyMaxItems = 10;
|
|
||||||
tree.historyMaxSize = 6 * 1024 * 1024; // 6 MB
|
|
||||||
tree.lastSelectedGroup = [UUID nullUuid];
|
|
||||||
tree.lastTopVisibleGroup = [UUID nullUuid];
|
|
||||||
|
|
||||||
KdbGroup *parentGroup = [tree createGroup:nil];
|
|
||||||
parentGroup.name = @"General";
|
|
||||||
parentGroup.image = 48;
|
|
||||||
tree.root = parentGroup;
|
|
||||||
|
|
||||||
for(NSUInteger iImageIndex = 0; iImageIndex < 69; iImageIndex++) {
|
|
||||||
KdbGroup *group = [tree createGroup:parentGroup];
|
|
||||||
group.name = [NSString stringWithFormat:@"Group %ld", iImageIndex];
|
|
||||||
group.image = iImageIndex;
|
|
||||||
[parentGroup addGroup:group];
|
|
||||||
}
|
|
||||||
|
|
||||||
return tree;
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
//
|
|
||||||
// KdbEntry+MPAdditions.h
|
|
||||||
// MacPass
|
|
||||||
//
|
|
||||||
// Created by Michael Starke on 01.07.13.
|
|
||||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "Kdb.h"
|
|
||||||
|
|
||||||
@interface KdbEntry (MPAdditions)
|
|
||||||
|
|
||||||
@property (nonatomic, readonly) NSImage *icon;
|
|
||||||
|
|
||||||
@end
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
//
|
|
||||||
// KdbEntry+MPAdditions.m
|
|
||||||
// MacPass
|
|
||||||
//
|
|
||||||
// Created by Michael Starke on 01.07.13.
|
|
||||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "KdbEntry+MPAdditions.h"
|
|
||||||
#import "Kdb3Node.h"
|
|
||||||
#import "Kdb4Node.h"
|
|
||||||
|
|
||||||
#import "MPIconHelper.h"
|
|
||||||
|
|
||||||
@implementation KdbEntry (MPAdditions)
|
|
||||||
|
|
||||||
- (NSImage *)icon {
|
|
||||||
return [MPIconHelper icon:(MPIconType)self.image];
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
//
|
|
||||||
// KdbEntry+MPTreeTools.h
|
|
||||||
// MacPass
|
|
||||||
//
|
|
||||||
// Created by Michael Starke on 10.06.13.
|
|
||||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "Kdb.h"
|
|
||||||
|
|
||||||
@interface KdbEntry (MPTreeTools)
|
|
||||||
|
|
||||||
- (NSUInteger)indexInParent;
|
|
||||||
|
|
||||||
@end
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
//
|
|
||||||
// KdbEntry+MPTreeTools.m
|
|
||||||
// MacPass
|
|
||||||
//
|
|
||||||
// Created by Michael Starke on 10.06.13.
|
|
||||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "KdbEntry+MPTreeTools.h"
|
|
||||||
|
|
||||||
@implementation KdbEntry (MPTreeTools)
|
|
||||||
|
|
||||||
- (NSUInteger)indexInParent {
|
|
||||||
if(self.parent) {
|
|
||||||
return [self.parent.entries indexOfObject:self];
|
|
||||||
}
|
|
||||||
return NSNotFound;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@end
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
//
|
|
||||||
// KdbEntry+Undo.h
|
|
||||||
// MacPass
|
|
||||||
//
|
|
||||||
// Created by Michael Starke on 12.05.13.
|
|
||||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "Kdb.h"
|
|
||||||
|
|
||||||
APPKIT_EXTERN NSString *const MPEntryTitleUndoableKey;
|
|
||||||
APPKIT_EXTERN NSString *const MPEntryUsernameUndoableKey;
|
|
||||||
APPKIT_EXTERN NSString *const MPEntryPasswordUndoableKey;
|
|
||||||
APPKIT_EXTERN NSString *const MPEntryUrlUndoableKey;
|
|
||||||
APPKIT_EXTERN NSString *const MPEntryNotesUndoableKey;
|
|
||||||
|
|
||||||
|
|
||||||
@interface KdbEntry (Undo)
|
|
||||||
|
|
||||||
- (NSString *)titleUndoable;
|
|
||||||
- (NSString *)usernameUndoable;
|
|
||||||
- (NSString *)passwordUndoable;
|
|
||||||
- (NSString *)urlUndoable;
|
|
||||||
- (NSString *)notesUndoable;
|
|
||||||
|
|
||||||
- (void)setTitleUndoable:(NSString *)title;
|
|
||||||
- (void)setUsernameUndoable:(NSString *)username;
|
|
||||||
- (void)setPasswordUndoable:(NSString *)password;
|
|
||||||
- (void)setUrlUndoable:(NSString *)url;
|
|
||||||
- (void)setNotesUndoable:(NSString *)notes;
|
|
||||||
|
|
||||||
- (void)deleteUndoable;
|
|
||||||
- (void)moveToGroupUndoable:(KdbGroup *)group atIndex:(NSUInteger)index;
|
|
||||||
- (void)moveToTrashUndoable:(KdbGroup *)trash atIndex:(NSUInteger)index;
|
|
||||||
|
|
||||||
@end
|
|
||||||
@@ -1,159 +0,0 @@
|
|||||||
//
|
|
||||||
// KdbEntry+Undo.m
|
|
||||||
// MacPass
|
|
||||||
//
|
|
||||||
// Created by Michael Starke on 12.05.13.
|
|
||||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "KdbEntry+Undo.h"
|
|
||||||
#import "KdbGroup+Undo.h"
|
|
||||||
#import "KdbGroup+KVOAdditions.h"
|
|
||||||
#import "KdbGroup+MPTreeTools.h"
|
|
||||||
|
|
||||||
NSString *const MPEntryTitleUndoableKey = @"titleUndoable";
|
|
||||||
NSString *const MPEntryUsernameUndoableKey = @"usernameUndoable";
|
|
||||||
NSString *const MPEntryPasswordUndoableKey = @"passwordUndoable";
|
|
||||||
NSString *const MPEntryUrlUndoableKey = @"urlUndoable";
|
|
||||||
NSString *const MPEntryNotesUndoableKey = @"notesUndoable";
|
|
||||||
|
|
||||||
#ifndef MPSetActionName
|
|
||||||
#define MPSetActionName(key, comment) \
|
|
||||||
if(![[self undoManager] isUndoing]) {\
|
|
||||||
[[self undoManager] setActionName:[[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]];\
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
@implementation KdbEntry (Undo)
|
|
||||||
|
|
||||||
- (NSUndoManager *)undoManager {
|
|
||||||
return [[[NSDocumentController sharedDocumentController] currentDocument] undoManager];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSString *)titleUndoable {
|
|
||||||
return [self title];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSString *)usernameUndoable {
|
|
||||||
return [self username];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSString *)passwordUndoable {
|
|
||||||
return [self password];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSString *)urlUndoable {
|
|
||||||
return [self url];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSString *)notesUndoable {
|
|
||||||
return [self notes];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)setTitleUndoable:(NSString *)title {
|
|
||||||
[[self undoManager] registerUndoWithTarget:self selector:@selector(setTitleUndoable:) object:self.title];
|
|
||||||
|
|
||||||
if(![[self undoManager] isUndoing]) {
|
|
||||||
[[self undoManager] setActionName:NSLocalizedString(@"SET_TITLE", "Set Title")];
|
|
||||||
}
|
|
||||||
|
|
||||||
[self setLastModificationTime:[NSDate date]];
|
|
||||||
[self setTitle:title];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)setUsernameUndoable:(NSString *)username {
|
|
||||||
[[self undoManager] registerUndoWithTarget:self selector:@selector(setUsernameUndoable:) object:self.username];
|
|
||||||
|
|
||||||
if(![[self undoManager] isUndoing]) {
|
|
||||||
[[self undoManager] setActionName:NSLocalizedString(@"SET_USERNAME", "Undo set username")];
|
|
||||||
}
|
|
||||||
|
|
||||||
[self setLastModificationTime:[NSDate date]];
|
|
||||||
[self setUsername:username];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)setPasswordUndoable:(NSString *)password {
|
|
||||||
[[self undoManager] registerUndoWithTarget:self selector:@selector(setPasswordUndoable:) object:self.password];
|
|
||||||
MPSetActionName(@"SET_PASSWORT", "Undo set password");
|
|
||||||
|
|
||||||
if(![[self undoManager] isUndoing]) {
|
|
||||||
[[self undoManager] setActionName:NSLocalizedString(@"SET_TITLE", "Set Title")];
|
|
||||||
}
|
|
||||||
|
|
||||||
[self setLastModificationTime:[NSDate date]];
|
|
||||||
[self setPassword:password];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)setUrlUndoable:(NSString *)url {
|
|
||||||
[[self undoManager] registerUndoWithTarget:self selector:@selector(setUrlUndoable:) object:self.url];
|
|
||||||
MPSetActionName(@"SET_URL", "Undo set URL");
|
|
||||||
|
|
||||||
if(![[self undoManager] isUndoing]) {
|
|
||||||
[[self undoManager] setActionName:NSLocalizedString(@"SET_TITLE", "Set Title")];
|
|
||||||
}
|
|
||||||
|
|
||||||
[self setLastModificationTime:[NSDate date]];
|
|
||||||
[self setUrl:url];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)setNotesUndoable:(NSString *)notes {
|
|
||||||
[[self undoManager] registerUndoWithTarget:self selector:@selector(setNotesUndoable:) object:self.notes];
|
|
||||||
MPSetActionName(@"SET_NOTES", "Set Notes");
|
|
||||||
|
|
||||||
if(![[self undoManager] isUndoing]) {
|
|
||||||
[[self undoManager] setActionName:NSLocalizedString(@"SET_TITLE", "Set Title")];
|
|
||||||
}
|
|
||||||
|
|
||||||
[self setLastModificationTime:[NSDate date]];
|
|
||||||
[self setNotes:notes];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)deleteUndoable {
|
|
||||||
if(!self.parent) {
|
|
||||||
return; // No parent to be removed from
|
|
||||||
}
|
|
||||||
NSUInteger oldIndex = [self.parent.entries indexOfObject:self];
|
|
||||||
if(oldIndex == NSNotFound) {
|
|
||||||
return; // We're not in our parents entries list
|
|
||||||
}
|
|
||||||
[[[self undoManager] prepareWithInvocationTarget:self.parent] addEntryUndoable:self atIndex:oldIndex];
|
|
||||||
|
|
||||||
if(![[self undoManager] isUndoing]) {
|
|
||||||
[[self undoManager] setActionName:NSLocalizedString(@"DELETE_ENTRY", "Set Title")];
|
|
||||||
}
|
|
||||||
|
|
||||||
//[[NSNotificationCenter defaultCenter] postNotificationName:@"" object:self userInfo:nil];
|
|
||||||
[self.parent removeObjectFromEntriesAtIndex:oldIndex];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)moveToGroupUndoable:(KdbGroup *)group atIndex:(NSUInteger)index {
|
|
||||||
[self _moveToGroup:group atIndex:index actionName:NSLocalizedString(@"MOVE_ENTRY", "Move Group")];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)moveToTrashUndoable:(KdbGroup *)trash atIndex:(NSUInteger)index {
|
|
||||||
[self _moveToGroup:trash atIndex:index actionName:NSLocalizedString(@"TRASH_ENTRY", "Move Entry to Trash")];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)_moveToGroup:(KdbGroup *)group atIndex:(NSUInteger)index actionName:(NSString *)name {
|
|
||||||
if(!group || !self.parent) {
|
|
||||||
return; // Nothing to be moved about
|
|
||||||
}
|
|
||||||
NSUInteger oldIndex = [self.parent.entries indexOfObject:self];
|
|
||||||
if(oldIndex == NSNotFound) {
|
|
||||||
return; // Not found in entries of parent!
|
|
||||||
}
|
|
||||||
[[[self undoManager] prepareWithInvocationTarget:self] _moveToGroup:self.parent atIndex:oldIndex actionName:name];
|
|
||||||
|
|
||||||
if(![[self undoManager] isUndoing]) {
|
|
||||||
[[self undoManager] setActionName:name];
|
|
||||||
}
|
|
||||||
|
|
||||||
[self.parent removeObjectFromEntriesAtIndex:oldIndex];
|
|
||||||
// Old indices might be wrong, correct them if necessary
|
|
||||||
index = MIN(index, [group.entries count]);
|
|
||||||
[group insertObject:self inEntriesAtIndex:index];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@end
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
//
|
|
||||||
// KdbGroup+KVOAdditions.h
|
|
||||||
// MacPass
|
|
||||||
//
|
|
||||||
// Created by Michael Starke on 08.06.13.
|
|
||||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "Kdb.h"
|
|
||||||
|
|
||||||
@interface KdbGroup (KVOAdditions)
|
|
||||||
|
|
||||||
/* KVO Accesors for the entries */
|
|
||||||
- (KdbEntry *)objectInEntriesAtIndex:(NSUInteger)index;
|
|
||||||
- (NSUInteger)countOfEntries;
|
|
||||||
- (void)insertObject:(KdbEntry *)entry inEntriesAtIndex:(NSUInteger)index;
|
|
||||||
- (void)removeObjectFromEntriesAtIndex:(NSUInteger)index;
|
|
||||||
|
|
||||||
/* KVO Accessors for the groups */
|
|
||||||
- (KdbGroup *)objectInGroupsAtIndex:(NSUInteger)index;
|
|
||||||
- (NSUInteger)countOfGroups;
|
|
||||||
- (void)insertObject:(KdbGroup *)group inGroupsAtIndex:(NSUInteger)index;
|
|
||||||
- (void)removeObjectFromGroupsAtIndex:(NSUInteger)index;
|
|
||||||
|
|
||||||
@end
|
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
//
|
|
||||||
// KdbGroup+KVOAdditions.m
|
|
||||||
// MacPass
|
|
||||||
//
|
|
||||||
// Created by Michael Starke on 08.06.13.
|
|
||||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "KdbGroup+KVOAdditions.h"
|
|
||||||
|
|
||||||
@implementation KdbGroup (KVOAdditions)
|
|
||||||
|
|
||||||
- (void)insertObject:(KdbEntry *)entry inEntriesAtIndex:(NSUInteger)index {
|
|
||||||
entry.parent = self;
|
|
||||||
[_entries insertObject:entry atIndex:index];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)removeObjectFromEntriesAtIndex:(NSUInteger)index {
|
|
||||||
KdbEntry *entry = _entries[index];
|
|
||||||
[_entries removeObjectAtIndex:index];
|
|
||||||
entry.parent = nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSUInteger)countOfEntries {
|
|
||||||
return [self.entries count];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (KdbEntry *)objectInEntriesAtIndex:(NSUInteger)index {
|
|
||||||
return self.entries[index];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (KdbGroup *)objectInGroupsAtIndex:(NSUInteger)index {
|
|
||||||
return self.groups[index];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSUInteger)countOfGroups {
|
|
||||||
return [self.groups count];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)insertObject:(KdbGroup *)group inGroupsAtIndex:(NSUInteger)index {
|
|
||||||
group.parent = self;
|
|
||||||
[_groups insertObject:group atIndex:index];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)removeObjectFromGroupsAtIndex:(NSUInteger)index {
|
|
||||||
KdbGroup *group = (self.groups)[index];
|
|
||||||
[_groups removeObjectAtIndex:index];
|
|
||||||
group.parent = nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
//
|
|
||||||
// KdbGroup+MPAdditions.h
|
|
||||||
// MacPass
|
|
||||||
//
|
|
||||||
// Created by Michael Starke on 01.07.13.
|
|
||||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "Kdb.h"
|
|
||||||
|
|
||||||
@interface KdbGroup (MPAdditions)
|
|
||||||
|
|
||||||
/* Adapter to load images based on icon index */
|
|
||||||
@property (nonatomic, readonly) NSImage *icon;
|
|
||||||
|
|
||||||
/* Walks the tree up to the root element */
|
|
||||||
- (KdbGroup *)root;
|
|
||||||
|
|
||||||
/* Removes all Groups and Entries from this group*/
|
|
||||||
- (void)clear;
|
|
||||||
|
|
||||||
@end
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
//
|
|
||||||
// KdbGroup+MPAdditions.m
|
|
||||||
// MacPass
|
|
||||||
//
|
|
||||||
// Created by Michael Starke on 01.07.13.
|
|
||||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "KdbGroup+MPAdditions.h"
|
|
||||||
#import "KdbGroup+KVOAdditions.h"
|
|
||||||
#import "MPIconHelper.h"
|
|
||||||
|
|
||||||
@implementation KdbGroup (MPAdditions)
|
|
||||||
|
|
||||||
- (NSImage *)icon {
|
|
||||||
return [MPIconHelper icon:(MPIconType)self.image];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (KdbGroup *)root {
|
|
||||||
if(self.parent) {
|
|
||||||
return [self.parent root];
|
|
||||||
}
|
|
||||||
return self;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)clear {
|
|
||||||
NSUInteger groupCount = [_groups count];
|
|
||||||
for(NSInteger index = (groupCount - 1); index > -1; index--) {
|
|
||||||
[self removeObjectFromGroupsAtIndex:index];
|
|
||||||
}
|
|
||||||
NSUInteger entryCount = [_entries count];
|
|
||||||
for(NSInteger index = (entryCount - 1); index > -1; index--) {
|
|
||||||
[self removeObjectFromEntriesAtIndex:index];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@end
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
//
|
|
||||||
// KdbGroup+MPTreeTools.h
|
|
||||||
// MacPass
|
|
||||||
//
|
|
||||||
// Created by michael starke on 19.02.13.
|
|
||||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "Kdb.h"
|
|
||||||
@class UUID;
|
|
||||||
|
|
||||||
@interface KdbGroup (MPTreeTools)
|
|
||||||
|
|
||||||
/* Returns all groups under this group and it's subgroups */
|
|
||||||
- (NSArray *)childGroups;
|
|
||||||
/* Returns all entries under this group and it's subgroups */
|
|
||||||
- (NSArray *)childEntries;
|
|
||||||
/* Returns the entry with the UUID */
|
|
||||||
- (KdbEntry *)entryForUUID:(UUID *)uuid;
|
|
||||||
/* Returns the group with the UUID */
|
|
||||||
- (KdbGroup *)groupForUUID:(UUID *)uuid;
|
|
||||||
|
|
||||||
- (BOOL)isAnchestorOfGroup:(KdbGroup *)group;
|
|
||||||
|
|
||||||
@end
|
|
||||||
@@ -1,66 +0,0 @@
|
|||||||
//
|
|
||||||
// KdbGroup+MPTreeTools.m
|
|
||||||
// MacPass
|
|
||||||
//
|
|
||||||
// Created by michael starke on 19.02.13.
|
|
||||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "KdbGroup+MPTreeTools.h"
|
|
||||||
#import "Kdb4Node.h"
|
|
||||||
#import "Kdb3Node.h"
|
|
||||||
|
|
||||||
@implementation KdbGroup (MPTreeTools)
|
|
||||||
|
|
||||||
- (NSArray *)childGroups {
|
|
||||||
NSMutableArray *childGroups = [NSMutableArray arrayWithCapacity:[self.groups count]];
|
|
||||||
[childGroups addObjectsFromArray:self.groups];
|
|
||||||
for(KdbGroup *childGroup in self.groups) {
|
|
||||||
[childGroups addObjectsFromArray:[childGroup childGroups]];
|
|
||||||
}
|
|
||||||
return childGroups;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSArray *)childEntries {
|
|
||||||
NSMutableArray *childEntries = [NSMutableArray arrayWithCapacity:[self.groups count] + [self.entries count]];
|
|
||||||
[childEntries addObjectsFromArray:self.entries];
|
|
||||||
for( KdbGroup *childGroup in self.groups) {
|
|
||||||
[childEntries addObjectsFromArray:[childGroup childEntries]];
|
|
||||||
}
|
|
||||||
return childEntries;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (KdbEntry *)entryForUUID:(UUID *)uuid {
|
|
||||||
NSArray *childEntries = [self childEntries];
|
|
||||||
NSArray *filterdEntries = [childEntries filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
|
|
||||||
return [uuid isEqual:(UUID *)[evaluatedObject uuid]];
|
|
||||||
}]];
|
|
||||||
NSAssert([filterdEntries count] <= 1, @"UUID hast to be unique");
|
|
||||||
return [filterdEntries lastObject];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (KdbGroup *)groupForUUID:(UUID *)uuid {
|
|
||||||
NSArray *childGroups = [self childGroups];
|
|
||||||
NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
|
|
||||||
return [uuid isEqual:(UUID *)[evaluatedObject uuid]];
|
|
||||||
}];
|
|
||||||
NSArray *filteredGroups = [childGroups filteredArrayUsingPredicate:predicate];
|
|
||||||
NSAssert([filteredGroups count] <= 1, @"UUID hast to be unique");
|
|
||||||
return [filteredGroups lastObject];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL)isAnchestorOfGroup:(KdbGroup *)group {
|
|
||||||
if(group == nil) {
|
|
||||||
return NO;
|
|
||||||
}
|
|
||||||
KdbGroup *ancestor = self.parent;
|
|
||||||
while(ancestor.parent) {
|
|
||||||
if(group == self) {
|
|
||||||
return YES;
|
|
||||||
}
|
|
||||||
ancestor = ancestor.parent;
|
|
||||||
}
|
|
||||||
return NO;
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
//
|
|
||||||
// KdbGroup+Undo.h
|
|
||||||
// MacPass
|
|
||||||
//
|
|
||||||
// Created by Michael Starke on 18.05.13.
|
|
||||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "Kdb.h"
|
|
||||||
|
|
||||||
APPKIT_EXTERN NSString *const MPGroupNameUndoableKey;
|
|
||||||
|
|
||||||
@interface KdbGroup (Undo)
|
|
||||||
|
|
||||||
- (NSUndoManager *)undoManager;
|
|
||||||
|
|
||||||
- (NSString *)nameUndoable;
|
|
||||||
- (void)setNameUndoable:(NSString *)newName;
|
|
||||||
|
|
||||||
- (void)deleteUndoable;
|
|
||||||
- (void)addGroupUndoable:(KdbGroup *)group atIndex:(NSUInteger)index;
|
|
||||||
- (void)addEntryUndoable:(KdbEntry *)entry atIndex:(NSUInteger)index;
|
|
||||||
- (void)moveToGroupUndoable:(KdbGroup *)group atIndex:(NSUInteger)index;
|
|
||||||
- (void)moveToTrashUndoable:(KdbGroup *)trash atIndex:(NSUInteger)index;
|
|
||||||
|
|
||||||
@end
|
|
||||||
@@ -1,108 +0,0 @@
|
|||||||
//
|
|
||||||
// KdbGroup+Undo.m
|
|
||||||
// MacPass
|
|
||||||
//
|
|
||||||
// Created by Michael Starke on 18.05.13.
|
|
||||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "KdbGroup+Undo.h"
|
|
||||||
#import "KdbGroup+KVOAdditions.h"
|
|
||||||
#import "KdbEntry+Undo.h"
|
|
||||||
|
|
||||||
NSString *const MPGroupNameUndoableKey = @"nameUndoable";
|
|
||||||
|
|
||||||
@implementation KdbGroup (Undo)
|
|
||||||
|
|
||||||
- (NSUndoManager *)undoManager {
|
|
||||||
return [[[NSDocumentController sharedDocumentController] currentDocument] undoManager];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSString *)nameUndoable {
|
|
||||||
return [self name];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)setNameUndoable:(NSString *)newName {
|
|
||||||
[[self undoManager] registerUndoWithTarget:self selector:@selector(setNameUndoable:) object:self.name];
|
|
||||||
|
|
||||||
if(![[self undoManager] isUndoing]) {
|
|
||||||
[[self undoManager] setActionName:NSLocalizedString(@"SET_NAME", "Set Name")];
|
|
||||||
}
|
|
||||||
|
|
||||||
self.name = newName;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)deleteUndoable {
|
|
||||||
if(!self.parent) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
NSUInteger oldIndex = [self.parent.groups indexOfObject:self];
|
|
||||||
if(oldIndex == NSNotFound) {
|
|
||||||
return; // Inconsistent data
|
|
||||||
}
|
|
||||||
[[[self undoManager] prepareWithInvocationTarget:self.parent] addGroupUndoable:self atIndex:oldIndex];
|
|
||||||
|
|
||||||
if(![[self undoManager] isUndoing]) {
|
|
||||||
[[self undoManager] setActionName:NSLocalizedString(@"DELETE_GROUP", "Delete Group")];
|
|
||||||
}
|
|
||||||
|
|
||||||
[self.parent removeObjectFromGroupsAtIndex:oldIndex];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)addGroupUndoable:(KdbGroup *)group atIndex:(NSUInteger)index {
|
|
||||||
if(!group) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
[[[self undoManager] prepareWithInvocationTarget:group] deleteUndoable];
|
|
||||||
|
|
||||||
if(![[self undoManager] isUndoing]) {
|
|
||||||
[[self undoManager] setActionName:NSLocalizedString(@"ADD_GROUP", "Add Group")];
|
|
||||||
}
|
|
||||||
|
|
||||||
index = MIN(index, [group.groups count]);
|
|
||||||
[self insertObject:group inGroupsAtIndex:index];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)addEntryUndoable:(KdbEntry *)entry atIndex:(NSUInteger)index {
|
|
||||||
if(!entry) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
index = MIN(index, [self.entries count]);
|
|
||||||
[[[self undoManager] prepareWithInvocationTarget:entry] deleteUndoable];
|
|
||||||
|
|
||||||
if(![[self undoManager] isUndoing]) {
|
|
||||||
[[self undoManager] setActionName:NSLocalizedString(@"ADD_ENTRY", "Add Entry")];
|
|
||||||
}
|
|
||||||
|
|
||||||
[self insertObject:entry inEntriesAtIndex:index];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)moveToGroupUndoable:(KdbGroup *)group atIndex:(NSUInteger)index {
|
|
||||||
[self _moveToGroup:group atIndex:index actionName:NSLocalizedString(@"MOVE_GROUP", "Move Group" )];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)moveToTrashUndoable:(KdbGroup *)trash atIndex:(NSUInteger)index {
|
|
||||||
[self _moveToGroup:trash atIndex:index actionName:NSLocalizedString(@"TRASH_GROUP", "Move Group to Trash")];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)_moveToGroup:(KdbGroup *)group atIndex:(NSUInteger)index actionName:(NSString *)actionName {
|
|
||||||
if(!self.parent || !group) {
|
|
||||||
return; // No target or origin
|
|
||||||
}
|
|
||||||
NSUInteger oldIndex = [self.parent.groups indexOfObject:self];
|
|
||||||
if(oldIndex == NSNotFound) {
|
|
||||||
return; // We aren't in our parents groups list.
|
|
||||||
}
|
|
||||||
[[[self undoManager] prepareWithInvocationTarget:self] moveToGroupUndoable:self.parent atIndex:oldIndex];
|
|
||||||
|
|
||||||
if(![[self undoManager] isUndoing]) {
|
|
||||||
[[self undoManager] setActionName:actionName];
|
|
||||||
}
|
|
||||||
|
|
||||||
[self.parent removeObjectFromGroupsAtIndex:oldIndex];
|
|
||||||
index = MIN(index, [group.groups count]);
|
|
||||||
[group insertObject:self inGroupsAtIndex:index];
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
//
|
|
||||||
// KdbTree+MPAdditions.h
|
|
||||||
// MacPass
|
|
||||||
//
|
|
||||||
// Created by michael starke on 20.02.13.
|
|
||||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "Kdb.h"
|
|
||||||
|
|
||||||
@class BinaryRef;
|
|
||||||
@class Binary;
|
|
||||||
|
|
||||||
@interface KdbTree (MPAdditions)
|
|
||||||
|
|
||||||
- (NSArray *)allEntries;
|
|
||||||
|
|
||||||
- (NSArray *)allGroups;
|
|
||||||
|
|
||||||
@end
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
//
|
|
||||||
// KdbTree+MPAdditions.m
|
|
||||||
// MacPass
|
|
||||||
//
|
|
||||||
// Created by michael starke on 20.02.13.
|
|
||||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "KdbTree+MPAdditions.h"
|
|
||||||
#import "KdbGroup+MPTreeTools.h"
|
|
||||||
|
|
||||||
#import "NSMutableData+Base64.h"
|
|
||||||
#import "Kdb3Node.h"
|
|
||||||
#import "Kdb4Node.h"
|
|
||||||
|
|
||||||
@implementation KdbTree (MPAdditions)
|
|
||||||
|
|
||||||
- (NSArray *)allGroups {
|
|
||||||
return [self.root childGroups];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSArray *)allEntries {
|
|
||||||
return [self.root childEntries];
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
||||||
@@ -9,9 +9,11 @@
|
|||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
typedef NS_ENUM(NSUInteger, MPActionType) {
|
typedef NS_ENUM(NSUInteger, MPActionType) {
|
||||||
MPUnkownAction, // Netural element to be used for returns
|
MPUnkownAction, // Neutral element to be used for returns
|
||||||
MPActionAddEntry, // Add an new entry
|
MPActionAddEntry, // Add an new entry
|
||||||
MPActionAddGroup, // Add a new group
|
MPActionAddGroup, // Add a new group
|
||||||
|
MPActionCloneEntry, // Simply clone an entry (inlcuding history)
|
||||||
|
MPActionCloneEntryWithOptions, // Request user inptu what clone
|
||||||
MPActionDelete, // Delete entry or group
|
MPActionDelete, // Delete entry or group
|
||||||
MPActionCopyUsername, // copy username to pasteboard
|
MPActionCopyUsername, // copy username to pasteboard
|
||||||
MPActionCopyPassword, // copy password to pasteboard
|
MPActionCopyPassword, // copy password to pasteboard
|
||||||
@@ -19,12 +21,28 @@ typedef NS_ENUM(NSUInteger, MPActionType) {
|
|||||||
MPActionOpenURL, // open url in default browser
|
MPActionOpenURL, // open url in default browser
|
||||||
MPActionToggleInspector,
|
MPActionToggleInspector,
|
||||||
MPActionLock, // show the lock screen
|
MPActionLock, // show the lock screen
|
||||||
MPActionEmptyTrash // empties the trashcan, if there is one
|
MPActionEmptyTrash, // empties the trashcan, if there is one
|
||||||
|
MPActionEditPassword, // change the database password
|
||||||
|
MPActionDatabaseSettings, // Show the settings for the database
|
||||||
|
MPActionEditTemplateGroup, // Edit the Template group
|
||||||
|
MPActionExportXML, // Exporte as XML
|
||||||
|
MPActionImportXML // Import form XML
|
||||||
};
|
};
|
||||||
|
/**
|
||||||
|
* Helper to retrieve commonly used actions
|
||||||
|
*/
|
||||||
@interface MPActionHelper : NSObject
|
@interface MPActionHelper : NSObject
|
||||||
|
/**
|
||||||
|
* Call this to retrieve a selector for a common used action
|
||||||
|
* @param type The action type as MPActionType
|
||||||
|
* @return selector for this action type
|
||||||
|
*/
|
||||||
+ (SEL)actionOfType:(MPActionType)type;
|
+ (SEL)actionOfType:(MPActionType)type;
|
||||||
|
/**
|
||||||
|
* Helper to retrieve the MPActionType for a given selection
|
||||||
|
* @param action Selector to find the type for
|
||||||
|
* @return MPActionTpype for action, if no match was found MPUnknownAction is returned
|
||||||
|
*/
|
||||||
+ (MPActionType)typeForAction:(SEL)action;
|
+ (MPActionType)typeForAction:(SEL)action;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -17,14 +17,21 @@
|
|||||||
actionDict = @{
|
actionDict = @{
|
||||||
@(MPActionAddEntry): @"createEntry:",
|
@(MPActionAddEntry): @"createEntry:",
|
||||||
@(MPActionAddGroup): @"createGroup:",
|
@(MPActionAddGroup): @"createGroup:",
|
||||||
|
@(MPActionCloneEntry): @"cloneEntry:",
|
||||||
|
@(MPActionCloneEntryWithOptions): @"cloneEntryWithOptions:",
|
||||||
@(MPActionCopyPassword): @"copyPassword:",
|
@(MPActionCopyPassword): @"copyPassword:",
|
||||||
@(MPActionCopyURL): @"copyURL:",
|
@(MPActionCopyURL): @"copyURL:",
|
||||||
@(MPActionCopyUsername): @"copyUsername:",
|
@(MPActionCopyUsername): @"copyUsername:",
|
||||||
@(MPActionDelete) : @"deleteNode:",
|
@(MPActionDelete): @"delete:",
|
||||||
|
@(MPActionEditPassword): @"editPassword:",
|
||||||
@(MPActionOpenURL): @"openURL:",
|
@(MPActionOpenURL): @"openURL:",
|
||||||
@(MPActionToggleInspector): @"toggleInspector:",
|
@(MPActionToggleInspector): @"toggleInspector:",
|
||||||
@(MPActionLock): @"lock:",
|
@(MPActionLock): @"lock:",
|
||||||
@(MPActionEmptyTrash) : @"emptyTrash:"
|
@(MPActionEmptyTrash): @"emptyTrash:",
|
||||||
|
@(MPActionDatabaseSettings): @"showDatabaseSettings:",
|
||||||
|
@(MPActionEditTemplateGroup): @"editTemplateGroup:",
|
||||||
|
@(MPActionExportXML): @"exportAsXML",
|
||||||
|
@(MPActionImportXML): @"importFromXMl",
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
return actionDict;
|
return actionDict;
|
||||||
@@ -40,6 +47,7 @@
|
|||||||
NSArray *selectors = [[self _actionDictionary] allValues];
|
NSArray *selectors = [[self _actionDictionary] allValues];
|
||||||
NSUInteger index = [selectors indexOfObject:selectorString];
|
NSUInteger index = [selectors indexOfObject:selectorString];
|
||||||
if(index == NSNotFound) {
|
if(index == NSNotFound) {
|
||||||
|
// Test for default Actions?
|
||||||
return MPUnkownAction;
|
return MPUnkownAction;
|
||||||
}
|
}
|
||||||
NSArray *keys = [[self _actionDictionary] allKeysForObject:selectorString];
|
NSArray *keys = [[self _actionDictionary] allKeysForObject:selectorString];
|
||||||
|
|||||||
27
MacPass/MPAddEntryContextMenuDelegate.h
Normal file
27
MacPass/MPAddEntryContextMenuDelegate.h
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
//
|
||||||
|
// MPAddEntryContextMenuDelegate.h
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 30.07.13.
|
||||||
|
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
//
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
@interface MPAddEntryContextMenuDelegate : NSObject <NSMenuDelegate>
|
||||||
|
|
||||||
|
@end
|
||||||
63
MacPass/MPAddEntryContextMenuDelegate.m
Normal file
63
MacPass/MPAddEntryContextMenuDelegate.m
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
//
|
||||||
|
// MPAddEntryContextMenuDelegate.m
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 30.07.13.
|
||||||
|
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
//
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "MPAddEntryContextMenuDelegate.h"
|
||||||
|
#import "MPDocument.h"
|
||||||
|
#import "MPDocumentWindowController.h"
|
||||||
|
#import "MPActionHelper.h"
|
||||||
|
|
||||||
|
#import "KPKEntry.h"
|
||||||
|
#import "KPKGroup.h"
|
||||||
|
|
||||||
|
#define EDIT_TEMPLATES_ITEM_TAG 10;
|
||||||
|
|
||||||
|
@implementation MPAddEntryContextMenuDelegate
|
||||||
|
|
||||||
|
- (void)menuNeedsUpdate:(NSMenu *)menu {
|
||||||
|
/*
|
||||||
|
The Method is rather brute force
|
||||||
|
It's possible nicer to cache the entries and just update
|
||||||
|
the menu entries, that actually need updating
|
||||||
|
*/
|
||||||
|
MPDocument *document = [[NSDocumentController sharedDocumentController] currentDocument];
|
||||||
|
if(!document) {
|
||||||
|
[menu removeAllItems];
|
||||||
|
}
|
||||||
|
[menu removeAllItems];
|
||||||
|
[menu addItemWithTitle:NSLocalizedString(@"EDIT_TEMPLATE_GROUP", "") action:[MPActionHelper actionOfType:MPActionEditTemplateGroup] keyEquivalent:@""];
|
||||||
|
|
||||||
|
[menu addItem:[NSMenuItem separatorItem]];
|
||||||
|
for(KPKEntry *entry in [document.templates childEntries]) {
|
||||||
|
NSString *templateMask = NSLocalizedString(@"NEW_ENTRY_WITH_TEMPLATE_%@", "");
|
||||||
|
NSMenuItem *templateItem = [[NSMenuItem allocWithZone:[NSMenu menuZone]] initWithTitle:[NSString stringWithFormat:templateMask, entry.title]
|
||||||
|
action:@selector(createEntryFromTemplate:)
|
||||||
|
keyEquivalent:@""];
|
||||||
|
[templateItem setRepresentedObject:entry.uuid];
|
||||||
|
[menu addItem:templateItem];
|
||||||
|
}
|
||||||
|
/* If there are no entries, add a note as disabled menu item */
|
||||||
|
if([[menu itemArray] count] == 2) {
|
||||||
|
[menu addItemWithTitle:NSLocalizedString(@"NO_TEMPLATES", "") action:NULL keyEquivalent:@""];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
@@ -5,14 +5,42 @@
|
|||||||
// Created by Michael Starke on 19.07.12.
|
// Created by Michael Starke on 19.07.12.
|
||||||
// Copyright (c) 2012 HicknHack Software GmbH. All rights reserved.
|
// Copyright (c) 2012 HicknHack Software GmbH. All rights reserved.
|
||||||
//
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
//
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
//
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h>
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
@interface MPAppDelegate : NSObject <NSApplicationDelegate>
|
FOUNDATION_EXTERN NSString *const MPDidChangeStoredKeyFilesSettings;
|
||||||
|
|
||||||
|
@interface MPAppDelegate : NSObject <NSApplicationDelegate, NSMenuDelegate>
|
||||||
|
|
||||||
@property (strong) IBOutlet NSWindow *passwordCreatorWindow;
|
@property (strong) IBOutlet NSWindow *passwordCreatorWindow;
|
||||||
|
@property (strong) IBOutlet NSWindow *welcomeWindow;
|
||||||
|
@property (weak) IBOutlet NSMenuItem *saveMenuItem;
|
||||||
|
@property (nonatomic, assign) BOOL isAllowedToStoreKeyFile;
|
||||||
|
|
||||||
|
- (IBAction)showPreferences:(id)sender;
|
||||||
- (IBAction)showPasswordCreator:(id)sender;
|
- (IBAction)showPasswordCreator:(id)sender;
|
||||||
|
- (IBAction)createNewDatabase:(id)sender;
|
||||||
|
- (IBAction)openDatabase:(id)sender;
|
||||||
|
/**
|
||||||
|
* Clears the stored key files for any documents.
|
||||||
|
* @param sender sender of this action
|
||||||
|
*/
|
||||||
|
- (IBAction)clearRememberdKeyFiles:(id)sender;
|
||||||
|
|
||||||
|
|
||||||
- (NSString *)applicationName;
|
- (NSString *)applicationName;
|
||||||
- (void)lockAllDocuments;
|
- (void)lockAllDocuments;
|
||||||
|
|||||||
@@ -5,69 +5,164 @@
|
|||||||
// Created by Michael Starke on 19.07.12.
|
// Created by Michael Starke on 19.07.12.
|
||||||
// Copyright (c) 2012 HicknHack Software GmbH. All rights reserved.
|
// Copyright (c) 2012 HicknHack Software GmbH. All rights reserved.
|
||||||
//
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
//
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
//
|
||||||
|
|
||||||
#import "MPAppDelegate.h"
|
#import "MPAppDelegate.h"
|
||||||
|
|
||||||
#import "MPSettingsWindowController.h"
|
#import "MPSettingsWindowController.h"
|
||||||
#import "MPPasswordCreatorViewController.h"
|
#import "MPPasswordCreatorViewController.h"
|
||||||
#import "MPSettingsHelper.h"
|
#import "MPSettingsHelper.h"
|
||||||
#import "MPUppercaseStringValueTransformer.h"
|
|
||||||
#import "MPStringLengthValueTransformer.h"
|
#import "MPStringLengthValueTransformer.h"
|
||||||
|
#import "MPValueTransformerHelper.h"
|
||||||
#import "MPServerDaemon.h"
|
#import "MPServerDaemon.h"
|
||||||
#import "MPLockDaemon.h"
|
#import "MPLockDaemon.h"
|
||||||
|
#import "MPAutotypeDaemon.h"
|
||||||
#import "MPDocumentWindowController.h"
|
#import "MPDocumentWindowController.h"
|
||||||
|
|
||||||
|
#import "MPDocument.h"
|
||||||
|
#import "KPKCompositeKey.h"
|
||||||
|
|
||||||
|
NSString *const MPDidChangeStoredKeyFilesSettings = @"com.hicknhack.macpass.MPDidChangeStoredKeyFilesSettings";
|
||||||
|
|
||||||
@interface MPAppDelegate () {
|
@interface MPAppDelegate () {
|
||||||
@private
|
@private
|
||||||
MPServerDaemon *serverDaemon;
|
MPServerDaemon *serverDaemon;
|
||||||
MPLockDaemon *lockDaemon;
|
MPLockDaemon *lockDaemon;
|
||||||
|
MPAutotypeDaemon *autotypeDaemon;
|
||||||
|
BOOL _restoredWindows; // YES if windows where restored at launch
|
||||||
|
BOOL _shouldOpenFile; // YES if app was started to open a
|
||||||
}
|
}
|
||||||
|
|
||||||
@property (strong, nonatomic) MPSettingsWindowController *settingsController;
|
@property (strong, nonatomic) MPSettingsWindowController *settingsController;
|
||||||
@property (strong, nonatomic) MPPasswordCreatorViewController *passwordCreatorController;
|
@property (strong, nonatomic) MPPasswordCreatorViewController *passwordCreatorController;
|
||||||
|
|
||||||
- (IBAction)showPreferences:(id)sender;
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation MPAppDelegate
|
@implementation MPAppDelegate
|
||||||
|
|
||||||
+ (void)initialize {
|
+ (void)initialize {
|
||||||
[MPSettingsHelper setupDefaults];
|
[MPSettingsHelper setupDefaults];
|
||||||
[MPUppercaseStringValueTransformer registerTransformer];
|
[MPSettingsHelper migrateDefaults];
|
||||||
[MPStringLengthValueTransformer registerTransformer];
|
[MPStringLengthValueTransformer registerTransformer];
|
||||||
|
[MPValueTransformerHelper registerValueTransformer];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)dealloc {
|
- (void)dealloc {
|
||||||
|
[self unbind:@"isAllowedToStoreKeyFile"];
|
||||||
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma mark Properties
|
||||||
|
- (void)setIsAllowedToStoreKeyFile:(BOOL)isAllowedToStoreKeyFile {
|
||||||
|
if(_isAllowedToStoreKeyFile != isAllowedToStoreKeyFile) {
|
||||||
|
_isAllowedToStoreKeyFile = isAllowedToStoreKeyFile;
|
||||||
|
/* cleanup on disable */
|
||||||
|
if(!self.isAllowedToStoreKeyFile) {
|
||||||
|
[self clearRememberdKeyFiles:nil];
|
||||||
|
}
|
||||||
|
/* Inform anyone that might be interested that we can now no longer/ or can use keyfiles */
|
||||||
|
[[NSNotificationCenter defaultCenter] postNotificationName:MPDidChangeStoredKeyFilesSettings object:self];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)awakeFromNib {
|
||||||
|
_isAllowedToStoreKeyFile = NO;
|
||||||
|
/* Update the … at the save menu */
|
||||||
|
[[self.saveMenuItem menu] setDelegate:self];
|
||||||
|
|
||||||
|
/* We want to inform anyone about the changes to keyFile remmebering */
|
||||||
|
[self bind:@"isAllowedToStoreKeyFile"
|
||||||
|
toObject:[NSUserDefaultsController sharedUserDefaultsController]
|
||||||
|
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyRememberKeyFilesForDatabases]
|
||||||
|
options:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark -
|
||||||
|
#pragma mark NSApplicationDelegate
|
||||||
|
|
||||||
|
- (BOOL)applicationShouldHandleReopen:(NSApplication *)sender hasVisibleWindows:(BOOL)flag {
|
||||||
|
if(!flag) {
|
||||||
|
BOOL reopen = [[NSUserDefaults standardUserDefaults] boolForKey:kMPSettingsKeyReopenLastDatabaseOnLaunch];
|
||||||
|
BOOL showWelcomeScreen = YES;
|
||||||
|
if(reopen) {
|
||||||
|
showWelcomeScreen = ![self _reopenLastDocument];
|
||||||
|
}
|
||||||
|
if(showWelcomeScreen) {
|
||||||
|
[self _showWelcomeWindow];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
- (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender {
|
- (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender {
|
||||||
return [[NSUserDefaults standardUserDefaults] boolForKey:kMPSettingsKeyOpenEmptyDatabaseOnLaunch];
|
return [[NSUserDefaults standardUserDefaults] boolForKey:kMPSettingsKeyOpenEmptyDatabaseOnLaunch];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
- (void)applicationWillFinishLaunching:(NSNotification *)notification {
|
- (void)applicationWillFinishLaunching:(NSNotification *)notification {
|
||||||
BOOL reopen = [[NSUserDefaults standardUserDefaults] boolForKey:kMPSettingsKeyReopenLastDatabaseOnLaunch];
|
_restoredWindows = NO;
|
||||||
if(reopen) {
|
_shouldOpenFile = NO;
|
||||||
[[NSNotificationCenter defaultCenter] addObserver:self
|
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||||
selector:@selector(_applicationDidFinishRestoringWindows:)
|
selector:@selector(_applicationDidFinishRestoringWindows:)
|
||||||
name:NSApplicationDidFinishRestoringWindowsNotification
|
name:NSApplicationDidFinishRestoringWindowsNotification
|
||||||
object:nil];
|
object:nil];
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename {
|
||||||
|
_shouldOpenFile = YES;
|
||||||
|
NSURL *fileURL = [NSURL fileURLWithPath:filename];
|
||||||
|
[[NSDocumentController sharedDocumentController] openDocumentWithContentsOfURL:fileURL display:YES completionHandler:nil];
|
||||||
|
return YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)applicationDidFinishLaunching:(NSNotification *)notification {
|
- (void)applicationDidFinishLaunching:(NSNotification *)notification {
|
||||||
serverDaemon = [[MPServerDaemon alloc] init];
|
serverDaemon = [[MPServerDaemon alloc] init];
|
||||||
lockDaemon = [[MPLockDaemon alloc] init];
|
lockDaemon = [[MPLockDaemon alloc] init];
|
||||||
|
autotypeDaemon = [[MPAutotypeDaemon alloc] init];
|
||||||
|
|
||||||
|
BOOL reopen = [[NSUserDefaults standardUserDefaults] boolForKey:kMPSettingsKeyReopenLastDatabaseOnLaunch];
|
||||||
|
BOOL showWelcomeScreen = !_restoredWindows && !_shouldOpenFile;
|
||||||
|
if(reopen && !_restoredWindows && !_shouldOpenFile) {
|
||||||
|
showWelcomeScreen = ![self _reopenLastDocument];
|
||||||
|
}
|
||||||
|
if(showWelcomeScreen) {
|
||||||
|
[self _showWelcomeWindow];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSString *)applicationName {
|
- (NSString *)applicationName {
|
||||||
return [[NSBundle mainBundle] infoDictionary][@"CFBundleName"];
|
return [[NSBundle mainBundle] infoDictionary][@"CFBundleName"];
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark Menu Actions
|
#pragma mark -
|
||||||
|
#pragma mark NSMenuDelegate
|
||||||
|
- (void)menuNeedsUpdate:(NSMenu *)menu {
|
||||||
|
if([self.saveMenuItem menu] != menu) {
|
||||||
|
return; // wrong menu
|
||||||
|
}
|
||||||
|
MPDocument *document = [[NSDocumentController sharedDocumentController] currentDocument];
|
||||||
|
BOOL displayDots = (document.fileURL == nil || !document.compositeKey.hasPasswordOrKeyFile);
|
||||||
|
NSString *saveTitle = displayDots ? NSLocalizedString(@"SAVE_WITH_DOTS", "") : NSLocalizedString(@"SAVE", "");
|
||||||
|
[self.saveMenuItem setTitle:saveTitle];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark -
|
||||||
|
#pragma mark Actions
|
||||||
- (void)showPreferences:(id)sender {
|
- (void)showPreferences:(id)sender {
|
||||||
if(self.settingsController == nil) {
|
if(self.settingsController == nil) {
|
||||||
self.settingsController = [[MPSettingsWindowController alloc] init];
|
self.settingsController = [[MPSettingsWindowController alloc] init];
|
||||||
@@ -82,23 +177,22 @@
|
|||||||
if(!self.passwordCreatorController) {
|
if(!self.passwordCreatorController) {
|
||||||
self.passwordCreatorController = [[MPPasswordCreatorViewController alloc] init];
|
self.passwordCreatorController = [[MPPasswordCreatorViewController alloc] init];
|
||||||
NSView *creatorView = [_passwordCreatorController view];
|
NSView *creatorView = [_passwordCreatorController view];
|
||||||
//NSView *contentView = [_passwordCreatorWindow contentView];
|
|
||||||
[self.passwordCreatorWindow setContentView:creatorView];
|
[self.passwordCreatorWindow setContentView:creatorView];
|
||||||
//[contentView addSubview:creatorView];
|
|
||||||
// [[_passwordCreatorWindow contentView] addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[creatorView]|"
|
|
||||||
// options:0
|
|
||||||
// metrics:nil
|
|
||||||
// views:NSDictionaryOfVariableBindings(creatorView)]];
|
|
||||||
// [[_passwordCreatorWindow contentView] addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[creatorView]|"
|
|
||||||
// options:0
|
|
||||||
// metrics:nil
|
|
||||||
// views:NSDictionaryOfVariableBindings(creatorView)]];
|
|
||||||
// [contentView layoutSubtreeIfNeeded];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[self.passwordCreatorWindow makeKeyAndOrderFront:self.passwordCreatorWindow];
|
[self.passwordCreatorWindow makeKeyAndOrderFront:self.passwordCreatorWindow];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)createNewDatabase:(id)sender {
|
||||||
|
[self.welcomeWindow orderOut:sender];
|
||||||
|
[[NSDocumentController sharedDocumentController] newDocument:sender];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)openDatabase:(id)sender {
|
||||||
|
[self.welcomeWindow orderOut:sender];
|
||||||
|
[[NSDocumentController sharedDocumentController] openDocument:sender];
|
||||||
|
}
|
||||||
|
|
||||||
- (void)lockAllDocuments {
|
- (void)lockAllDocuments {
|
||||||
for(NSDocument *document in [[NSDocumentController sharedDocumentController] documents]) {
|
for(NSDocument *document in [[NSDocumentController sharedDocumentController] documents]) {
|
||||||
NSArray *windowControllers = [document windowControllers];
|
NSArray *windowControllers = [document windowControllers];
|
||||||
@@ -108,14 +202,38 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)clearRememberdKeyFiles:(id)sender {
|
||||||
|
[[NSUserDefaults standardUserDefaults] removeObjectForKey:kMPSettingsKeyRememeberdKeysForDatabases];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark -
|
||||||
|
#pragma mark Private Helper
|
||||||
- (void)_applicationDidFinishRestoringWindows:(NSNotification *)notification {
|
- (void)_applicationDidFinishRestoringWindows:(NSNotification *)notification {
|
||||||
NSDocumentController *documentController = [NSDocumentController sharedDocumentController];
|
NSDocumentController *documentController = [NSDocumentController sharedDocumentController];
|
||||||
NSArray *documents = [documentController documents];
|
NSArray *documents = [documentController documents];
|
||||||
NSArray *recentDocuments = [documentController recentDocumentURLs];
|
_restoredWindows = [documents count] > 0;
|
||||||
if([documents count] > 0 ) {
|
|
||||||
return; // There's already a document restored
|
|
||||||
}
|
}
|
||||||
NSURL *documentUrl;
|
|
||||||
|
- (void)_showWelcomeWindow {
|
||||||
|
[self _loadWelcomeWindow];
|
||||||
|
[self.welcomeWindow makeKeyAndOrderFront:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)_loadWelcomeWindow {
|
||||||
|
if(!_welcomeWindow) {
|
||||||
|
NSArray *topLevelObject;
|
||||||
|
[[NSBundle mainBundle] loadNibNamed:@"WelcomeWindow" owner:self topLevelObjects:&topLevelObject];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)_reopenLastDocument {
|
||||||
|
NSDocumentController *documentController = [NSDocumentController sharedDocumentController];
|
||||||
|
NSArray *documents = [documentController documents];
|
||||||
|
if([documents count] > 0) {
|
||||||
|
return YES; // The document is already open
|
||||||
|
}
|
||||||
|
NSArray *recentDocuments = [[NSDocumentController sharedDocumentController] recentDocumentURLs];
|
||||||
|
NSURL *documentUrl = nil;
|
||||||
if([recentDocuments count] > 0) {
|
if([recentDocuments count] > 0) {
|
||||||
documentUrl = recentDocuments[0];
|
documentUrl = recentDocuments[0];
|
||||||
}
|
}
|
||||||
@@ -123,11 +241,13 @@
|
|||||||
NSString *lastPath = [[NSUserDefaults standardUserDefaults] stringForKey:kMPSettingsKeyLastDatabasePath];
|
NSString *lastPath = [[NSUserDefaults standardUserDefaults] stringForKey:kMPSettingsKeyLastDatabasePath];
|
||||||
documentUrl =[NSURL URLWithString:lastPath];
|
documentUrl =[NSURL URLWithString:lastPath];
|
||||||
}
|
}
|
||||||
if([documentUrl isFileURL]) {
|
BOOL isFileURL = [documentUrl isFileURL];
|
||||||
[documentController openDocumentWithContentsOfURL:documentUrl display:YES
|
if(isFileURL) {
|
||||||
|
[documentController openDocumentWithContentsOfURL:documentUrl
|
||||||
|
display:YES
|
||||||
completionHandler:^(NSDocument *document, BOOL documentWasAlreadyOpen, NSError *error) {}];
|
completionHandler:^(NSDocument *document, BOOL documentWasAlreadyOpen, NSError *error) {}];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
return isFileURL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -7,8 +7,8 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
#import "MPServerRequestHandler.h"
|
#import "MPServerRequestHandling.h"
|
||||||
|
|
||||||
@interface MPAssociateRequestHandler : NSObject <MPServerRequestHandler>
|
@interface MPAssociateRequestHandler : NSObject <MPServerRequestHandling>
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
27
MacPass/MPAttachmentTableDataSource.h
Normal file
27
MacPass/MPAttachmentTableDataSource.h
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
//
|
||||||
|
// MPAttachmentTableDataSource.h
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 01.08.13.
|
||||||
|
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
//
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
@interface MPAttachmentTableDataSource : NSObject <NSTableViewDataSource>
|
||||||
|
|
||||||
|
@end
|
||||||
91
MacPass/MPAttachmentTableDataSource.m
Normal file
91
MacPass/MPAttachmentTableDataSource.m
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
//
|
||||||
|
// MPAttachmentTableDataSource.m
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 01.08.13.
|
||||||
|
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
//
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "MPAttachmentTableDataSource.h"
|
||||||
|
#import "MPDocument+Attachment.h"
|
||||||
|
|
||||||
|
@implementation MPAttachmentTableDataSource
|
||||||
|
|
||||||
|
- (NSDragOperation)tableView:(NSTableView *)tableView validateDrop:(id<NSDraggingInfo>)info proposedRow:(NSInteger)row proposedDropOperation:(NSTableViewDropOperation)dropOperation {
|
||||||
|
NSPasteboard *draggingPasteBoard = [info draggingPasteboard];
|
||||||
|
NSArray *classArray = [NSArray arrayWithObject:[NSURL class]];
|
||||||
|
NSArray *arrayOfURLs = [draggingPasteBoard readObjectsForClasses:classArray options:nil];
|
||||||
|
NSUInteger numberOfDirectories = 0;
|
||||||
|
for(NSURL *url in arrayOfURLs) {
|
||||||
|
if([url isFileURL] || [url isFileReferenceURL]) {
|
||||||
|
NSError *error = nil;
|
||||||
|
NSDictionary *resourceKeys = [url resourceValuesForKeys:@[NSURLIsDirectoryKey] error:&error];
|
||||||
|
if( [resourceKeys[ NSURLIsDirectoryKey ] boolValue] == YES ) {
|
||||||
|
numberOfDirectories++;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
return NSDragOperationNone;
|
||||||
|
}
|
||||||
|
if(numberOfDirectories == [arrayOfURLs count]) {
|
||||||
|
return NSDragOperationNone;
|
||||||
|
}
|
||||||
|
return NSDragOperationCopy;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)tableView:(NSTableView *)tableView acceptDrop:(id<NSDraggingInfo>)info row:(NSInteger)row dropOperation:(NSTableViewDropOperation)dropOperation {
|
||||||
|
MPDocument *document = [[[tableView window] windowController] document];
|
||||||
|
id entry = document.selectedEntry;
|
||||||
|
|
||||||
|
NSPasteboard *draggingPasteBoard = [info draggingPasteboard];
|
||||||
|
NSArray *classArray = [NSArray arrayWithObject:[NSURL class]];
|
||||||
|
NSArray *arrayOfURLs = [draggingPasteBoard readObjectsForClasses:classArray options:nil];
|
||||||
|
|
||||||
|
for(NSURL *fileUrl in arrayOfURLs) {
|
||||||
|
[document addAttachment:fileUrl toEntry:entry];
|
||||||
|
}
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
- (BOOL)tableView:(NSTableView *)tableView writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard *)pboard {
|
||||||
|
return NO;
|
||||||
|
|
||||||
|
/*
|
||||||
|
NSString *extension;
|
||||||
|
|
||||||
|
if([rowIndexes count] != 1) {
|
||||||
|
return NO; // We only work with one file at a time
|
||||||
|
}
|
||||||
|
MPDocument *document = [[[tableView window] windowController] document];
|
||||||
|
id entry = document.selectedEntry;
|
||||||
|
NSUInteger row = [rowIndexes lastIndex];
|
||||||
|
if([entry isKindOfClass:[Kdb3Entry class]]) {
|
||||||
|
Kdb3Entry *entryV3 = (Kdb3Entry *)entry;
|
||||||
|
extension = [entryV3.binaryDesc pathExtension];
|
||||||
|
}
|
||||||
|
else if([entry isKindOfClass:[Kdb4Entry class]]) {
|
||||||
|
Kdb4Entry *entryV4 = (Kdb4Entry *)entry;
|
||||||
|
BinaryRef *binaryRef = entryV4.binaries[row];
|
||||||
|
extension = [binaryRef.key pathExtension];
|
||||||
|
}
|
||||||
|
NSString *uti = CFBridgingRelease(UTTypeCreatePreferredIdentifierForTag( kUTTagClassFilenameExtension, (__bridge CFStringRef)(extension), NULL ));
|
||||||
|
|
||||||
|
[pboard setPropertyList:@[uti] forType:(NSString *)kPasteboardTypeFilePromiseContent];
|
||||||
|
[pboard setPropertyList:@[uti] forType:(NSString *)kPasteboardTypeFileURLPromise ];
|
||||||
|
return YES;*/
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
@@ -5,13 +5,25 @@
|
|||||||
// Created by Michael Starke on 17.07.13.
|
// Created by Michael Starke on 17.07.13.
|
||||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||||
//
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
//
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
//
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
@class MPInspectorViewController;
|
|
||||||
|
|
||||||
@interface MPAttachmentTableViewDelegate : NSObject <NSTableViewDelegate>
|
@interface MPAttachmentTableViewDelegate : NSObject <NSTableViewDelegate>
|
||||||
|
|
||||||
@property (nonatomic, weak) MPInspectorViewController *viewController;
|
@property (nonatomic, weak) id viewController;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -5,14 +5,29 @@
|
|||||||
// Created by Michael Starke on 17.07.13.
|
// Created by Michael Starke on 17.07.13.
|
||||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||||
//
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
//
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
//
|
||||||
|
|
||||||
#import "MPAttachmentTableViewDelegate.h"
|
#import "MPAttachmentTableViewDelegate.h"
|
||||||
|
|
||||||
#import "MPInspectorViewController.h"
|
#import "MPDocument.h"
|
||||||
|
#import "MPEntryInspectorViewController.h"
|
||||||
#import "MPSelectedAttachmentTableCellView.h"
|
#import "MPSelectedAttachmentTableCellView.h"
|
||||||
|
|
||||||
#import "Kdb4Node.h"
|
#import "KPKEntry.h"
|
||||||
#import "Kdb3Node.h"
|
#import "KPKBinary.h"
|
||||||
|
|
||||||
#import "HNHTableRowView.h"
|
#import "HNHTableRowView.h"
|
||||||
|
|
||||||
@@ -20,21 +35,15 @@
|
|||||||
|
|
||||||
- (void)tableViewSelectionDidChange:(NSNotification *)notification {
|
- (void)tableViewSelectionDidChange:(NSNotification *)notification {
|
||||||
NSTableView *tableView = [notification object];
|
NSTableView *tableView = [notification object];
|
||||||
|
MPDocument *document = [[[tableView window] windowController] document];
|
||||||
NSIndexSet *allColumns = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, [[tableView tableColumns] count])];
|
NSIndexSet *allColumns = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, [[tableView tableColumns] count])];
|
||||||
if([self.viewController.selectedEntry isKindOfClass:[Kdb4Entry class]]) {
|
NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, [document.selectedEntry.binaries count] )];
|
||||||
Kdb4Entry *entryv4 = (Kdb4Entry *)self.viewController.selectedEntry;
|
|
||||||
NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, [entryv4.binaries count] )];
|
|
||||||
[tableView reloadDataForRowIndexes:indexSet columnIndexes:allColumns];
|
[tableView reloadDataForRowIndexes:indexSet columnIndexes:allColumns];
|
||||||
}
|
}
|
||||||
if([self.viewController.selectedEntry isKindOfClass:[Kdb3Entry class]]) {
|
|
||||||
Kdb3Entry *entryv3 = (Kdb3Entry *)self.viewController.selectedEntry;
|
|
||||||
NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, (entryv3.binary ? 1 : 0 ))];
|
|
||||||
[tableView reloadDataForRowIndexes:indexSet columnIndexes:allColumns];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
|
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
|
||||||
/* Decide what view to use */
|
/* Decide what view to use */
|
||||||
|
MPDocument *document = [[[tableView window] windowController] document];
|
||||||
NSIndexSet *selectedIndexes = [tableView selectedRowIndexes];
|
NSIndexSet *selectedIndexes = [tableView selectedRowIndexes];
|
||||||
NSTableCellView *view;
|
NSTableCellView *view;
|
||||||
if([selectedIndexes containsIndex:row]) {
|
if([selectedIndexes containsIndex:row]) {
|
||||||
@@ -44,6 +53,7 @@
|
|||||||
[cellView.saveButton setTarget:self.viewController];
|
[cellView.saveButton setTarget:self.viewController];
|
||||||
[cellView.removeButton setTag:row];
|
[cellView.removeButton setTag:row];
|
||||||
[cellView.removeButton setAction:@selector(removeAttachment:)];
|
[cellView.removeButton setAction:@selector(removeAttachment:)];
|
||||||
|
[cellView.removeButton setTarget:nil];
|
||||||
[cellView.removeButton setTarget:self.viewController];
|
[cellView.removeButton setTarget:self.viewController];
|
||||||
view = cellView;
|
view = cellView;
|
||||||
}
|
}
|
||||||
@@ -51,17 +61,11 @@
|
|||||||
view = [tableView makeViewWithIdentifier:@"NormalCell" owner:tableView];
|
view = [tableView makeViewWithIdentifier:@"NormalCell" owner:tableView];
|
||||||
}
|
}
|
||||||
/* Bind view */
|
/* Bind view */
|
||||||
if([self.viewController.selectedEntry isKindOfClass:[Kdb4Entry class]]) {
|
KPKEntry *entry = document.selectedEntry;
|
||||||
Kdb4Entry *entry = (Kdb4Entry *)self.viewController.selectedEntry;
|
NSAssert([entry.binaries count] > row, @"Indes needs to be valid for binaries");
|
||||||
BinaryRef *binaryRef = entry.binaries[row];
|
KPKBinary *binary = entry.binaries[row];
|
||||||
[[view textField] bind:NSValueBinding toObject:binaryRef withKeyPath:@"key" options:nil];
|
[[view textField] bind:NSValueBinding toObject:binary withKeyPath:@"name" options:nil];
|
||||||
[[view imageView] setImage:[[NSWorkspace sharedWorkspace] iconForFileType:[binaryRef.key pathExtension]]];
|
[[view imageView] setImage:[[NSWorkspace sharedWorkspace] iconForFileType:[binary.name pathExtension]]];
|
||||||
}
|
|
||||||
else {
|
|
||||||
Kdb3Entry *entry= (Kdb3Entry *)self.viewController.selectedEntry;
|
|
||||||
[[view textField] bind:NSValueBinding toObject:entry withKeyPath:@"binaryDesc" options:nil];
|
|
||||||
[[view imageView] setImage:[[NSWorkspace sharedWorkspace] iconForFileType:[entry.binaryDesc pathExtension]]];
|
|
||||||
}
|
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
51
MacPass/MPAutotypeCommand.h
Normal file
51
MacPass/MPAutotypeCommand.h
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
//
|
||||||
|
// MPAutotypeCommand.h
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 10/11/13.
|
||||||
|
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
@class MPAutotypeContext;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Autotype command reperesent a capsualted Action that was determined by interpreting
|
||||||
|
* Autotype field for a given entry. This is a class cluster and schould be considered the sole
|
||||||
|
* enty point for creating AutotypeCommands.
|
||||||
|
*/
|
||||||
|
@interface MPAutotypeCommand : NSObject
|
||||||
|
|
||||||
|
@property (readonly, strong) MPAutotypeContext *context;
|
||||||
|
|
||||||
|
|
||||||
|
+ (NSArray *)commandsForContext:(MPAutotypeContext *)context;
|
||||||
|
/**
|
||||||
|
* Sends a KeyPress Event with the supplied modifier flags and Keycode
|
||||||
|
* Any existing modifiers will be disabled for this event. If the user
|
||||||
|
* presses any key, those will be ignored during this event
|
||||||
|
*
|
||||||
|
* @param keyCode virtual KeyCode to be sent
|
||||||
|
* @param flags modifier flags for the key press event
|
||||||
|
*/
|
||||||
|
- (void)sendPressKey:(CGKeyCode)keyCode modifierFlags:(CGEventFlags)flags;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convenience message to be sent for executing a simple paste command
|
||||||
|
*/
|
||||||
|
- (void)sendPasteKeyCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exectues the Autotype Command. This will be called by the autotype daemon.
|
||||||
|
*/
|
||||||
|
- (void)execute;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validates the command and returns the result
|
||||||
|
*
|
||||||
|
* @return YES if the command is valid and can be executed. NO otherwise
|
||||||
|
*/
|
||||||
|
- (BOOL)isValid;
|
||||||
|
|
||||||
|
@end
|
||||||
159
MacPass/MPAutotypeCommand.m
Normal file
159
MacPass/MPAutotypeCommand.m
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
//
|
||||||
|
// MPAutotypeCommand.m
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 10/11/13.
|
||||||
|
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "MPAutotypeCommand.h"
|
||||||
|
|
||||||
|
#import "MPAutotypePaste.h"
|
||||||
|
#import "MPAutotypeKeyPress.h"
|
||||||
|
|
||||||
|
#import "MPAutotypeContext.h"
|
||||||
|
#import "MPKeyMapper.h"
|
||||||
|
|
||||||
|
#import "KPKAutotypeCommands.h"
|
||||||
|
|
||||||
|
#import "NSString+Commands.h"
|
||||||
|
|
||||||
|
#import <Carbon/Carbon.h>
|
||||||
|
|
||||||
|
@implementation MPAutotypeCommand
|
||||||
|
|
||||||
|
+ (NSDictionary *)keypressCommands {
|
||||||
|
static NSDictionary *keypressCommands;
|
||||||
|
static dispatch_once_t onceToken;
|
||||||
|
dispatch_once(&onceToken, ^{
|
||||||
|
keypressCommands = @{ kKPKAutotypeBackspace : @(kVK_Delete),
|
||||||
|
//kKPKAutotypeBreak : @0,
|
||||||
|
kKPKAutotypeCapsLock : @(kVK_CapsLock),
|
||||||
|
kKPKAutotypeDelete : @(kVK_ForwardDelete),
|
||||||
|
kKPKAutotypeDown : @(kVK_DownArrow),
|
||||||
|
kKPKAutotypeEnd : @(kVK_End),
|
||||||
|
kKPKAutotypeEnter : @(kVK_Return),
|
||||||
|
kKPKAutotypeEscape : @(kVK_Escape),
|
||||||
|
kKPKAutotypeHelp : @(kVK_Help),
|
||||||
|
kKPKAutotypeHome : @(kVK_Home),
|
||||||
|
//kKPKAutotypeInsert : @(),
|
||||||
|
kKPKAutotypeLeft : @(kVK_LeftArrow),
|
||||||
|
kKPKAutotypeLeftWindows : @(kVK_Command),
|
||||||
|
//kKPKAutotypeNumlock : @(),
|
||||||
|
kKPKAutotypePageDown : @(kVK_PageDown),
|
||||||
|
kKPKAutotypePageUp : @(kVK_PageUp),
|
||||||
|
//kKPKAutotypePrintScreen : @(),
|
||||||
|
kKPKAutotypeRight : @(kVK_RightArrow),
|
||||||
|
kKPKAutotypeRightWindows : @(kVK_Command),
|
||||||
|
//kKPKAutotypeScrollLock : @(),
|
||||||
|
kKPKAutotypeSpace : @(kVK_Space),
|
||||||
|
kKPKAutotypeTab : @(kVK_Tab),
|
||||||
|
kKPKAutotypeUp : @(kVK_UpArrow),
|
||||||
|
kKPKAutotypeWindows : @(kVK_Command)
|
||||||
|
};
|
||||||
|
});
|
||||||
|
return keypressCommands;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mapping for modifier to CGEventFlags.
|
||||||
|
* @note KeypassControl is mapped to command!
|
||||||
|
*
|
||||||
|
* @return dictionary with commands as keys and CGEventFlags as wrapped values
|
||||||
|
*/
|
||||||
|
+ (NSDictionary *)modifierCommands {
|
||||||
|
static NSDictionary *modifierCommands;
|
||||||
|
static dispatch_once_t onceToken;
|
||||||
|
dispatch_once(&onceToken, ^{
|
||||||
|
modifierCommands = @{
|
||||||
|
kKPKAutotypeAlt : @(kCGEventFlagMaskAlternate),
|
||||||
|
kKPKAutotypeControl : @(kCGEventFlagMaskCommand),
|
||||||
|
kKPKAutotypeShift : @(kCGEventFlagMaskShift)
|
||||||
|
};
|
||||||
|
});
|
||||||
|
return modifierCommands;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (NSArray *)commandsForContext:(MPAutotypeContext *)context {
|
||||||
|
if(![context isValid]) {
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
NSUInteger reserverd = [context.normalizedCommand length] / 4;
|
||||||
|
NSMutableArray *commands = [[NSMutableArray alloc] initWithCapacity:reserverd];
|
||||||
|
NSMutableArray __block *commandRanges = [[NSMutableArray alloc] initWithCapacity:reserverd];
|
||||||
|
NSRegularExpression *commandRegExp = [[NSRegularExpression alloc] initWithPattern:@"\\{[^\\}]+\\}" options:NSRegularExpressionCaseInsensitive error:0];
|
||||||
|
NSAssert(commandRegExp, @"RegExp is constant. Has to work all the time");
|
||||||
|
[commandRegExp enumerateMatchesInString:context.normalizedCommand options:0 range:NSMakeRange(0, [context.normalizedCommand length]) usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
|
||||||
|
@autoreleasepool {
|
||||||
|
[commandRanges addObject:[NSValue valueWithRange:result.range]];
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
NSUInteger lastLocation = 0;
|
||||||
|
MPAutotypeKeyPress *keyPress;
|
||||||
|
for(NSValue *rangeValue in commandRanges) {
|
||||||
|
NSRange commandRange = [rangeValue rangeValue];
|
||||||
|
/* All non-commands will get translated into paste commands */
|
||||||
|
if(commandRange.location > lastLocation) {
|
||||||
|
/* If were modifiers we need to use the next single stroke and make update the modifier command */
|
||||||
|
if(keyPress) {
|
||||||
|
}
|
||||||
|
NSString *pasteValue = [context.normalizedCommand substringWithRange:NSMakeRange(lastLocation, commandRange.location - lastLocation)];
|
||||||
|
// Determin if it's amodifier key, and collect them!
|
||||||
|
[self appendPasteCommandForContent:pasteValue toCommands:commands];
|
||||||
|
}
|
||||||
|
NSString *commandString = [context.normalizedCommand substringWithRange:commandRange];
|
||||||
|
[self appendCommandForString:commandString toCommands:commands];
|
||||||
|
lastLocation = commandRange.location;
|
||||||
|
}
|
||||||
|
return commands;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (void)appendPasteCommandForContent:(NSString *)pasteContent toCommands:(NSMutableArray *)commands {
|
||||||
|
if(pasteContent) {
|
||||||
|
MPAutotypePaste *pasteCommand = [[MPAutotypePaste alloc] initWithString:pasteContent];
|
||||||
|
[commands addObject:pasteCommand];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (void)appendCommandForString:(NSString *)commandString toCommands:(NSMutableArray *)commands {
|
||||||
|
MPAutotypeCommand *command;
|
||||||
|
if(!commandString) {
|
||||||
|
NSDictionary *modifier = [self modifierCommands];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)sendPressKey:(CGKeyCode)keyCode modifierFlags:(CGEventFlags)flags {
|
||||||
|
CGEventRef pressKey = CGEventCreateKeyboardEvent (NULL, keyCode, YES);
|
||||||
|
CGEventRef releaseKey = CGEventCreateKeyboardEvent (NULL, keyCode, NO);
|
||||||
|
|
||||||
|
/* The modifer Masks might be set, reset them */
|
||||||
|
CGEventSetFlags(pressKey,0);
|
||||||
|
CGEventSetFlags(releaseKey, 0);
|
||||||
|
/* Set the modifiers to the ones we want */
|
||||||
|
CGEventSetFlags(pressKey,flags);
|
||||||
|
CGEventSetFlags(releaseKey, flags);
|
||||||
|
|
||||||
|
/* Send the event */
|
||||||
|
CGEventPost(kCGSessionEventTap, pressKey);
|
||||||
|
CGEventPost(kCGSessionEventTap, releaseKey);
|
||||||
|
|
||||||
|
CFRelease(pressKey);
|
||||||
|
CFRelease(releaseKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)sendPasteKeyCode {
|
||||||
|
CGKeyCode keyCode = [MPKeyMapper keyCodeForCharacter:@"V"];
|
||||||
|
if(keyCode == kMPUnknownKeyCode) {
|
||||||
|
return; // We did not find a mapping for "V"
|
||||||
|
}
|
||||||
|
[self sendPressKey:keyCode modifierFlags:kCGEventFlagMaskCommand];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)execute {
|
||||||
|
NSAssert(NO, @"Not Implemented");
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)isValid {
|
||||||
|
return NO; // No valid command
|
||||||
|
}
|
||||||
|
@end
|
||||||
50
MacPass/MPAutotypeContext.h
Normal file
50
MacPass/MPAutotypeContext.h
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
//
|
||||||
|
// MPAutotypeSequence.h
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 29/11/13.
|
||||||
|
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
@class KPKEntry;
|
||||||
|
@class KPKWindowAssociation;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Context for a autotype command run.
|
||||||
|
* It stores the Entry and corresponding sequence to use for autotyping
|
||||||
|
*/
|
||||||
|
@interface MPAutotypeContext : NSObject <NSCopying>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The entry associated with the command sequence.
|
||||||
|
*/
|
||||||
|
@property (nonatomic, strong) KPKEntry *entry;
|
||||||
|
/**
|
||||||
|
* The Autotype command as it's supplied by the entry
|
||||||
|
*/
|
||||||
|
@property (nonatomic, readonly, copy) NSString *command;
|
||||||
|
@property (nonatomic, readonly, copy) NSString *normalizedCommand;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Designated initializer
|
||||||
|
*
|
||||||
|
* @param entry Entry to use
|
||||||
|
* @param sequence Keystroke Sequence to use
|
||||||
|
*
|
||||||
|
* @return AutotypeSequnce with the entry and keystroke in places
|
||||||
|
*/
|
||||||
|
- (instancetype)initWithEntry:(KPKEntry *)entry andSequence:(NSString *)sequence;
|
||||||
|
- (instancetype)initWithDefaultSequenceForEntry:(KPKEntry *)entry;
|
||||||
|
- (instancetype)initWithWindowAssociation:(KPKWindowAssociation *)association;
|
||||||
|
/**
|
||||||
|
* Returns YES if the given sequence is valid (currentyl only bracke missmatch is regarded as invalid
|
||||||
|
*
|
||||||
|
* @return YES if valid, NO otherwise
|
||||||
|
*/
|
||||||
|
- (BOOL)isValid;
|
||||||
|
|
||||||
|
- (NSString *)evaluatedCommand;
|
||||||
|
|
||||||
|
@end
|
||||||
57
MacPass/MPAutotypeContext.m
Normal file
57
MacPass/MPAutotypeContext.m
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
//
|
||||||
|
// MPAutotypeSequence.m
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 29/11/13.
|
||||||
|
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "MPAutotypeContext.h"
|
||||||
|
|
||||||
|
#import "KPKAutotype.h"
|
||||||
|
#import "KPKEntry.h"
|
||||||
|
#import "KPKWindowAssociation.h"
|
||||||
|
#import "NSString+Commands.h"
|
||||||
|
|
||||||
|
@implementation MPAutotypeContext
|
||||||
|
|
||||||
|
- (instancetype)initWithWindowAssociation:(KPKWindowAssociation *)association {
|
||||||
|
self = [self initWithEntry:association.autotype.entry andSequence:association.keystrokeSequence];
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (instancetype)initWithDefaultSequenceForEntry:(KPKEntry *)entry {
|
||||||
|
self = [self initWithEntry:entry andSequence:entry.autotype.defaultSequence];
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (instancetype)initWithEntry:(KPKEntry *)entry andSequence:(NSString *)sequence {
|
||||||
|
self = [super init];
|
||||||
|
if(self) {
|
||||||
|
_command = [sequence copy];
|
||||||
|
_entry = entry;
|
||||||
|
_normalizedCommand = [[sequence normalizedAutotypeSequence] copy];
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)copyWithZone:(NSZone *)zone {
|
||||||
|
MPAutotypeContext *copy = [[MPAutotypeContext alloc] initWithEntry:self.entry andSequence:self.command];
|
||||||
|
return copy;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (BOOL)isValid {
|
||||||
|
return (self.normalizedCommand != nil);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)evaluatedCommand {
|
||||||
|
static NSString *evaluated;
|
||||||
|
if(!evaluated) {
|
||||||
|
NSString *placeholderFilled = [self.normalizedCommand evaluatePlaceholderWithEntry:self.entry];
|
||||||
|
evaluated = [placeholderFilled resolveReferencesWithTree:self.entry.tree];
|
||||||
|
}
|
||||||
|
return evaluated;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
30
MacPass/MPAutotypeDaemon.h
Normal file
30
MacPass/MPAutotypeDaemon.h
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
//
|
||||||
|
// MPAutotypeDaemon.h
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 26.10.13.
|
||||||
|
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
@class KPKEntry;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The autotype daemon is repsonsible for registering the globa hotkey and to perform any autotype actions
|
||||||
|
*/
|
||||||
|
@interface MPAutotypeDaemon : NSObject
|
||||||
|
|
||||||
|
@property (strong) IBOutlet NSWindow *matchSelectionWindow;
|
||||||
|
@property (weak) IBOutlet NSPopUpButton *matchSelectionButton;
|
||||||
|
@property (weak) IBOutlet NSButton *performAutotypeButton;
|
||||||
|
|
||||||
|
- (void)exectureAutotypeForEntry:(KPKEntry *)entry withWindowTitle:(NSString *)title;
|
||||||
|
/**
|
||||||
|
* Called by the selection window to start the autotype sequence
|
||||||
|
*
|
||||||
|
* @param sender sender of the action.
|
||||||
|
*/
|
||||||
|
- (IBAction)executeAutotypeWithSelectedMatch:(id)sender;
|
||||||
|
|
||||||
|
@end
|
||||||
184
MacPass/MPAutotypeDaemon.m
Normal file
184
MacPass/MPAutotypeDaemon.m
Normal file
@@ -0,0 +1,184 @@
|
|||||||
|
//
|
||||||
|
// MPAutotypeDaemon.m
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 26.10.13.
|
||||||
|
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "MPAutotypeDaemon.h"
|
||||||
|
#import "MPDocument.h"
|
||||||
|
|
||||||
|
#import "MPDocument+Autotype.h"
|
||||||
|
#import "MPAutotypeCommand.h"
|
||||||
|
#import "MPAutotypeContext.h"
|
||||||
|
|
||||||
|
#import "MPPasteBoardController.h"
|
||||||
|
#import "MPSettingsHelper.h"
|
||||||
|
|
||||||
|
|
||||||
|
#import "KPKEntry.h"
|
||||||
|
|
||||||
|
#import "DDHotKeyCenter.h"
|
||||||
|
#import <Carbon/Carbon.h>
|
||||||
|
|
||||||
|
NSString *const kMPWindowTitleKey = @"windowTitle";
|
||||||
|
NSString *const kMPApplciationNameKey = @"applicationName";
|
||||||
|
|
||||||
|
@interface MPAutotypeDaemon ()
|
||||||
|
|
||||||
|
@property (nonatomic, assign) BOOL enabled;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation MPAutotypeDaemon
|
||||||
|
|
||||||
|
- (id)init {
|
||||||
|
self = [super init];
|
||||||
|
if (self) {
|
||||||
|
_enabled = NO;
|
||||||
|
[self bind:@"enabled"
|
||||||
|
toObject:[NSUserDefaultsController sharedUserDefaultsController]
|
||||||
|
withKeyPath:[MPSettingsHelper defaultControllerPathForKey:kMPSettingsKeyEnableGlobalAutotype]
|
||||||
|
options:nil];
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)dealloc {
|
||||||
|
[self unbind:@"enabled"];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark Properties
|
||||||
|
- (void)setEnabled:(BOOL)enabled {
|
||||||
|
if(_enabled != enabled) {
|
||||||
|
_enabled = enabled;
|
||||||
|
//self.enabled ? [self _registerHotKey] : [self _unregisterHotKey];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)exectureAutotypeForEntry:(KPKEntry *)entry withWindowTitle:(NSString *)title {
|
||||||
|
NSAssert(NO,@"Not Implemented");
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)executeAutotypeWithSelectedMatch:(id)sender {
|
||||||
|
NSMenuItem *item = [self.matchSelectionButton selectedItem];
|
||||||
|
MPAutotypeContext *context = [item representedObject];
|
||||||
|
[self.matchSelectionWindow orderOut:self];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)_didPressHotKey {
|
||||||
|
NSArray *documents = [NSApp orderedDocuments];
|
||||||
|
MPDocument *currentDocument = nil;
|
||||||
|
for(MPDocument *openDocument in documents) {
|
||||||
|
if(NO == openDocument.encrypted) {
|
||||||
|
currentDocument = openDocument;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(currentDocument.encrypted) {
|
||||||
|
return; // No need to search in closed documents
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
Determine the window title of the current front most application
|
||||||
|
Start searching the db for the best fit (based on title, then on window associations
|
||||||
|
*/
|
||||||
|
NSDictionary *frontApplicationInfoDict = [self _frontMostApplicationInfoDict];
|
||||||
|
NSString *windowTitle = frontApplicationInfoDict[kMPWindowTitleKey];
|
||||||
|
NSString *applicationName = frontApplicationInfoDict[kMPApplciationNameKey];
|
||||||
|
NSLog(@"Looking for entries matching window title:%@ of applciation: %@", windowTitle, applicationName);
|
||||||
|
|
||||||
|
/*
|
||||||
|
Query the document to generate a autotype command list for the window title
|
||||||
|
We do not care where this came form, just get the autotype commands
|
||||||
|
*/
|
||||||
|
NSArray *autotypeCandidates = [currentDocument autotypContextsForWindowTitle:windowTitle];
|
||||||
|
NSUInteger candiates = [autotypeCandidates count];
|
||||||
|
if(candiates == 0) {
|
||||||
|
return; // No Entries found.
|
||||||
|
}
|
||||||
|
if(candiates > 1) {
|
||||||
|
[self _presentSelectionWindow:autotypeCandidates];
|
||||||
|
return; // Nothing to do, we get called back by the window
|
||||||
|
}
|
||||||
|
/* Just in case it's not there anymore, order the app for the window we want to autotype back to the foreground! */
|
||||||
|
[self _orderApplicationToFront:applicationName];
|
||||||
|
/*
|
||||||
|
Implement!
|
||||||
|
*/
|
||||||
|
return;
|
||||||
|
|
||||||
|
KPKEntry *selectedEntry = currentDocument.selectedEntry;
|
||||||
|
if(nil == currentDocument || nil == selectedEntry) {
|
||||||
|
return; // no open documents, no selected entry
|
||||||
|
}
|
||||||
|
|
||||||
|
/* TODO:
|
||||||
|
Replace entry based palce holders
|
||||||
|
Replace global placeholders
|
||||||
|
Translate to paste/copy commands
|
||||||
|
Find correct key-codes for current keyboard layout to perform paste command
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)_registerHotKey {
|
||||||
|
[[DDHotKeyCenter sharedHotKeyCenter] registerHotKeyWithKeyCode:kVK_ANSI_M
|
||||||
|
modifierFlags:(NSCommandKeyMask | NSAlternateKeyMask )
|
||||||
|
target:self
|
||||||
|
action:@selector(_didPressHotKey)
|
||||||
|
object:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)_unregisterHotKey {
|
||||||
|
[[DDHotKeyCenter sharedHotKeyCenter] unregisterHotKeysWithTarget:self action:@selector(_didPressHotKey)];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSDictionary *)_frontMostApplicationInfoDict {
|
||||||
|
NSRunningApplication *frontApplication = [[NSWorkspace sharedWorkspace] frontmostApplication];
|
||||||
|
NSString *name = frontApplication.localizedName;
|
||||||
|
|
||||||
|
NSArray *currentWindows = CFBridgingRelease(CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly | kCGWindowListExcludeDesktopElements, kCGNullWindowID));
|
||||||
|
for(NSDictionary *windowDict in currentWindows) {
|
||||||
|
NSNumber *processId = windowDict[(NSString *)kCGWindowOwnerPID];
|
||||||
|
if(processId && [processId isEqualToNumber:@(frontApplication.processIdentifier)]) {
|
||||||
|
return @{
|
||||||
|
kMPWindowTitleKey:windowDict[(NSString *)kCGWindowName],
|
||||||
|
kMPApplciationNameKey : name
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)_presentSelectionWindow:(NSArray *)candidates {
|
||||||
|
if(!self.matchSelectionWindow) {
|
||||||
|
[[NSBundle mainBundle] loadNibNamed:@"AutotypeCandidateSelectionWindow" owner:self topLevelObjects:nil];
|
||||||
|
[self.performAutotypeButton setTarget:self];
|
||||||
|
[self.performAutotypeButton setAction:@selector(executeAutotypeWithSelectedMatch:)];
|
||||||
|
[self.matchSelectionWindow setLevel:NSFloatingWindowLevel];
|
||||||
|
}
|
||||||
|
NSMenu *associationMenu = [[NSMenu alloc] init];
|
||||||
|
[associationMenu addItemWithTitle:NSLocalizedString(@"SELECT_AUTOTYPE_CANDIDATE", "") action:NULL keyEquivalent:@""];
|
||||||
|
[associationMenu addItem:[NSMenuItem separatorItem]];
|
||||||
|
[associationMenu setAutoenablesItems:NO];
|
||||||
|
for(MPAutotypeContext *context in candidates) {
|
||||||
|
NSString *title = [[NSString alloc] initWithFormat:@"%@: %@", context.entry.title, context.command];
|
||||||
|
NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:title action:0 keyEquivalent:@""];
|
||||||
|
[item setRepresentedObject:context];
|
||||||
|
[associationMenu addItem:item];
|
||||||
|
}
|
||||||
|
[self.matchSelectionButton setMenu:associationMenu];
|
||||||
|
[self.matchSelectionWindow makeKeyAndOrderFront:self];
|
||||||
|
/* Setup Items in Popup */
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)_orderApplicationToFront:(NSString *)applicationName {
|
||||||
|
NSString *appleScript = [[NSString alloc] initWithFormat:@"activate application %@", applicationName];
|
||||||
|
NSAppleScript *script = [[NSAppleScript alloc] initWithSource:appleScript];
|
||||||
|
NSDictionary *error;
|
||||||
|
[script executeAndReturnError:&error];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
||||||
19
MacPass/MPAutotypeKeyPress.h
Normal file
19
MacPass/MPAutotypeKeyPress.h
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
//
|
||||||
|
// MPAutotypeSpecialKey.h
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 24/11/13.
|
||||||
|
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "MPAutotypeCommand.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Autotype command to press a single key. Can be used with modifer keys as well
|
||||||
|
*/
|
||||||
|
@interface MPAutotypeKeyPress : MPAutotypeCommand
|
||||||
|
|
||||||
|
@property (assign) CGEventFlags modifierMask;
|
||||||
|
@property (assign) CGKeyCode keyCode;
|
||||||
|
|
||||||
|
@end
|
||||||
31
MacPass/MPAutotypeKeyPress.m
Normal file
31
MacPass/MPAutotypeKeyPress.m
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
//
|
||||||
|
// MPAutotypeSpecialKey.m
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 24/11/13.
|
||||||
|
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "MPAutotypeKeyPress.h"
|
||||||
|
#import "MPKeyMapper.h"
|
||||||
|
|
||||||
|
@implementation MPAutotypeKeyPress
|
||||||
|
|
||||||
|
- (void)execute {
|
||||||
|
if(![self isValid]) {
|
||||||
|
return; // no valid command. Stop.
|
||||||
|
}
|
||||||
|
CGKeyCode mappedKey = [self _transformKeyCode];
|
||||||
|
[self sendPressKey:mappedKey modifierFlags:self.modifierMask];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)isValid {
|
||||||
|
return ([self _transformKeyCode] != kMPUnknownKeyCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (CGKeyCode)_transformKeyCode {
|
||||||
|
NSString *key = [MPKeyMapper stringForKey:self.keyCode];
|
||||||
|
return [MPKeyMapper keyCodeForCharacter:key];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
18
MacPass/MPAutotypePaste.h
Normal file
18
MacPass/MPAutotypePaste.h
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
//
|
||||||
|
// MPAutotypePaste.h
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 24/11/13.
|
||||||
|
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "MPAutotypeCommand.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simple Paste action. Uses the Clipboard to copy and then paste contents in place
|
||||||
|
*/
|
||||||
|
@interface MPAutotypePaste : MPAutotypeCommand
|
||||||
|
|
||||||
|
- (instancetype)initWithString:(NSString *)aString;
|
||||||
|
|
||||||
|
@end
|
||||||
43
MacPass/MPAutotypePaste.m
Normal file
43
MacPass/MPAutotypePaste.m
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
//
|
||||||
|
// MPAutotypePaste.m
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 24/11/13.
|
||||||
|
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "MPAutotypePaste.h"
|
||||||
|
#import "MPPasteBoardController.h"
|
||||||
|
|
||||||
|
#import "NSString+Commands.h"
|
||||||
|
|
||||||
|
@interface MPAutotypePaste ()
|
||||||
|
|
||||||
|
@property (strong) NSString *pasteData;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation MPAutotypePaste
|
||||||
|
|
||||||
|
- (instancetype)initWithString:(NSString *)aString {
|
||||||
|
self = [super init];
|
||||||
|
if(self) {
|
||||||
|
self.pasteData = aString;
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)execute {
|
||||||
|
if([self.pasteData length] > 0) {
|
||||||
|
MPPasteBoardController *controller = [MPPasteBoardController defaultController];
|
||||||
|
[controller copyObjects:@[self.pasteData]];
|
||||||
|
[self sendPasteKeyCode];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)isValid {
|
||||||
|
/* Pasting shoudl always be valid */
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
@@ -8,6 +8,10 @@
|
|||||||
|
|
||||||
#import "HTTPConnection.h"
|
#import "HTTPConnection.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default Connection to handle the KeepassHttp POST requests. The Connection doesn't do anything,
|
||||||
|
* besides using the MPRequestHandlerService to handle any request from KeePassHttp and send's back the replies
|
||||||
|
*/
|
||||||
@interface MPConnection : HTTPConnection
|
@interface MPConnection : HTTPConnection
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
#import "MPConnection.h"
|
#import "MPConnection.h"
|
||||||
#import "HTTPMessage.h"
|
#import "HTTPMessage.h"
|
||||||
#import "MPRequestHandlerService.h"
|
#import "MPRequestHandlerService.h"
|
||||||
#import "MPServerRequestHandler.h"
|
#import "MPServerRequestHandling.h"
|
||||||
|
|
||||||
|
|
||||||
NSString *const MPRequestTypeKey = @"RequestType";
|
NSString *const MPRequestTypeKey = @"RequestType";
|
||||||
@@ -63,11 +63,12 @@ NSString *const MPRequestTypeKey = @"RequestType";
|
|||||||
|
|
||||||
|
|
||||||
- (void)_parseRequest:(NSDictionary *)aRequest {
|
- (void)_parseRequest:(NSDictionary *)aRequest {
|
||||||
|
/* TODO: generate a response */
|
||||||
NSString *requestType = aRequest[MPRequestTypeKey];
|
NSString *requestType = aRequest[MPRequestTypeKey];
|
||||||
if(!requestType) {
|
if(!requestType) {
|
||||||
NSLog(@"Malformed Request. Missing request type");
|
NSLog(@"Malformed Request. Missing request type");
|
||||||
}
|
}
|
||||||
id<MPServerRequestHandler> handler = [MPRequestHandlerService requestHandler:requestType];
|
id<MPServerRequestHandling> handler = [MPRequestHandlerService requestHandler:requestType];
|
||||||
[handler respondTo:aRequest];
|
[handler respondTo:aRequest];
|
||||||
}
|
}
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -13,5 +13,8 @@
|
|||||||
|
|
||||||
FOUNDATION_EXPORT NSString *const MPPasteBoardType;
|
FOUNDATION_EXPORT NSString *const MPPasteBoardType;
|
||||||
FOUNDATION_EXPORT NSString *const MPErrorDomain;
|
FOUNDATION_EXPORT NSString *const MPErrorDomain;
|
||||||
|
FOUNDATION_EXPORT NSString *const MPLegacyDocumentUTI;
|
||||||
|
FOUNDATION_EXPORT NSString *const MPXMLDocumentUTI;
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -10,3 +10,5 @@
|
|||||||
|
|
||||||
NSString *const MPPasteBoardType = @"com.hicknhack.macpass.pasteboard";
|
NSString *const MPPasteBoardType = @"com.hicknhack.macpass.pasteboard";
|
||||||
NSString *const MPErrorDomain = @"com.hicknhack.macpass.error";
|
NSString *const MPErrorDomain = @"com.hicknhack.macpass.error";
|
||||||
|
NSString *const MPLegacyDocumentUTI = @"com.hicknhack.macpass.kdb";
|
||||||
|
NSString *const MPXMLDocumentUTI = @"com.hicknhack.macpass.kdbx";
|
||||||
26
MacPass/MPContextBarViewController.h
Normal file
26
MacPass/MPContextBarViewController.h
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
//
|
||||||
|
// MPContextBarViewController.h
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 16/12/13.
|
||||||
|
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "MPViewController.h"
|
||||||
|
#import "MPDocument+Search.h"
|
||||||
|
|
||||||
|
@class HNHGradientView;
|
||||||
|
@class MPDocument;
|
||||||
|
|
||||||
|
@interface MPContextBarViewController : MPViewController
|
||||||
|
|
||||||
|
@property (weak) IBOutlet NSButton *titleButton;
|
||||||
|
@property (weak) IBOutlet NSButton *usernameButton;
|
||||||
|
@property (weak) IBOutlet NSButton *passwordButton;
|
||||||
|
@property (weak) IBOutlet NSButton *urlButton;
|
||||||
|
@property (weak) IBOutlet NSButton *notesButton;
|
||||||
|
@property (weak) IBOutlet NSButton *duplicatePasswordsButton;
|
||||||
|
|
||||||
|
- (void)registerNotificationsForDocument:(MPDocument *)document;
|
||||||
|
|
||||||
|
@end
|
||||||
133
MacPass/MPContextBarViewController.m
Normal file
133
MacPass/MPContextBarViewController.m
Normal file
@@ -0,0 +1,133 @@
|
|||||||
|
//
|
||||||
|
// MPContextBarViewController.m
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 16/12/13.
|
||||||
|
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "MPContextBarViewController.h"
|
||||||
|
#import "HNHGradientView.h"
|
||||||
|
#import "KPKEntry.h"
|
||||||
|
#import "MPDocument+HistoryBrowsing.h"
|
||||||
|
#import "MPDocument+Search.h"
|
||||||
|
|
||||||
|
#import "NSButton+HNHTextColor.h"
|
||||||
|
#import "MPFlagsHelper.h"
|
||||||
|
#import "HNHCommon.h"
|
||||||
|
|
||||||
|
NSUInteger const MPContextBarViewControllerActiveFilterMenuItemTag = 1000;
|
||||||
|
|
||||||
|
typedef NS_ENUM(NSUInteger, MPContextTab) {
|
||||||
|
MPContextTabFilter,
|
||||||
|
MPContextTabTrash,
|
||||||
|
MPContextTabHistory
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@interface MPContextBarViewController ()
|
||||||
|
|
||||||
|
@property (nonatomic, assign) MPContextTab activeTab;
|
||||||
|
|
||||||
|
/* Filter */
|
||||||
|
@property (weak) IBOutlet NSButton *filterDoneButton;
|
||||||
|
@property (weak) IBOutlet NSTextField *filterLabelTextField;
|
||||||
|
/* History */
|
||||||
|
@property (weak) IBOutlet HNHGradientView *historyBar;
|
||||||
|
@property (weak) IBOutlet NSTextField *historyLabel;
|
||||||
|
@property (weak) IBOutlet NSButton *exitHistoryButton;
|
||||||
|
/* Trash*/
|
||||||
|
@property (weak) IBOutlet HNHGradientView *trashBar;
|
||||||
|
@property (weak) IBOutlet NSButton *emptyTrashButton;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation MPContextBarViewController
|
||||||
|
|
||||||
|
#pragma mark Livecycle
|
||||||
|
- (instancetype)init {
|
||||||
|
self = [self initWithNibName:@"ContextBar" bundle:nil];
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)dealloc {
|
||||||
|
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)awakeFromNib {
|
||||||
|
[[self.filterLabelTextField cell] setBackgroundStyle:NSBackgroundStyleRaised];
|
||||||
|
|
||||||
|
self.historyBar.activeGradient = [[NSGradient alloc] initWithStartingColor:[NSColor redColor] endingColor:[NSColor greenColor]];
|
||||||
|
|
||||||
|
NSArray *activeColors = @[[NSColor colorWithCalibratedWhite:0.2 alpha:1],[NSColor colorWithCalibratedWhite:0.4 alpha:1]];
|
||||||
|
NSArray *inactiveColors = @[[NSColor colorWithCalibratedWhite:0.3 alpha:1],[NSColor colorWithCalibratedWhite:0.6 alpha:1]];
|
||||||
|
self.trashBar.activeGradient = [[NSGradient alloc] initWithColors:activeColors];
|
||||||
|
self.trashBar.inactiveGradient = [[NSGradient alloc] initWithColors:inactiveColors];
|
||||||
|
[[self view] bind:NSSelectedIndexBinding toObject:self withKeyPath:@"activeTab" options:nil];
|
||||||
|
|
||||||
|
|
||||||
|
self.emptyTrashButton.textColor = [NSColor whiteColor];
|
||||||
|
|
||||||
|
NSInteger tags[] = { MPEntrySearchTitles, MPEntrySearchUsernames, MPEntrySearchPasswords, MPEntrySearchNotes, MPEntrySearchUrls, MPEntrySearchDoublePasswords };
|
||||||
|
NSArray *buttons = @[self.titleButton, self.usernameButton, self.passwordButton, self.notesButton, self.urlButton, self.duplicatePasswordsButton ];
|
||||||
|
for(NSUInteger iIndex = 0; iIndex < [buttons count]; iIndex++) {
|
||||||
|
[buttons[iIndex] setAction:@selector(toggleSearchFlags:)];
|
||||||
|
[buttons[iIndex] setTag:tags[iIndex]];
|
||||||
|
}
|
||||||
|
[self _updateFilterButtons];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark MPDocument Notifications
|
||||||
|
- (void)registerNotificationsForDocument:(MPDocument *)document {
|
||||||
|
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_updateFilterButtons) name:MPDocumentDidChangeSearchFlags object:document];
|
||||||
|
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_didEnterSearch:) name:MPDocumentDidEnterSearchNotification object:document];
|
||||||
|
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_didEnterHistory:) name:MPDocumentDidEnterHistoryNotification object:document];
|
||||||
|
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_didChangeCurrentItem:) name:MPDocumentCurrentItemChangedNotification object:document];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)_didEnterSearch:(NSNotification *)notification {
|
||||||
|
/* Select text if already visible */
|
||||||
|
self.activeTab = MPContextTabFilter;
|
||||||
|
[self _updateFilterButtons];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)_didEnterHistory:(NSNotification *)notification {
|
||||||
|
self.activeTab = MPContextTabHistory;
|
||||||
|
[self _updateBindings];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)_didChangeCurrentItem:(NSNotification *)notification {
|
||||||
|
MPDocument *document = [notification object];
|
||||||
|
BOOL showTrash = document.useTrash && (document.selectedGroup == document.trash || [document isItemTrashed:document.selectedItem]);
|
||||||
|
if(showTrash && ! document.hasSearch) {
|
||||||
|
self.activeTab = MPContextTabTrash;
|
||||||
|
[self _updateBindings];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
- (BOOL)control:(NSControl*)control textView:(NSTextView*)textView doCommandBySelector:(SEL)commandSelector {
|
||||||
|
if(commandSelector == @selector(insertNewline:)) {
|
||||||
|
[self _didChangeFilter];
|
||||||
|
}
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#pragma mark UI Helper
|
||||||
|
- (void)_updateBindings {
|
||||||
|
// only the entry view has to be bound, the rest not
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)_updateFilterButtons {
|
||||||
|
MPDocument *document = [[self windowController] document];
|
||||||
|
[self.duplicatePasswordsButton setState:HNHStateForBool(MPTestFlagInOptions(MPEntrySearchDoublePasswords, document.activeFlags))];
|
||||||
|
[self.notesButton setState:HNHStateForBool(MPTestFlagInOptions(MPEntrySearchNotes, document.activeFlags))];
|
||||||
|
[self.passwordButton setState:HNHStateForBool(MPTestFlagInOptions(MPEntrySearchPasswords, document.activeFlags))];
|
||||||
|
[self.titleButton setState:HNHStateForBool(MPTestFlagInOptions(MPEntrySearchTitles, document.activeFlags))];
|
||||||
|
[self.urlButton setState:HNHStateForBool(MPTestFlagInOptions(MPEntrySearchUrls, document.activeFlags))];
|
||||||
|
[self.usernameButton setState:HNHStateForBool(MPTestFlagInOptions(MPEntrySearchUsernames, document.activeFlags))];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
@@ -13,8 +13,9 @@ typedef NS_OPTIONS(NSUInteger, MPContextMenuItemsFlags) {
|
|||||||
MPContextMenuDelete = 1 << 1,
|
MPContextMenuDelete = 1 << 1,
|
||||||
MPContextMenuCopy = 1 << 2,
|
MPContextMenuCopy = 1 << 2,
|
||||||
MPContextMenuTrash = 1 << 3,
|
MPContextMenuTrash = 1 << 3,
|
||||||
|
MPContextMenuClone = 1 << 4,
|
||||||
MPContextMenuMinimal = MPContextMenuCreate | MPContextMenuDelete,
|
MPContextMenuMinimal = MPContextMenuCreate | MPContextMenuDelete,
|
||||||
MPContextMenuFull = MPContextMenuMinimal | MPContextMenuCopy,
|
MPContextMenuFull = MPContextMenuMinimal | MPContextMenuCopy | MPContextMenuClone,
|
||||||
MPContextMenuExtended = MPContextMenuFull | MPContextMenuTrash
|
MPContextMenuExtended = MPContextMenuFull | MPContextMenuTrash
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -9,13 +9,23 @@
|
|||||||
#import "MPContextMenuHelper.h"
|
#import "MPContextMenuHelper.h"
|
||||||
#import "MPActionHelper.h"
|
#import "MPActionHelper.h"
|
||||||
|
|
||||||
|
#import "MPFlagsHelper.h"
|
||||||
|
|
||||||
|
static void MPContextmenuHelperBeginSection(NSMutableArray *items) {
|
||||||
|
if([items count] > 0) {
|
||||||
|
[items addObject:[NSMenuItem separatorItem]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@implementation MPContextMenuHelper
|
@implementation MPContextMenuHelper
|
||||||
|
|
||||||
+ (NSArray *)contextMenuItemsWithItems:(MPContextMenuItemsFlags)flags {
|
+ (NSArray *)contextMenuItemsWithItems:(MPContextMenuItemsFlags)flags {
|
||||||
BOOL insertCreate = (0 != (flags & MPContextMenuCreate));
|
|
||||||
BOOL insertDelete = (0 != (flags & MPContextMenuDelete));
|
BOOL const insertCreate = MPTestFlagInOptions(MPContextMenuCreate, flags);
|
||||||
BOOL insertCopy = (0 != (flags & MPContextMenuCopy));
|
BOOL const insertDelete = MPTestFlagInOptions(MPContextMenuDelete, flags);
|
||||||
BOOL insertTrash = (0 != (flags & MPContextMenuTrash));
|
BOOL const insertCopy = MPTestFlagInOptions(MPContextMenuCopy, flags);
|
||||||
|
BOOL const insertTrash = MPTestFlagInOptions(MPContextMenuTrash, flags);
|
||||||
|
BOOL const insertClone = MPTestFlagInOptions(MPContextMenuClone, flags);
|
||||||
|
|
||||||
NSMutableArray *items = [NSMutableArray arrayWithCapacity:10];
|
NSMutableArray *items = [NSMutableArray arrayWithCapacity:10];
|
||||||
if(insertCreate) {
|
if(insertCreate) {
|
||||||
@@ -29,8 +39,20 @@
|
|||||||
|
|
||||||
[items addObjectsFromArray:@[ newGroup, newEntry ]];
|
[items addObjectsFromArray:@[ newGroup, newEntry ]];
|
||||||
}
|
}
|
||||||
|
if(insertClone) {
|
||||||
|
MPContextmenuHelperBeginSection(items);
|
||||||
|
NSMenuItem *cloneEntry = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"CLONE_ENTRY", @"")
|
||||||
|
action:[MPActionHelper actionOfType:MPActionCloneEntry]
|
||||||
|
keyEquivalent:@"D"];
|
||||||
|
NSMenuItem *cloneEntyWithOptions = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"CLONE_ENTRY_WITH_OPTIONS", @"")
|
||||||
|
action:[MPActionHelper actionOfType:MPActionCloneEntryWithOptions]
|
||||||
|
keyEquivalent:@""];
|
||||||
|
|
||||||
|
[items addObjectsFromArray:@[ cloneEntry, cloneEntyWithOptions ]];
|
||||||
|
|
||||||
|
}
|
||||||
if(insertDelete || insertTrash) {
|
if(insertDelete || insertTrash) {
|
||||||
[self _beginSection:items];
|
MPContextmenuHelperBeginSection(items);
|
||||||
if(insertDelete) {
|
if(insertDelete) {
|
||||||
NSMenuItem *delete = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"DELETE", @"")
|
NSMenuItem *delete = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"DELETE", @"")
|
||||||
action:[MPActionHelper actionOfType:MPActionDelete]
|
action:[MPActionHelper actionOfType:MPActionDelete]
|
||||||
@@ -50,7 +72,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(insertCopy) {
|
if(insertCopy) {
|
||||||
[self _beginSection:items];
|
MPContextmenuHelperBeginSection(items);
|
||||||
NSMenuItem *copyUsername = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"COPY_USERNAME", @"")
|
NSMenuItem *copyUsername = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"COPY_USERNAME", @"")
|
||||||
action:[MPActionHelper actionOfType:MPActionCopyUsername]
|
action:[MPActionHelper actionOfType:MPActionCopyUsername]
|
||||||
keyEquivalent:@"C"];
|
keyEquivalent:@"C"];
|
||||||
@@ -79,10 +101,4 @@
|
|||||||
return items;
|
return items;
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (void)_beginSection:(NSMutableArray *)items {
|
|
||||||
if([items count] > 0) {
|
|
||||||
[items addObject:[NSMenuItem separatorItem]];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
30
MacPass/MPContextToolbarButton.h
Normal file
30
MacPass/MPContextToolbarButton.h
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
//
|
||||||
|
// MPContextToolbarButton.h
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 26.07.13.
|
||||||
|
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
//
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
|
@interface MPContextToolbarButton : NSSegmentedControl
|
||||||
|
|
||||||
|
- (void)setImage:(NSImage *)image;
|
||||||
|
- (void)setContextMenu:(NSMenu *)menu;
|
||||||
|
|
||||||
|
@end
|
||||||
91
MacPass/MPContextToolbarButton.m
Normal file
91
MacPass/MPContextToolbarButton.m
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
//
|
||||||
|
// MPContextToolbarButton.m
|
||||||
|
// MacPass
|
||||||
|
//
|
||||||
|
// Created by Michael Starke on 26.07.13.
|
||||||
|
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
//
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "MPContextToolbarButton.h"
|
||||||
|
#import "MPSegmentedContextCell.h"
|
||||||
|
|
||||||
|
@interface MPContextToolbarButton () {
|
||||||
|
@private
|
||||||
|
NSMenu *_contextMenu;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation MPContextToolbarButton
|
||||||
|
|
||||||
|
- (id)initWithFrame:(NSRect)frame {
|
||||||
|
self = [super initWithFrame:frame];
|
||||||
|
if (self) {
|
||||||
|
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:[self cell]];
|
||||||
|
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
|
||||||
|
MPSegmentedContextCell *cell = [[MPSegmentedContextCell alloc] initWithCoder:unarchiver];
|
||||||
|
[self setCell:cell];
|
||||||
|
|
||||||
|
[self setFocusRingType:NSFocusRingTypeNone];
|
||||||
|
[self setSegmentCount:2];
|
||||||
|
[cell setTrackingMode:NSSegmentSwitchTrackingMomentary];
|
||||||
|
[self setSegmentStyle:NSSegmentStyleTexturedSquare];
|
||||||
|
[cell setWidth:31 forSegment:0];
|
||||||
|
[cell setWidth:17 forSegment:1];
|
||||||
|
|
||||||
|
NSImage *contextTriangle = [[NSBundle mainBundle] imageForResource:@"contextTriangleTemplate"];
|
||||||
|
[self setImage:contextTriangle forSegment:1];
|
||||||
|
|
||||||
|
cell.contextMenuAction = @selector(showContextMenu:);
|
||||||
|
cell.contextMenuTarget = self;
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setContextMenu:(NSMenu *)menu {
|
||||||
|
if(_contextMenu != menu) {
|
||||||
|
_contextMenu = menu;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Block the segment setter to prevent accidential settings
|
||||||
|
*/
|
||||||
|
- (void)setImage:(NSImage *)image forSegment:(NSInteger)segment {
|
||||||
|
if(segment < 2) {
|
||||||
|
[super setImage:image forSegment:segment];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setSegmentCount:(NSInteger)count {
|
||||||
|
if(count == 2) {
|
||||||
|
[super setSegmentCount:count];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setImage:(NSImage *)image {
|
||||||
|
[self setImage:image forSegment:0];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)showContextMenu:(id)sender {
|
||||||
|
NSPoint point = [self frame].origin;
|
||||||
|
point.x = [[self cell] widthForSegment:0];
|
||||||
|
point.y = NSHeight([self frame]) + 3;
|
||||||
|
[_contextMenu popUpMenuPositioningItem:nil atLocation:point inView:self];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
@@ -5,6 +5,20 @@
|
|||||||
// Created by Michael Starke on 17.07.13.
|
// Created by Michael Starke on 17.07.13.
|
||||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||||
//
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
//
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
//
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
@@ -12,6 +26,6 @@
|
|||||||
|
|
||||||
@interface MPCustomFieldTableViewDelegate : NSObject <NSTableViewDelegate>
|
@interface MPCustomFieldTableViewDelegate : NSObject <NSTableViewDelegate>
|
||||||
|
|
||||||
@property (nonatomic, weak) MPInspectorViewController *viewController;
|
@property (weak, nonatomic) id viewController;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -5,32 +5,51 @@
|
|||||||
// Created by Michael Starke on 17.07.13.
|
// Created by Michael Starke on 17.07.13.
|
||||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||||
//
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
//
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
//
|
||||||
|
|
||||||
#import "MPCustomFieldTableViewDelegate.h"
|
#import "MPCustomFieldTableViewDelegate.h"
|
||||||
#import "MPInspectorViewController.h"
|
#import "MPDocument.h"
|
||||||
#import "MPCustomFieldTableCellView.h"
|
#import "MPCustomFieldTableCellView.h"
|
||||||
|
#import "MPEntryInspectorViewController.h"
|
||||||
|
|
||||||
#import "Kdb4Node.h"
|
#import "KPKEntry.h"
|
||||||
#import "StringField+Undo.h"
|
#import "KPKAttribute.h"
|
||||||
|
|
||||||
@implementation MPCustomFieldTableViewDelegate
|
@implementation MPCustomFieldTableViewDelegate
|
||||||
|
|
||||||
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
|
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
|
||||||
if(![self.viewController.selectedEntry isKindOfClass:[Kdb4Entry class]]) {
|
MPDocument *document = [[[tableView window] windowController] document];
|
||||||
return nil;
|
|
||||||
}
|
KPKEntry *entry = document.selectedEntry;
|
||||||
Kdb4Entry *entry = (Kdb4Entry *)self.viewController.selectedEntry;
|
|
||||||
MPCustomFieldTableCellView *view = [tableView makeViewWithIdentifier:@"SelectedCell" owner:tableView];
|
MPCustomFieldTableCellView *view = [tableView makeViewWithIdentifier:@"SelectedCell" owner:tableView];
|
||||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_customFieldFrameChanged:) name:NSViewFrameDidChangeNotification object:view];
|
|
||||||
if([self.viewController.selectedEntry isKindOfClass:[Kdb4Entry class]]) {
|
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||||
StringField *stringField = entry.stringFields[row];
|
selector:@selector(_customFieldFrameChanged:)
|
||||||
|
name:NSViewFrameDidChangeNotification
|
||||||
|
object:view];
|
||||||
|
|
||||||
|
NSAssert([entry.customAttributes count] > row, @"Count of custom attributes must match row");
|
||||||
|
KPKAttribute *attribute = entry.customAttributes[row];
|
||||||
NSDictionary *validateOptions = @{ NSValidatesImmediatelyBindingOption: @YES };
|
NSDictionary *validateOptions = @{ NSValidatesImmediatelyBindingOption: @YES };
|
||||||
[view.labelTextField bind:NSValueBinding toObject:stringField withKeyPath:MPStringFieldKeyUndoableKey options:validateOptions];
|
[view.labelTextField bind:NSValueBinding toObject:attribute withKeyPath:@"key" options:validateOptions];
|
||||||
[view.valueTextField bind:NSValueBinding toObject:stringField withKeyPath:MPStringFieldValueUndoableKey options:nil];
|
[view.valueTextField bind:NSValueBinding toObject:attribute withKeyPath:@"value" options:nil];
|
||||||
[view.removeButton setTarget:self.viewController];
|
[view.removeButton setTarget:self.viewController];
|
||||||
[view.removeButton setAction:@selector(removeCustomField:)];
|
[view.removeButton setAction:@selector(removeCustomField:)];
|
||||||
[view.removeButton setTag:row];
|
[view.removeButton setTag:row];
|
||||||
}
|
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,17 +0,0 @@
|
|||||||
//
|
|
||||||
// MPDatabaseSettingsDelegate.h
|
|
||||||
// MacPass
|
|
||||||
//
|
|
||||||
// Created by Michael Starke on 21.07.13.
|
|
||||||
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
|
|
||||||
@protocol MPDatabaseSettingsDelegate <NSObject>
|
|
||||||
|
|
||||||
@optional
|
|
||||||
- (void)didCancelDatabaseSettings;
|
|
||||||
- (void)didSaveDatabaseSettings;
|
|
||||||
|
|
||||||
@end
|
|
||||||
@@ -7,58 +7,41 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h>
|
#import <Cocoa/Cocoa.h>
|
||||||
#import "MPDatabaseSettingsDelegate.h"
|
#import "MPSheetWindowController.h"
|
||||||
|
|
||||||
typedef NS_ENUM(NSUInteger, MPDatabaseSettingsTab) {
|
typedef NS_ENUM(NSUInteger, MPDatabaseSettingsTab) {
|
||||||
MPDatabaseSettingsTabGeneral,
|
MPDatabaseSettingsTabGeneral,
|
||||||
MPDatabaseSettingsTabPassword,
|
MPDatabaseSettingsTabSecurity,
|
||||||
MPDatabaseSettingsTabDisplay,
|
MPDatabaseSettingsTabAdvanced
|
||||||
MPDatabaseSettingsTabAdvanced,
|
|
||||||
MPDatabaseSettingsTemplatesTab,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@class MPDocument;
|
@class MPDocument;
|
||||||
@class HNHRoundendTextField;
|
@class HNHRoundedTextField;
|
||||||
@class HNHRoundedSecureTextField;
|
|
||||||
|
|
||||||
@interface MPDatabaseSettingsWindowController : NSWindowController <NSTextFieldDelegate, NSTabViewDelegate>
|
@interface MPDatabaseSettingsWindowController : MPSheetWindowController <NSTextFieldDelegate, NSTabViewDelegate>
|
||||||
|
|
||||||
@property (nonatomic,weak) id<MPDatabaseSettingsDelegate> delegate;
|
|
||||||
|
|
||||||
@property (weak) IBOutlet NSTabView *sectionTabView;
|
@property (weak) IBOutlet NSTabView *sectionTabView;
|
||||||
@property (weak) IBOutlet NSButton *saveButton;
|
|
||||||
@property (weak) IBOutlet NSButton *cancelButton;
|
|
||||||
|
|
||||||
/* General Tab */
|
/* General Tab */
|
||||||
@property (weak) IBOutlet NSTextField *databaseNameTextField;
|
@property (weak) IBOutlet NSTextField *databaseNameTextField;
|
||||||
|
@property (weak) IBOutlet NSPopUpButton *databaseCompressionPopupButton;
|
||||||
@property (unsafe_unretained) IBOutlet NSTextView *databaseDescriptionTextView;
|
@property (unsafe_unretained) IBOutlet NSTextView *databaseDescriptionTextView;
|
||||||
|
@property (weak) IBOutlet NSColorWell *databaseColorColorWell;
|
||||||
|
|
||||||
/* Protection */
|
/* Security Tab */
|
||||||
@property (weak) IBOutlet HNHRoundedSecureTextField *passwordTextField;
|
|
||||||
@property (weak) IBOutlet HNHRoundedSecureTextField *passwordRepeatTextField;
|
|
||||||
@property (weak) IBOutlet NSPathControl *keyfilePathControl;
|
|
||||||
@property (weak) IBOutlet NSButton *togglePasswordButton;
|
|
||||||
@property (weak) IBOutlet NSTextField *errorTextField;
|
|
||||||
|
|
||||||
|
|
||||||
- (IBAction)clearKey:(id)sender;
|
|
||||||
- (IBAction)generateKey:(id)sender;
|
|
||||||
|
|
||||||
/* Display Tab */
|
|
||||||
@property (weak) IBOutlet NSButton *protectTitleCheckButton;
|
@property (weak) IBOutlet NSButton *protectTitleCheckButton;
|
||||||
@property (weak) IBOutlet NSButton *protectUserNameCheckButton;
|
@property (weak) IBOutlet NSButton *protectUserNameCheckButton;
|
||||||
@property (weak) IBOutlet NSButton *protectPasswortCheckButton;
|
@property (weak) IBOutlet NSButton *protectPasswortCheckButton;
|
||||||
@property (weak) IBOutlet NSButton *protectURLCheckButton;
|
@property (weak) IBOutlet NSButton *protectURLCheckButton;
|
||||||
@property (weak) IBOutlet NSButton *protectNotesCheckButton;
|
@property (weak) IBOutlet NSButton *protectNotesCheckButton;
|
||||||
|
@property (weak) IBOutlet NSTextField *encryptionRoundsTextField;
|
||||||
|
@property (weak) IBOutlet NSButton *benchmarkButton;
|
||||||
|
|
||||||
/* Advanced Tab*/
|
/* Advanced Tab*/
|
||||||
@property (weak) IBOutlet NSButton *enableRecycleBinCheckButton;
|
@property (weak) IBOutlet NSButton *enableRecycleBinCheckButton;
|
||||||
@property (weak) IBOutlet NSButton *emptyRecycleBinOnQuitCheckButton;
|
@property (weak) IBOutlet NSButton *emptyRecycleBinOnQuitCheckButton;
|
||||||
@property (weak) IBOutlet NSPopUpButton *selectRecycleBinGroupPopUpButton;
|
@property (weak) IBOutlet NSPopUpButton *selectRecycleBinGroupPopUpButton;
|
||||||
|
@property (weak) IBOutlet NSTextField *defaultUsernameTextField;
|
||||||
|
|
||||||
/* Templates Tab */
|
|
||||||
@property (weak) IBOutlet HNHRoundendTextField *defaultUsernameTextField;
|
|
||||||
@property (weak) IBOutlet NSPopUpButton *templateGroupPopUpButton;
|
@property (weak) IBOutlet NSPopUpButton *templateGroupPopUpButton;
|
||||||
|
|
||||||
|
|
||||||
@@ -66,9 +49,6 @@ typedef NS_ENUM(NSUInteger, MPDatabaseSettingsTab) {
|
|||||||
|
|
||||||
- (void)showSettingsTab:(MPDatabaseSettingsTab)tab;
|
- (void)showSettingsTab:(MPDatabaseSettingsTab)tab;
|
||||||
|
|
||||||
- (void)update;
|
|
||||||
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user