//
// $Id$
//
// SPCustomQuery.h
// sequel-pro
//
// Created by lorenz textor (lorenz@textor.ch) on Wed May 01 2002.
// Copyright (c) 2002-2003 Lorenz Textor. All rights reserved.
//
// 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
#import
#import
#import "SPCopyTable.h"
#import "SPTextView.h"
#import "RegexKitLite.h"
#define SP_HELP_TOC_SEARCH_STRING @"contents"
#define SP_HELP_SEARCH_IN_MYSQL 0
#define SP_HELP_SEARCH_IN_PAGE 1
#define SP_HELP_SEARCH_IN_WEB 2
#define SP_HELP_GOBACK_BUTTON 0
#define SP_HELP_SHOW_TOC_BUTTON 1
#define SP_HELP_GOFORWARD_BUTTON 2
#define SP_HELP_NOT_AVAILABLE @"__no_help_available"
#define SP_SAVE_ALL_FAVORTITE_MENUITEM_TAG 100001
#define SP_SAVE_SELECTION_FAVORTITE_MENUITEM_TAG 100000
#define SP_FAVORITE_HEADER_MENUITEM_TAG 200000
#define SP_HISTORY_COPY_MENUITEM_TAG 300000
#define SP_HISTORY_SAVE_MENUITEM_TAG 300001
#define SP_HISTORY_CLEAR_MENUITEM_TAG 300002
#ifndef SP_REFACTOR
@class SPCopyTable, SPQueryFavoriteManager, SPDataStorage, BWSplitView, SPFieldEditorController;
#else
@class SPCopyTable, SPQueryFavoriteManager, SPDataStorage, NSSplitView, SPFieldEditorController;
#endif
#ifndef SP_REFACTOR
@interface SPCustomQuery : NSObject
#else
@interface SPCustomQuery : NSObject
#endif
{
IBOutlet id tableDocumentInstance;
IBOutlet id tablesListInstance;
IBOutlet id queryFavoritesButton;
IBOutlet NSMenuItem *queryFavoritesSearchMenuItem;
IBOutlet NSMenuItem *queryFavoritesSaveAsMenuItem;
IBOutlet NSMenuItem *queryFavoritesSaveAllMenuItem;
IBOutlet id queryFavoritesSearchFieldView;
IBOutlet NSSearchField *queryFavoritesSearchField;
IBOutlet NSWindow *queryFavoritesSheet;
IBOutlet NSButton *saveQueryFavoriteButton;
IBOutlet NSTextField *queryFavoriteNameTextField;
IBOutlet NSButton *saveQueryFavoriteGlobal;
IBOutlet id queryHistoryButton;
IBOutlet NSMenuItem *queryHistorySearchMenuItem;
IBOutlet id queryHistorySearchFieldView;
IBOutlet NSSearchField *queryHistorySearchField;
IBOutlet NSMenuItem *clearHistoryMenuItem;
IBOutlet NSMenuItem *saveHistoryMenuItem;
IBOutlet NSMenuItem *copyHistoryMenuItem;
IBOutlet NSPopUpButton *encodingPopUp;
IBOutlet SPTextView *textView;
IBOutlet SPCopyTable *customQueryView;
IBOutlet NSScrollView *customQueryScrollView;
IBOutlet id errorText;
IBOutlet NSScrollView *errorTextScrollView;
IBOutlet id affectedRowsText;
IBOutlet id valueSheet;
IBOutlet id valueTextField;
IBOutlet id runSelectionButton;
IBOutlet id runAllButton;
IBOutlet id multipleLineEditingButton;
IBOutlet NSMenuItem *runSelectionMenuItem;
IBOutlet NSMenuItem *runAllMenuItem;
IBOutlet NSMenuItem *shiftLeftMenuItem;
IBOutlet NSMenuItem *shiftRightMenuItem;
IBOutlet NSMenuItem *completionListMenuItem;
IBOutlet NSMenuItem *editorFontMenuItem;
IBOutlet NSMenuItem *autoindentMenuItem;
IBOutlet NSMenuItem *autopairMenuItem;
IBOutlet NSMenuItem *autohelpMenuItem;
IBOutlet NSMenuItem *autouppercaseKeywordsMenuItem;
IBOutlet NSMenuItem *commentCurrentQueryMenuItem;
IBOutlet NSMenuItem *commentLineOrSelectionMenuItem;
IBOutlet NSMenuItem *previousHistoryMenuItem;
IBOutlet NSMenuItem *nextHistoryMenuItem;
#ifndef SP_REFACTOR
IBOutlet NSWindow *helpWebViewWindow;
IBOutlet WebView *helpWebView;
IBOutlet NSSearchField *helpSearchField;
IBOutlet NSSearchFieldCell *helpSearchFieldCell;
IBOutlet NSSegmentedControl *helpNavigator;
IBOutlet NSSegmentedControl *helpTargetSelector;
#endif
IBOutlet NSButton *queryInfoButton;
#ifndef SP_REFACTOR
IBOutlet BWSplitView *queryInfoPaneSplitView;
#else
IBOutlet NSSplitView *queryInfoPaneSplitView;
#endif
SPFieldEditorController *fieldEditor;
SPQueryFavoriteManager *favoritesManager;
#ifndef SP_REFACTOR /* ivars */
NSUserDefaults *prefs;
#endif
MCPConnection *mySQLConnection;
NSString *usedQuery;
NSRange currentQueryRange;
NSArray *currentQueryRanges;
NSRange oldThreadedQueryRange;
BOOL selectionButtonCanBeEnabled;
NSString *mySQLversion;
NSTableColumn *sortColumn;
NSUInteger queryStartPosition;
#ifndef SP_REFACTOR
NSUInteger helpTarget;
WebHistory *helpHistory;
NSString *helpHTMLTemplate;
#endif
SPDataStorage *resultData;
pthread_mutex_t resultDataLock;
NSInteger resultDataCount;
NSArray *cqColumnDefinition;
NSString *lastExecutedQuery;
NSInteger editedRow;
NSRect editedScrollViewRect;
BOOL isWorking;
BOOL tableRowsSelectable;
BOOL reloadingExistingResult;
BOOL queryIsTableSorter;
BOOL isDesc;
BOOL isFieldEditable;
BOOL textViewWasChanged;
NSNumber *sortField;
NSIndexSet *selectionIndexToRestore;
NSRect selectionViewportToRestore;
NSString *fieldIDQueryString;
NSUInteger numberOfQueries;
NSUInteger queryTextViewStartPosition;
NSUInteger queryInfoPanePaddingHeight;
NSInteger currentHistoryOffsetIndex;
BOOL historyItemWasJustInserted;
NSTimer *queryLoadTimer;
NSUInteger queryLoadInterfaceUpdateInterval, queryLoadTimerTicksSinceLastUpdate, queryLoadLastRowCount;
NSInteger runAllContinueStopSheetReturnCode;
NSString *kCellEditorErrorNoMatch;
NSString *kCellEditorErrorNoMultiTabDb;
NSString *kCellEditorErrorTooManyMatches;
}
@property(assign) BOOL textViewWasChanged;
// IBAction methods
- (IBAction)runAllQueries:(id)sender;
- (void) runAllQueriesCallback;
- (IBAction)runSelectedQueries:(id)sender;
- (IBAction)chooseQueryFavorite:(id)sender;
- (IBAction)chooseQueryHistory:(id)sender;
- (IBAction)closeSheet:(id)sender;
- (IBAction)gearMenuItemSelected:(id)sender;
#ifndef SP_REFACTOR
- (IBAction)showHelpForCurrentWord:(id)sender;
- (IBAction)showHelpForSearchString:(id)sender;
- (IBAction)helpSegmentDispatcher:(id)sender;
- (IBAction)helpTargetDispatcher:(id)sender;
- (IBAction)helpSearchFindNextInPage:(id)sender;
- (IBAction)helpSearchFindPreviousInPage:(id)sender;
- (IBAction)helpSelectHelpTargetMySQL:(id)sender;
- (IBAction)helpSelectHelpTargetPage:(id)sender;
- (IBAction)helpSelectHelpTargetWeb:(id)sender;
#endif
- (IBAction)filterQueryFavorites:(id)sender;
- (IBAction)filterQueryHistory:(id)sender;
- (IBAction)saveQueryHistory:(id)sender;
- (IBAction)copyQueryHistory:(id)sender;
- (IBAction)clearQueryHistory:(id)sender;
- (IBAction)showCompletionList:(id)sender;
- (IBAction)toggleQueryInfoPaneCollapse:(id)sender;
// Query actions
- (void)performQueries:(NSArray *)queries withCallback:(SEL)customQueryCallbackMethod;
- (void)performQueriesTask:(NSDictionary *)taskArguments;
- (NSString *)queryAtPosition:(NSUInteger)position lookBehind:(BOOL *)doLookBehind;
- (NSRange)queryRangeAtPosition:(NSUInteger)position lookBehind:(BOOL *)doLookBehind;
- (NSRange)queryTextRangeForQuery:(NSInteger)anIndex startPosition:(NSUInteger)position;
- (void) updateStatusInterfaceWithDetails:(NSDictionary *)errorDetails;
// Query load actions
- (void) initQueryLoadTimer;
- (void) clearQueryLoadTimer;
- (void) queryLoadUpdate:(NSTimer *)theTimer;
// Accessors
- (NSArray *)currentResult;
- (void)processResultIntoDataStorage:(MCPStreamingResult *)theResult;
// Retrieving and setting table state
- (void) updateTableView;
- (NSIndexSet *) resultSelectedRowIndexes;
- (NSRect) resultViewport;
- (NSArray *)dataColumnDefinitions;
- (void) setResultSelectedRowIndexesToRestore:(NSIndexSet *)theIndexSet;
- (void) setResultViewportToRestore:(NSRect)theViewport;
- (void) storeCurrentResultViewForRestoration;
- (void) clearResultViewDetailsToRestore;
- (void) autosizeColumns;
#ifndef SP_REFACTOR
// MySQL Help
- (void)showAutoHelpForCurrentWord:(id)sender;
- (NSString *)getHTMLformattedMySQLHelpFor:(NSString *)searchString calledByAutoHelp:(BOOL)autoHelp;
- (void)showHelpFor:(NSString *)aString addToHistory:(BOOL)addToHistory calledByAutoHelp:(BOOL)autoHelp;
- (void)helpTargetValidation;
- (void)openMySQLonlineDocumentationWithString:(NSString *)searchString;
- (NSWindow *)helpWebViewWindow;
#endif
- (void)setMySQLversion:(NSString *)theVersion;
// Task interaction
- (void) startDocumentTaskForTab:(NSNotification *)aNotification;
- (void) endDocumentTaskForTab:(NSNotification *)aNotification;
// Tableview interaction
- (void)tableSortCallback;
// Other
- (void)setConnection:(MCPConnection *)theConnection;
- (void)doPerformQueryService:(NSString *)query;
- (void)doPerformLoadQueryService:(NSString *)query;
- (void)selectCurrentQuery;
- (void)commentOut;
- (void)commentOutCurrentQueryTakingSelection:(BOOL)takeSelection;
- (NSString *)usedQuery;
- (NSString *)argumentForRow:(NSUInteger)rowIndex ofTable:(NSString *)tableForColumn andDatabase:(NSString *)database includeBlobs:(BOOL)includeBlobs;
- (NSArray*)fieldEditStatusForRow:(NSInteger)rowIndex andColumn:(NSNumber *)columnIndex;
- (NSUInteger)numberOfQueries;
- (NSRange)currentQueryRange;
- (NSString *)buildHistoryString;
- (void)addHistoryEntry:(NSString *)entryString;
- (void)savePanelDidEnd:(NSSavePanel *)panel returnCode:(NSInteger)returnCode contextInfo:(id)contextInfo;
- (void)historyItemsHaveBeenUpdated:(id)manager;
- (void)processFieldEditorResult:(id)data contextInfo:(NSDictionary*)contextInfo;
@end