From f7a69e2454ca3dd1f1a62875522e9fb3dea572b3 Mon Sep 17 00:00:00 2001 From: rowanbeentje Date: Wed, 8 Sep 2010 21:36:11 +0000 Subject: - Add support for SSH identity files (public keys) in custom locations - Update localisable strings - Fix initial window position --- Interfaces/English.lproj/ConnectionView.xib | 633 +++++++++++---- Interfaces/English.lproj/MainWindow.xib | 156 +++- Interfaces/English.lproj/Preferences.xib | 849 +++++++++++---------- Resources/English.lproj/ConnectionView.strings | Bin 27074 -> 27316 bytes .../English.lproj/DataMigrationDialog.strings | Bin 18292 -> 19638 bytes Resources/English.lproj/Localizable.strings | Bin 169886 -> 171424 bytes Resources/English.lproj/Preferences.strings | Bin 50300 -> 50496 bytes Resources/Images/KeyTemplate.pdf | 67 ++ Source/SPConnectionController.h | 8 +- Source/SPConnectionController.m | 61 ++ Source/SPDatabaseDocument.m | 8 + Source/SPPreferenceController.h | 2 +- Source/SPPreferenceController.m | 44 +- Source/SPSSHTunnel.h | 2 + Source/SPSSHTunnel.m | 19 + sequel-pro.xcodeproj/project.pbxproj | 4 + 16 files changed, 1282 insertions(+), 571 deletions(-) create mode 100644 Resources/Images/KeyTemplate.pdf 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 @@ YES - + YES - com.brandonwalkin.BWToolkit com.apple.InterfaceBuilder.CocoaPlugin + com.brandonwalkin.BWToolkit YES @@ -359,7 +359,6 @@ - 1 YES 1 YES @@ -407,7 +406,7 @@ controlColor 3 - MC42NjY2NjY2ODY1AA + MC42NjY2NjY2NjY3AA @@ -1117,7 +1116,7 @@ 268 - {{110, 47}, {226, 22}} + {{110, 47}, {198, 22}} YES @@ -1125,7 +1124,6 @@ 272630784 - optional if public key is available YES @@ -1216,6 +1214,66 @@ + + + 268 + {{307, 46}, {29, 24}} + + YES + + 67239424 + 134217728 + + + + -922992385 + 34 + + NSImage + KeyTemplate + + + + 400 + 75 + + + + + 268 + {{7, 49}, {98, 17}} + + YES + + 68288064 + 71304192 + SSH Key: + + + + + + + + + 268 + {{110, 47}, {198, 22}} + + YES + + -2076049856 + 272631296 + + + + YES + + + 3 + MC40OTU5Njc3NDE5AA + + + {{6, 6}, {356, 382}} @@ -1364,7 +1422,7 @@ Error Detail NSPanel - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {100, 100} @@ -1404,9 +1462,9 @@ YES - + 1 - MC45MDE5NjA3OTAyIDAuOTAxOTYwNzkwMiAwLjkwMTk2MDc5MDIAA + MC45MDE5NjA3OSAwLjkwMTk2MDc5IDAuOTAxOTYwNzkAA LucidaGrande @@ -1527,7 +1585,7 @@ YES - + LucidaGrande-Bold 10 @@ -1690,7 +1748,7 @@ {{0, 0}, {1440, 878}} {100, 119} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} @@ -2621,35 +2679,6 @@ 5448 - - - value: sshPassword - - - - - - value: sshPassword - value - sshPassword - - YES - - YES - NSContinuouslyUpdatesValue - NSNullPlaceholder - - - YES - - optional if public key is available - - - 2 - - - 5450 - helpButton @@ -2778,6 +2807,230 @@ 5491 + + + sshSSHKeyButton + + + + 5494 + + + + chooseSSHKey: + + + + 5495 + + + + value: sshPassword + + + + + + value: sshPassword + value + sshPassword + + NSContinuouslyUpdatesValue + + + 2 + + + 5504 + + + + hidden: sshKeyLocationEnabled + + + + + + hidden: sshKeyLocationEnabled + hidden + sshKeyLocationEnabled + + YES + + YES + NSMultipleValuesPlaceholder + NSNoSelectionPlaceholder + NSNotApplicablePlaceholder + NSNullPlaceholder + + + YES + + + + + + + 2 + + + 5549 + + + + value: sshKeyLocationEnabled + + + + + + value: sshKeyLocationEnabled + value + sshKeyLocationEnabled + + YES + + YES + NSMultipleValuesPlaceholder + NSNoSelectionPlaceholder + NSNotApplicablePlaceholder + NSNullPlaceholder + + + YES + + + + + + + 2 + + + 5551 + + + + hidden: sshKeyLocationEnabled + + + + + + hidden: sshKeyLocationEnabled + hidden + sshKeyLocationEnabled + 2 + + + 5559 + + + + hidden: sshKeyLocationEnabled + + + + + + hidden: sshKeyLocationEnabled + hidden + sshKeyLocationEnabled + + YES + + YES + NSMultipleValuesPlaceholder + NSNoSelectionPlaceholder + NSNotApplicablePlaceholder + NSNullPlaceholder + NSValueTransformerName + + + YES + + + + + NSNegateBoolean + + + 2 + + + 5561 + + + + hidden: sshKeyLocationEnabled + + + + + + hidden: sshKeyLocationEnabled + hidden + sshKeyLocationEnabled + + YES + + YES + NSMultipleValuesPlaceholder + NSNoSelectionPlaceholder + NSNotApplicablePlaceholder + NSNullPlaceholder + NSValueTransformerName + + + YES + + + + + NSNegateBoolean + + + 2 + + + 5562 + + + + value: sshKeyLocation + + + + + + value: sshKeyLocation + value + sshKeyLocation + + NSContinuouslyUpdatesValue + + + 2 + + + 5563 + + + + toolTip: sshKeyLocation + + + + + + toolTip: sshKeyLocation + toolTip + sshKeyLocation + 2 + + + 5570 + @@ -2973,6 +3226,106 @@ + + 5455 + + + + + 5468 + + + YES + + + + Context Menu + + + 5469 + + + + + 5475 + + + YES + + + + + + 5476 + + + YES + + + + + + 5477 + + + YES + + + + + + + 5478 + + + + + 5479 + + + YES + + + + + + 5481 + + + YES + + + + + + + + + + 5482 + + + + + 5483 + + + + + 5484 + + + + + 5485 + + + + + 5486 + + + 5168 @@ -3039,6 +3392,9 @@ YES + + + @@ -3062,6 +3418,48 @@ + + 5525 + + + YES + + + + + + 5526 + + + + + 5523 + + + YES + + + + + + 5524 + + + + + 5492 + + + YES + + + + + + 5493 + + + 5264 @@ -3785,106 +4183,6 @@ - - 5455 - - - - - 5468 - - - YES - - - - Context Menu - - - 5469 - - - - - 5475 - - - YES - - - - - - 5476 - - - YES - - - - - - 5477 - - - YES - - - - - - - 5478 - - - - - 5479 - - - YES - - - - - - 5481 - - - YES - - - - - - - - - - 5482 - - - - - 5483 - - - - - 5484 - - - - - 5485 - - - - - 5486 - - - @@ -4077,12 +4375,19 @@ 5484.IBPluginDependency 5485.IBPluginDependency 5486.IBPluginDependency + 5492.IBAttributePlaceholdersKey + 5492.IBPluginDependency + 5493.IBPluginDependency + 5523.IBPluginDependency + 5524.IBPluginDependency + 5525.IBPluginDependency + 5526.IBPluginDependency YES com.apple.InterfaceBuilder.CocoaPlugin - {{564, 184}, {882, 563}} + {{120, 184}, {882, 563}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -4440,6 +4745,20 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + + ToolTip + + ToolTip + + Choose a custom SSH key file to use with this connection. Standard locations like ~/.ssh are checked automatically. + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin @@ -4458,7 +4777,7 @@ - 5491 + 5575 @@ -4697,6 +5016,8 @@ YES addFavorite: + cancelMySQLConnection: + chooseSSHKey: editFavorites: initiateConnection: reverseSortFavorites: @@ -4713,6 +5034,8 @@ id id id + id + id @@ -4720,6 +5043,8 @@ YES addFavorite: + cancelMySQLConnection: + chooseSSHKey: editFavorites: initiateConnection: reverseSortFavorites: @@ -4733,6 +5058,14 @@ addFavorite: id + + cancelMySQLConnection: + id + + + chooseSSHKey: + id + editFavorites: id @@ -4782,6 +5115,7 @@ sshConnectionFormContainer sshPasswordField sshSQLHostField + sshSSHKeyButton sshSSHPasswordField standardConnectionFormContainer standardPasswordField @@ -4808,6 +5142,7 @@ NSView NSSecureTextField NSTextField + NSButton NSSecureTextField NSView NSSecureTextField @@ -4837,6 +5172,7 @@ sshConnectionFormContainer sshPasswordField sshSQLHostField + sshSSHKeyButton sshSSHPasswordField standardConnectionFormContainer standardPasswordField @@ -4920,6 +5256,10 @@ sshSQLHostField NSTextField + + sshSSHKeyButton + NSButton + sshSSHPasswordField NSSecureTextField @@ -5406,6 +5746,13 @@ Print.framework/Headers/PDEPluginInterface.h + + NSObject + + IBFrameworkSource + PrintCore.framework/Headers/PDEPluginInterface.h + + NSObject @@ -5720,6 +6067,7 @@ YES YES + KeyTemplate NSActionTemplate NSMenuCheckmark NSMenuMixedState @@ -5727,6 +6075,7 @@ YES + {16, 8} {10, 10} {9, 8} {7, 2} 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 @@ 1050 - 10D573 - 740 + 10F569 + 788 1038.29 - 460.00 + 461.00 com.apple.InterfaceBuilder.CocoaPlugin - 740 + 788 YES - + YES @@ -41,7 +41,7 @@ 15 2 - {{196, -45}, {948, 555}} + {{238, 168}, {948, 555}} 544735232 Window NSWindow @@ -80,7 +80,7 @@ {948, 555} - {{0, 0}, {1680, 1028}} + {{0, 0}, {1440, 878}} {780, 528} {1.79769e+308, 1.79769e+308} @@ -341,6 +341,13 @@ toggleCollapse: id + + toggleCollapse: + + toggleCollapse: + id + + IBProjectSource Source/SPTablesList.h @@ -384,6 +391,35 @@ NSTabView + + YES + + YES + delegate + partnerView + style + tabView + + + YES + + delegate + id + + + partnerView + id + + + style + id + + + tabView + NSTabView + + + @@ -406,8 +442,10 @@ YES addNewConnection: closeTab: + moveSelectedTabInNewWindow: selectNextDocumentTab: selectPreviousDocumentTab: + toggleTabBarShown: updateAllTabTitles: @@ -417,6 +455,52 @@ id id id + id + id + + + + YES + + YES + addNewConnection: + closeTab: + moveSelectedTabInNewWindow: + selectNextDocumentTab: + selectPreviousDocumentTab: + toggleTabBarShown: + updateAllTabTitles: + + + YES + + addNewConnection: + id + + + closeTab: + id + + + moveSelectedTabInNewWindow: + id + + + selectNextDocumentTab: + id + + + selectPreviousDocumentTab: + id + + + toggleTabBarShown: + id + + + updateAllTabTitles: + id + @@ -432,6 +516,25 @@ NSTabView + + YES + + YES + tabBar + tabView + + + YES + + tabBar + PSMTabBarControl + + + tabView + NSTabView + + + IBProjectSource Source/SPWindowController.h @@ -786,6 +889,13 @@ Print.framework/Headers/PDEPluginInterface.h + + NSObject + + IBFrameworkSource + PrintCore.framework/Headers/PDEPluginInterface.h + + NSObject @@ -962,6 +1072,13 @@ showWindow: id + + showWindow: + + showWindow: + id + + IBFrameworkSource AppKit.framework/Headers/NSWindowController.h @@ -989,6 +1106,30 @@ NSTabView + + YES + + YES + delegate + partnerView + tabView + + + YES + + delegate + id + + + partnerView + id + + + tabView + NSTabView + + + @@ -1001,6 +1142,7 @@ 0 + IBCocoaFramework com.apple.InterfaceBuilder.CocoaPlugin.macosx 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 @@ YES + YES - com.brandonwalkin.BWToolkit com.apple.InterfaceBuilder.CocoaPlugin + com.brandonwalkin.BWToolkit YES @@ -56,7 +57,7 @@ Preferences NSWindow - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {580, 50} @@ -65,7 +66,7 @@ {{0, 0}, {1440, 878}} {580, 72} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} @@ -478,7 +479,7 @@ controlColor 3 - MC42NjY2NjY2ODY1AA + MC42NjY2NjY2NjY3AA @@ -604,7 +605,7 @@ 12 {{202.5, 176}, {360, 5}} - {{7, 0}, {346, 5}} + {{7.5, 0}, {345, 5}} {0, 0} @@ -1497,7 +1498,7 @@ NSView - + 274 YES @@ -2217,6 +2218,66 @@ 256 YES + + + 266 + {{119, 33}, {159, 19}} + + YES + + -2073952703 + 4326912 + + + + YES + + + 3 + MC41MDQwMzIyNTgxAA + + + + + + 268 + {{5, 35}, {109, 14}} + + YES + + 68288064 + 71304192 + SSH Key: + + + + + + + + + 265 + {{277, 32}, {25, 21}} + + YES + + 67239424 + 134348800 + + + + -926138113 + 162 + + NSImage + KeyTemplate + + + + 400 + 75 + + 266 @@ -2237,7 +2298,7 @@ 266 - {{119, 33}, {183, 19}} + {{119, 33}, {159, 19}} YES @@ -2667,6 +2728,7 @@ {580, 381} + NSView @@ -4161,10 +4223,6 @@ AQAAAAA NSView - - YES - _dummy - YES @@ -4187,6 +4245,8 @@ AQAAAAA DisplayTableViewVerticalGridlines type TableRowCountQueryLevel + sshKeyLocationEnabled + sshKeyLocation YES YES @@ -7047,6 +7107,206 @@ AQAAAAA 1834 + + + value: selection.sshKeyLocationEnabled + + + + + + value: selection.sshKeyLocationEnabled + value + selection.sshKeyLocationEnabled + 2 + + + 1838 + + + + hidden: selection.sshKeyLocationEnabled + + + + + + hidden: selection.sshKeyLocationEnabled + hidden + selection.sshKeyLocationEnabled + + YES + + YES + NSMultipleValuesPlaceholder + NSNoSelectionPlaceholder + NSNotApplicablePlaceholder + NSNullPlaceholder + + + YES + + + + + + + 2 + + + 1844 + + + + hidden: selection.sshKeyLocationEnabled + + + + + + hidden: selection.sshKeyLocationEnabled + hidden + selection.sshKeyLocationEnabled + + YES + + YES + NSMultipleValuesPlaceholder + NSNoSelectionPlaceholder + NSNotApplicablePlaceholder + NSNullPlaceholder + + + YES + + + + + + + 2 + + + 1850 + + + + hidden: selection.sshKeyLocationEnabled + + + + + + hidden: selection.sshKeyLocationEnabled + hidden + selection.sshKeyLocationEnabled + + YES + + YES + NSMultipleValuesPlaceholder + NSNoSelectionPlaceholder + NSNotApplicablePlaceholder + NSNullPlaceholder + NSValueTransformerName + + + YES + + + + + NSNegateBoolean + + + 2 + + + 1858 + + + + delegate + + + + 1862 + + + + hidden: selection.sshKeyLocationEnabled + + + + + + hidden: selection.sshKeyLocationEnabled + hidden + selection.sshKeyLocationEnabled + + YES + + YES + NSMultipleValuesPlaceholder + NSNoSelectionPlaceholder + NSNotApplicablePlaceholder + NSNullPlaceholder + NSValueTransformerName + + + YES + + + + + NSNegateBoolean + + + 2 + + + 1867 + + + + value: selection.sshKeyLocation + + + + + + value: selection.sshKeyLocation + value + selection.sshKeyLocation + 2 + + + 1869 + + + + toolTip: selection.sshKeyLocation + + + + + + toolTip: selection.sshKeyLocation + toolTip + selection.sshKeyLocation + 2 + + + 1871 + + + + chooseSSHKey: + + + + 1872 + @@ -8391,6 +8651,9 @@ AQAAAAA + + + @@ -9978,6 +10241,48 @@ AQAAAAA + + 1835 + + + YES + + + + + + 1836 + + + + + 1851 + + + YES + + + + + + 1852 + + + + + 1859 + + + YES + + + + + + 1860 + + + @@ -10302,6 +10607,15 @@ AQAAAAA 1824.IBPluginDependency 1824.ImportedFromIB2 1825.IBPluginDependency + 1835.IBPluginDependency + 1835.notes + 1836.IBPluginDependency + 1851.IBPluginDependency + 1851.ImportedFromIB2 + 1852.IBPluginDependency + 1859.IBPluginDependency + 1859.ImportedFromIB2 + 1860.IBPluginDependency 2.IBPluginDependency 24.IBPluginDependency 24.ImportedFromIB2 @@ -10923,6 +11237,39 @@ AQAAAAA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + + + Choose a custom SSH key file to use with this connection. Standard locations like ~/.ssh are checked automatically. + + + YES + + YES + NSColor + NSFont + NSOriginalFont + NSParagraphStyle + + + YES + + + + + 4 + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -11255,7 +11602,7 @@ AQAAAAA - 1834 + 1872 @@ -11387,6 +11734,8 @@ AQAAAAA YES addFavorite: changeFont: + chooseSSHKey: + closePanelSheet: displayAutoUpdatePreferences: displayEditorPreferences: displayFavoritePreferences: @@ -11395,10 +11744,16 @@ AQAAAAA displayNotificationPreferences: displayTablePreferences: duplicateFavorite: + duplicateTheme: + exportColorScheme: favoriteTypeDidChange: + importColorScheme: + loadColorScheme: makeSelectedFavoriteDefault: removeFavorite: + removeTheme: reverseFavoritesSortOrder: + saveAsColorScheme: setDefaultColors: showCustomQueryFontPanel: showGlobalResultTableFontPanel: @@ -11426,6 +11781,14 @@ AQAAAAA id id id + id + id + id + id + id + id + id + id @@ -11434,6 +11797,8 @@ AQAAAAA YES addFavorite: changeFont: + chooseSSHKey: + closePanelSheet: displayAutoUpdatePreferences: displayEditorPreferences: displayFavoritePreferences: @@ -11442,10 +11807,16 @@ AQAAAAA displayNotificationPreferences: displayTablePreferences: duplicateFavorite: + duplicateTheme: + exportColorScheme: favoriteTypeDidChange: + importColorScheme: + loadColorScheme: makeSelectedFavoriteDefault: removeFavorite: + removeTheme: reverseFavoritesSortOrder: + saveAsColorScheme: setDefaultColors: showCustomQueryFontPanel: showGlobalResultTableFontPanel: @@ -11462,6 +11833,14 @@ AQAAAAA changeFont: id + + chooseSSHKey: + id + + + closePanelSheet: + id + displayAutoUpdatePreferences: id @@ -11495,408 +11874,7 @@ AQAAAAA id - favoriteTypeDidChange: - id - - - makeSelectedFavoriteDefault: - id - - - removeFavorite: - id - - - reverseFavoritesSortOrder: - id - - - setDefaultColors: - id - - - showCustomQueryFontPanel: - id - - - showGlobalResultTableFontPanel: - id - - - sortFavorites: - id - - - updateDefaultFavorite: - id - - - - - YES - - YES - autoUpdateView - defaultFavoritePopup - editorFontName - editorView - favoriteHostTextField - favoriteHostTextFieldSSH - favoriteNameTextField - favoriteUserTextField - favoriteUserTextFieldSSH - favoriteUserTextFieldSocket - favoritesController - favoritesSortByMenuItem - favoritesTabView - favoritesTableView - favoritesView - generalView - globalResultTableFontName - networkView - notificationsView - preferencesWindow - socketPasswordField - splitViewButtonBar - sshPasswordField - sshSQLPasswordField - standardPasswordField - tableCell - tablesView - - - YES - NSView - NSPopUpButton - NSTextField - NSView - NSTextField - NSTextField - NSTextField - NSTextField - NSTextField - NSTextField - NSArrayController - NSMenuItem - NSTabView - NSTableView - NSView - NSView - NSTextField - NSView - NSView - NSWindow - NSSecureTextField - BWAnchoredButtonBar - NSSecureTextField - NSSecureTextField - NSSecureTextField - id - NSView - - - - YES - - YES - autoUpdateView - defaultFavoritePopup - editorFontName - editorView - favoriteHostTextField - favoriteHostTextFieldSSH - favoriteNameTextField - favoriteUserTextField - favoriteUserTextFieldSSH - favoriteUserTextFieldSocket - favoritesController - favoritesSortByMenuItem - favoritesTabView - favoritesTableView - favoritesView - generalView - globalResultTableFontName - networkView - notificationsView - preferencesWindow - socketPasswordField - splitViewButtonBar - sshPasswordField - sshSQLPasswordField - standardPasswordField - tableCell - tablesView - - - YES - - autoUpdateView - NSView - - - defaultFavoritePopup - NSPopUpButton - - - editorFontName - NSTextField - - - editorView - NSView - - - favoriteHostTextField - NSTextField - - - favoriteHostTextFieldSSH - NSTextField - - - favoriteNameTextField - NSTextField - - - favoriteUserTextField - NSTextField - - - favoriteUserTextFieldSSH - NSTextField - - - favoriteUserTextFieldSocket - NSTextField - - - favoritesController - NSArrayController - - - favoritesSortByMenuItem - NSMenuItem - - - favoritesTabView - NSTabView - - - favoritesTableView - NSTableView - - - favoritesView - NSView - - - generalView - NSView - - - globalResultTableFontName - NSTextField - - - networkView - NSView - - - notificationsView - NSView - - - preferencesWindow - NSWindow - - - socketPasswordField - NSSecureTextField - - - splitViewButtonBar - BWAnchoredButtonBar - - - sshPasswordField - NSSecureTextField - - - sshSQLPasswordField - NSSecureTextField - - - standardPasswordField - NSSecureTextField - - - tableCell - id - - - tablesView - NSView - - - - - IBProjectSource - Source/SPPreferenceController.h - - - - - YES - - NSObject - - IBDocumentRelativeSource - ../../Frameworks/Sparkle.framework/Versions/A/Headers/SUUpdater.h - - - - SPPreferenceController - NSWindowController - - YES - - YES - addFavorite: - changeFont: - closePanelSheet: - displayAutoUpdatePreferences: - displayEditorPreferences: - displayFavoritePreferences: - displayGeneralPreferences: - displayNetworkPreferences: - displayNotificationPreferences: - displayTablePreferences: - duplicateFavorite: - duplicateTheme: - exportColorScheme: - favoriteTypeDidChange: - importColorScheme: - loadColorScheme: - makeSelectedFavoriteDefault: - removeFavorite: - removeTheme: - reverseFavoritesSortOrder: - saveAsColorScheme: - setDefaultColors: - showCustomQueryFontPanel: - showGlobalResultTableFontPanel: - sortFavorites: - updateDefaultFavorite: - - - YES - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - - - - YES - - YES - addFavorite: - changeFont: - closePanelSheet: - displayAutoUpdatePreferences: - displayEditorPreferences: - displayFavoritePreferences: - displayGeneralPreferences: - displayNetworkPreferences: - displayNotificationPreferences: - displayTablePreferences: - duplicateFavorite: - duplicateTheme: - exportColorScheme: - favoriteTypeDidChange: - importColorScheme: - loadColorScheme: - makeSelectedFavoriteDefault: - removeFavorite: - removeTheme: - reverseFavoritesSortOrder: - saveAsColorScheme: - setDefaultColors: - showCustomQueryFontPanel: - showGlobalResultTableFontPanel: - sortFavorites: - updateDefaultFavorite: - - - YES - - addFavorite: - id - - - changeFont: - id - - - closePanelSheet: - id - - - displayAutoUpdatePreferences: - id - - - displayEditorPreferences: - id - - - displayFavoritePreferences: - id - - - displayGeneralPreferences: - id - - - displayNetworkPreferences: - id - - - displayNotificationPreferences: - id - - - displayTablePreferences: - id - - - duplicateFavorite: - id - - - duplicateTheme: + duplicateTheme: id @@ -12263,8 +12241,18 @@ AQAAAAA + IBProjectSource + Source/SPPreferenceController.h + + + + + YES + + NSObject + IBDocumentRelativeSource - ../../Source/SPPreferenceController.h + ../../Frameworks/Sparkle.framework/Versions/A/Headers/SUUpdater.h @@ -12297,6 +12285,14 @@ AQAAAAA YES + + BWAnchoredButton + NSButton + + IBFrameworkSource + BWToolkitFramework.framework/Headers/BWAnchoredButton.h + + BWAnchoredButtonBar NSView @@ -12305,6 +12301,14 @@ AQAAAAA BWToolkitFramework.framework/Headers/BWAnchoredButtonBar.h + + BWAnchoredButtonCell + NSButtonCell + + IBFrameworkSource + BWToolkitFramework.framework/Headers/BWAnchoredButtonCell.h + + BWAnchoredPopUpButton NSPopUpButton @@ -12749,6 +12753,13 @@ AQAAAAA Print.framework/Headers/PDEPluginInterface.h + + NSObject + + IBFrameworkSource + PrintCore.framework/Headers/PDEPluginInterface.h + + NSObject @@ -13106,6 +13117,7 @@ AQAAAAA YES YES + KeyTemplate NSActionTemplate NSAdvanced NSMenuCheckmark @@ -13117,14 +13129,15 @@ AQAAAAA YES - {15, 15} + {16, 8} + {10, 10} {32, 32} {9, 8} {7, 2} {15, 15} {32, 23} - {128, 128} - {128, 128} + {33, 23} + {32, 23} diff --git a/Resources/English.lproj/ConnectionView.strings b/Resources/English.lproj/ConnectionView.strings index ef71e217..55c903c5 100644 Binary files a/Resources/English.lproj/ConnectionView.strings and b/Resources/English.lproj/ConnectionView.strings differ diff --git a/Resources/English.lproj/DataMigrationDialog.strings b/Resources/English.lproj/DataMigrationDialog.strings index 1280b4cd..9d54140c 100644 Binary files a/Resources/English.lproj/DataMigrationDialog.strings and b/Resources/English.lproj/DataMigrationDialog.strings differ diff --git a/Resources/English.lproj/Localizable.strings b/Resources/English.lproj/Localizable.strings index 88766593..273cff5d 100644 Binary files a/Resources/English.lproj/Localizable.strings and b/Resources/English.lproj/Localizable.strings differ diff --git a/Resources/English.lproj/Preferences.strings b/Resources/English.lproj/Preferences.strings index 97922977..ef3dbb53 100644 Binary files a/Resources/English.lproj/Preferences.strings and b/Resources/English.lproj/Preferences.strings 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]; @@ -460,6 +476,47 @@ #pragma mark - #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 = ""; }; 58DA8861103E15B5000B98DF /* SPLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPLogger.h; sourceTree = ""; }; 58DA8862103E15B5000B98DF /* SPLogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPLogger.m; sourceTree = ""; }; + 58E205FB1234FE4F00A97059 /* KeyTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = KeyTemplate.pdf; sourceTree = ""; }; 58FEF16B0F23D66600518E8E /* SPSQLParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPSQLParser.h; sourceTree = ""; }; 58FEF16C0F23D66600518E8E /* SPSQLParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPSQLParser.m; sourceTree = ""; }; 58FEF57C0F3B4E9700518E8E /* SPTableData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPTableData.h; sourceTree = ""; }; @@ -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; }; -- cgit v1.2.3