aboutsummaryrefslogtreecommitdiffstats
path: root/Source/SPQueryConsole.m
diff options
context:
space:
mode:
authorstuconnolly <stuart02@gmail.com>2009-02-28 02:03:50 +0000
committerstuconnolly <stuart02@gmail.com>2009-02-28 02:03:50 +0000
commit52784a1b02f5ff32bc8d9661d948d2ebee93f610 (patch)
treef2e8250e7204613805e742cdce609f8c10106d82 /Source/SPQueryConsole.m
parent2ca51225df3ee5badc4029761db3f32a68bfb140 (diff)
downloadsequelpro-52784a1b02f5ff32bc8d9661d948d2ebee93f610.tar.gz
sequelpro-52784a1b02f5ff32bc8d9661d948d2ebee93f610.tar.bz2
sequelpro-52784a1b02f5ff32bc8d9661d948d2ebee93f610.zip
+ Separate the console from being drawer based to its own panel. New console panel also adds the ability to save the current console content to a file on disk. Speed up the updating of the text view by removing the re-draw of the view after each message is appended. The console is still very basic, but is a starting point for more functionality to be added now that it is all handled in a single class.
+ Add the ability to specify the encoding when creating a new database. Addresses issue #125. Also improve the usability of the create database sheet by only enabling the 'Add' button if the database name length is greater than zero. This elimates the check that is done and the error panel that is displayed if the name is empty.
Diffstat (limited to 'Source/SPQueryConsole.m')
-rw-r--r--Source/SPQueryConsole.m135
1 files changed, 135 insertions, 0 deletions
diff --git a/Source/SPQueryConsole.m b/Source/SPQueryConsole.m
new file mode 100644
index 00000000..34391119
--- /dev/null
+++ b/Source/SPQueryConsole.m
@@ -0,0 +1,135 @@
+//
+// SPQueryConsole.m
+// sequel-pro
+//
+// Created by Stuart Connolly (stuconnolly.com) on Jan 30, 2009
+//
+// 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 "SPQueryConsole.h"
+
+#define DEFAULT_CONSOLE_LOG_FILENAME @"untitled"
+#define DEFAULT_CONSOLE_LOG_FILE_EXTENSION @"log"
+
+@interface SPQueryConsole (PrivateAPI)
+
+- (void)_appendMessageToConsole:(NSString *)message withColor:(NSColor *)color;
+
+@end
+
+@implementation SPQueryConsole
+
+// -------------------------------------------------------------------------------
+// clearConsole:
+//
+// Clears the console by setting its displayed text to an empty string.
+// -------------------------------------------------------------------------------
+- (IBAction)clearConsole:(id)sender
+{
+ [consoleTextView setString:@""];
+}
+
+// -------------------------------------------------------------------------------
+// saveConsoleAs:
+//
+// Presents the user with a save panel to the save the current console to a log file.
+// -------------------------------------------------------------------------------
+- (IBAction)saveConsoleAs:(id)sender
+{
+ NSSavePanel *panel = [NSSavePanel savePanel];
+
+ [panel setRequiredFileType:DEFAULT_CONSOLE_LOG_FILE_EXTENSION];
+
+ [panel setExtensionHidden:NO];
+ [panel setAllowsOtherFileTypes:YES];
+ [panel setCanSelectHiddenExtension:YES];
+
+ [panel beginSheetForDirectory:nil file:DEFAULT_CONSOLE_LOG_FILENAME modalForWindow:[self window] modalDelegate:self didEndSelector:@selector(savePanelDidEnd:returnCode:contextInfo:) contextInfo:NULL];
+}
+
+// -------------------------------------------------------------------------------
+// showMessageInConsole:
+//
+// Shows the supplied message in the console.
+// -------------------------------------------------------------------------------
+- (void)showMessageInConsole:(NSString *)message
+{
+ [self _appendMessageToConsole:message withColor:[NSColor blackColor]];
+}
+
+// -------------------------------------------------------------------------------
+// showErrorInConsole:
+//
+// Shows the supplied error in the console.
+// -------------------------------------------------------------------------------
+- (void)showErrorInConsole:(NSString *)error
+{
+ [self _appendMessageToConsole:error withColor:[NSColor redColor]];
+}
+
+// -------------------------------------------------------------------------------
+// consoleTextView
+//
+// Return a reference to the console's text view.
+// -------------------------------------------------------------------------------
+- (NSTextView *)consoleTextView
+{
+ return consoleTextView;
+}
+
+// -------------------------------------------------------------------------------
+// savePanelDidEnd:returnCode:contextInfo:
+//
+// Called when the NSSavePanel sheet ends.
+// -------------------------------------------------------------------------------
+- (void)savePanelDidEnd:(NSSavePanel *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo
+{
+ if (returnCode == NSOKButton) {
+ [[[consoleTextView textStorage] string] writeToFile:[sheet filename] atomically:YES encoding:NSUTF8StringEncoding error:NULL];
+ }
+}
+
+@end
+
+@implementation SPQueryConsole (PrivateAPI)
+
+// -------------------------------------------------------------------------------
+// _appendMessageToConsole:withColor:
+//
+// Appeds the supplied string to the query console, coloring the text using the
+// supplied color.
+// -------------------------------------------------------------------------------
+- (void)_appendMessageToConsole:(NSString *)message withColor:(NSColor *)color
+{
+ int begin, end;
+
+ // Set the selected range of the text view to be the very last character
+ [consoleTextView setSelectedRange:NSMakeRange([[consoleTextView string] length], 0)];
+ begin = [[consoleTextView string] length];
+
+ // Apped the message to the current text storage using the text view's current typing attributes
+ [[consoleTextView textStorage] appendAttributedString:[[NSAttributedString alloc] initWithString:message attributes:[consoleTextView typingAttributes]]];
+ end = [[consoleTextView string] length];
+
+ // Color the text we just added
+ [consoleTextView setTextColor:color range:NSMakeRange(begin, (end - begin))];
+
+ // Scroll to the text we just added
+ [consoleTextView scrollRangeToVisible:[consoleTextView selectedRange]];
+}
+
+@end