diff options
-rw-r--r-- | Resources/English.lproj/SPQLPluginConnectionTemplate.html | 54 | ||||
-rw-r--r-- | Resources/English.lproj/SPQLPluginContentFiltersTemplate.html | 35 | ||||
-rw-r--r-- | Resources/English.lproj/SPQLPluginQueryFavoritesTemplate.html | 35 | ||||
-rw-r--r-- | Resources/English.lproj/SPQLPluginSQLTemplate.html | 37 | ||||
-rw-r--r-- | Resources/German.lproj/SPQLPluginConnectionTemplate.html | 54 | ||||
-rw-r--r-- | Resources/German.lproj/SPQLPluginContentFiltersTemplate.html | 35 | ||||
-rw-r--r-- | Resources/German.lproj/SPQLPluginQueryFavoritesTemplate.html | 35 | ||||
-rw-r--r-- | Resources/German.lproj/SPQLPluginSQLTemplate.html | 37 | ||||
-rw-r--r-- | Resources/Plists/Sequel Pro QLGenerator-Info.plist | 62 | ||||
-rw-r--r-- | Source/GeneratePreviewForURL.m | 347 | ||||
-rw-r--r-- | Source/GenerateThumbnailForURL.m | 86 | ||||
-rw-r--r-- | Source/main.c | 218 | ||||
-rw-r--r-- | sequel-pro.xcodeproj/project.pbxproj | 272 |
13 files changed, 1291 insertions, 16 deletions
diff --git a/Resources/English.lproj/SPQLPluginConnectionTemplate.html b/Resources/English.lproj/SPQLPluginConnectionTemplate.html new file mode 100644 index 00000000..cfce367f --- /dev/null +++ b/Resources/English.lproj/SPQLPluginConnectionTemplate.html @@ -0,0 +1,54 @@ +<!DOCTYPE html> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> +<style> +body { + font-family:'Lucida Grande'; + font-size:10pt; + background-color:#222222; + color:white; +} +</style> +</head> +<body> +<center> +<table> +<tr> +<td valign="right"> +<img width="200%" src="data:image/auto;base64,%@"> +</td> +<td> +<center> +<b style="font-size:12pt">Sequel Pro Connection File</b><br /> +%@ (%@) +</center><br /><br /> +<table> +<tr> +<td align="right">Name: </td><td>%@</td> +</tr> +<tr> +<td align="right">Host: </td><td>%@</td> +</tr> +<tr> +<td align="right">User: </td><td>%@</td> +</tr> +<tr> +<td align="right">Database: </td><td>%@</td> +</tr> +<tr> +<td align="right">Size: </td><td>%@</td> +</tr> +<tr> +<td align="right">Last modified: </td><td>%@</td> +</tr> +<tr> +<td align="right">Auto-connect: </td><td><input type="checkbox" %@ disabled></td> +</tr> +</table> +</td> +</tr> +</table> +</center> +</body> +</html> diff --git a/Resources/English.lproj/SPQLPluginContentFiltersTemplate.html b/Resources/English.lproj/SPQLPluginContentFiltersTemplate.html new file mode 100644 index 00000000..c9ad6aa7 --- /dev/null +++ b/Resources/English.lproj/SPQLPluginContentFiltersTemplate.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> +<style> +body { + font-family:'Lucida Grande'; + font-size:10pt; + background-color:#222222; + color:white; +} +textarea { + background-color:#222222; + color:white; +} +</style> +</head> +<body> +<center> +<table> +<tr> +<td valign="right"> +<img width="200%" src="data:image/auto;base64,%@"> +</td> +<td> +<center> +<b style="font-size:12pt">Sequel Pro Content Filters File</b><br /><br /> +</center> +<textarea cols="50" rows="10" readonly>%@</textarea> +</td> +</tr> +</table> +</center> +</body> +</html> diff --git a/Resources/English.lproj/SPQLPluginQueryFavoritesTemplate.html b/Resources/English.lproj/SPQLPluginQueryFavoritesTemplate.html new file mode 100644 index 00000000..73f9f816 --- /dev/null +++ b/Resources/English.lproj/SPQLPluginQueryFavoritesTemplate.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> +<style> +body { + font-family:'Lucida Grande'; + font-size:10pt; + background-color:#222222; + color:white; +} +textarea { + background-color:#222222; + color:white; +} +</style> +</head> +<body> +<center> +<table> +<tr> +<td valign="right"> +<img width="200%" src="data:image/auto;base64,%@"> +</td> +<td> +<center> +<b style="font-size:12pt">Sequel Pro Query Favorites File</b><br /><br /> +</center> +<textarea cols="50" rows="10" readonly>%@</textarea> +</td> +</tr> +</table> +</center> +</body> +</html> diff --git a/Resources/English.lproj/SPQLPluginSQLTemplate.html b/Resources/English.lproj/SPQLPluginSQLTemplate.html new file mode 100644 index 00000000..fd016891 --- /dev/null +++ b/Resources/English.lproj/SPQLPluginSQLTemplate.html @@ -0,0 +1,37 @@ +<!DOCTYPE html> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> +<style> +body { + font-family:'Lucida Grande'; + font-size:10pt; + background-color:#222222; + color:white; +} +textarea { + background-color:#222222; + color:white; + white-space: nowrap; +} +</style> +</head> +<body> +<center> +<table> +<tr> +<td valign="right"> +<img width="200%" src="data:image/auto;base64,%@"> +</td> +<td> +<center> +<b style="font-size:12pt">Sequel Pro SQL File</b><br /> +size: %@ +</center><br /><br /> +<textarea cols="50" rows="10" readonly>%@</textarea> +</td> +</tr> +</table> +</center> +</body> +</html> diff --git a/Resources/German.lproj/SPQLPluginConnectionTemplate.html b/Resources/German.lproj/SPQLPluginConnectionTemplate.html new file mode 100644 index 00000000..28d5bbb3 --- /dev/null +++ b/Resources/German.lproj/SPQLPluginConnectionTemplate.html @@ -0,0 +1,54 @@ +<!DOCTYPE html> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> +<style> +body { + font-family:'Lucida Grande'; + font-size:10pt; + background-color:#222222; + color:white; +} +</style> +</head> +<body> +<center> +<table> +<tr> +<td valign="right"> +<img width="200%" src="data:image/auto;base64,%@"> +</td> +<td> +<center> +<b style="font-size:12pt">Sequel Pro Verbindungsdatei</b><br /> +%@ (%@) +</center><br /><br /> +<table> +<tr> +<td align="right">Name: </td><td>%@</td> +</tr> +<tr> +<td align="right">Host: </td><td>%@</td> +</tr> +<tr> +<td align="right">Benutzer: </td><td>%@</td> +</tr> +<tr> +<td align="right">Datenbank: </td><td>%@</td> +</tr> +<tr> +<td align="right">Größe: </td><td>%@</td> +</tr> +<tr> +<td align="right">Zuletzt geändert: </td><td>%@</td> +</tr> +<tr> +<td align="right">Auto-connect: </td><td><input type="checkbox" %@ disabled></td> +</tr> +</table> +</td> +</tr> +</table> +</center> +</body> +</html> diff --git a/Resources/German.lproj/SPQLPluginContentFiltersTemplate.html b/Resources/German.lproj/SPQLPluginContentFiltersTemplate.html new file mode 100644 index 00000000..34ab2c38 --- /dev/null +++ b/Resources/German.lproj/SPQLPluginContentFiltersTemplate.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> +<style> +body { + font-family:'Lucida Grande'; + font-size:10pt; + background-color:#222222; + color:white; +} +textarea { + background-color:#222222; + color:white; +} +</style> +</head> +<body> +<center> +<table> +<tr> +<td valign="right"> +<img width="200%" src="data:image/auto;base64,%@"> +</td> +<td> +<center> +<b style="font-size:12pt">Sequel Pro Inhaltsfilter-Datei</b><br /><br /> +</center> +<textarea cols="50" rows="10" readonly>%@</textarea> +</td> +</tr> +</table> +</center> +</body> +</html> diff --git a/Resources/German.lproj/SPQLPluginQueryFavoritesTemplate.html b/Resources/German.lproj/SPQLPluginQueryFavoritesTemplate.html new file mode 100644 index 00000000..412d8ecb --- /dev/null +++ b/Resources/German.lproj/SPQLPluginQueryFavoritesTemplate.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> +<style> +body { + font-family:'Lucida Grande'; + font-size:10pt; + background-color:#222222; + color:white; +} +textarea { + background-color:#222222; + color:white; +} +</style> +</head> +<body> +<center> +<table> +<tr> +<td valign="right"> +<img width="200%" src="data:image/auto;base64,%@"> +</td> +<td> +<center> +<b style="font-size:12pt">Sequel Pro Favoriten-Datei</b><br /><br /> +</center> +<textarea cols="50" rows="10" readonly>%@</textarea> +</td> +</tr> +</table> +</center> +</body> +</html> diff --git a/Resources/German.lproj/SPQLPluginSQLTemplate.html b/Resources/German.lproj/SPQLPluginSQLTemplate.html new file mode 100644 index 00000000..6c905539 --- /dev/null +++ b/Resources/German.lproj/SPQLPluginSQLTemplate.html @@ -0,0 +1,37 @@ +<!DOCTYPE html> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> +<style> +body { + font-family:'Lucida Grande'; + font-size:10pt; + background-color:#222222; + color:white; +} +textarea { + background-color:#222222; + color:white; + white-space: nowrap; +} +</style> +</head> +<body> +<center> +<table> +<tr> +<td valign="right"> +<img width="200%" src="data:image/auto;base64,%@"> +</td> +<td> +<center> +<b style="font-size:12pt">Sequel Pro SQL Datei</b><br /> +Größe: %@ +</center><br /><br /> +<textarea cols="50" rows="10" readonly>%@</textarea> +</td> +</tr> +</table> +</center> +</body> +</html> diff --git a/Resources/Plists/Sequel Pro QLGenerator-Info.plist b/Resources/Plists/Sequel Pro QLGenerator-Info.plist new file mode 100644 index 00000000..aca09b59 --- /dev/null +++ b/Resources/Plists/Sequel Pro QLGenerator-Info.plist @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>CFBundleDevelopmentRegion</key> + <string>English</string> + <key>CFBundleDocumentTypes</key> + <array> + <dict> + <key>CFBundleTypeRole</key> + <string>QLGenerator</string> + <key>LSItemContentTypes</key> + <array> + <string>com.google.code.sequel-pro.spf</string> + <string>com.google.code.sequel-pro.sql</string> + </array> + </dict> + </array> + <key>CFBundleExecutable</key> + <string>${EXECUTABLE_NAME}</string> + <key>CFBundleIconFile</key> + <string></string> + <key>CFBundleIdentifier</key> + <string>com.google.code.sequel-pro.qlgenerator</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + <key>CFBundleName</key> + <string>${PRODUCT_NAME}</string> + <key>CFBundleShortVersionString</key> + <string>1</string> + <key>CFBundleVersion</key> + <string>1.0</string> + <key>CFPlugInDynamicRegisterFunction</key> + <string></string> + <key>CFPlugInDynamicRegistration</key> + <false/> + <key>CFPlugInFactories</key> + <dict> + <key>15621E48-2969-4291-807E-5F0498A9FB70</key> + <string>QuickLookGeneratorPluginFactory</string> + </dict> + <key>CFPlugInTypes</key> + <dict> + <key>5E2D9680-5022-40FA-B806-43349622E5B9</key> + <array> + <string>15621E48-2969-4291-807E-5F0498A9FB70</string> + </array> + </dict> + <key>CFPlugInUnloadFunction</key> + <string></string> + <key>QLNeedsToBeRunInMainThread</key> + <false/> + <key>QLPreviewHeight</key> + <integer>280</integer> + <key>QLPreviewWidth</key> + <integer>600</integer> + <key>QLSupportsConcurrentRequests</key> + <false/> + <key>QLThumbnailMinimumSize</key> + <real>17</real> +</dict> +</plist> diff --git a/Source/GeneratePreviewForURL.m b/Source/GeneratePreviewForURL.m new file mode 100644 index 00000000..30ca2ae2 --- /dev/null +++ b/Source/GeneratePreviewForURL.m @@ -0,0 +1,347 @@ +// GeneratePreviewForURL.m +// sequel-pro +// +// Created by Hans-Jörg Bibiko on Aug 04, 2010 +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// More info at <http://code.google.com/p/sequel-pro/> + +#include <CoreFoundation/CoreFoundation.h> +#include <CoreServices/CoreServices.h> +#include <QuickLook/QuickLook.h> +#import <Cocoa/Cocoa.h> + +/* ----------------------------------------------------------------------------- + Generate a preview for file + + This function's job is to create preview for designated file + ----------------------------------------------------------------------------- */ + +static char base64encodingTable[64] = { +'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P', +'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f', +'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v', +'w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/' }; + +@interface NSData (QLDataAdditions) + +- (NSString *)base64EncodingWithLineLength:(NSUInteger)lineLength; + +@end + + +@implementation NSData (QLDataAdditions) + +/* + * Derived from http://colloquy.info/project/browser/trunk/NSDataAdditions.m?rev=1576 + * Created by khammond on Mon Oct 29 2001. + * Formatted by Timothy Hatcher on Sun Jul 4 2004. + * Copyright (c) 2001 Kyle Hammond. All rights reserved. + * Original development by Dave Winer. + * + * Convert self to a base64 encoded NSString + */ +- (NSString *) base64EncodingWithLineLength:(NSUInteger)lineLength { + + const unsigned char *bytes = [self bytes]; + NSUInteger ixtext = 0; + NSUInteger lentext = [self length]; + NSInteger ctremaining = 0; + unsigned char inbuf[3], outbuf[4]; + short i = 0; + short charsonline = 0, ctcopy = 0; + NSUInteger ix = 0; + + NSMutableString *base64 = [NSMutableString stringWithCapacity:lentext]; + + while(1) { + ctremaining = lentext - ixtext; + if( ctremaining <= 0 ) break; + + for( i = 0; i < 3; i++ ) { + ix = ixtext + i; + if( ix < lentext ) inbuf[i] = bytes[ix]; + else inbuf [i] = 0; + } + + outbuf [0] = (inbuf [0] & 0xFC) >> 2; + outbuf [1] = ((inbuf [0] & 0x03) << 4) | ((inbuf [1] & 0xF0) >> 4); + outbuf [2] = ((inbuf [1] & 0x0F) << 2) | ((inbuf [2] & 0xC0) >> 6); + outbuf [3] = inbuf [2] & 0x3F; + ctcopy = 4; + + switch( ctremaining ) { + case 1: + ctcopy = 2; + break; + case 2: + ctcopy = 3; + break; + } + + for( i = 0; i < ctcopy; i++ ) + [base64 appendFormat:@"%c", base64encodingTable[outbuf[i]]]; + + for( i = ctcopy; i < 4; i++ ) + [base64 appendFormat:@"%c",'=']; + + ixtext += 3; + charsonline += 4; + + if( lineLength > 0 ) { + if (charsonline >= lineLength) { + charsonline = 0; + [base64 appendString:@"\n"]; + } + } + } + + return base64; +} +@end + +@interface NSString (QLStringAdditions) + ++ (NSString *)stringForByteSize:(long long)byteSize; + +@end + +@implementation NSString (QLStringAdditions) + +/* + * Returns a human readable version string of the supplied byte size. + */ ++ (NSString *)stringForByteSize:(long long)byteSize +{ + CGFloat size = byteSize; + + NSNumberFormatter *numberFormatter = [[[NSNumberFormatter alloc] init] autorelease]; + + [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; + + if (size < 1023) { + [numberFormatter setFormat:@"#,##0 B"]; + + return [numberFormatter stringFromNumber:[NSNumber numberWithInteger:size]]; + } + + size = (size / 1024); + + if (size < 1023) { + [numberFormatter setFormat:@"#,##0.0 KiB"]; + + return [numberFormatter stringFromNumber:[NSNumber numberWithDouble:size]]; + } + + size = (size / 1024); + + if (size < 1023) { + [numberFormatter setFormat:@"#,##0.0 MiB"]; + + return [numberFormatter stringFromNumber:[NSNumber numberWithDouble:size]]; + } + + size = (size / 1024); + + if (size < 1023) { + [numberFormatter setFormat:@"#,##0.0 GiB"]; + + return [numberFormatter stringFromNumber:[NSNumber numberWithDouble:size]]; + } + + size = (size / 1024); + + [numberFormatter setFormat:@"#,##0.0 TiB"]; + + return [numberFormatter stringFromNumber:[NSNumber numberWithDouble:size]]; +} +@end + +OSStatus GeneratePreviewForURL(void *thisInterface, QLPreviewRequestRef preview, CFURLRef url, CFStringRef contentTypeUTI, CFDictionaryRef options) +{ + + NSURL *myURL = (NSURL *)url; + NSString *urlExtension = [[[myURL path] pathExtension] lowercaseString]; + NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; + + NSError *templateReadError = nil; + + NSImage *iconImage = [[NSWorkspace sharedWorkspace] iconForFile:[myURL path]]; + + NSMutableString *html; + NSString *template = nil; + + if (false == QLPreviewRequestIsCancelled(preview)) { + + NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:[myURL path] error:nil]; + + if([urlExtension isEqualToString:@"spf"]) { + + NSError *readError = nil; + NSString *convError = nil; + NSPropertyListFormat format; + NSDictionary *spf = nil; + + NSData *pData = [NSData dataWithContentsOfFile:[myURL path] options:NSUncachedRead error:&readError]; + + spf = [[NSPropertyListSerialization propertyListFromData:pData + mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&convError] retain]; + + if(!spf || readError != nil || [convError length] || !(format == NSPropertyListXMLFormat_v1_0 || format == NSPropertyListBinaryFormat_v1_0)) { + if(spf) [spf release]; + [pool release]; + return noErr; + } + + if([[spf objectForKey:@"format"] isEqualToString:@"connection"]) { + template = [NSString stringWithContentsOfFile:[[NSBundle bundleWithIdentifier:@"com.google.code.sequel-pro.qlgenerator"] pathForResource:@"SPQLPluginConnectionTemplate" ofType:@"html"] + encoding:NSUTF8StringEncoding error:&templateReadError]; + + if (template == nil || ![template length] || templateReadError != nil) { + [pool release]; + return noErr; + } + + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + [dateFormatter setTimeStyle:NSDateFormatterShortStyle]; + [dateFormatter setDateStyle:NSDateFormatterMediumStyle]; + [dateFormatter setLocale:[NSLocale currentLocale]]; + + NSString *name = @"••••"; + NSString *host = @"••••"; + NSString *user = @"••••"; + NSString *database = @"••••"; + NSString *autoConnect = ([[spf objectForKey:@"auto_connect"] boolValue]) ? @"checked" : @""; + + if([[spf objectForKey:@"data"] isKindOfClass:[NSDictionary class]]) { + if([[spf objectForKey:@"data"] objectForKey:@"connection"] && [[[spf objectForKey:@"data"] objectForKey:@"connection"] objectForKey:@"name"]) + name = [[[spf objectForKey:@"data"] objectForKey:@"connection"] objectForKey:@"name"]; + else + name = @""; + if([[spf objectForKey:@"data"] objectForKey:@"connection"] && [[[spf objectForKey:@"data"] objectForKey:@"connection"] objectForKey:@"host"]) + host = [[[spf objectForKey:@"data"] objectForKey:@"connection"] objectForKey:@"host"]; + else + host = @""; + if([[spf objectForKey:@"data"] objectForKey:@"connection"] && [[[spf objectForKey:@"data"] objectForKey:@"connection"] objectForKey:@"user"]) + user = [[[spf objectForKey:@"data"] objectForKey:@"connection"] objectForKey:@"user"]; + else + user = @""; + if([[spf objectForKey:@"data"] objectForKey:@"connection"] && [[[spf objectForKey:@"data"] objectForKey:@"connection"] objectForKey:@"database"]) + database = [[[spf objectForKey:@"data"] objectForKey:@"connection"] objectForKey:@"database"]; + else + database = @""; + } + + // compose the html + html = [[NSMutableString alloc] initWithString:[NSString stringWithFormat:template, + [[iconImage TIFFRepresentationUsingCompression:NSTIFFCompressionJPEG factor:0.01] base64EncodingWithLineLength:0], + [spf objectForKey:@"rdbms_type"], + [spf objectForKey:@"rdbms_version"], + [name stringByReplacingOccurrencesOfString:@" " withString:@" "], + [host stringByReplacingOccurrencesOfString:@" " withString:@" "], + [user stringByReplacingOccurrencesOfString:@" " withString:@" "], + [database stringByReplacingOccurrencesOfString:@" " withString:@" "], + [NSString stringForByteSize:[[fileAttributes objectForKey:NSFileSize] longLongValue]], + [dateFormatter stringFromDate:[fileAttributes fileModificationDate]], + autoConnect + ]]; + + [dateFormatter release]; + [spf release]; + + } + else if([[spf objectForKey:@"format"] isEqualToString:@"content filters"]) { + template = [NSString stringWithContentsOfFile:[[NSBundle bundleWithIdentifier:@"com.google.code.sequel-pro.qlgenerator"] pathForResource:@"SPQLPluginContentFiltersTemplate" ofType:@"html"] + encoding:NSUTF8StringEncoding error:&templateReadError]; + + if (template == nil || ![template length] || templateReadError != nil) { + [pool release]; + return noErr; + } + // compose the html + html = [[NSMutableString alloc] initWithString:[NSString stringWithFormat:template, + [[iconImage TIFFRepresentationUsingCompression:NSTIFFCompressionJPEG factor:0.01] base64EncodingWithLineLength:0], + [NSString stringWithContentsOfFile:[myURL path] encoding:NSUTF8StringEncoding error:nil] + ]]; + } + else if([[spf objectForKey:@"format"] isEqualToString:@"query favorites"]) { + template = [NSString stringWithContentsOfFile:[[NSBundle bundleWithIdentifier:@"com.google.code.sequel-pro.qlgenerator"] pathForResource:@"SPQLPluginQueryFavoritesTemplate" ofType:@"html"] + encoding:NSUTF8StringEncoding error:&templateReadError]; + + if (template == nil || ![template length] || templateReadError != nil) { + [pool release]; + return noErr; + } + // compose the html + html = [[NSMutableString alloc] initWithString:[NSString stringWithFormat:template, + [[iconImage TIFFRepresentationUsingCompression:NSTIFFCompressionJPEG factor:0.01] base64EncodingWithLineLength:0], + [NSString stringWithContentsOfFile:[myURL path] encoding:NSUTF8StringEncoding error:nil] + ]]; + } + } + else if([urlExtension isEqualToString:@"sql"]) { + template = [NSString stringWithContentsOfFile:[[NSBundle bundleWithIdentifier:@"com.google.code.sequel-pro.qlgenerator"] pathForResource:@"SPQLPluginSQLTemplate" ofType:@"html"] + encoding:NSUTF8StringEncoding error:&templateReadError]; + + if (template == nil || ![template length] || templateReadError != nil) { + [pool release]; + return noErr; + } + + // compose the html + if(fileAttributes) + { + NSNumber *filesize = [fileAttributes objectForKey:NSFileSize]; + // catch large files since Finder blocks + if([filesize unsignedLongValue] > 6000000) { + html = [[NSMutableString alloc] initWithString:[NSString stringWithFormat:template, + [[iconImage TIFFRepresentationUsingCompression:NSTIFFCompressionJPEG factor:0.01] base64EncodingWithLineLength:0], + [NSString stringForByteSize:[[fileAttributes objectForKey:NSFileSize] longLongValue]], + @"... SQL ..." + ]]; + } else { + html = [[NSMutableString alloc] initWithString:[NSString stringWithFormat:template, + [[iconImage TIFFRepresentationUsingCompression:NSTIFFCompressionJPEG factor:0.01] base64EncodingWithLineLength:0], + [NSString stringForByteSize:[[fileAttributes objectForKey:NSFileSize] longLongValue]], + [NSString stringWithContentsOfFile:[myURL path] encoding:NSUTF8StringEncoding error:nil] + ]]; + } + } else { + html = [[NSMutableString alloc] initWithString:[NSString stringWithFormat:template, + [[iconImage TIFFRepresentationUsingCompression:NSTIFFCompressionJPEG factor:0.01] base64EncodingWithLineLength:0], + [NSString stringForByteSize:[[fileAttributes objectForKey:NSFileSize] longLongValue]], + [NSString stringWithContentsOfFile:[myURL path] encoding:NSUTF8StringEncoding error:nil] + ]]; + } + } + + CFDictionaryRef properties = (CFDictionaryRef)[NSDictionary dictionary]; + QLPreviewRequestSetDataRepresentation(preview, + (CFDataRef)[html dataUsingEncoding:NSUTF8StringEncoding], + kUTTypeHTML, + properties + ); + [html release]; + + } + [pool release]; + return noErr; +} + +void CancelPreviewGeneration(void* thisInterface, QLPreviewRequestRef preview) +{ + // implement only if supported +} diff --git a/Source/GenerateThumbnailForURL.m b/Source/GenerateThumbnailForURL.m new file mode 100644 index 00000000..cee74c74 --- /dev/null +++ b/Source/GenerateThumbnailForURL.m @@ -0,0 +1,86 @@ +// GenerateThumbnailForURL.m +// sequel-pro +// +// Created by Hans-Jörg Bibiko on Aug 04, 2010 +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// More info at <http://code.google.com/p/sequel-pro/> + +#include <CoreFoundation/CoreFoundation.h> +#include <CoreServices/CoreServices.h> +#include <QuickLook/QuickLook.h> +#import <Cocoa/Cocoa.h> + + +/* ----------------------------------------------------------------------------- +Generate a thumbnail for file + +This function's job is to create thumbnail for designated file as fast as possible +----------------------------------------------------------------------------- */ + + +void CancelThumbnailGeneration(void* thisInterface, QLThumbnailRequestRef thumbnail) +{ + // implement only if supported +} + +OSStatus GenerateThumbnailForURL(void *thisInterface, QLThumbnailRequestRef thumbnail, CFURLRef url, CFStringRef contentTypeUTI, CFDictionaryRef options, CGSize maxSize) + +{ + return noErr; + + // The following code is meant as example maybe fr the future + // NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; + // + // NSData *thumbnailData = [NSData dataWithContentsOfFile:@"appicon.icns"]; + // if ( thumbnailData == nil || [thumbnailData length] == 0 ) { + // // Nothing Found. Don't care. + // [pool release]; + // return noErr; + // } + // + // NSSize canvasSize = NSMakeSize((NSInteger)(maxSize.height/1.3f), maxSize.height); + // + // // Thumbnail will be drawn with maximum resolution for desired thumbnail request + // // Here we create a graphics context to draw the Quick Look Thumbnail in. + // CGContextRef cgContext = QLThumbnailRequestCreateContext(thumbnail, *(CGSize *)&canvasSize, true, NULL); + // if(cgContext) { + // NSGraphicsContext* context = [NSGraphicsContext graphicsContextWithGraphicsPort:(void *)cgContext flipped:YES]; + // if(context) { + // //These two lines of code are just good safe programming... + // [NSGraphicsContext saveGraphicsState]; + // [NSGraphicsContext setCurrentContext:context]; + // + // // [context setCompositingOperation:NSCompositeSourceOver]; + // // CGContextSetAlpha(cgContext, 0.5); + // + // NSBitmapImageRep *thumbnailBitmap = [NSBitmapImageRep imageRepWithData:thumbnailData]; + // [thumbnailBitmap drawInRect:NSMakeRect(10,10,200,200)]; + // + // //This line sets the context back to what it was when we're done + // [NSGraphicsContext restoreGraphicsState]; + // } + // + // // When we are done with our drawing code QLThumbnailRequestFlushContext() is called to flush the context + // QLThumbnailRequestFlushContext(thumbnail, cgContext); + // + // CFRelease(cgContext); + // } + // + // [pool release]; + // return noErr; + +}
\ No newline at end of file diff --git a/Source/main.c b/Source/main.c new file mode 100644 index 00000000..ae199979 --- /dev/null +++ b/Source/main.c @@ -0,0 +1,218 @@ +//============================================================================== +// +// DO NO MODIFY THE CONTENT OF THIS FILE +// +// This file contains the generic CFPlug-in code necessary for your generator +// To complete your generator implement the function in GenerateThumbnailForURL/GeneratePreviewForURL.c +// +//============================================================================== + + + + + + +#include <CoreFoundation/CoreFoundation.h> +#include <CoreFoundation/CFPlugInCOM.h> +#include <CoreServices/CoreServices.h> +#include <QuickLook/QuickLook.h> + +// ----------------------------------------------------------------------------- +// constants +// ----------------------------------------------------------------------------- + +// Don't modify this line +#define PLUGIN_ID "15621E48-2969-4291-807E-5F0498A9FB70" + +// +// Below is the generic glue code for all plug-ins. +// +// You should not have to modify this code aside from changing +// names if you decide to change the names defined in the Info.plist +// + + +// ----------------------------------------------------------------------------- +// typedefs +// ----------------------------------------------------------------------------- + +// The thumbnail generation function to be implemented in GenerateThumbnailForURL.c +OSStatus GenerateThumbnailForURL(void *thisInterface, QLThumbnailRequestRef thumbnail, CFURLRef url, CFStringRef contentTypeUTI, CFDictionaryRef options, CGSize maxSize); +void CancelThumbnailGeneration(void* thisInterface, QLThumbnailRequestRef thumbnail); + +// The preview generation function to be implemented in GeneratePreviewForURL.c +OSStatus GeneratePreviewForURL(void *thisInterface, QLPreviewRequestRef preview, CFURLRef url, CFStringRef contentTypeUTI, CFDictionaryRef options); +void CancelPreviewGeneration(void *thisInterface, QLPreviewRequestRef preview); + +// The layout for an instance of QuickLookGeneratorPlugIn +typedef struct __QuickLookGeneratorPluginType +{ + void *conduitInterface; + CFUUIDRef factoryID; + UInt32 refCount; +} QuickLookGeneratorPluginType; + +// ----------------------------------------------------------------------------- +// prototypes +// ----------------------------------------------------------------------------- +// Forward declaration for the IUnknown implementation. +// + +QuickLookGeneratorPluginType *AllocQuickLookGeneratorPluginType(CFUUIDRef inFactoryID); +void DeallocQuickLookGeneratorPluginType(QuickLookGeneratorPluginType *thisInstance); +HRESULT QuickLookGeneratorQueryInterface(void *thisInstance,REFIID iid,LPVOID *ppv); +void *QuickLookGeneratorPluginFactory(CFAllocatorRef allocator,CFUUIDRef typeID); +ULONG QuickLookGeneratorPluginAddRef(void *thisInstance); +ULONG QuickLookGeneratorPluginRelease(void *thisInstance); + +// ----------------------------------------------------------------------------- +// myInterfaceFtbl definition +// ----------------------------------------------------------------------------- +// The QLGeneratorInterfaceStruct function table. +// +static QLGeneratorInterfaceStruct myInterfaceFtbl = { + NULL, + QuickLookGeneratorQueryInterface, + QuickLookGeneratorPluginAddRef, + QuickLookGeneratorPluginRelease, + NULL, + NULL, + NULL, + NULL +}; + + +// ----------------------------------------------------------------------------- +// AllocQuickLookGeneratorPluginType +// ----------------------------------------------------------------------------- +// Utility function that allocates a new instance. +// You can do some initial setup for the generator here if you wish +// like allocating globals etc... +// +QuickLookGeneratorPluginType *AllocQuickLookGeneratorPluginType(CFUUIDRef inFactoryID) +{ + QuickLookGeneratorPluginType *theNewInstance; + + theNewInstance = (QuickLookGeneratorPluginType *)malloc(sizeof(QuickLookGeneratorPluginType)); + memset(theNewInstance,0,sizeof(QuickLookGeneratorPluginType)); + + /* Point to the function table Malloc enough to store the stuff and copy the filler from myInterfaceFtbl over */ + theNewInstance->conduitInterface = malloc(sizeof(QLGeneratorInterfaceStruct)); + memcpy(theNewInstance->conduitInterface,&myInterfaceFtbl,sizeof(QLGeneratorInterfaceStruct)); + + /* Retain and keep an open instance refcount for each factory. */ + theNewInstance->factoryID = CFRetain(inFactoryID); + CFPlugInAddInstanceForFactory(inFactoryID); + + /* This function returns the IUnknown interface so set the refCount to one. */ + theNewInstance->refCount = 1; + return theNewInstance; +} + +// ----------------------------------------------------------------------------- +// DeallocQuickLookGeneratorPluginType +// ----------------------------------------------------------------------------- +// Utility function that deallocates the instance when +// the refCount goes to zero. +// In the current implementation generator interfaces are never deallocated +// but implement this as this might change in the future +// +void DeallocQuickLookGeneratorPluginType(QuickLookGeneratorPluginType *thisInstance) +{ + CFUUIDRef theFactoryID; + + theFactoryID = thisInstance->factoryID; + /* Free the conduitInterface table up */ + free(thisInstance->conduitInterface); + + /* Free the instance structure */ + free(thisInstance); + if (theFactoryID){ + CFPlugInRemoveInstanceForFactory(theFactoryID); + CFRelease(theFactoryID); + } +} + +// ----------------------------------------------------------------------------- +// QuickLookGeneratorQueryInterface +// ----------------------------------------------------------------------------- +// Implementation of the IUnknown QueryInterface function. +// +HRESULT QuickLookGeneratorQueryInterface(void *thisInstance,REFIID iid,LPVOID *ppv) +{ + CFUUIDRef interfaceID; + + interfaceID = CFUUIDCreateFromUUIDBytes(kCFAllocatorDefault,iid); + + if (CFEqual(interfaceID,kQLGeneratorCallbacksInterfaceID)){ + /* If the Right interface was requested, bump the ref count, + * set the ppv parameter equal to the instance, and + * return good status. + */ + ((QLGeneratorInterfaceStruct *)((QuickLookGeneratorPluginType *)thisInstance)->conduitInterface)->GenerateThumbnailForURL = GenerateThumbnailForURL; + ((QLGeneratorInterfaceStruct *)((QuickLookGeneratorPluginType *)thisInstance)->conduitInterface)->CancelThumbnailGeneration = CancelThumbnailGeneration; + ((QLGeneratorInterfaceStruct *)((QuickLookGeneratorPluginType *)thisInstance)->conduitInterface)->GeneratePreviewForURL = GeneratePreviewForURL; + ((QLGeneratorInterfaceStruct *)((QuickLookGeneratorPluginType *)thisInstance)->conduitInterface)->CancelPreviewGeneration = CancelPreviewGeneration; + ((QLGeneratorInterfaceStruct *)((QuickLookGeneratorPluginType*)thisInstance)->conduitInterface)->AddRef(thisInstance); + *ppv = thisInstance; + CFRelease(interfaceID); + return S_OK; + }else{ + /* Requested interface unknown, bail with error. */ + *ppv = NULL; + CFRelease(interfaceID); + return E_NOINTERFACE; + } +} + +// ----------------------------------------------------------------------------- +// QuickLookGeneratorPluginAddRef +// ----------------------------------------------------------------------------- +// Implementation of reference counting for this type. Whenever an interface +// is requested, bump the refCount for the instance. NOTE: returning the +// refcount is a convention but is not required so don't rely on it. +// +ULONG QuickLookGeneratorPluginAddRef(void *thisInstance) +{ + ((QuickLookGeneratorPluginType *)thisInstance )->refCount += 1; + return ((QuickLookGeneratorPluginType*) thisInstance)->refCount; +} + +// ----------------------------------------------------------------------------- +// QuickLookGeneratorPluginRelease +// ----------------------------------------------------------------------------- +// When an interface is released, decrement the refCount. +// If the refCount goes to zero, deallocate the instance. +// +ULONG QuickLookGeneratorPluginRelease(void *thisInstance) +{ + ((QuickLookGeneratorPluginType*)thisInstance)->refCount -= 1; + if (((QuickLookGeneratorPluginType*)thisInstance)->refCount == 0){ + DeallocQuickLookGeneratorPluginType((QuickLookGeneratorPluginType*)thisInstance ); + return 0; + }else{ + return ((QuickLookGeneratorPluginType*) thisInstance )->refCount; + } +} + +// ----------------------------------------------------------------------------- +// QuickLookGeneratorPluginFactory +// ----------------------------------------------------------------------------- +void *QuickLookGeneratorPluginFactory(CFAllocatorRef allocator,CFUUIDRef typeID) +{ + QuickLookGeneratorPluginType *result; + CFUUIDRef uuid; + + /* If correct type is being requested, allocate an + * instance of kQLGeneratorTypeID and return the IUnknown interface. + */ + if (CFEqual(typeID,kQLGeneratorTypeID)){ + uuid = CFUUIDCreateFromString(kCFAllocatorDefault,CFSTR(PLUGIN_ID)); + result = AllocQuickLookGeneratorPluginType(uuid); + CFRelease(uuid); + return result; + } + /* If the requested type is incorrect, return NULL. */ + return NULL; +} + diff --git a/sequel-pro.xcodeproj/project.pbxproj b/sequel-pro.xcodeproj/project.pbxproj index e77570ba..45c690e4 100644 --- a/sequel-pro.xcodeproj/project.pbxproj +++ b/sequel-pro.xcodeproj/project.pbxproj @@ -84,7 +84,7 @@ 17B7B5EF101603D200F057DE /* mysql_time.h in Headers */ = {isa = PBXBuildFile; fileRef = 17B7B5E7101603D200F057DE /* mysql_time.h */; settings = {ATTRIBUTES = (Public, ); }; }; 17B7B5F0101603D200F057DE /* mysql_version.h in Headers */ = {isa = PBXBuildFile; fileRef = 17B7B5E8101603D200F057DE /* mysql_version.h */; settings = {ATTRIBUTES = (Public, ); }; }; 17B7B5F1101603D200F057DE /* typelib.h in Headers */ = {isa = PBXBuildFile; fileRef = 17B7B5E9101603D200F057DE /* typelib.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 17B7B61D101605E300F057DE /* MCPKit.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 17B7B5621016012700F057DE /* MCPKit.framework */; }; + 17B7B61D101605E300F057DE /* MCPKit.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 17B7B5621016012700F057DE /* MCPKit.framework */; }; 17C058880FC9FC390077E9CF /* SPNarrowDownCompletion.m in Sources */ = {isa = PBXBuildFile; fileRef = 17C058870FC9FC390077E9CF /* SPNarrowDownCompletion.m */; }; 17CC97F310B4ABE90034CD7A /* SPAboutController.m in Sources */ = {isa = PBXBuildFile; fileRef = 17CC97F210B4ABE90034CD7A /* SPAboutController.m */; }; 17CC97F710B4AC6C0034CD7A /* AboutPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = 17CC97F510B4AC6C0034CD7A /* AboutPanel.xib */; }; @@ -157,8 +157,8 @@ 4D90B7A2101E0D1500D116A1 /* UserManagerView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4D90B7A0101E0D1500D116A1 /* UserManagerView.xib */; }; 4DECC3350EC2A170008D359E /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DECC3320EC2A170008D359E /* Sparkle.framework */; }; 4DECC3370EC2A170008D359E /* Growl.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DECC3340EC2A170008D359E /* Growl.framework */; }; - 4DECC48F0EC2B436008D359E /* Sparkle.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4DECC3320EC2A170008D359E /* Sparkle.framework */; }; - 4DECC4910EC2B436008D359E /* Growl.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4DECC3340EC2A170008D359E /* Growl.framework */; }; + 4DECC48F0EC2B436008D359E /* Sparkle.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 4DECC3320EC2A170008D359E /* Sparkle.framework */; }; + 4DECC4910EC2B436008D359E /* Growl.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 4DECC3340EC2A170008D359E /* Growl.framework */; }; 5806B76411A991EC00813A88 /* SPDocumentController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5806B76311A991EC00813A88 /* SPDocumentController.m */; }; 580E8DB711EA774B000D8427 /* SequelProTabClose_Pressed.png in Resources */ = {isa = PBXBuildFile; fileRef = 580E8DAB11EA772C000D8427 /* SequelProTabClose_Pressed.png */; }; 580E8DB811EA774B000D8427 /* SequelProTabClose_Rollover.png in Resources */ = {isa = PBXBuildFile; fileRef = 580E8DAC11EA772C000D8427 /* SequelProTabClose_Rollover.png */; }; @@ -180,11 +180,24 @@ 584095191107CB6600260CFD /* SPAlertSheets.m in Sources */ = {isa = PBXBuildFile; fileRef = 584095181107CB6600260CFD /* SPAlertSheets.m */; }; 5841423F0F97E11000A34B47 /* NoodleLineNumberView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5841423E0F97E11000A34B47 /* NoodleLineNumberView.m */; }; 584192A1101E57BB0089807F /* NSMutableArray-MultipleSort.m in Sources */ = {isa = PBXBuildFile; fileRef = 584192A0101E57BB0089807F /* NSMutableArray-MultipleSort.m */; }; + 584754D3120A05910057631F /* GeneratePreviewForURL.m in Sources */ = {isa = PBXBuildFile; fileRef = 584754D0120A05910057631F /* GeneratePreviewForURL.m */; }; + 584754D4120A05910057631F /* GenerateThumbnailForURL.m in Sources */ = {isa = PBXBuildFile; fileRef = 584754D1120A05910057631F /* GenerateThumbnailForURL.m */; }; + 584754D5120A05910057631F /* main.c in Sources */ = {isa = PBXBuildFile; fileRef = 584754D2120A05910057631F /* main.c */; }; + 58475686120A065B0057631F /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58475685120A065B0057631F /* CoreFoundation.framework */; }; + 584756B5120A06740057631F /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 584756B4120A06740057631F /* CoreServices.framework */; }; + 584756B7120A067B0057631F /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 584756B6120A067B0057631F /* ApplicationServices.framework */; }; + 584756B9120A06830057631F /* QuickLook.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 584756B8120A06830057631F /* QuickLook.framework */; }; + 584756BC120A06870057631F /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A7FEA54F5311CA2CBB /* Cocoa.framework */; }; + 58475702120A1B290057631F /* SPQLPluginConnectionTemplate.html in Resources */ = {isa = PBXBuildFile; fileRef = 584756FA120A1B290057631F /* SPQLPluginConnectionTemplate.html */; }; + 58475703120A1B290057631F /* SPQLPluginContentFiltersTemplate.html in Resources */ = {isa = PBXBuildFile; fileRef = 584756FC120A1B290057631F /* SPQLPluginContentFiltersTemplate.html */; }; + 58475704120A1B290057631F /* SPQLPluginQueryFavoritesTemplate.html in Resources */ = {isa = PBXBuildFile; fileRef = 584756FE120A1B290057631F /* SPQLPluginQueryFavoritesTemplate.html */; }; + 58475705120A1B290057631F /* SPQLPluginSQLTemplate.html in Resources */ = {isa = PBXBuildFile; fileRef = 58475700120A1B290057631F /* SPQLPluginSQLTemplate.html */; }; + 5847577D120A1E8A0057631F /* Sequel Pro.qlgenerator in Copy QuickLook Plugins */ = {isa = PBXBuildFile; fileRef = 584754C2120A04560057631F /* Sequel Pro.qlgenerator */; }; 584F5F8F0F50ACD800036517 /* table-view-small.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 584F5F8E0F50ACD800036517 /* table-view-small.tiff */; }; 58587B5A11B4437C00D129ED /* NSNotificationAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 58587B5811B4437C00D129ED /* NSNotificationAdditions.h */; }; 58587B5B11B4437C00D129ED /* NSNotificationAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 58587B5911B4437C00D129ED /* NSNotificationAdditions.m */; }; 586EBD2411418D7C00B3DE45 /* FeedbackReporter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 586EBD2311418D7C00B3DE45 /* FeedbackReporter.framework */; }; - 586EBD5D11418D9400B3DE45 /* FeedbackReporter.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 586EBD2311418D7C00B3DE45 /* FeedbackReporter.framework */; }; + 586EBD5D11418D9400B3DE45 /* FeedbackReporter.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 586EBD2311418D7C00B3DE45 /* FeedbackReporter.framework */; }; 586F457B0FDB269E00B428D7 /* RegexKitLite.m in Sources */ = {isa = PBXBuildFile; fileRef = 296DC8AB0F909194002A3258 /* RegexKitLite.m */; }; 586F457E0FDB280100B428D7 /* libicucore.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 296DC8BE0F9091DF002A3258 /* libicucore.dylib */; }; 5870868410FA3E9C00D58E1C /* SPDataStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = 5870868310FA3E9C00D58E1C /* SPDataStorage.m */; }; @@ -231,7 +244,7 @@ 58B9076E11BD9B34000826E5 /* PSMTabStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 58B9072E11BD9B34000826E5 /* PSMTabStyle.h */; settings = {ATTRIBUTES = (Public, ); }; }; 58B9077E11BD9B64000826E5 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58B9077D11BD9B64000826E5 /* Carbon.framework */; }; 58B907CA11BDA541000826E5 /* PSMTabBar.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58B906E611BD989A000826E5 /* PSMTabBar.framework */; }; - 58B907FB11BDA5A9000826E5 /* PSMTabBar.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 58B906E611BD989A000826E5 /* PSMTabBar.framework */; }; + 58B907FB11BDA5A9000826E5 /* PSMTabBar.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 58B906E611BD989A000826E5 /* PSMTabBar.framework */; }; 58B9097B11C3A4A2000826E5 /* xibLocalizationPostprocessor.m in Sources */ = {isa = PBXBuildFile; fileRef = 58B9095B11C3A3EC000826E5 /* xibLocalizationPostprocessor.m */; }; 58B909A511C3B919000826E5 /* DMLocalizedNibBundle.m in Sources */ = {isa = PBXBuildFile; fileRef = 58B909A411C3B919000826E5 /* DMLocalizedNibBundle.m */; }; 58BC5E56103898140058C2E6 /* MCPStreamingResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 583B779710386B0200B21F7E /* MCPStreamingResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -247,7 +260,7 @@ 58C56EF50F438E120035701E /* SPDataCellFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 58C56EF40F438E120035701E /* SPDataCellFormatter.m */; }; 58C61CFA11960312003BAA5D /* SPAlertSheets.m in Sources */ = {isa = PBXBuildFile; fileRef = 584095181107CB6600260CFD /* SPAlertSheets.m */; }; 58C6C71611FBB17200A3F5E9 /* UniversalDetector.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58C6C71511FBB17200A3F5E9 /* UniversalDetector.framework */; }; - 58C6C71F11FBB18000A3F5E9 /* UniversalDetector.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 58C6C71511FBB17200A3F5E9 /* UniversalDetector.framework */; }; + 58C6C71F11FBB18000A3F5E9 /* UniversalDetector.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 58C6C71511FBB17200A3F5E9 /* UniversalDetector.framework */; }; 58CB20ED0F79A75D005EA204 /* button_edit_mode_selected.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 58CB20EC0F79A75D005EA204 /* button_edit_mode_selected.tiff */; }; 58CDB3300FCE138D00F8ACA3 /* SPSSHTunnel.m in Sources */ = {isa = PBXBuildFile; fileRef = 58CDB32F0FCE138D00F8ACA3 /* SPSSHTunnel.m */; }; 58CDB3400FCE13EF00F8ACA3 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5EAC0FC0EC87FF900CC579C /* Security.framework */; }; @@ -267,7 +280,7 @@ B52460D80F8EF92300171639 /* SPTextViewAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = B52460D60F8EF92300171639 /* SPTextViewAdditions.m */; }; B52460DB0F8EF93B00171639 /* Console.xib in Resources */ = {isa = PBXBuildFile; fileRef = B52460D90F8EF93B00171639 /* Console.xib */; }; B52ECDDC10DDACE9009DC3E8 /* BWToolkitFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B52ECDDB10DDACE9009DC3E8 /* BWToolkitFramework.framework */; }; - B52ECE1410DDAD01009DC3E8 /* BWToolkitFramework.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = B52ECDDB10DDACE9009DC3E8 /* BWToolkitFramework.framework */; }; + B52ECE1410DDAD01009DC3E8 /* BWToolkitFramework.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = B52ECDDB10DDACE9009DC3E8 /* BWToolkitFramework.framework */; }; B53857340F9CC3B600EB2354 /* button_clear.tiff in Resources */ = {isa = PBXBuildFile; fileRef = B53857330F9CC3B600EB2354 /* button_clear.tiff */; }; B54F25E60FD909C400E2CF36 /* toolbar-switch-to-table-relations.png in Resources */ = {isa = PBXBuildFile; fileRef = B54F25E50FD909C400E2CF36 /* toolbar-switch-to-table-relations.png */; }; B5538AAF0FF251EE00219803 /* button_pane_hide_icon.tif in Resources */ = {isa = PBXBuildFile; fileRef = B5538AAC0FF251EE00219803 /* button_pane_hide_icon.tif */; }; @@ -367,6 +380,13 @@ remoteGlobalIDString = 17B7B5611016012700F057DE; remoteInfo = MCPKit; }; + 5847571D120A1C6D0057631F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 2A37F4A9FDCFA73011CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = 584754C1120A04560057631F /* Sequel Pro QLGenerator */; + remoteInfo = "Sequel Pro QLGenerator"; + }; 58B907CC11BDA552000826E5 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 2A37F4A9FDCFA73011CA2CEA /* Project object */; @@ -391,20 +411,32 @@ /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ - 4DECC4940EC2B447008D359E /* CopyFiles */ = { + 4DECC4940EC2B447008D359E /* Copy Frameworks */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 10; files = ( - 17B7B61D101605E300F057DE /* MCPKit.framework in CopyFiles */, - 58B907FB11BDA5A9000826E5 /* PSMTabBar.framework in CopyFiles */, - 4DECC4910EC2B436008D359E /* Growl.framework in CopyFiles */, - 4DECC48F0EC2B436008D359E /* Sparkle.framework in CopyFiles */, - B52ECE1410DDAD01009DC3E8 /* BWToolkitFramework.framework in CopyFiles */, - 586EBD5D11418D9400B3DE45 /* FeedbackReporter.framework in CopyFiles */, - 58C6C71F11FBB18000A3F5E9 /* UniversalDetector.framework in CopyFiles */, + 17B7B61D101605E300F057DE /* MCPKit.framework in Copy Frameworks */, + 58B907FB11BDA5A9000826E5 /* PSMTabBar.framework in Copy Frameworks */, + 4DECC4910EC2B436008D359E /* Growl.framework in Copy Frameworks */, + 4DECC48F0EC2B436008D359E /* Sparkle.framework in Copy Frameworks */, + B52ECE1410DDAD01009DC3E8 /* BWToolkitFramework.framework in Copy Frameworks */, + 586EBD5D11418D9400B3DE45 /* FeedbackReporter.framework in Copy Frameworks */, + 58C6C71F11FBB18000A3F5E9 /* UniversalDetector.framework in Copy Frameworks */, + ); + name = "Copy Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + 58475762120A1DC40057631F /* Copy QuickLook Plugins */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = Contents/Library/QuickLook; + dstSubfolderSpec = 1; + files = ( + 5847577D120A1E8A0057631F /* Sequel Pro.qlgenerator in Copy QuickLook Plugins */, ); + name = "Copy QuickLook Plugins"; runOnlyForDeploymentPostprocessing = 0; }; /* End PBXCopyFilesBuildPhase section */ @@ -718,6 +750,23 @@ 5841423E0F97E11000A34B47 /* NoodleLineNumberView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NoodleLineNumberView.m; sourceTree = "<group>"; }; 5841929F101E57BB0089807F /* NSMutableArray-MultipleSort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSMutableArray-MultipleSort.h"; sourceTree = "<group>"; }; 584192A0101E57BB0089807F /* NSMutableArray-MultipleSort.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSMutableArray-MultipleSort.m"; sourceTree = "<group>"; }; + 584754C2120A04560057631F /* Sequel Pro.qlgenerator */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Sequel Pro.qlgenerator"; sourceTree = BUILT_PRODUCTS_DIR; }; + 584754D0120A05910057631F /* GeneratePreviewForURL.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratePreviewForURL.m; sourceTree = "<group>"; }; + 584754D1120A05910057631F /* GenerateThumbnailForURL.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GenerateThumbnailForURL.m; sourceTree = "<group>"; }; + 584754D2120A05910057631F /* main.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = main.c; sourceTree = "<group>"; }; + 58475685120A065B0057631F /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; + 584756B4120A06740057631F /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = "<absolute>"; }; + 584756B6120A067B0057631F /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<absolute>"; }; + 584756B8120A06830057631F /* QuickLook.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickLook.framework; path = /System/Library/Frameworks/QuickLook.framework; sourceTree = "<absolute>"; }; + 584756DC120A162E0057631F /* Sequel Pro QLGenerator-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "Sequel Pro QLGenerator-Info.plist"; path = "Plists/Sequel Pro QLGenerator-Info.plist"; sourceTree = "<group>"; }; + 584756FB120A1B290057631F /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = English; path = English.lproj/SPQLPluginConnectionTemplate.html; sourceTree = "<group>"; }; + 584756FD120A1B290057631F /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = English; path = English.lproj/SPQLPluginContentFiltersTemplate.html; sourceTree = "<group>"; }; + 584756FF120A1B290057631F /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = English; path = English.lproj/SPQLPluginQueryFavoritesTemplate.html; sourceTree = "<group>"; }; + 58475701120A1B290057631F /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = English; path = English.lproj/SPQLPluginSQLTemplate.html; sourceTree = "<group>"; }; + 58475706120A1B630057631F /* German */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = German; path = German.lproj/SPQLPluginConnectionTemplate.html; sourceTree = "<group>"; }; + 58475707120A1B630057631F /* German */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = German; path = German.lproj/SPQLPluginContentFiltersTemplate.html; sourceTree = "<group>"; }; + 58475708120A1B630057631F /* German */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = German; path = German.lproj/SPQLPluginQueryFavoritesTemplate.html; sourceTree = "<group>"; }; + 58475709120A1B630057631F /* German */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = German; path = German.lproj/SPQLPluginSQLTemplate.html; sourceTree = "<group>"; }; 584F5F8E0F50ACD800036517 /* table-view-small.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "table-view-small.tiff"; sourceTree = "<group>"; }; 58587B5811B4437C00D129ED /* NSNotificationAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NSNotificationAdditions.h; path = "Support files/NSNotificationAdditions.h"; sourceTree = "<group>"; }; 58587B5911B4437C00D129ED /* NSNotificationAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NSNotificationAdditions.m; path = "Support files/NSNotificationAdditions.m"; sourceTree = "<group>"; }; @@ -967,6 +1016,18 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 584754C0120A04560057631F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 58475686120A065B0057631F /* CoreFoundation.framework in Frameworks */, + 584756B5120A06740057631F /* CoreServices.framework in Frameworks */, + 584756B7120A067B0057631F /* ApplicationServices.framework in Frameworks */, + 584756B9120A06830057631F /* QuickLook.framework in Frameworks */, + 584756BC120A06870057631F /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 58B906E411BD989A000826E5 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -1018,6 +1079,7 @@ 1058C7A6FEA54F5311CA2CBB /* Linked Frameworks */ = { isa = PBXGroup; children = ( + 58475685120A065B0057631F /* CoreFoundation.framework */, 58B9077D11BD9B64000826E5 /* Carbon.framework */, 1058C7A7FEA54F5311CA2CBB /* Cocoa.framework */, 4DECC3340EC2A170008D359E /* Growl.framework */, @@ -1027,6 +1089,9 @@ 586EBD2311418D7C00B3DE45 /* FeedbackReporter.framework */, 580E8EDC11EBE2A4000D8427 /* SystemConfiguration.framework */, 58C6C71511FBB17200A3F5E9 /* UniversalDetector.framework */, + 584756B4120A06740057631F /* CoreServices.framework */, + 584756B6120A067B0057631F /* ApplicationServices.framework */, + 584756B8120A06830057631F /* QuickLook.framework */, 296DC8BE0F9091DF002A3258 /* libicucore.dylib */, 17B7B58F1016028F00F057DE /* libcrypto.dylib */, 179ECEC611F265EE009C6A40 /* libbz2.dylib */, @@ -1298,6 +1363,7 @@ BCB56196106F893F00167321 /* ContentFilters.plist */, BCB5619A106F8A1B00167321 /* EditorQuickLookTypes.plist */, BC962D651144EACA006170BD /* CompletionTokens.plist */, + 584756DC120A162E0057631F /* Sequel Pro QLGenerator-Info.plist */, ); name = Plists; sourceTree = "<group>"; @@ -1503,6 +1569,7 @@ 17E6418B0EF01FF7001BC333 /* Images */, 1740F8360FC306AE00CF3699 /* Scripting */, 1740F8350FC3069700CF3699 /* Templates */, + 584756F7120A1B0B0057631F /* QuickLook Plugin */, 17DD52C4115074CB007D8950 /* Localizable.strings */, 17DD52B811507217007D8950 /* Credits.rtf */, 17CC993A10B4C9C80034CD7A /* License.rtf */, @@ -1571,6 +1638,7 @@ 17E641720EF01F6B001BC333 /* SSHTunnel */, B57747D60F7A8990003B34F9 /* Category Additions */, 58B909A111C3B8EC000826E5 /* Localization */, + 584754CC120A05660057631F /* QuickLook Plugin */, 58DA884E103E1597000B98DF /* Debugging & Support */, ); name = Other; @@ -1764,6 +1832,7 @@ 17B7B5621016012700F057DE /* MCPKit.framework */, 58B906E611BD989A000826E5 /* PSMTabBar.framework */, 58B9096111C3A42B000826E5 /* xibLocalizationPostprocessor */, + 584754C2120A04560057631F /* Sequel Pro.qlgenerator */, ); name = Products; sourceTree = "<group>"; @@ -1838,6 +1907,27 @@ name = Compression; sourceTree = "<group>"; }; + 584754CC120A05660057631F /* QuickLook Plugin */ = { + isa = PBXGroup; + children = ( + 584754D0120A05910057631F /* GeneratePreviewForURL.m */, + 584754D1120A05910057631F /* GenerateThumbnailForURL.m */, + 584754D2120A05910057631F /* main.c */, + ); + name = "QuickLook Plugin"; + sourceTree = "<group>"; + }; + 584756F7120A1B0B0057631F /* QuickLook Plugin */ = { + isa = PBXGroup; + children = ( + 584756FA120A1B290057631F /* SPQLPluginConnectionTemplate.html */, + 584756FC120A1B290057631F /* SPQLPluginContentFiltersTemplate.html */, + 584756FE120A1B290057631F /* SPQLPluginQueryFavoritesTemplate.html */, + 58475700120A1B290057631F /* SPQLPluginSQLTemplate.html */, + ); + name = "QuickLook Plugin"; + sourceTree = "<group>"; + }; 58587B4E11B4433B00D129ED /* Support files */ = { isa = PBXGroup; children = ( @@ -2094,6 +2184,23 @@ productReference = 380F4ED90FC0B50500B0BFD7 /* Unit Tests.octest */; productType = "com.apple.product-type.bundle"; }; + 584754C1120A04560057631F /* Sequel Pro QLGenerator */ = { + isa = PBXNativeTarget; + buildConfigurationList = 584754C7120A04560057631F /* Build configuration list for PBXNativeTarget "Sequel Pro QLGenerator" */; + buildPhases = ( + 584754BE120A04560057631F /* Resources */, + 584754BF120A04560057631F /* Sources */, + 584754C0120A04560057631F /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Sequel Pro QLGenerator"; + productName = "Sequel Pro QLGenerator"; + productReference = 584754C2120A04560057631F /* Sequel Pro.qlgenerator */; + productType = "com.apple.product-type.bundle"; + }; 58B906E511BD989A000826E5 /* PSMTabBar */ = { isa = PBXNativeTarget; buildConfigurationList = 58B906EB11BD989A000826E5 /* Build configuration list for PBXNativeTarget "PSMTabBar" */; @@ -2151,7 +2258,8 @@ 8D15AC300486D014006FF6A4 /* Sources */, 8D15AC330486D014006FF6A4 /* Frameworks */, 8D15AC2B0486D014006FF6A4 /* Resources */, - 4DECC4940EC2B447008D359E /* CopyFiles */, + 4DECC4940EC2B447008D359E /* Copy Frameworks */, + 58475762120A1DC40057631F /* Copy QuickLook Plugins */, 1761FDAF0EF0496500331368 /* Run Scripts */, ); buildRules = ( @@ -2161,6 +2269,7 @@ 58B907CD11BDA552000826E5 /* PBXTargetDependency */, 58CDB34B0FCE144000F8ACA3 /* PBXTargetDependency */, 58B9097011C3A462000826E5 /* PBXTargetDependency */, + 5847571E120A1C6D0057631F /* PBXTargetDependency */, ); name = "Sequel Pro"; productInstallPath = "$(HOME)/Applications"; @@ -2186,11 +2295,23 @@ 17B7B5611016012700F057DE /* MCPKit */, 58B906E511BD989A000826E5 /* PSMTabBar */, 58B9096011C3A42B000826E5 /* xibLocalizationPostprocessor */, + 584754C1120A04560057631F /* Sequel Pro QLGenerator */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 584754BE120A04560057631F /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 58475702120A1B290057631F /* SPQLPluginConnectionTemplate.html in Resources */, + 58475703120A1B290057631F /* SPQLPluginContentFiltersTemplate.html in Resources */, + 58475704120A1B290057631F /* SPQLPluginQueryFavoritesTemplate.html in Resources */, + 58475705120A1B290057631F /* SPQLPluginSQLTemplate.html in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 58B906E211BD989A000826E5 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -2408,6 +2529,16 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 584754BF120A04560057631F /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 584754D3120A05910057631F /* GeneratePreviewForURL.m in Sources */, + 584754D4120A05910057631F /* GenerateThumbnailForURL.m in Sources */, + 584754D5120A05910057631F /* main.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 58B906E311BD989A000826E5 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -2572,6 +2703,11 @@ target = 17B7B5611016012700F057DE /* MCPKit */; targetProxy = 17B7B59A1016039200F057DE /* PBXContainerItemProxy */; }; + 5847571E120A1C6D0057631F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 584754C1120A04560057631F /* Sequel Pro QLGenerator */; + targetProxy = 5847571D120A1C6D0057631F /* PBXContainerItemProxy */; + }; 58B907CD11BDA552000826E5 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 58B906E511BD989A000826E5 /* PSMTabBar */; @@ -2700,6 +2836,42 @@ path = ..; sourceTree = "<group>"; }; + 584756FA120A1B290057631F /* SPQLPluginConnectionTemplate.html */ = { + isa = PBXVariantGroup; + children = ( + 584756FB120A1B290057631F /* English */, + 58475706120A1B630057631F /* German */, + ); + name = SPQLPluginConnectionTemplate.html; + sourceTree = "<group>"; + }; + 584756FC120A1B290057631F /* SPQLPluginContentFiltersTemplate.html */ = { + isa = PBXVariantGroup; + children = ( + 584756FD120A1B290057631F /* English */, + 58475707120A1B630057631F /* German */, + ); + name = SPQLPluginContentFiltersTemplate.html; + sourceTree = "<group>"; + }; + 584756FE120A1B290057631F /* SPQLPluginQueryFavoritesTemplate.html */ = { + isa = PBXVariantGroup; + children = ( + 584756FF120A1B290057631F /* English */, + 58475708120A1B630057631F /* German */, + ); + name = SPQLPluginQueryFavoritesTemplate.html; + sourceTree = "<group>"; + }; + 58475700120A1B290057631F /* SPQLPluginSQLTemplate.html */ = { + isa = PBXVariantGroup; + children = ( + 58475701120A1B290057631F /* English */, + 58475709120A1B630057631F /* German */, + ); + name = SPQLPluginSQLTemplate.html; + sourceTree = "<group>"; + }; 58A8A72611A0149100B95749 /* MainWindow.xib */ = { isa = PBXVariantGroup; children = ( @@ -3021,6 +3193,64 @@ }; name = Distribution; }; + 584754C4120A04560057631F /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + INFOPLIST_FILE = "Resources/Plists/Sequel Pro QLGenerator-Info.plist"; + INSTALL_PATH = /Library/QuickLook; + OTHER_LDFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = "Sequel Pro"; + WRAPPER_EXTENSION = qlgenerator; + }; + name = Debug; + }; + 584754C5120A04560057631F /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + INFOPLIST_FILE = "Resources/Plists/Sequel Pro QLGenerator-Info.plist"; + INSTALL_PATH = /Library/QuickLook; + OTHER_LDFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = "Sequel Pro"; + WRAPPER_EXTENSION = qlgenerator; + ZERO_LINK = NO; + }; + name = Release; + }; + 584754C6120A04560057631F /* Distribution */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + INFOPLIST_FILE = "Resources/Plists/Sequel Pro QLGenerator-Info.plist"; + INSTALL_PATH = /Library/QuickLook; + OTHER_LDFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = "Sequel Pro"; + WRAPPER_EXTENSION = qlgenerator; + }; + name = Distribution; + }; 588593F00F7AEB6900ED0E67 /* Distribution */ = { isa = XCBuildConfiguration; buildSettings = { @@ -3481,6 +3711,16 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 584754C7120A04560057631F /* Build configuration list for PBXNativeTarget "Sequel Pro QLGenerator" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 584754C4120A04560057631F /* Debug */, + 584754C5120A04560057631F /* Release */, + 584754C6120A04560057631F /* Distribution */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 58B906EB11BD989A000826E5 /* Build configuration list for PBXNativeTarget "PSMTabBar" */ = { isa = XCConfigurationList; buildConfigurations = ( |