aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrowanbeentje <rowan@beent.je>2010-09-08 21:36:11 +0000
committerrowanbeentje <rowan@beent.je>2010-09-08 21:36:11 +0000
commitf7a69e2454ca3dd1f1a62875522e9fb3dea572b3 (patch)
tree847d2a915dfd496382977fc64799222057a923e3
parent3f6aa841dd77af2cf8f2818c91cd186aec2ca5e0 (diff)
downloadsequelpro-f7a69e2454ca3dd1f1a62875522e9fb3dea572b3.tar.gz
sequelpro-f7a69e2454ca3dd1f1a62875522e9fb3dea572b3.tar.bz2
sequelpro-f7a69e2454ca3dd1f1a62875522e9fb3dea572b3.zip
- Add support for SSH identity files (public keys) in custom locations
- Update localisable strings - Fix initial window position
-rw-r--r--Interfaces/English.lproj/ConnectionView.xib633
-rw-r--r--Interfaces/English.lproj/MainWindow.xib156
-rw-r--r--Interfaces/English.lproj/Preferences.xib797
-rw-r--r--Resources/English.lproj/ConnectionView.stringsbin27074 -> 27316 bytes
-rw-r--r--Resources/English.lproj/DataMigrationDialog.stringsbin18292 -> 19638 bytes
-rw-r--r--Resources/English.lproj/Localizable.stringsbin169886 -> 171424 bytes
-rw-r--r--Resources/English.lproj/Preferences.stringsbin50300 -> 50496 bytes
-rw-r--r--Resources/Images/KeyTemplate.pdf67
-rw-r--r--Source/SPConnectionController.h8
-rw-r--r--Source/SPConnectionController.m61
-rw-r--r--Source/SPDatabaseDocument.m8
-rw-r--r--Source/SPPreferenceController.h2
-rw-r--r--Source/SPPreferenceController.m44
-rw-r--r--Source/SPSSHTunnel.h2
-rw-r--r--Source/SPSSHTunnel.m19
-rw-r--r--sequel-pro.xcodeproj/project.pbxproj4
16 files changed, 1256 insertions, 545 deletions
diff --git a/Interfaces/English.lproj/ConnectionView.xib b/Interfaces/English.lproj/ConnectionView.xib
index 89382d47..eeac316b 100644
--- a/Interfaces/English.lproj/ConnectionView.xib
+++ b/Interfaces/English.lproj/ConnectionView.xib
@@ -21,12 +21,12 @@
</object>
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
<bool key="EncodedWithXMLCoder">YES</bool>
- <integer value="4888"/>
+ <integer value="5166"/>
</object>
<object class="NSArray" key="IBDocument.PluginDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
- <string>com.brandonwalkin.BWToolkit</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.brandonwalkin.BWToolkit</string>
</object>
<object class="NSMutableDictionary" key="IBDocument.Metadata">
<bool key="EncodedWithXMLCoder">YES</bool>
@@ -359,7 +359,6 @@
</object>
</object>
</object>
- <int key="NSSelectedIndex">1</int>
<bool key="NSPullDown">YES</bool>
<int key="NSPreferredEdge">1</int>
<bool key="NSUsesItemFromMenu">YES</bool>
@@ -407,7 +406,7 @@
<string key="NSColorName">controlColor</string>
<object class="NSColor" key="NSColor" id="355746054">
<int key="NSColorSpace">3</int>
- <bytes key="NSWhite">MC42NjY2NjY2ODY1AA</bytes>
+ <bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
</object>
</object>
<reference key="NSTextColor" ref="434026568"/>
@@ -1117,7 +1116,7 @@
<object class="NSTextField" id="21480939">
<reference key="NSNextResponder" ref="326102394"/>
<int key="NSvFlags">268</int>
- <string key="NSFrame">{{110, 47}, {226, 22}}</string>
+ <string key="NSFrame">{{110, 47}, {198, 22}}</string>
<reference key="NSSuperview" ref="326102394"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="944931136">
@@ -1125,7 +1124,6 @@
<int key="NSCellFlags2">272630784</int>
<string key="NSContents"/>
<reference key="NSSupport" ref="807120225"/>
- <string key="NSPlaceholderString">optional if public key is available</string>
<reference key="NSControlView" ref="21480939"/>
<bool key="NSDrawsBackground">YES</bool>
<reference key="NSBackgroundColor" ref="211632616"/>
@@ -1216,6 +1214,66 @@
<reference key="NSTextColor" ref="434026568"/>
</object>
</object>
+ <object class="NSButton" id="183948302">
+ <reference key="NSNextResponder" ref="326102394"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{307, 46}, {29, 24}}</string>
+ <reference key="NSSuperview" ref="326102394"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="510891456">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">134217728</int>
+ <string key="NSContents"/>
+ <reference key="NSSupport" ref="807120225"/>
+ <reference key="NSControlView" ref="183948302"/>
+ <int key="NSButtonFlags">-922992385</int>
+ <int key="NSButtonFlags2">34</int>
+ <object class="NSCustomResource" key="NSNormalImage">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">KeyTemplate</string>
+ </object>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">400</int>
+ <int key="NSPeriodicInterval">75</int>
+ </object>
+ </object>
+ <object class="NSTextField" id="797420065">
+ <reference key="NSNextResponder" ref="326102394"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{7, 49}, {98, 17}}</string>
+ <reference key="NSSuperview" ref="326102394"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="1004204108">
+ <int key="NSCellFlags">68288064</int>
+ <int key="NSCellFlags2">71304192</int>
+ <string key="NSContents">SSH Key:</string>
+ <reference key="NSSupport" ref="807120225"/>
+ <reference key="NSControlView" ref="797420065"/>
+ <reference key="NSBackgroundColor" ref="644242225"/>
+ <reference key="NSTextColor" ref="434026568"/>
+ </object>
+ </object>
+ <object class="NSTextField" id="357022441">
+ <reference key="NSNextResponder" ref="326102394"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{110, 47}, {198, 22}}</string>
+ <reference key="NSSuperview" ref="326102394"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="31454463">
+ <int key="NSCellFlags">-2076049856</int>
+ <int key="NSCellFlags2">272631296</int>
+ <string key="NSContents"/>
+ <reference key="NSSupport" ref="807120225"/>
+ <reference key="NSControlView" ref="357022441"/>
+ <bool key="NSDrawsBackground">YES</bool>
+ <reference key="NSBackgroundColor" ref="211632616"/>
+ <object class="NSColor" key="NSTextColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MC40OTU5Njc3NDE5AA</bytes>
+ </object>
+ </object>
+ </object>
</object>
<string key="NSFrame">{{6, 6}, {356, 382}}</string>
<reference key="NSSuperview" ref="159800861"/>
@@ -1364,7 +1422,7 @@
<string key="NSWindowTitle">Error Detail</string>
<string key="NSWindowClass">NSPanel</string>
<nil key="NSViewClass"/>
- <string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
+ <string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
<string key="NSWindowContentMinSize">{100, 100}</string>
<object class="NSView" key="NSWindowView" id="536120400">
<nil key="NSNextResponder"/>
@@ -1404,9 +1462,9 @@
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSColor" id="646863217">
+ <object class="NSColor" id="47423510">
<int key="NSColorSpace">1</int>
- <bytes key="NSRGB">MC45MDE5NjA3OTAyIDAuOTAxOTYwNzkwMiAwLjkwMTk2MDc5MDIAA</bytes>
+ <bytes key="NSRGB">MC45MDE5NjA3OSAwLjkwMTk2MDc5IDAuOTAxOTYwNzkAA</bytes>
</object>
<object class="NSFont">
<string key="NSName">LucidaGrande</string>
@@ -1527,7 +1585,7 @@
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="646863217"/>
+ <reference ref="47423510"/>
<object class="NSFont">
<string key="NSName">LucidaGrande-Bold</string>
<double key="NSSize">10</double>
@@ -1690,7 +1748,7 @@
</object>
<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
<string key="NSMinSize">{100, 119}</string>
- <string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
+ <string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
<string key="NSFrameAutosaveName"/>
</object>
<object class="NSUserDefaultsController" id="642702582">
@@ -2622,35 +2680,6 @@
<int key="connectionID">5448</int>
</object>
<object class="IBConnectionRecord">
- <object class="IBBindingConnection" key="connection">
- <string key="label">value: sshPassword</string>
- <reference key="source" ref="21480939"/>
- <reference key="destination" ref="545410097"/>
- <object class="NSNibBindingConnector" key="connector">
- <reference key="NSSource" ref="21480939"/>
- <reference key="NSDestination" ref="545410097"/>
- <string key="NSLabel">value: sshPassword</string>
- <string key="NSBinding">value</string>
- <string key="NSKeyPath">sshPassword</string>
- <object class="NSDictionary" key="NSOptions">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSArray" key="dict.sortedKeys">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>NSContinuouslyUpdatesValue</string>
- <string>NSNullPlaceholder</string>
- </object>
- <object class="NSMutableArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <boolean value="YES"/>
- <string>optional if public key is available</string>
- </object>
- </object>
- <int key="NSNibBindingConnectorVersion">2</int>
- </object>
- </object>
- <int key="connectionID">5450</int>
- </object>
- <object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">helpButton</string>
<reference key="source" ref="545410097"/>
@@ -2778,6 +2807,230 @@
</object>
<int key="connectionID">5491</int>
</object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">sshSSHKeyButton</string>
+ <reference key="source" ref="545410097"/>
+ <reference key="destination" ref="183948302"/>
+ </object>
+ <int key="connectionID">5494</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">chooseSSHKey:</string>
+ <reference key="source" ref="545410097"/>
+ <reference key="destination" ref="183948302"/>
+ </object>
+ <int key="connectionID">5495</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">value: sshPassword</string>
+ <reference key="source" ref="21480939"/>
+ <reference key="destination" ref="545410097"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="21480939"/>
+ <reference key="NSDestination" ref="545410097"/>
+ <string key="NSLabel">value: sshPassword</string>
+ <string key="NSBinding">value</string>
+ <string key="NSKeyPath">sshPassword</string>
+ <object class="NSDictionary" key="NSOptions">
+ <string key="NS.key.0">NSContinuouslyUpdatesValue</string>
+ <boolean value="YES" key="NS.object.0"/>
+ </object>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">5504</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">hidden: sshKeyLocationEnabled</string>
+ <reference key="source" ref="627782947"/>
+ <reference key="destination" ref="545410097"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="627782947"/>
+ <reference key="NSDestination" ref="545410097"/>
+ <string key="NSLabel">hidden: sshKeyLocationEnabled</string>
+ <string key="NSBinding">hidden</string>
+ <string key="NSKeyPath">sshKeyLocationEnabled</string>
+ <object class="NSDictionary" key="NSOptions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSMultipleValuesPlaceholder</string>
+ <string>NSNoSelectionPlaceholder</string>
+ <string>NSNotApplicablePlaceholder</string>
+ <string>NSNullPlaceholder</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <integer value="0"/>
+ <integer value="0"/>
+ <integer value="0"/>
+ <integer value="0"/>
+ </object>
+ </object>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">5549</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">value: sshKeyLocationEnabled</string>
+ <reference key="source" ref="183948302"/>
+ <reference key="destination" ref="545410097"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="183948302"/>
+ <reference key="NSDestination" ref="545410097"/>
+ <string key="NSLabel">value: sshKeyLocationEnabled</string>
+ <string key="NSBinding">value</string>
+ <string key="NSKeyPath">sshKeyLocationEnabled</string>
+ <object class="NSDictionary" key="NSOptions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSMultipleValuesPlaceholder</string>
+ <string>NSNoSelectionPlaceholder</string>
+ <string>NSNotApplicablePlaceholder</string>
+ <string>NSNullPlaceholder</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <integer value="0"/>
+ <integer value="0"/>
+ <integer value="0"/>
+ <integer value="0"/>
+ </object>
+ </object>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">5551</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">hidden: sshKeyLocationEnabled</string>
+ <reference key="source" ref="21480939"/>
+ <reference key="destination" ref="545410097"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="21480939"/>
+ <reference key="NSDestination" ref="545410097"/>
+ <string key="NSLabel">hidden: sshKeyLocationEnabled</string>
+ <string key="NSBinding">hidden</string>
+ <string key="NSKeyPath">sshKeyLocationEnabled</string>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">5559</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">hidden: sshKeyLocationEnabled</string>
+ <reference key="source" ref="797420065"/>
+ <reference key="destination" ref="545410097"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="797420065"/>
+ <reference key="NSDestination" ref="545410097"/>
+ <string key="NSLabel">hidden: sshKeyLocationEnabled</string>
+ <string key="NSBinding">hidden</string>
+ <string key="NSKeyPath">sshKeyLocationEnabled</string>
+ <object class="NSDictionary" key="NSOptions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSMultipleValuesPlaceholder</string>
+ <string>NSNoSelectionPlaceholder</string>
+ <string>NSNotApplicablePlaceholder</string>
+ <string>NSNullPlaceholder</string>
+ <string>NSValueTransformerName</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <integer value="1"/>
+ <integer value="1"/>
+ <integer value="1"/>
+ <integer value="1"/>
+ <string>NSNegateBoolean</string>
+ </object>
+ </object>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">5561</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">hidden: sshKeyLocationEnabled</string>
+ <reference key="source" ref="357022441"/>
+ <reference key="destination" ref="545410097"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="357022441"/>
+ <reference key="NSDestination" ref="545410097"/>
+ <string key="NSLabel">hidden: sshKeyLocationEnabled</string>
+ <string key="NSBinding">hidden</string>
+ <string key="NSKeyPath">sshKeyLocationEnabled</string>
+ <object class="NSDictionary" key="NSOptions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSMultipleValuesPlaceholder</string>
+ <string>NSNoSelectionPlaceholder</string>
+ <string>NSNotApplicablePlaceholder</string>
+ <string>NSNullPlaceholder</string>
+ <string>NSValueTransformerName</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <integer value="1"/>
+ <integer value="1"/>
+ <integer value="1"/>
+ <integer value="1"/>
+ <string>NSNegateBoolean</string>
+ </object>
+ </object>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">5562</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">value: sshKeyLocation</string>
+ <reference key="source" ref="357022441"/>
+ <reference key="destination" ref="545410097"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="357022441"/>
+ <reference key="NSDestination" ref="545410097"/>
+ <string key="NSLabel">value: sshKeyLocation</string>
+ <string key="NSBinding">value</string>
+ <string key="NSKeyPath">sshKeyLocation</string>
+ <object class="NSDictionary" key="NSOptions">
+ <string key="NS.key.0">NSContinuouslyUpdatesValue</string>
+ <boolean value="YES" key="NS.object.0"/>
+ </object>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">5563</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">toolTip: sshKeyLocation</string>
+ <reference key="source" ref="357022441"/>
+ <reference key="destination" ref="545410097"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="357022441"/>
+ <reference key="NSDestination" ref="545410097"/>
+ <string key="NSLabel">toolTip: sshKeyLocation</string>
+ <string key="NSBinding">toolTip</string>
+ <string key="NSKeyPath">sshKeyLocation</string>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">5570</int>
+ </object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
<object class="NSArray" key="orderedObjects">
@@ -2974,6 +3227,106 @@
<reference key="parent" ref="699163511"/>
</object>
<object class="IBObjectRecord">
+ <int key="objectID">5455</int>
+ <reference key="object" ref="642702582"/>
+ <reference key="parent" ref="0"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">5468</int>
+ <reference key="object" ref="9858888"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="471954922"/>
+ </object>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">Context Menu</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">5469</int>
+ <reference key="object" ref="471954922"/>
+ <reference key="parent" ref="9858888"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">5475</int>
+ <reference key="object" ref="221133754"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="270183415"/>
+ </object>
+ <reference key="parent" ref="805249222"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">5476</int>
+ <reference key="object" ref="270183415"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="949612237"/>
+ </object>
+ <reference key="parent" ref="221133754"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">5477</int>
+ <reference key="object" ref="949612237"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="751753648"/>
+ <reference ref="623685715"/>
+ </object>
+ <reference key="parent" ref="270183415"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">5478</int>
+ <reference key="object" ref="751753648"/>
+ <reference key="parent" ref="949612237"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">5479</int>
+ <reference key="object" ref="623685715"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="455108754"/>
+ </object>
+ <reference key="parent" ref="949612237"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">5481</int>
+ <reference key="object" ref="455108754"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="536740264"/>
+ <reference ref="965148975"/>
+ <reference ref="997359603"/>
+ <reference ref="43427774"/>
+ <reference ref="513442721"/>
+ </object>
+ <reference key="parent" ref="623685715"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">5482</int>
+ <reference key="object" ref="536740264"/>
+ <reference key="parent" ref="455108754"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">5483</int>
+ <reference key="object" ref="965148975"/>
+ <reference key="parent" ref="455108754"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">5484</int>
+ <reference key="object" ref="997359603"/>
+ <reference key="parent" ref="455108754"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">5485</int>
+ <reference key="object" ref="43427774"/>
+ <reference key="parent" ref="455108754"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">5486</int>
+ <reference key="object" ref="513442721"/>
+ <reference key="parent" ref="455108754"/>
+ </object>
+ <object class="IBObjectRecord">
<int key="objectID">5168</int>
<reference key="object" ref="456162506"/>
<object class="NSMutableArray" key="children">
@@ -3039,6 +3392,9 @@
<reference key="object" ref="326102394"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="797420065"/>
+ <reference ref="357022441"/>
+ <reference ref="183948302"/>
<reference ref="1030226140"/>
<reference ref="615962367"/>
<reference ref="358903996"/>
@@ -3063,6 +3419,48 @@
<reference key="parent" ref="159800861"/>
</object>
<object class="IBObjectRecord">
+ <int key="objectID">5525</int>
+ <reference key="object" ref="797420065"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="1004204108"/>
+ </object>
+ <reference key="parent" ref="326102394"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">5526</int>
+ <reference key="object" ref="1004204108"/>
+ <reference key="parent" ref="797420065"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">5523</int>
+ <reference key="object" ref="357022441"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="31454463"/>
+ </object>
+ <reference key="parent" ref="326102394"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">5524</int>
+ <reference key="object" ref="31454463"/>
+ <reference key="parent" ref="357022441"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">5492</int>
+ <reference key="object" ref="183948302"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="510891456"/>
+ </object>
+ <reference key="parent" ref="326102394"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">5493</int>
+ <reference key="object" ref="510891456"/>
+ <reference key="parent" ref="183948302"/>
+ </object>
+ <object class="IBObjectRecord">
<int key="objectID">5264</int>
<reference key="object" ref="1030226140"/>
<object class="NSMutableArray" key="children">
@@ -3785,106 +4183,6 @@
<reference key="object" ref="757039715"/>
<reference key="parent" ref="990947983"/>
</object>
- <object class="IBObjectRecord">
- <int key="objectID">5455</int>
- <reference key="object" ref="642702582"/>
- <reference key="parent" ref="0"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">5468</int>
- <reference key="object" ref="9858888"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="471954922"/>
- </object>
- <reference key="parent" ref="0"/>
- <string key="objectName">Context Menu</string>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">5469</int>
- <reference key="object" ref="471954922"/>
- <reference key="parent" ref="9858888"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">5475</int>
- <reference key="object" ref="221133754"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="270183415"/>
- </object>
- <reference key="parent" ref="805249222"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">5476</int>
- <reference key="object" ref="270183415"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="949612237"/>
- </object>
- <reference key="parent" ref="221133754"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">5477</int>
- <reference key="object" ref="949612237"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="751753648"/>
- <reference ref="623685715"/>
- </object>
- <reference key="parent" ref="270183415"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">5478</int>
- <reference key="object" ref="751753648"/>
- <reference key="parent" ref="949612237"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">5479</int>
- <reference key="object" ref="623685715"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="455108754"/>
- </object>
- <reference key="parent" ref="949612237"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">5481</int>
- <reference key="object" ref="455108754"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="536740264"/>
- <reference ref="965148975"/>
- <reference ref="997359603"/>
- <reference ref="43427774"/>
- <reference ref="513442721"/>
- </object>
- <reference key="parent" ref="623685715"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">5482</int>
- <reference key="object" ref="536740264"/>
- <reference key="parent" ref="455108754"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">5483</int>
- <reference key="object" ref="965148975"/>
- <reference key="parent" ref="455108754"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">5484</int>
- <reference key="object" ref="997359603"/>
- <reference key="parent" ref="455108754"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">5485</int>
- <reference key="object" ref="43427774"/>
- <reference key="parent" ref="455108754"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">5486</int>
- <reference key="object" ref="513442721"/>
- <reference key="parent" ref="455108754"/>
- </object>
</object>
</object>
<object class="NSMutableDictionary" key="flattenedProperties">
@@ -4077,12 +4375,19 @@
<string>5484.IBPluginDependency</string>
<string>5485.IBPluginDependency</string>
<string>5486.IBPluginDependency</string>
+ <string>5492.IBAttributePlaceholdersKey</string>
+ <string>5492.IBPluginDependency</string>
+ <string>5493.IBPluginDependency</string>
+ <string>5523.IBPluginDependency</string>
+ <string>5524.IBPluginDependency</string>
+ <string>5525.IBPluginDependency</string>
+ <string>5526.IBPluginDependency</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<integer value="1"/>
- <string>{{564, 184}, {882, 563}}</string>
+ <string>{{120, 184}, {882, 563}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<integer value="1"/>
@@ -4440,6 +4745,20 @@
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <object class="NSMutableDictionary">
+ <string key="NS.key.0">ToolTip</string>
+ <object class="IBToolTipAttribute" key="NS.object.0">
+ <string key="name">ToolTip</string>
+ <reference key="object" ref="183948302"/>
+ <string key="toolTip">Choose a custom SSH key file to use with this connection. Standard locations like ~/.ssh are checked automatically.</string>
+ </object>
+ </object>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
</object>
</object>
<object class="NSMutableDictionary" key="unlocalizedProperties">
@@ -4458,7 +4777,7 @@
</object>
</object>
<nil key="sourceID"/>
- <int key="maxID">5491</int>
+ <int key="maxID">5575</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
@@ -4697,6 +5016,8 @@
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>addFavorite:</string>
+ <string>cancelMySQLConnection:</string>
+ <string>chooseSSHKey:</string>
<string>editFavorites:</string>
<string>initiateConnection:</string>
<string>reverseSortFavorites:</string>
@@ -4713,6 +5034,8 @@
<string>id</string>
<string>id</string>
<string>id</string>
+ <string>id</string>
+ <string>id</string>
</object>
</object>
<object class="NSMutableDictionary" key="actionInfosByName">
@@ -4720,6 +5043,8 @@
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>addFavorite:</string>
+ <string>cancelMySQLConnection:</string>
+ <string>chooseSSHKey:</string>
<string>editFavorites:</string>
<string>initiateConnection:</string>
<string>reverseSortFavorites:</string>
@@ -4734,6 +5059,14 @@
<string key="candidateClassName">id</string>
</object>
<object class="IBActionInfo">
+ <string key="name">cancelMySQLConnection:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">chooseSSHKey:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo">
<string key="name">editFavorites:</string>
<string key="candidateClassName">id</string>
</object>
@@ -4782,6 +5115,7 @@
<string>sshConnectionFormContainer</string>
<string>sshPasswordField</string>
<string>sshSQLHostField</string>
+ <string>sshSSHKeyButton</string>
<string>sshSSHPasswordField</string>
<string>standardConnectionFormContainer</string>
<string>standardPasswordField</string>
@@ -4808,6 +5142,7 @@
<string>NSView</string>
<string>NSSecureTextField</string>
<string>NSTextField</string>
+ <string>NSButton</string>
<string>NSSecureTextField</string>
<string>NSView</string>
<string>NSSecureTextField</string>
@@ -4837,6 +5172,7 @@
<string>sshConnectionFormContainer</string>
<string>sshPasswordField</string>
<string>sshSQLHostField</string>
+ <string>sshSSHKeyButton</string>
<string>sshSSHPasswordField</string>
<string>standardConnectionFormContainer</string>
<string>standardPasswordField</string>
@@ -4921,6 +5257,10 @@
<string key="candidateClassName">NSTextField</string>
</object>
<object class="IBToOneOutletInfo">
+ <string key="name">sshSSHKeyButton</string>
+ <string key="candidateClassName">NSButton</string>
+ </object>
+ <object class="IBToOneOutletInfo">
<string key="name">sshSSHPasswordField</string>
<string key="candidateClassName">NSSecureTextField</string>
</object>
@@ -5410,6 +5750,13 @@
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">PrintCore.framework/Headers/PDEPluginInterface.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Sparkle.framework/Headers/SUAppcast.h</string>
</object>
</object>
@@ -5720,6 +6067,7 @@
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
+ <string>KeyTemplate</string>
<string>NSActionTemplate</string>
<string>NSMenuCheckmark</string>
<string>NSMenuMixedState</string>
@@ -5727,6 +6075,7 @@
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
+ <string>{16, 8}</string>
<string>{10, 10}</string>
<string>{9, 8}</string>
<string>{7, 2}</string>
diff --git a/Interfaces/English.lproj/MainWindow.xib b/Interfaces/English.lproj/MainWindow.xib
index afd57750..de15d592 100644
--- a/Interfaces/English.lproj/MainWindow.xib
+++ b/Interfaces/English.lproj/MainWindow.xib
@@ -2,17 +2,17 @@
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
<data>
<int key="IBDocument.SystemTarget">1050</int>
- <string key="IBDocument.SystemVersion">10D573</string>
- <string key="IBDocument.InterfaceBuilderVersion">740</string>
+ <string key="IBDocument.SystemVersion">10F569</string>
+ <string key="IBDocument.InterfaceBuilderVersion">788</string>
<string key="IBDocument.AppKitVersion">1038.29</string>
- <string key="IBDocument.HIToolboxVersion">460.00</string>
+ <string key="IBDocument.HIToolboxVersion">461.00</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string key="NS.object.0">740</string>
+ <string key="NS.object.0">788</string>
</object>
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
<bool key="EncodedWithXMLCoder">YES</bool>
- <integer value="2"/>
+ <integer value="1"/>
</object>
<object class="NSArray" key="IBDocument.PluginDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
@@ -41,7 +41,7 @@
<object class="NSWindowTemplate" id="1005">
<int key="NSWindowStyleMask">15</int>
<int key="NSWindowBacking">2</int>
- <string key="NSWindowRect">{{196, -45}, {948, 555}}</string>
+ <string key="NSWindowRect">{{238, 168}, {948, 555}}</string>
<int key="NSWTFlags">544735232</int>
<string key="NSWindowTitle">Window</string>
<string key="NSWindowClass">NSWindow</string>
@@ -80,7 +80,7 @@
<string key="NSFrameSize">{948, 555}</string>
<reference key="NSSuperview"/>
</object>
- <string key="NSScreenRect">{{0, 0}, {1680, 1028}}</string>
+ <string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
<string key="NSMinSize">{780, 528}</string>
<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
</object>
@@ -341,6 +341,13 @@
<string key="NS.key.0">toggleCollapse:</string>
<string key="NS.object.0">id</string>
</object>
+ <object class="NSMutableDictionary" key="actionInfosByName">
+ <string key="NS.key.0">toggleCollapse:</string>
+ <object class="IBActionInfo" key="NS.object.0">
+ <string key="name">toggleCollapse:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ </object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">Source/SPTablesList.h</string>
@@ -384,6 +391,35 @@
<string>NSTabView</string>
</object>
</object>
+ <object class="NSMutableDictionary" key="toOneOutletInfosByName">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>delegate</string>
+ <string>partnerView</string>
+ <string>style</string>
+ <string>tabView</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBToOneOutletInfo">
+ <string key="name">delegate</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">partnerView</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">style</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">tabView</string>
+ <string key="candidateClassName">NSTabView</string>
+ </object>
+ </object>
+ </object>
<reference key="sourceIdentifier" ref="868226831"/>
</object>
<object class="IBPartialClassDescription">
@@ -406,8 +442,10 @@
<bool key="EncodedWithXMLCoder">YES</bool>
<string>addNewConnection:</string>
<string>closeTab:</string>
+ <string>moveSelectedTabInNewWindow:</string>
<string>selectNextDocumentTab:</string>
<string>selectPreviousDocumentTab:</string>
+ <string>toggleTabBarShown:</string>
<string>updateAllTabTitles:</string>
</object>
<object class="NSMutableArray" key="dict.values">
@@ -417,6 +455,52 @@
<string>id</string>
<string>id</string>
<string>id</string>
+ <string>id</string>
+ <string>id</string>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="actionInfosByName">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>addNewConnection:</string>
+ <string>closeTab:</string>
+ <string>moveSelectedTabInNewWindow:</string>
+ <string>selectNextDocumentTab:</string>
+ <string>selectPreviousDocumentTab:</string>
+ <string>toggleTabBarShown:</string>
+ <string>updateAllTabTitles:</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBActionInfo">
+ <string key="name">addNewConnection:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">closeTab:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">moveSelectedTabInNewWindow:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">selectNextDocumentTab:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">selectPreviousDocumentTab:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">toggleTabBarShown:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">updateAllTabTitles:</string>
+ <string key="candidateClassName">id</string>
+ </object>
</object>
</object>
<object class="NSMutableDictionary" key="outlets">
@@ -432,6 +516,25 @@
<string>NSTabView</string>
</object>
</object>
+ <object class="NSMutableDictionary" key="toOneOutletInfosByName">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>tabBar</string>
+ <string>tabView</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBToOneOutletInfo">
+ <string key="name">tabBar</string>
+ <string key="candidateClassName">PSMTabBarControl</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">tabView</string>
+ <string key="candidateClassName">NSTabView</string>
+ </object>
+ </object>
+ </object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">Source/SPWindowController.h</string>
@@ -790,6 +893,13 @@
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">PrintCore.framework/Headers/PDEPluginInterface.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Sparkle.framework/Headers/SUAppcast.h</string>
</object>
</object>
@@ -962,6 +1072,13 @@
<string key="NS.key.0">showWindow:</string>
<string key="NS.object.0">id</string>
</object>
+ <object class="NSMutableDictionary" key="actionInfosByName">
+ <string key="NS.key.0">showWindow:</string>
+ <object class="IBActionInfo" key="NS.object.0">
+ <string key="name">showWindow:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ </object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">AppKit.framework/Headers/NSWindowController.h</string>
@@ -989,6 +1106,30 @@
<string>NSTabView</string>
</object>
</object>
+ <object class="NSMutableDictionary" key="toOneOutletInfosByName">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>delegate</string>
+ <string>partnerView</string>
+ <string>tabView</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBToOneOutletInfo">
+ <string key="name">delegate</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">partnerView</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">tabView</string>
+ <string key="candidateClassName">NSTabView</string>
+ </object>
+ </object>
+ </object>
<reference key="sourceIdentifier" ref="331302854"/>
</object>
<object class="IBPartialClassDescription">
@@ -1001,6 +1142,7 @@
</object>
</object>
<int key="IBDocument.localizationMode">0</int>
+ <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
<integer value="1050" key="NS.object.0"/>
diff --git a/Interfaces/English.lproj/Preferences.xib b/Interfaces/English.lproj/Preferences.xib
index 75cab4bf..449711bf 100644
--- a/Interfaces/English.lproj/Preferences.xib
+++ b/Interfaces/English.lproj/Preferences.xib
@@ -22,11 +22,12 @@
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
<bool key="EncodedWithXMLCoder">YES</bool>
<integer value="1717"/>
+ <integer value="1176"/>
</object>
<object class="NSArray" key="IBDocument.PluginDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
- <string>com.brandonwalkin.BWToolkit</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.brandonwalkin.BWToolkit</string>
</object>
<object class="NSMutableDictionary" key="IBDocument.Metadata">
<bool key="EncodedWithXMLCoder">YES</bool>
@@ -56,7 +57,7 @@
<string key="NSWindowTitle">Preferences</string>
<string key="NSWindowClass">NSWindow</string>
<nil key="NSViewClass"/>
- <string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
+ <string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
<string key="NSWindowContentMinSize">{580, 50}</string>
<object class="NSView" key="NSWindowView" id="1006">
<nil key="NSNextResponder"/>
@@ -65,7 +66,7 @@
</object>
<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
<string key="NSMinSize">{580, 72}</string>
- <string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
+ <string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
</object>
<object class="NSCustomView" id="594324362">
<nil key="NSNextResponder"/>
@@ -478,7 +479,7 @@
<string key="NSColorName">controlColor</string>
<object class="NSColor" key="NSColor" id="432854223">
<int key="NSColorSpace">3</int>
- <bytes key="NSWhite">MC42NjY2NjY2ODY1AA</bytes>
+ <bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
</object>
</object>
<object class="NSColor" key="NSTextColor" id="1035618107">
@@ -604,7 +605,7 @@
<reference key="NSNextResponder" ref="594324362"/>
<int key="NSvFlags">12</int>
<string key="NSFrame">{{202.5, 176}, {360, 5}}</string>
- <string key="NSBounds">{{7, 0}, {346, 5}}</string>
+ <string key="NSBounds">{{7.5, 0}, {345, 5}}</string>
<reference key="NSSuperview" ref="594324362"/>
<string key="NSOffsets">{0, 0}</string>
<object class="NSTextFieldCell" key="NSTitleCell">
@@ -1497,7 +1498,7 @@
<string key="NSClassName">NSView</string>
</object>
<object class="NSCustomView" id="593732956">
- <nil key="NSNextResponder"/>
+ <reference key="NSNextResponder"/>
<int key="NSvFlags">274</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
@@ -2217,6 +2218,66 @@
<int key="NSvFlags">256</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSTextField" id="723511019">
+ <reference key="NSNextResponder" ref="404987940"/>
+ <int key="NSvFlags">266</int>
+ <string key="NSFrame">{{119, 33}, {159, 19}}</string>
+ <reference key="NSSuperview" ref="404987940"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="449219317">
+ <int key="NSCellFlags">-2073952703</int>
+ <int key="NSCellFlags2">4326912</int>
+ <string key="NSContents"/>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="723511019"/>
+ <bool key="NSDrawsBackground">YES</bool>
+ <reference key="NSBackgroundColor" ref="1001357688"/>
+ <object class="NSColor" key="NSTextColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MC41MDQwMzIyNTgxAA</bytes>
+ </object>
+ </object>
+ </object>
+ <object class="NSTextField" id="586801007">
+ <reference key="NSNextResponder" ref="404987940"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{5, 35}, {109, 14}}</string>
+ <reference key="NSSuperview" ref="404987940"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="104958740">
+ <int key="NSCellFlags">68288064</int>
+ <int key="NSCellFlags2">71304192</int>
+ <string key="NSContents">SSH Key:</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="586801007"/>
+ <reference key="NSBackgroundColor" ref="700609571"/>
+ <reference key="NSTextColor" ref="1035618107"/>
+ </object>
+ </object>
+ <object class="NSButton" id="339449226">
+ <reference key="NSNextResponder" ref="404987940"/>
+ <int key="NSvFlags">265</int>
+ <string key="NSFrame">{{277, 32}, {25, 21}}</string>
+ <reference key="NSSuperview" ref="404987940"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="447774753">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">134348800</int>
+ <string key="NSContents"/>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="339449226"/>
+ <int key="NSButtonFlags">-926138113</int>
+ <int key="NSButtonFlags2">162</int>
+ <object class="NSCustomResource" key="NSNormalImage">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">KeyTemplate</string>
+ </object>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">400</int>
+ <int key="NSPeriodicInterval">75</int>
+ </object>
+ </object>
<object class="NSTextField" id="1041581151">
<reference key="NSNextResponder" ref="404987940"/>
<int key="NSvFlags">266</int>
@@ -2237,7 +2298,7 @@
<object class="NSTextField" id="663701836">
<reference key="NSNextResponder" ref="404987940"/>
<int key="NSvFlags">266</int>
- <string key="NSFrame">{{119, 33}, {183, 19}}</string>
+ <string key="NSFrame">{{119, 33}, {159, 19}}</string>
<reference key="NSSuperview" ref="404987940"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="996160392">
@@ -2667,6 +2728,7 @@
</object>
</object>
<string key="NSFrameSize">{580, 381}</string>
+ <reference key="NSSuperview"/>
<string key="NSClassName">NSView</string>
</object>
<object class="NSCustomView" id="1041614321">
@@ -4161,10 +4223,6 @@ AQAAAAA</bytes>
<string key="NSClassName">NSView</string>
</object>
<object class="NSUserDefaultsController" id="151174232">
- <object class="NSMutableArray" key="NSDeclaredKeys">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>_dummy</string>
- </object>
<bool key="NSSharedInstance">YES</bool>
</object>
<object class="NSArrayController" id="937123943">
@@ -4187,6 +4245,8 @@ AQAAAAA</bytes>
<string>DisplayTableViewVerticalGridlines</string>
<string>type</string>
<string>TableRowCountQueryLevel</string>
+ <string>sshKeyLocationEnabled</string>
+ <string>sshKeyLocation</string>
</object>
<bool key="NSEditable">YES</bool>
<bool key="NSAutomaticallyPreparesContent">YES</bool>
@@ -7047,6 +7107,206 @@ AQAAAAA</bytes>
</object>
<int key="connectionID">1834</int>
</object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">value: selection.sshKeyLocationEnabled</string>
+ <reference key="source" ref="339449226"/>
+ <reference key="destination" ref="937123943"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="339449226"/>
+ <reference key="NSDestination" ref="937123943"/>
+ <string key="NSLabel">value: selection.sshKeyLocationEnabled</string>
+ <string key="NSBinding">value</string>
+ <string key="NSKeyPath">selection.sshKeyLocationEnabled</string>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">1838</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">hidden: selection.sshKeyLocationEnabled</string>
+ <reference key="source" ref="663701836"/>
+ <reference key="destination" ref="937123943"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="663701836"/>
+ <reference key="NSDestination" ref="937123943"/>
+ <string key="NSLabel">hidden: selection.sshKeyLocationEnabled</string>
+ <string key="NSBinding">hidden</string>
+ <string key="NSKeyPath">selection.sshKeyLocationEnabled</string>
+ <object class="NSDictionary" key="NSOptions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSMultipleValuesPlaceholder</string>
+ <string>NSNoSelectionPlaceholder</string>
+ <string>NSNotApplicablePlaceholder</string>
+ <string>NSNullPlaceholder</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <integer value="0"/>
+ <integer value="0"/>
+ <integer value="0"/>
+ <integer value="0"/>
+ </object>
+ </object>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">1844</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">hidden: selection.sshKeyLocationEnabled</string>
+ <reference key="source" ref="459575305"/>
+ <reference key="destination" ref="937123943"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="459575305"/>
+ <reference key="NSDestination" ref="937123943"/>
+ <string key="NSLabel">hidden: selection.sshKeyLocationEnabled</string>
+ <string key="NSBinding">hidden</string>
+ <string key="NSKeyPath">selection.sshKeyLocationEnabled</string>
+ <object class="NSDictionary" key="NSOptions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSMultipleValuesPlaceholder</string>
+ <string>NSNoSelectionPlaceholder</string>
+ <string>NSNotApplicablePlaceholder</string>
+ <string>NSNullPlaceholder</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <integer value="0"/>
+ <integer value="0"/>
+ <integer value="0"/>
+ <integer value="0"/>
+ </object>
+ </object>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">1850</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">hidden: selection.sshKeyLocationEnabled</string>
+ <reference key="source" ref="586801007"/>
+ <reference key="destination" ref="937123943"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="586801007"/>
+ <reference key="NSDestination" ref="937123943"/>
+ <string key="NSLabel">hidden: selection.sshKeyLocationEnabled</string>
+ <string key="NSBinding">hidden</string>
+ <string key="NSKeyPath">selection.sshKeyLocationEnabled</string>
+ <object class="NSDictionary" key="NSOptions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSMultipleValuesPlaceholder</string>
+ <string>NSNoSelectionPlaceholder</string>
+ <string>NSNotApplicablePlaceholder</string>
+ <string>NSNullPlaceholder</string>
+ <string>NSValueTransformerName</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <integer value="1"/>
+ <integer value="1"/>
+ <integer value="1"/>
+ <integer value="1"/>
+ <string>NSNegateBoolean</string>
+ </object>
+ </object>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">1858</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">delegate</string>
+ <reference key="source" ref="723511019"/>
+ <reference key="destination" ref="1001"/>
+ </object>
+ <int key="connectionID">1862</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">hidden: selection.sshKeyLocationEnabled</string>
+ <reference key="source" ref="723511019"/>
+ <reference key="destination" ref="937123943"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="723511019"/>
+ <reference key="NSDestination" ref="937123943"/>
+ <string key="NSLabel">hidden: selection.sshKeyLocationEnabled</string>
+ <string key="NSBinding">hidden</string>
+ <string key="NSKeyPath">selection.sshKeyLocationEnabled</string>
+ <object class="NSDictionary" key="NSOptions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSMultipleValuesPlaceholder</string>
+ <string>NSNoSelectionPlaceholder</string>
+ <string>NSNotApplicablePlaceholder</string>
+ <string>NSNullPlaceholder</string>
+ <string>NSValueTransformerName</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <integer value="1"/>
+ <integer value="1"/>
+ <integer value="1"/>
+ <integer value="1"/>
+ <string>NSNegateBoolean</string>
+ </object>
+ </object>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">1867</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">value: selection.sshKeyLocation</string>
+ <reference key="source" ref="723511019"/>
+ <reference key="destination" ref="937123943"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="723511019"/>
+ <reference key="NSDestination" ref="937123943"/>
+ <string key="NSLabel">value: selection.sshKeyLocation</string>
+ <string key="NSBinding">value</string>
+ <string key="NSKeyPath">selection.sshKeyLocation</string>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">1869</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">toolTip: selection.sshKeyLocation</string>
+ <reference key="source" ref="723511019"/>
+ <reference key="destination" ref="937123943"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="723511019"/>
+ <reference key="NSDestination" ref="937123943"/>
+ <string key="NSLabel">toolTip: selection.sshKeyLocation</string>
+ <string key="NSBinding">toolTip</string>
+ <string key="NSKeyPath">selection.sshKeyLocation</string>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">1871</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">chooseSSHKey:</string>
+ <reference key="source" ref="1001"/>
+ <reference key="destination" ref="339449226"/>
+ </object>
+ <int key="connectionID">1872</int>
+ </object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
<object class="NSArray" key="orderedObjects">
@@ -8391,6 +8651,9 @@ AQAAAAA</bytes>
<reference ref="578376935"/>
<reference ref="623079900"/>
<reference ref="981807110"/>
+ <reference ref="339449226"/>
+ <reference ref="586801007"/>
+ <reference ref="723511019"/>
</object>
<reference key="parent" ref="682271284"/>
</object>
@@ -9978,6 +10241,48 @@ AQAAAAA</bytes>
<reference key="object" ref="803513953"/>
<reference key="parent" ref="202566886"/>
</object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1835</int>
+ <reference key="object" ref="339449226"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="447774753"/>
+ </object>
+ <reference key="parent" ref="404987940"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1836</int>
+ <reference key="object" ref="447774753"/>
+ <reference key="parent" ref="339449226"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1851</int>
+ <reference key="object" ref="586801007"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="104958740"/>
+ </object>
+ <reference key="parent" ref="404987940"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1852</int>
+ <reference key="object" ref="104958740"/>
+ <reference key="parent" ref="586801007"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1859</int>
+ <reference key="object" ref="723511019"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="449219317"/>
+ </object>
+ <reference key="parent" ref="404987940"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1860</int>
+ <reference key="object" ref="449219317"/>
+ <reference key="parent" ref="723511019"/>
+ </object>
</object>
</object>
<object class="NSMutableDictionary" key="flattenedProperties">
@@ -10302,6 +10607,15 @@ AQAAAAA</bytes>
<string>1824.IBPluginDependency</string>
<string>1824.ImportedFromIB2</string>
<string>1825.IBPluginDependency</string>
+ <string>1835.IBPluginDependency</string>
+ <string>1835.notes</string>
+ <string>1836.IBPluginDependency</string>
+ <string>1851.IBPluginDependency</string>
+ <string>1851.ImportedFromIB2</string>
+ <string>1852.IBPluginDependency</string>
+ <string>1859.IBPluginDependency</string>
+ <string>1859.ImportedFromIB2</string>
+ <string>1860.IBPluginDependency</string>
<string>2.IBPluginDependency</string>
<string>24.IBPluginDependency</string>
<string>24.ImportedFromIB2</string>
@@ -10923,6 +11237,39 @@ AQAAAAA</bytes>
<integer value="1"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <object class="NSMutableAttributedString">
+ <object class="NSMutableString" key="NSString">
+ <characters key="NS.bytes">Choose a custom SSH key file to use with this connection. Standard locations like ~/.ssh are checked automatically.</characters>
+ </object>
+ <object class="NSDictionary" key="NSAttributes">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSColor</string>
+ <string>NSFont</string>
+ <string>NSOriginalFont</string>
+ <string>NSParagraphStyle</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="6928728"/>
+ <reference ref="26"/>
+ <reference ref="26"/>
+ <object class="NSParagraphStyle">
+ <int key="NSAlignment">4</int>
+ <nil key="NSTabStops"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<integer value="1"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -11255,7 +11602,7 @@ AQAAAAA</bytes>
</object>
</object>
<nil key="sourceID"/>
- <int key="maxID">1834</int>
+ <int key="maxID">1872</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
@@ -11387,382 +11734,7 @@ AQAAAAA</bytes>
<bool key="EncodedWithXMLCoder">YES</bool>
<string>addFavorite:</string>
<string>changeFont:</string>
- <string>displayAutoUpdatePreferences:</string>
- <string>displayEditorPreferences:</string>
- <string>displayFavoritePreferences:</string>
- <string>displayGeneralPreferences:</string>
- <string>displayNetworkPreferences:</string>
- <string>displayNotificationPreferences:</string>
- <string>displayTablePreferences:</string>
- <string>duplicateFavorite:</string>
- <string>favoriteTypeDidChange:</string>
- <string>makeSelectedFavoriteDefault:</string>
- <string>removeFavorite:</string>
- <string>reverseFavoritesSortOrder:</string>
- <string>setDefaultColors:</string>
- <string>showCustomQueryFontPanel:</string>
- <string>showGlobalResultTableFontPanel:</string>
- <string>sortFavorites:</string>
- <string>updateDefaultFavorite:</string>
- </object>
- <object class="NSMutableArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- </object>
- </object>
- <object class="NSMutableDictionary" key="actionInfosByName">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSArray" key="dict.sortedKeys">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>addFavorite:</string>
- <string>changeFont:</string>
- <string>displayAutoUpdatePreferences:</string>
- <string>displayEditorPreferences:</string>
- <string>displayFavoritePreferences:</string>
- <string>displayGeneralPreferences:</string>
- <string>displayNetworkPreferences:</string>
- <string>displayNotificationPreferences:</string>
- <string>displayTablePreferences:</string>
- <string>duplicateFavorite:</string>
- <string>favoriteTypeDidChange:</string>
- <string>makeSelectedFavoriteDefault:</string>
- <string>removeFavorite:</string>
- <string>reverseFavoritesSortOrder:</string>
- <string>setDefaultColors:</string>
- <string>showCustomQueryFontPanel:</string>
- <string>showGlobalResultTableFontPanel:</string>
- <string>sortFavorites:</string>
- <string>updateDefaultFavorite:</string>
- </object>
- <object class="NSMutableArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="IBActionInfo">
- <string key="name">addFavorite:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo">
- <string key="name">changeFont:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo">
- <string key="name">displayAutoUpdatePreferences:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo">
- <string key="name">displayEditorPreferences:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo">
- <string key="name">displayFavoritePreferences:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo">
- <string key="name">displayGeneralPreferences:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo">
- <string key="name">displayNetworkPreferences:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo">
- <string key="name">displayNotificationPreferences:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo">
- <string key="name">displayTablePreferences:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo">
- <string key="name">duplicateFavorite:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo">
- <string key="name">favoriteTypeDidChange:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo">
- <string key="name">makeSelectedFavoriteDefault:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo">
- <string key="name">removeFavorite:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo">
- <string key="name">reverseFavoritesSortOrder:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo">
- <string key="name">setDefaultColors:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo">
- <string key="name">showCustomQueryFontPanel:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo">
- <string key="name">showGlobalResultTableFontPanel:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo">
- <string key="name">sortFavorites:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo">
- <string key="name">updateDefaultFavorite:</string>
- <string key="candidateClassName">id</string>
- </object>
- </object>
- </object>
- <object class="NSMutableDictionary" key="outlets">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSArray" key="dict.sortedKeys">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>autoUpdateView</string>
- <string>defaultFavoritePopup</string>
- <string>editorFontName</string>
- <string>editorView</string>
- <string>favoriteHostTextField</string>
- <string>favoriteHostTextFieldSSH</string>
- <string>favoriteNameTextField</string>
- <string>favoriteUserTextField</string>
- <string>favoriteUserTextFieldSSH</string>
- <string>favoriteUserTextFieldSocket</string>
- <string>favoritesController</string>
- <string>favoritesSortByMenuItem</string>
- <string>favoritesTabView</string>
- <string>favoritesTableView</string>
- <string>favoritesView</string>
- <string>generalView</string>
- <string>globalResultTableFontName</string>
- <string>networkView</string>
- <string>notificationsView</string>
- <string>preferencesWindow</string>
- <string>socketPasswordField</string>
- <string>splitViewButtonBar</string>
- <string>sshPasswordField</string>
- <string>sshSQLPasswordField</string>
- <string>standardPasswordField</string>
- <string>tableCell</string>
- <string>tablesView</string>
- </object>
- <object class="NSMutableArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>NSView</string>
- <string>NSPopUpButton</string>
- <string>NSTextField</string>
- <string>NSView</string>
- <string>NSTextField</string>
- <string>NSTextField</string>
- <string>NSTextField</string>
- <string>NSTextField</string>
- <string>NSTextField</string>
- <string>NSTextField</string>
- <string>NSArrayController</string>
- <string>NSMenuItem</string>
- <string>NSTabView</string>
- <string>NSTableView</string>
- <string>NSView</string>
- <string>NSView</string>
- <string>NSTextField</string>
- <string>NSView</string>
- <string>NSView</string>
- <string>NSWindow</string>
- <string>NSSecureTextField</string>
- <string>BWAnchoredButtonBar</string>
- <string>NSSecureTextField</string>
- <string>NSSecureTextField</string>
- <string>NSSecureTextField</string>
- <string>id</string>
- <string>NSView</string>
- </object>
- </object>
- <object class="NSMutableDictionary" key="toOneOutletInfosByName">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSArray" key="dict.sortedKeys">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>autoUpdateView</string>
- <string>defaultFavoritePopup</string>
- <string>editorFontName</string>
- <string>editorView</string>
- <string>favoriteHostTextField</string>
- <string>favoriteHostTextFieldSSH</string>
- <string>favoriteNameTextField</string>
- <string>favoriteUserTextField</string>
- <string>favoriteUserTextFieldSSH</string>
- <string>favoriteUserTextFieldSocket</string>
- <string>favoritesController</string>
- <string>favoritesSortByMenuItem</string>
- <string>favoritesTabView</string>
- <string>favoritesTableView</string>
- <string>favoritesView</string>
- <string>generalView</string>
- <string>globalResultTableFontName</string>
- <string>networkView</string>
- <string>notificationsView</string>
- <string>preferencesWindow</string>
- <string>socketPasswordField</string>
- <string>splitViewButtonBar</string>
- <string>sshPasswordField</string>
- <string>sshSQLPasswordField</string>
- <string>standardPasswordField</string>
- <string>tableCell</string>
- <string>tablesView</string>
- </object>
- <object class="NSMutableArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="IBToOneOutletInfo">
- <string key="name">autoUpdateView</string>
- <string key="candidateClassName">NSView</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">defaultFavoritePopup</string>
- <string key="candidateClassName">NSPopUpButton</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">editorFontName</string>
- <string key="candidateClassName">NSTextField</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">editorView</string>
- <string key="candidateClassName">NSView</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">favoriteHostTextField</string>
- <string key="candidateClassName">NSTextField</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">favoriteHostTextFieldSSH</string>
- <string key="candidateClassName">NSTextField</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">favoriteNameTextField</string>
- <string key="candidateClassName">NSTextField</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">favoriteUserTextField</string>
- <string key="candidateClassName">NSTextField</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">favoriteUserTextFieldSSH</string>
- <string key="candidateClassName">NSTextField</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">favoriteUserTextFieldSocket</string>
- <string key="candidateClassName">NSTextField</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">favoritesController</string>
- <string key="candidateClassName">NSArrayController</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">favoritesSortByMenuItem</string>
- <string key="candidateClassName">NSMenuItem</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">favoritesTabView</string>
- <string key="candidateClassName">NSTabView</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">favoritesTableView</string>
- <string key="candidateClassName">NSTableView</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">favoritesView</string>
- <string key="candidateClassName">NSView</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">generalView</string>
- <string key="candidateClassName">NSView</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">globalResultTableFontName</string>
- <string key="candidateClassName">NSTextField</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">networkView</string>
- <string key="candidateClassName">NSView</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">notificationsView</string>
- <string key="candidateClassName">NSView</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">preferencesWindow</string>
- <string key="candidateClassName">NSWindow</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">socketPasswordField</string>
- <string key="candidateClassName">NSSecureTextField</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">splitViewButtonBar</string>
- <string key="candidateClassName">BWAnchoredButtonBar</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">sshPasswordField</string>
- <string key="candidateClassName">NSSecureTextField</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">sshSQLPasswordField</string>
- <string key="candidateClassName">NSSecureTextField</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">standardPasswordField</string>
- <string key="candidateClassName">NSSecureTextField</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">tableCell</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">tablesView</string>
- <string key="candidateClassName">NSView</string>
- </object>
- </object>
- </object>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Source/SPPreferenceController.h</string>
- </object>
- </object>
- </object>
- <object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.1+">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier" id="211715013">
- <string key="majorKey">IBDocumentRelativeSource</string>
- <string key="minorKey">../../Frameworks/Sparkle.framework/Versions/A/Headers/SUUpdater.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">SPPreferenceController</string>
- <string key="superclassName">NSWindowController</string>
- <object class="NSMutableDictionary" key="actions">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSArray" key="dict.sortedKeys">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>addFavorite:</string>
- <string>changeFont:</string>
+ <string>chooseSSHKey:</string>
<string>closePanelSheet:</string>
<string>displayAutoUpdatePreferences:</string>
<string>displayEditorPreferences:</string>
@@ -11816,6 +11788,7 @@ AQAAAAA</bytes>
<string>id</string>
<string>id</string>
<string>id</string>
+ <string>id</string>
</object>
</object>
<object class="NSMutableDictionary" key="actionInfosByName">
@@ -11824,6 +11797,7 @@ AQAAAAA</bytes>
<bool key="EncodedWithXMLCoder">YES</bool>
<string>addFavorite:</string>
<string>changeFont:</string>
+ <string>chooseSSHKey:</string>
<string>closePanelSheet:</string>
<string>displayAutoUpdatePreferences:</string>
<string>displayEditorPreferences:</string>
@@ -11860,6 +11834,10 @@ AQAAAAA</bytes>
<string key="candidateClassName">id</string>
</object>
<object class="IBActionInfo">
+ <string key="name">chooseSSHKey:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo">
<string key="name">closePanelSheet:</string>
<string key="candidateClassName">id</string>
</object>
@@ -12263,8 +12241,18 @@ AQAAAAA</bytes>
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">Source/SPPreferenceController.h</string>
+ </object>
+ </object>
+ </object>
+ <object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.1+">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier" id="211715013">
<string key="majorKey">IBDocumentRelativeSource</string>
- <string key="minorKey">../../Source/SPPreferenceController.h</string>
+ <string key="minorKey">../../Frameworks/Sparkle.framework/Versions/A/Headers/SUUpdater.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
@@ -12298,6 +12286,14 @@ AQAAAAA</bytes>
<object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBPartialClassDescription">
+ <string key="className">BWAnchoredButton</string>
+ <string key="superclassName">NSButton</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">BWToolkitFramework.framework/Headers/BWAnchoredButton.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
<string key="className">BWAnchoredButtonBar</string>
<string key="superclassName">NSView</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
@@ -12306,6 +12302,14 @@ AQAAAAA</bytes>
</object>
</object>
<object class="IBPartialClassDescription">
+ <string key="className">BWAnchoredButtonCell</string>
+ <string key="superclassName">NSButtonCell</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">BWToolkitFramework.framework/Headers/BWAnchoredButtonCell.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
<string key="className">BWAnchoredPopUpButton</string>
<string key="superclassName">NSPopUpButton</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
@@ -12753,6 +12757,13 @@ AQAAAAA</bytes>
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">PrintCore.framework/Headers/PDEPluginInterface.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Sparkle.framework/Headers/SUAppcast.h</string>
</object>
</object>
@@ -13106,6 +13117,7 @@ AQAAAAA</bytes>
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
+ <string>KeyTemplate</string>
<string>NSActionTemplate</string>
<string>NSAdvanced</string>
<string>NSMenuCheckmark</string>
@@ -13117,14 +13129,15 @@ AQAAAAA</bytes>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
- <string>{15, 15}</string>
+ <string>{16, 8}</string>
+ <string>{10, 10}</string>
<string>{32, 32}</string>
<string>{9, 8}</string>
<string>{7, 2}</string>
<string>{15, 15}</string>
<string>{32, 23}</string>
- <string>{128, 128}</string>
- <string>{128, 128}</string>
+ <string>{33, 23}</string>
+ <string>{32, 23}</string>
</object>
</object>
</data>
diff --git a/Resources/English.lproj/ConnectionView.strings b/Resources/English.lproj/ConnectionView.strings
index ef71e217..55c903c5 100644
--- a/Resources/English.lproj/ConnectionView.strings
+++ b/Resources/English.lproj/ConnectionView.strings
Binary files differ
diff --git a/Resources/English.lproj/DataMigrationDialog.strings b/Resources/English.lproj/DataMigrationDialog.strings
index 1280b4cd..9d54140c 100644
--- a/Resources/English.lproj/DataMigrationDialog.strings
+++ b/Resources/English.lproj/DataMigrationDialog.strings
Binary files differ
diff --git a/Resources/English.lproj/Localizable.strings b/Resources/English.lproj/Localizable.strings
index 88766593..273cff5d 100644
--- a/Resources/English.lproj/Localizable.strings
+++ b/Resources/English.lproj/Localizable.strings
Binary files differ
diff --git a/Resources/English.lproj/Preferences.strings b/Resources/English.lproj/Preferences.strings
index 97922977..ef3dbb53 100644
--- a/Resources/English.lproj/Preferences.strings
+++ b/Resources/English.lproj/Preferences.strings
Binary files differ
diff --git a/Resources/Images/KeyTemplate.pdf b/Resources/Images/KeyTemplate.pdf
new file mode 100644
index 00000000..fbb344d5
--- /dev/null
+++ b/Resources/Images/KeyTemplate.pdf
@@ -0,0 +1,67 @@
+%PDF-1.4
+%
+3 0 obj
+<< /Length 4 0 R
+ /Filter /FlateDecode
+>>
+stream
+xeP[n! 9A1zj~t?_V8*tsғg̃UhvNہ.xE(`n%#e쓂=w`",+F\•nU^;CiNb-hmd^tl)vcia h\bmנ1;wtGIf{&D҉r]Df=4ΉcˎRI/W]~ ΛjY
+endstream
+endobj
+4 0 obj
+ 253
+endobj
+2 0 obj
+<<
+ /ExtGState <<
+ /a0 << /CA 1 /ca 1 >>
+ >>
+>>
+endobj
+5 0 obj
+<< /Type /Page
+ /Parent 1 0 R
+ /MediaBox [ 0 0 16 8 ]
+ /Contents 3 0 R
+ /Group <<
+ /Type /Group
+ /S /Transparency
+ /CS /DeviceRGB
+ >>
+ /Resources 2 0 R
+>>
+endobj
+1 0 obj
+<< /Type /Pages
+ /Kids [ 5 0 R ]
+ /Count 1
+>>
+endobj
+6 0 obj
+<< /Creator (cairo 1.8.10 (http://cairographics.org))
+ /Producer (cairo 1.8.10 (http://cairographics.org))
+>>
+endobj
+7 0 obj
+<< /Type /Catalog
+ /Pages 1 0 R
+>>
+endobj
+xref
+0 8
+0000000000 65535 f
+0000000635 00000 n
+0000000366 00000 n
+0000000015 00000 n
+0000000344 00000 n
+0000000438 00000 n
+0000000700 00000 n
+0000000827 00000 n
+trailer
+<< /Size 8
+ /Root 7 0 R
+ /Info 6 0 R
+>>
+startxref
+879
+%%EOF
diff --git a/Source/SPConnectionController.h b/Source/SPConnectionController.h
index 4c8a0a9d..67bdb77b 100644
--- a/Source/SPConnectionController.h
+++ b/Source/SPConnectionController.h
@@ -80,8 +80,10 @@
NSString *sshHost;
NSString *sshUser;
NSString *sshPassword;
+ int sshKeyLocationEnabled;
+ NSString *sshKeyLocation;
NSString *sshPort;
-@private NSString *favoritesPBoardType;
+ @private NSString *favoritesPBoardType;
NSString *connectionKeychainItemName;
NSString *connectionKeychainItemAccount;
@@ -109,6 +111,7 @@
IBOutlet NSSecureTextField *socketPasswordField;
IBOutlet NSSecureTextField *sshPasswordField;
IBOutlet NSSecureTextField *sshSSHPasswordField;
+ IBOutlet NSButton *sshSSHKeyButton;
IBOutlet NSButton *addToFavoritesButton;
IBOutlet NSButton *connectButton;
@@ -135,6 +138,8 @@
@property (readwrite, retain) NSString *sshHost;
@property (readwrite, retain) NSString *sshUser;
@property (readwrite, retain) NSString *sshPassword;
+@property (readwrite, assign) int sshKeyLocationEnabled;
+@property (readwrite, retain) NSString *sshKeyLocation;
@property (readwrite, retain) NSString *sshPort;
@property (readwrite, retain) NSString *connectionKeychainItemName;
@@ -158,6 +163,7 @@
- (void)addConnectionToDocument;
// Interface interaction
+- (IBAction)chooseSSHKey:(id)sender;
- (IBAction)editFavorites:(id)sender;
- (IBAction)showHelp:(id)sender;
- (void)resizeTabViewToConnectionType:(NSUInteger)theType animating:(BOOL)animate;
diff --git a/Source/SPConnectionController.m b/Source/SPConnectionController.m
index 9c7abe57..7937ef99 100644
--- a/Source/SPConnectionController.m
+++ b/Source/SPConnectionController.m
@@ -54,6 +54,8 @@
@synthesize sshHost;
@synthesize sshUser;
@synthesize sshPassword;
+@synthesize sshKeyLocationEnabled;
+@synthesize sshKeyLocation;
@synthesize sshPort;
@synthesize connectionKeychainItemName;
@@ -181,6 +183,15 @@
return;
}
+ // If an SSH key has been provided, verify it exists
+ if ([self type] == SPSSHTunnelConnection && sshKeyLocationEnabled && sshKeyLocation) {
+ if (![[NSFileManager defaultManager] fileExistsAtPath:[sshKeyLocation stringByExpandingTildeInPath]]) {
+ [self setSshKeyLocationEnabled:NSOffState];
+ SPBeginAlertSheet(NSLocalizedString(@"SSH Key not found", @"SSH key check error"), NSLocalizedString(@"OK", @"OK button"), nil, nil, [tableDocument parentWindow], self, nil, nil, NSLocalizedString(@"A SSH key location was specified, but no file was found in the specified location. Please re-select the key and try again.", @"SSH key not found message"));
+ return;
+ }
+ }
+
// Ensure that a socket connection is not inadvertently used
if (![self checkHost]) return;
@@ -283,6 +294,11 @@
[sshTunnel setPassword:[self sshPassword]];
}
+ // Set the public key path if appropriate
+ if (sshKeyLocationEnabled && sshKeyLocation) {
+ [sshTunnel setKeyFilePath:sshKeyLocation];
+ }
+
// Set the callback function on the tunnel
[sshTunnel setConnectionStateChangeSelector:@selector(sshTunnelCallback:) delegate:self];
@@ -461,6 +477,47 @@
#pragma mark Interface interaction
/**
+ * Opens the SSH key selection window, ready to select a SSH key.
+ */
+- (IBAction)chooseSSHKey:(id)sender
+{
+ [favoritesTable deselectAll:self];
+ NSString *directoryPath = nil;
+ NSString *filePath = nil;
+
+ // If the custom key location is currently disabled - after the button
+ // action - leave it disabled and return without showing the sheet.
+ if (!sshKeyLocationEnabled) {
+ return;
+ }
+
+ // Otherwise open a panel at the last or default location
+ if (sshKeyLocation && [sshKeyLocation length]) {
+ filePath = [sshKeyLocation lastPathComponent];
+ directoryPath = [sshKeyLocation stringByDeletingLastPathComponent];
+ }
+ [[NSOpenPanel openPanel] beginSheetForDirectory:directoryPath
+ file:filePath
+ types:[NSArray arrayWithObjects:@"pem", @"", nil]
+ modalForWindow:[tableDocument parentWindow]
+ modalDelegate:self
+ didEndSelector:@selector(chooseSSHKeySheetDidEnd:returnCode:contextInfo:)
+ contextInfo:nil];
+}
+
+/**
+ * Called after closing the SSH key selection sheet.
+ */
+- (void)chooseSSHKeySheetDidEnd:(NSOpenPanel *)openPanel returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo
+{
+ if (returnCode == NSCancelButton) {
+ [self setSshKeyLocationEnabled:NSOffState];
+ return;
+ }
+ [self setSshKeyLocation:[[openPanel filename] stringByAbbreviatingWithTildeInPath]];
+}
+
+/**
* Opens the preferences window, or brings it to the front, and switch to the favorites tab.
* If a favorite is selected in the connection sheet, it is also select in the prefs window.
*/
@@ -679,6 +736,8 @@
[self setDatabase:([self valueForKeyPath:@"selectedFavorite.database"] ? [self valueForKeyPath:@"selectedFavorite.database"] : @"")];
[self setSshHost:([self valueForKeyPath:@"selectedFavorite.sshHost"] ? [self valueForKeyPath:@"selectedFavorite.sshHost"] : @"")];
[self setSshUser:([self valueForKeyPath:@"selectedFavorite.sshUser"] ? [self valueForKeyPath:@"selectedFavorite.sshUser"] : @"")];
+ [self setSshKeyLocationEnabled:([self valueForKeyPath:@"selectedFavorite.sshKeyLocationEnabled"] ? [[self valueForKeyPath:@"selectedFavorite.sshKeyLocationEnabled"] intValue] : NSOffState)];
+ [self setSshKeyLocation:([self valueForKeyPath:@"selectedFavorite.sshKeyLocation"] ? [self valueForKeyPath:@"selectedFavorite.sshKeyLocation"] : @"")];
[self setSshPort:([self valueForKeyPath:@"selectedFavorite.sshPort"] ? [self valueForKeyPath:@"selectedFavorite.sshPort"] : @"")];
// Check whether the password exists in the keychain, and if so add it; also record the
@@ -773,6 +832,8 @@
if ([self database]) [newFavorite setObject:[self database] forKey:@"database"];
if ([self sshHost]) [newFavorite setObject:[self sshHost] forKey:@"sshHost"];
if ([self sshUser]) [newFavorite setObject:[self sshUser] forKey:@"sshUser"];
+ [newFavorite setObject:[NSNumber numberWithInt:[self sshKeyLocationEnabled]] forKey:@"sshKeyLocationEnabled"];
+ if ([self sshKeyLocation]) [newFavorite setObject:[self sshKeyLocation] forKey:@"sshKeyLocation"];
if ([self sshPort]) [newFavorite setObject:[self sshPort] forKey:@"sshPort"];
// Add the new favorite to the user defaults array
diff --git a/Source/SPDatabaseDocument.m b/Source/SPDatabaseDocument.m
index 7632d50a..47f915c3 100644
--- a/Source/SPDatabaseDocument.m
+++ b/Source/SPDatabaseDocument.m
@@ -268,6 +268,8 @@
[connectionController setSocket:@""];
[connectionController setSshHost:@""];
[connectionController setSshUser:@""];
+ [connectionController setSshKeyLocationEnabled:NSOffState];
+ [connectionController setSshKeyLocation:@""];
[connectionController setSshPort:@""];
[connectionController setDatabase:@""];
[connectionController setPassword:nil];
@@ -485,6 +487,10 @@
[connectionController setSshHost:[connection objectForKey:@"ssh_host"]];
if([connection objectForKey:@"ssh_user"])
[connectionController setSshUser:[connection objectForKey:@"ssh_user"]];
+ if([connection objectForKey:@"ssh_keyLocationEnabled"])
+ [connectionController setSshKeyLocationEnabled:[[connection objectForKey:@"ssh_keyLocationEnabled"] intValue]];
+ if([connection objectForKey:@"ssh_keyLocation"])
+ [connectionController setSshKeyLocation:[connection objectForKey:@"ssh_keyLocation"]];
if([connection objectForKey:@"ssh_port"])
[connectionController setSshPort:[NSString stringWithFormat:@"%ld", (long)[[connection objectForKey:@"ssh_port"] integerValue]]];
@@ -3293,6 +3299,8 @@
aString = @"SPSSHTunnelConnection";
[connection setObject:[connectionController sshHost] forKey:@"ssh_host"];
[connection setObject:[connectionController sshUser] forKey:@"ssh_user"];
+ [connection setObject:[NSNumber numberWithInt:[connectionController sshKeyLocationEnabled]] forKey:@"ssh_keyLocationEnabled"];
+ [connection setObject:[connectionController sshKeyLocation] forKey:@"ssh_keyLocation"];
if([connectionController sshPort] && [[connectionController sshPort] length])
[connection setObject:[NSNumber numberWithInteger:[[connectionController sshPort] integerValue]] forKey:@"ssh_port"];
break;
diff --git a/Source/SPPreferenceController.h b/Source/SPPreferenceController.h
index 39c5f58e..1683db65 100644
--- a/Source/SPPreferenceController.h
+++ b/Source/SPPreferenceController.h
@@ -132,7 +132,7 @@
- (IBAction)closePanelSheet:(id)sender;
- (IBAction)duplicateTheme:(id)sender;
- (IBAction)removeTheme:(id)sender;
-
+- (IBAction)chooseSSHKey:(id)sender;
// Toolbar item IBAction methods
- (IBAction)displayGeneralPreferences:(id)sender;
diff --git a/Source/SPPreferenceController.m b/Source/SPPreferenceController.m
index 9f09ac2c..42503649 100644
--- a/Source/SPPreferenceController.m
+++ b/Source/SPPreferenceController.m
@@ -409,8 +409,8 @@
NSNumber *favoriteid = [NSNumber numberWithInteger:[[NSString stringWithFormat:@"%f", [[NSDate date] timeIntervalSince1970]] hash]];
// Create default favorite
- NSMutableDictionary *favorite = [NSMutableDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"New Favorite", [NSNumber numberWithInteger:0], @"", @"", @"", @"", @"", @"", @"", @"", favoriteid, nil]
- forKeys:[NSArray arrayWithObjects:@"name", @"type", @"host", @"socket", @"user", @"port", @"database", @"sshHost", @"sshUser", @"sshPort", @"id", nil]];
+ NSMutableDictionary *favorite = [NSMutableDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"New Favorite", [NSNumber numberWithInteger:0], @"", @"", @"", @"", @"", @"", @"", [NSNumber numberWithInt:NSOffState], @"", @"", favoriteid, nil]
+ forKeys:[NSArray arrayWithObjects:@"name", @"type", @"host", @"socket", @"user", @"port", @"database", @"sshHost", @"sshUser", @"sshKeyLocationEnabled", @"sshKeyLocation", @"sshPort", @"id", nil]];
[favoritesController addObject:favorite];
[favoritesController setSelectedObjects:[NSArray arrayWithObject:favorite]];
@@ -685,6 +685,46 @@
[[sender window] orderOut:self];
}
+/**
+ * Opens the SSH key selection window, ready to select a SSH key.
+ */
+- (IBAction)chooseSSHKey:(id)sender
+{
+ NSString *directoryPath = nil;
+ NSString *filePath = nil;
+
+ // If the custom key location is currently disabled - after the button
+ // action - leave it disabled and return without showing the sheet.
+ if (![[favoritesController valueForKeyPath:@"selection.sshKeyLocationEnabled"] intValue]) {
+ return;
+ }
+
+ // Otherwise open a panel at the last or default location
+ if ([favoritesController valueForKeyPath:@"selection.sshKeyLocation"] && [[favoritesController valueForKeyPath:@"selection.sshKeyLocation"] length]) {
+ filePath = [[favoritesController valueForKeyPath:@"selection.sshKeyLocation"] lastPathComponent];
+ directoryPath = [[favoritesController valueForKeyPath:@"selection.sshKeyLocation"] stringByDeletingLastPathComponent];
+ }
+ [[NSOpenPanel openPanel] beginSheetForDirectory:directoryPath
+ file:filePath
+ types:[NSArray arrayWithObjects:@"pem", @"", nil]
+ modalForWindow:preferencesWindow
+ modalDelegate:self
+ didEndSelector:@selector(chooseSSHKeySheetDidEnd:returnCode:contextInfo:)
+ contextInfo:nil];
+}
+
+/**
+ * Called after closing the SSH key selection sheet.
+ */
+- (void)chooseSSHKeySheetDidEnd:(NSOpenPanel *)openPanel returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo
+{
+ if (returnCode == NSCancelButton) {
+ [favoritesController setValue:[NSNumber numberWithInt:NSOffState] forKeyPath:@"selection.sshKeyLocationEnabled"];
+ return;
+ }
+ [favoritesController setValue:[[openPanel filename] stringByAbbreviatingWithTildeInPath] forKeyPath:@"selection.sshKeyLocation"];
+}
+
#pragma mark -
#pragma mark Toolbar item IBAction methods
diff --git a/Source/SPSSHTunnel.h b/Source/SPSSHTunnel.h
index 9230f7e1..3af537c6 100644
--- a/Source/SPSSHTunnel.h
+++ b/Source/SPSSHTunnel.h
@@ -51,6 +51,7 @@
NSString *keychainName;
NSString *keychainAccount;
NSString *requestedPassphrase;
+ NSString *identityFilePath;
NSMutableArray *debugMessages;
NSLock *debugMessagesLock;
BOOL useHostFallback;
@@ -71,6 +72,7 @@
- (void) setParentWindow:(NSWindow *)theWindow;
- (BOOL) setPasswordKeychainName:(NSString *)theName account:(NSString *)theAccount;
- (BOOL) setPassword:(NSString *)thePassword;
+- (BOOL) setKeyFilePath:(NSString *)thePath;
- (NSInteger) state;
- (NSString *) lastError;
- (NSString *) debugMessages;
diff --git a/Source/SPSSHTunnel.m b/Source/SPSSHTunnel.m
index 5cc833fd..807d507e 100644
--- a/Source/SPSSHTunnel.m
+++ b/Source/SPSSHTunnel.m
@@ -72,6 +72,7 @@
}
parentWindow = nil;
+ identityFilePath = nil;
sshQuestionDialog = nil;
sshPasswordDialog = nil;
password = nil;
@@ -128,6 +129,19 @@
return YES;
}
+/**
+ * Sets the path of an identity file, or public key file, to use when connecting.
+ */
+- (BOOL) setKeyFilePath:(NSString *)thePath
+{
+ NSString *expandedPath = [thePath stringByExpandingTildeInPath];
+ if (![[NSFileManager defaultManager] fileExistsAtPath:expandedPath]) return NO;
+
+ if (identityFilePath) [identityFilePath release];
+ identityFilePath = [[NSString alloc] initWithString:expandedPath];
+ return YES;
+}
+
/*
* Sets the keychain name to use to retrieve the password. This is the recommended and
* secure way of supplying a password to the SSH tunnel.
@@ -282,6 +296,10 @@
[taskArguments addObject:@"-o ExitOnForwardFailure=yes"];
[taskArguments addObject:[NSString stringWithFormat:@"-o ConnectTimeout=%ld", (long)connectionTimeout]];
[taskArguments addObject:@"-o NumberOfPasswordPrompts=3"];
+ if (identityFilePath) {
+ [taskArguments addObject:@"-i"];
+ [taskArguments addObject:identityFilePath];
+ }
if (useKeepAlive && keepAliveInterval) {
[taskArguments addObject:@"-o TCPKeepAlive=no"];
[taskArguments addObject:[NSString stringWithFormat:@"-o ServerAliveInterval=%ld", (long)ceil(keepAliveInterval)]];
@@ -652,6 +670,7 @@
if (password) [password release];
if (keychainName) [keychainName release];
if (keychainAccount) [keychainAccount release];
+ if (identityFilePath) [identityFilePath release];
// As this object is not a NSWindowController, use manual top-level nib item management
if (sshQuestionDialog) [sshQuestionDialog release], sshQuestionDialog = nil;
diff --git a/sequel-pro.xcodeproj/project.pbxproj b/sequel-pro.xcodeproj/project.pbxproj
index 34cbcfd5..011b5723 100644
--- a/sequel-pro.xcodeproj/project.pbxproj
+++ b/sequel-pro.xcodeproj/project.pbxproj
@@ -272,6 +272,7 @@
58D2E22F101222870063EF1D /* link-arrow-highlighted-clicked.png in Resources */ = {isa = PBXBuildFile; fileRef = 58D2E22C101222870063EF1D /* link-arrow-highlighted-clicked.png */; };
58D2E230101222870063EF1D /* link-arrow.png in Resources */ = {isa = PBXBuildFile; fileRef = 58D2E22D101222870063EF1D /* link-arrow.png */; };
58DA8863103E15B5000B98DF /* SPLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 58DA8862103E15B5000B98DF /* SPLogger.m */; };
+ 58E205FC1234FE4F00A97059 /* KeyTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 58E205FB1234FE4F00A97059 /* KeyTemplate.pdf */; };
58FEF16D0F23D66600518E8E /* SPSQLParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 58FEF16C0F23D66600518E8E /* SPSQLParser.m */; };
58FEF57E0F3B4E9700518E8E /* SPTableData.m in Sources */ = {isa = PBXBuildFile; fileRef = 58FEF57D0F3B4E9700518E8E /* SPTableData.m */; };
8D15AC340486D014006FF6A4 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A7FEA54F5311CA2CBB /* Cocoa.framework */; };
@@ -899,6 +900,7 @@
58D2E22D101222870063EF1D /* link-arrow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "link-arrow.png"; sourceTree = "<group>"; };
58DA8861103E15B5000B98DF /* SPLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPLogger.h; sourceTree = "<group>"; };
58DA8862103E15B5000B98DF /* SPLogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPLogger.m; sourceTree = "<group>"; };
+ 58E205FB1234FE4F00A97059 /* KeyTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = KeyTemplate.pdf; sourceTree = "<group>"; };
58FEF16B0F23D66600518E8E /* SPSQLParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPSQLParser.h; sourceTree = "<group>"; };
58FEF16C0F23D66600518E8E /* SPSQLParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPSQLParser.m; sourceTree = "<group>"; };
58FEF57C0F3B4E9700518E8E /* SPTableData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPTableData.h; sourceTree = "<group>"; };
@@ -1764,6 +1766,7 @@
17E6419D0EF02036001BC333 /* grabber-horizontal.png */,
17E6419E0EF02036001BC333 /* grabber-vertical.png */,
17E6419F0EF02036001BC333 /* hideconsole.tiff */,
+ 58E205FB1234FE4F00A97059 /* KeyTemplate.pdf */,
58D2E22D101222870063EF1D /* link-arrow.png */,
58D2E22B101222870063EF1D /* link-arrow-clicked.png */,
581068B51015411B0068C6E2 /* link-arrow-highlighted.png */,
@@ -2527,6 +2530,7 @@
58A8A72711A0149100B95749 /* MainWindow.xib in Resources */,
17A7773811C52E61001E27B4 /* IndexesView.xib in Resources */,
17D3649811DFE61B00CC9413 /* blue-tick.tiff in Resources */,
+ 58E205FC1234FE4F00A97059 /* KeyTemplate.pdf in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};