aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBibiko <bibiko@eva.mpg.de>2010-11-20 10:36:54 +0000
committerBibiko <bibiko@eva.mpg.de>2010-11-20 10:36:54 +0000
commit954b41eb8fd513513abca607f710d2688202fe1e (patch)
tree52daae8df12165f5d90b6166a526486b9c10b5ac
parent7ee497de7b4b05fe338166221b0fd42962975214 (diff)
downloadsequelpro-954b41eb8fd513513abca607f710d2688202fe1e.tar.gz
sequelpro-954b41eb8fd513513abca607f710d2688202fe1e.tar.bz2
sequelpro-954b41eb8fd513513abca607f710d2688202fe1e.zip
• added SPBundleCommandTextView and use it instead of SPEditSheetTextVIew since it works in a sheet only and due to future extensions
• fixed init in SPEditSheetTextView • Bundle Editor: minor bug fixing
-rw-r--r--Interfaces/English.lproj/BundleEditor.xib56
-rw-r--r--Source/SPBundleCommandTextView.h34
-rw-r--r--Source/SPBundleCommandTextView.m360
-rw-r--r--Source/SPBundleEditorController.h2
-rw-r--r--Source/SPBundleEditorController.m4
-rw-r--r--Source/SPEditSheetTextView.h2
-rw-r--r--Source/SPEditSheetTextView.m13
-rw-r--r--sequel-pro.xcodeproj/project.pbxproj6
8 files changed, 449 insertions, 28 deletions
diff --git a/Interfaces/English.lproj/BundleEditor.xib b/Interfaces/English.lproj/BundleEditor.xib
index 67caca4a..fc95329a 100644
--- a/Interfaces/English.lproj/BundleEditor.xib
+++ b/Interfaces/English.lproj/BundleEditor.xib
@@ -1398,22 +1398,6 @@
</object>
<object class="IBConnectionRecord">
<object class="IBBindingConnection" key="connection">
- <string key="label">value: selection.command</string>
- <reference key="source" ref="965862131"/>
- <reference key="destination" ref="707140570"/>
- <object class="NSNibBindingConnector" key="connector">
- <reference key="NSSource" ref="965862131"/>
- <reference key="NSDestination" ref="707140570"/>
- <string key="NSLabel">value: selection.command</string>
- <string key="NSBinding">value</string>
- <string key="NSKeyPath">selection.command</string>
- <int key="NSNibBindingConnectorVersion">2</int>
- </object>
- </object>
- <int key="connectionID">863</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBBindingConnection" key="connection">
<string key="label">value: selection.name</string>
<reference key="source" ref="209604501"/>
<reference key="destination" ref="707140570"/>
@@ -1752,6 +1736,30 @@
</object>
<int key="connectionID">925</int>
</object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">value: selection.command</string>
+ <reference key="source" ref="965862131"/>
+ <reference key="destination" ref="707140570"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="965862131"/>
+ <reference key="NSDestination" ref="707140570"/>
+ <string key="NSLabel">value: selection.command</string>
+ <string key="NSBinding">value</string>
+ <string key="NSKeyPath">selection.command</string>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">927</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">delegate</string>
+ <reference key="source" ref="965862131"/>
+ <reference key="destination" ref="1001"/>
+ </object>
+ <int key="connectionID">929</int>
+ </object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
<object class="NSArray" key="orderedObjects">
@@ -2502,9 +2510,9 @@
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>{{218, 278}, {655, 444}}</string>
+ <string>{{251, 39}, {655, 444}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>{{218, 278}, {655, 444}}</string>
+ <string>{{251, 39}, {655, 444}}</string>
<boolean value="NO"/>
<boolean value="YES"/>
<string>{726, 444}</string>
@@ -2720,7 +2728,7 @@
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>SPEditSheetTextView</string>
+ <string>SPBundleCommandTextView</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<object class="NSMutableDictionary">
@@ -2759,7 +2767,7 @@
</object>
</object>
<nil key="sourceID"/>
- <int key="maxID">925</int>
+ <int key="maxID">929</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
@@ -2894,6 +2902,14 @@
<object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.1+">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBPartialClassDescription">
+ <string key="className">SPBundleCommandTextView</string>
+ <string key="superclassName">NSTextView</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBDocumentRelativeSource</string>
+ <string key="minorKey">../../Source/SPBundleCommandTextView.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
<string key="className">SPBundleEditorController</string>
<string key="superclassName">NSWindowController</string>
<object class="NSMutableDictionary" key="actions">
diff --git a/Source/SPBundleCommandTextView.h b/Source/SPBundleCommandTextView.h
new file mode 100644
index 00000000..e39ec1dd
--- /dev/null
+++ b/Source/SPBundleCommandTextView.h
@@ -0,0 +1,34 @@
+//
+// $Id$
+//
+// SPBundleCommandTextView.h
+// sequel-pro
+//
+// Created by Hans-Jörg Bibiko on Nov 19, 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/>
+
+@interface SPBundleCommandTextView : NSTextView
+{
+ BOOL textWasChanged;
+}
+
+- (NSUInteger)characterIndexOfPoint:(NSPoint)aPoint;
+- (void)insertFileContentOfFile:(NSString *)aPath;
+- (void)saveChangedFontInUserDefaults;
+
+@end
diff --git a/Source/SPBundleCommandTextView.m b/Source/SPBundleCommandTextView.m
new file mode 100644
index 00000000..a840101a
--- /dev/null
+++ b/Source/SPBundleCommandTextView.m
@@ -0,0 +1,360 @@
+//
+// $Id$
+//
+// SPBundleCommandTextView.m
+// sequel-pro
+//
+// Created by Hans-Jörg Bibiko on Nov, 19 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/>
+
+#import "SPBundleCommandTextView.h"
+#import "SPTextViewAdditions.h"
+#import "SPBundleEditorController.h"
+
+@implementation SPBundleCommandTextView
+
+- (id)init
+{
+ if(self = [super init])
+ {
+ ;
+ }
+ return self;
+}
+
+- (IBAction)undo:(id)sender
+{
+ textWasChanged = NO;
+ [[self undoManager] undo];
+ // Due to the undoManager implementation it could happen that
+ // an action will be recoreded which actually didn't change the
+ // text buffer. That's why repeat undo.
+ if(!textWasChanged) [[self undoManager] undo];
+ if(!textWasChanged) [[self undoManager] undo];
+}
+
+- (IBAction)redo:(id)sender
+{
+ textWasChanged = NO;
+ [[self undoManager] redo];
+ // Due to the undoManager implementation it could happen that
+ // an action will be recoreded which actually didn't change the
+ // text buffer. That's why repeat redo.
+ if(!textWasChanged) [[self undoManager] redo];
+ if(!textWasChanged) [[self undoManager] redo];
+}
+
+- (IBAction)paste:(id)sender
+{
+ // Try to create an undo group
+ if([[self delegate] respondsToSelector:@selector(setWasCutPaste)])
+ [[self delegate] setWasCutPaste];
+ [super paste:sender];
+}
+
+- (IBAction)cut:(id)sender
+{
+ // Try to create an undo group
+ if([[self delegate] respondsToSelector:@selector(setWasCutPaste)])
+ [[self delegate] setWasCutPaste];
+ [super cut:sender];
+}
+
+/**
+ * Validate undo and redo menu items
+ */
+- (BOOL)validateMenuItem:(NSMenuItem *)menuItem
+{
+
+ if ([menuItem action] == @selector(undo:)) {
+ return ([[self undoManager] canUndo]);
+ }
+ if ([menuItem action] == @selector(redo:)) {
+ return ([[self undoManager] canRedo]);
+ }
+ return YES;
+}
+
+- (void)textDidChange:(NSNotification *)aNotification
+{
+ textWasChanged = YES;
+}
+
+- (void)keyDown:(NSEvent *)theEvent
+{
+
+ long allFlags = (NSShiftKeyMask|NSControlKeyMask|NSAlternateKeyMask|NSCommandKeyMask);
+
+ // Check if user pressed ⌥ to allow composing of accented characters.
+ // e.g. for US keyboard "⌥u a" to insert ä
+ // or for non-US keyboards to allow to enter dead keys
+ // e.g. for German keyboard ` is a dead key, press space to enter `
+ if (([theEvent modifierFlags] & allFlags) == NSAlternateKeyMask || [[theEvent characters] length] == 0)
+ {
+ [super keyDown: theEvent];
+ return;
+ }
+
+ NSString *charactersIgnMod = [theEvent charactersIgnoringModifiers];
+ long curFlags = ([theEvent modifierFlags] & allFlags);
+
+ if(curFlags & NSCommandKeyMask) {
+ if([charactersIgnMod isEqualToString:@"+"] || [charactersIgnMod isEqualToString:@"="]) // increase text size by 1; ⌘+ and numpad +
+ {
+ [self makeTextSizeLarger];
+ [self saveChangedFontInUserDefaults];
+ return;
+ }
+ if([charactersIgnMod isEqualToString:@"-"]) // decrease text size by 1; ⌘- and numpad -
+ {
+ [self makeTextSizeSmaller];
+ [self saveChangedFontInUserDefaults];
+ return;
+ }
+ }
+
+ // Allow undo grouping if user typed a ' ' (for word level undo)
+ // or a RETURN but not for each char due to writing speed
+ if([charactersIgnMod isEqualToString:@" "]
+ || [theEvent keyCode] == 36
+ || [theEvent modifierFlags] & (NSCommandKeyMask|NSControlKeyMask|NSAlternateKeyMask)
+ ) {
+ [[self delegate] setDoGroupDueToChars];
+ }
+
+
+ if([[[[self delegate] class] description] isEqualToString:@"SPBundleEditorController"]) {
+ [super keyDown: theEvent];
+ return;
+ }
+
+ // Check for assign key equivalents inside user-defined bundle commands
+ NSDictionary *keyEquivalents = [[NSApp delegate] bundleKeyEquivalentsForScope:SPBundleScopeInputField];
+ if([keyEquivalents count]) {
+ for(NSString* key in [keyEquivalents allKeys]) {
+ NSArray *keyData = [keyEquivalents objectForKey:key];
+ if([[keyData objectAtIndex:0] isEqualToString:charactersIgnMod] && [[[keyEquivalents objectForKey:key] objectAtIndex:1] intValue] == curFlags) {
+ NSMenuItem *item = [[[NSMenuItem alloc] init] autorelease];
+ [item setToolTip:[[keyEquivalents objectForKey:key] objectAtIndex:2]];
+ [item setTag:0];
+ [self executeBundleItemForInputField:item];
+ return;
+ }
+ }
+ }
+
+ [super keyDown: theEvent];
+
+}
+
+/*
+ * Insert the content of a dragged file path or if ⌘ is pressed
+ * while dragging insert the file path
+ */
+- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender
+{
+ NSPasteboard *pboard = [sender draggingPasteboard];
+
+ if ( [[pboard types] containsObject:NSFilenamesPboardType] && [[pboard types] containsObject:@"CorePasteboardFlavorType 0x54455854"])
+ return [super performDragOperation:sender];
+
+
+ if ( [[pboard types] containsObject:NSFilenamesPboardType] ) {
+ NSArray *files = [pboard propertyListForType:NSFilenamesPboardType];
+
+ // Only one file path is allowed
+ if([files count] > 1) {
+ NSLog(@"%@", NSLocalizedString(@"Only one dragged item allowed.",@"Only one dragged item allowed."));
+ return YES;
+ }
+
+ NSString *filepath = [[pboard propertyListForType:NSFilenamesPboardType] objectAtIndex:0];
+
+ // Set the new insertion point
+ NSPoint draggingLocation = [sender draggingLocation];
+ draggingLocation = [self convertPoint:draggingLocation fromView:nil];
+ NSUInteger characterIndex = [self characterIndexOfPoint:draggingLocation];
+ [self setSelectedRange:NSMakeRange(characterIndex,0)];
+
+ // Check if user pressed ⌘ while dragging for inserting only the file path
+ if([sender draggingSourceOperationMask] == 4)
+ {
+ [self insertText:filepath];
+ return YES;
+ }
+
+ // Check size and NSFileType
+ NSDictionary *attr = [[NSFileManager defaultManager] fileAttributesAtPath:filepath traverseLink:YES];
+ if(attr)
+ {
+ NSNumber *filesize = [attr objectForKey:NSFileSize];
+ NSString *filetype = [attr objectForKey:NSFileType];
+ if(filetype == NSFileTypeRegular && filesize)
+ {
+ // Ask for confirmation if file content is larger than 1MB
+ if([filesize unsignedLongValue] > 1000000)
+ {
+ NSAlert *alert = [[NSAlert alloc] init];
+ [alert addButtonWithTitle:NSLocalizedString(@"OK", @"OK button")];
+ [alert addButtonWithTitle:NSLocalizedString(@"Cancel", @"cancel button")];
+ [alert setInformativeText:[NSString stringWithFormat:NSLocalizedString(@"Do you really want to proceed with %@ of data?", @"message of panel asking for confirmation for inserting large text from dragging action"),
+ [NSString stringForByteSize:[filesize longLongValue]]]];
+ [alert setHelpAnchor:filepath];
+ [alert setMessageText:NSLocalizedString(@"Warning", @"warning")];
+ [alert setAlertStyle:NSWarningAlertStyle];
+ [alert beginSheetModalForWindow:[self window]
+ modalDelegate:self
+ didEndSelector:@selector(dragAlertSheetDidEnd:returnCode:contextInfo:)
+ contextInfo:nil];
+ [alert release];
+
+ } else
+ [self insertFileContentOfFile:filepath];
+ }
+ }
+ return YES;
+ }
+
+ return [super performDragOperation:sender];
+}
+
+/*
+ * Confirmation sheetDidEnd method
+ */
+- (void)dragAlertSheetDidEnd:(NSAlert *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo
+{
+
+ [[sheet window] orderOut:nil];
+ if ( returnCode == NSAlertFirstButtonReturn )
+ [self insertFileContentOfFile:[sheet helpAnchor]];
+
+}
+/*
+ * Convert a NSPoint, usually the mouse location, to
+ * a character index of the text view.
+ */
+- (NSUInteger)characterIndexOfPoint:(NSPoint)aPoint
+{
+ NSUInteger glyphIndex;
+ NSLayoutManager *layoutManager = [self layoutManager];
+ CGFloat fraction;
+ NSRange range;
+
+ range = [layoutManager glyphRangeForTextContainer:[self textContainer]];
+ glyphIndex = [layoutManager glyphIndexForPoint:aPoint
+ inTextContainer:[self textContainer]
+ fractionOfDistanceThroughGlyph:&fraction];
+ if( fraction > 0.5 ) glyphIndex++;
+
+ if( glyphIndex == NSMaxRange(range) )
+ return [[self textStorage] length];
+ else
+ return [layoutManager characterIndexForGlyphAtIndex:glyphIndex];
+
+}
+
+/*
+ * Insert content of a plain text file for a given path.
+ * In addition it tries to figure out the file's text encoding heuristically.
+ */
+- (void)insertFileContentOfFile:(NSString *)aPath
+{
+
+ NSError *err = nil;
+ NSStringEncoding enc;
+ NSString *content = nil;
+
+ // Make usage of the UNIX command "file" to get an info
+ // about file type and encoding.
+ NSTask *task=[[NSTask alloc] init];
+ NSPipe *pipe=[[NSPipe alloc] init];
+ NSFileHandle *handle;
+ NSString *result;
+ [task setLaunchPath:@"/usr/bin/file"];
+ [task setArguments:[NSArray arrayWithObjects:aPath, @"-Ib", nil]];
+ [task setStandardOutput:pipe];
+ handle=[pipe fileHandleForReading];
+ [task launch];
+ result=[[NSString alloc] initWithData:[handle readDataToEndOfFile]
+ encoding:NSASCIIStringEncoding];
+
+ [pipe release];
+ [task release];
+
+ // UTF16/32 files are detected as application/octet-stream resp. audio/mpeg
+ if( [result hasPrefix:@"text/plain"]
+ || [[[aPath pathExtension] lowercaseString] isEqualToString:SPFileExtensionSQL]
+ || [[[aPath pathExtension] lowercaseString] isEqualToString:@"txt"]
+ || [result hasPrefix:@"audio/mpeg"]
+ || [result hasPrefix:@"application/octet-stream"]
+ )
+ {
+ // if UTF16/32 cocoa will try to find the correct encoding
+ if([result hasPrefix:@"application/octet-stream"] || [result hasPrefix:@"audio/mpeg"] || [result rangeOfString:@"utf-16"].length)
+ enc = 0;
+ else if([result rangeOfString:@"utf-8"].length)
+ enc = NSUTF8StringEncoding;
+ else if([result rangeOfString:@"iso-8859-1"].length)
+ enc = NSISOLatin1StringEncoding;
+ else if([result rangeOfString:@"us-ascii"].length)
+ enc = NSASCIIStringEncoding;
+ else
+ enc = 0;
+
+ if(enc == 0) // cocoa tries to detect the encoding
+ content = [NSString stringWithContentsOfFile:aPath usedEncoding:&enc error:&err];
+ else
+ content = [NSString stringWithContentsOfFile:aPath encoding:enc error:&err];
+
+ if(content)
+ {
+ [self insertText:content];
+ [result release];
+ return;
+ }
+ // If UNIX "file" failed try cocoa's encoding detection
+ content = [NSString stringWithContentsOfFile:aPath encoding:enc error:&err];
+ if(content)
+ {
+ [self insertText:content];
+ [result release];
+ return;
+ }
+ }
+
+ [result release];
+
+ NSLog(@"%@ ‘%@’.", NSLocalizedString(@"Couldn't read the file content of", @"Couldn't read the file content of"), aPath);
+}
+
+// Store the font in the prefs for selected delegates only
+- (void)saveChangedFontInUserDefaults
+{
+ if([[[[self delegate] class] description] isEqualToString:@"SPBundleEditorController"])
+ [[NSUserDefaults standardUserDefaults] setObject:[NSArchiver archivedDataWithRootObject:[self font]] forKey:@"FieldEditorSheetFont"];
+}
+
+// Action receiver for a font change in the font panel
+- (void)changeFont:(id)sender
+{
+ NSFont *nf = [[NSFontPanel sharedFontPanel] panelConvertFont:[self font]];
+ [self setFont:nf];
+ [self saveChangedFontInUserDefaults];
+}
+
+@end
diff --git a/Source/SPBundleEditorController.h b/Source/SPBundleEditorController.h
index 5ab3a534..eca5659f 100644
--- a/Source/SPBundleEditorController.h
+++ b/Source/SPBundleEditorController.h
@@ -24,7 +24,7 @@
#import <Cocoa/Cocoa.h>
#import <ShortcutRecorder/ShortcutRecorder.h>
-#import "SPEditSheetTextView.h"
+#import "SPBundleCommandTextView.h"
@class SRRecorderControl;
diff --git a/Source/SPBundleEditorController.m b/Source/SPBundleEditorController.m
index 378d3b5e..829cff3e 100644
--- a/Source/SPBundleEditorController.m
+++ b/Source/SPBundleEditorController.m
@@ -85,8 +85,6 @@
- (void)awakeFromNib
{
- [commandTextView setDelegate:self];
-
// Init all needed menus
inputEditorScopePopUpMenu = [[NSMenu alloc] initWithTitle:@""];
inputInputFieldScopePopUpMenu = [[NSMenu alloc] initWithTitle:@""];
@@ -613,7 +611,7 @@
if([scopes length]) [scopes appendString:@" "];
[scopes appendString:SPBundleScopeInputField];
}
- if([bundle objectForKey:SPBundleScopeDataTable] && [[bundle objectForKey:SPBundleScopeInputField] intValue]) {
+ if([bundle objectForKey:SPBundleScopeDataTable] && [[bundle objectForKey:SPBundleScopeDataTable] intValue]) {
if([scopes length]) [scopes appendString:@" "];
[scopes appendString:SPBundleScopeDataTable];
}
diff --git a/Source/SPEditSheetTextView.h b/Source/SPEditSheetTextView.h
index 63d06210..752e7911 100644
--- a/Source/SPEditSheetTextView.h
+++ b/Source/SPEditSheetTextView.h
@@ -1,5 +1,5 @@
//
-// $Id: SPTextViewAdditions.m 866 2009-06-15 16:05:54Z bibiko $
+// $Id$
//
// SPEditSheetTextView.h
// sequel-pro
diff --git a/Source/SPEditSheetTextView.m b/Source/SPEditSheetTextView.m
index bd0c5a88..a333a850 100644
--- a/Source/SPEditSheetTextView.m
+++ b/Source/SPEditSheetTextView.m
@@ -1,5 +1,5 @@
//
-// $Id: SPTextViewAdditions.m 866 2009-06-15 16:05:54Z bibiko $
+// $Id$
//
// SPEditSheetTextView.m
// sequel-pro
@@ -28,6 +28,15 @@
@implementation SPEditSheetTextView
+- (id)init
+{
+ if(self = [super init])
+ {
+ ;
+ }
+ return self;
+}
+
- (IBAction)undo:(id)sender
{
textWasChanged = NO;
@@ -340,8 +349,6 @@
{
if([[[[self delegate] class] description] isEqualToString:@"SPFieldEditorController"])
[[NSUserDefaults standardUserDefaults] setObject:[NSArchiver archivedDataWithRootObject:[self font]] forKey:@"FieldEditorSheetFont"];
- else if([[[[self delegate] class] description] isEqualToString:@"SPBundleEditorController"])
- [[NSUserDefaults standardUserDefaults] setObject:[NSArchiver archivedDataWithRootObject:[self font]] forKey:@"BundleEditorFont"];
}
// Action receiver for a font change in the font panel
diff --git a/sequel-pro.xcodeproj/project.pbxproj b/sequel-pro.xcodeproj/project.pbxproj
index 99c91a8b..d03f394d 100644
--- a/sequel-pro.xcodeproj/project.pbxproj
+++ b/sequel-pro.xcodeproj/project.pbxproj
@@ -382,6 +382,7 @@
BC0E14A1120AAC2E00E52E25 /* libbz2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 179ECEC611F265EE009C6A40 /* libbz2.dylib */; };
BC0E14A4120AAC5000E52E25 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 583CE52C11725642008F148E /* libz.dylib */; };
BC1847EA0FE6EC8400094BFB /* SPEditSheetTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC1847E90FE6EC8400094BFB /* SPEditSheetTextView.m */; };
+ BC1944D01297291800A236CD /* SPBundleCommandTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC1944CF1297291800A236CD /* SPBundleCommandTextView.m */; };
BC1E55C4100DC92200AAE9F0 /* table-view-small-square.tiff in Resources */ = {isa = PBXBuildFile; fileRef = BC1E55C3100DC92200AAE9F0 /* table-view-small-square.tiff */; };
BC2777A011514B940034DF6A /* SPNavigatorController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC27779F11514B940034DF6A /* SPNavigatorController.m */; };
BC2898F3125F4488001B50E1 /* SPGeometryDataView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC2898F2125F4488001B50E1 /* SPGeometryDataView.m */; };
@@ -1094,6 +1095,8 @@
BC05F1C4101241DF008A97F8 /* YRKSpinningProgressIndicator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YRKSpinningProgressIndicator.m; sourceTree = "<group>"; };
BC1847E80FE6EC8400094BFB /* SPEditSheetTextView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPEditSheetTextView.h; sourceTree = "<group>"; };
BC1847E90FE6EC8400094BFB /* SPEditSheetTextView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPEditSheetTextView.m; sourceTree = "<group>"; };
+ BC1944CE1297291800A236CD /* SPBundleCommandTextView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPBundleCommandTextView.h; sourceTree = "<group>"; };
+ BC1944CF1297291800A236CD /* SPBundleCommandTextView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPBundleCommandTextView.m; sourceTree = "<group>"; };
BC1E55C3100DC92200AAE9F0 /* table-view-small-square.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "table-view-small-square.tiff"; sourceTree = "<group>"; };
BC27779E11514B940034DF6A /* SPNavigatorController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPNavigatorController.h; sourceTree = "<group>"; };
BC27779F11514B940034DF6A /* SPNavigatorController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPNavigatorController.m; sourceTree = "<group>"; };
@@ -1786,6 +1789,8 @@
17DC8829126B337900E9AAEC /* Text Views */ = {
isa = PBXGroup;
children = (
+ BC1944CE1297291800A236CD /* SPBundleCommandTextView.h */,
+ BC1944CF1297291800A236CD /* SPBundleCommandTextView.m */,
17E641800EF01FA8001BC333 /* SPTextView.h */,
17E641810EF01FA8001BC333 /* SPTextView.m */,
BC1847E80FE6EC8400094BFB /* SPEditSheetTextView.h */,
@@ -3101,6 +3106,7 @@
17D3C671128AD8160047709F /* SPSingleton.m in Sources */,
17D3C6D3128B1C900047709F /* SPFavoritesOutlineView.m in Sources */,
BC68BFC7128D4EAE004907D9 /* SPBundleEditorController.m in Sources */,
+ BC1944D01297291800A236CD /* SPBundleCommandTextView.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};