Convert the myriad of redundant menuitems and buttons on the main controlbar + important toolbars in the tabsheets to use TActions. This moves

a) some hundred lines of code from childwin.pas to main.pas
b) redundant hints/captions/shortcuts/events for similar buttons/menuitems to their corresponding TAction in main.dfm .

This change
a) avoids several inconsistent captions like described in issue #595
b) makes it easier to have toolbars on the mainform which are controlled by childform.
This commit is contained in:
Ansgar Becker
2008-07-01 18:59:07 +00:00
parent d571ce83b9
commit 5b0bb48d0a
10 changed files with 1100 additions and 1142 deletions

View File

@ -1579,9 +1579,8 @@ object AboutBox: TAboutBox
Top = 36
Width = 122
Height = 22
Caption = 'Check for updates ...'
Action = MainForm.actUpdateCheck
TabOrder = 2
OnClick = btnUpdateCheckClick
end
end
object ButtonBoard: TButton

View File

@ -31,7 +31,6 @@ type
MemoAuthors: TMemo;
ImageDonate: TImage;
btnUpdateCheck: TButton;
procedure btnUpdateCheckClick(Sender: TObject);
procedure OpenURL(Sender: TObject);
procedure MouseOver(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure FormShow(Sender: TObject);
@ -67,11 +66,6 @@ begin
end;
procedure TAboutBox.btnUpdateCheckClick(Sender: TObject);
begin
Mainform.menuUpdateCheckClick(Sender);
end;
procedure TAboutBox.OpenURL(Sender: TObject);
begin
ShellExec( TControl(Sender).Hint );

View File

@ -711,7 +711,7 @@ object MDIChild: TMDIChild
TreeOptions.SelectionOptions = [toFullRowSelect, toMultiSelect, toRightClickSelect]
OnBeforePaint = vstBeforePaint
OnCompareNodes = vstCompareNodes
OnDblClick = UpdateField
OnDblClick = ListColumnsDblClick
OnFreeNode = vstFreeNode
OnGetText = vstGetText
OnGetImageIndex = vstGetImageIndex
@ -934,72 +934,49 @@ object MDIChild: TMDIChild
object btnQueryRun: TToolButton
Left = 0
Top = 0
Action = MainForm.ExecuteQuery
Action = MainForm.actExecuteQuery
end
object btnQueryRunSelected: TToolButton
Left = 23
Top = 0
Action = MainForm.ExecuteSelection
Action = MainForm.actExecuteSelection
end
object btnQueryLoad: TToolButton
Left = 46
Top = 0
Hint = 'Load SQL from Textfile'
Caption = 'Load SQL...'
Action = MainForm.actLoadSQL
DropdownMenu = popupQueryLoad
ImageIndex = 52
Style = tbsDropDown
OnClick = btnQueryLoadClick
end
object btnQuerySave: TToolButton
Left = 82
Top = 0
Hint = 'Save SQL to Textfile'
Caption = 'Save SQL...'
Enabled = False
ImageIndex = 10
OnClick = btnQuerySaveClick
Action = MainForm.actSaveSQL
end
object btnQuerySaveSnippet: TToolButton
Left = 105
Top = 0
Hint = 'Save SQL as snippet...'
Caption = 'btnQuerySaveSnippet'
ImageIndex = 54
OnClick = btnQuerySaveSnippetClick
Action = MainForm.actSaveSQLSnippet
end
object btnQueryFind: TToolButton
Left = 128
Top = 0
Hint = 'Find Text...'
Caption = 'Find...'
ImageIndex = 30
OnClick = btnQueryFindClick
Action = MainForm.actQueryFind
end
object btnQueryReplace: TToolButton
Left = 151
Top = 0
Hint = 'Search and replace...'
Caption = 'Replace ...'
ImageIndex = 59
OnClick = btnQueryReplaceClick
Action = MainForm.actQueryReplace
end
object btnQueryStopOnErrors: TToolButton
Left = 174
Top = 0
Hint = 'Stop on MySQL-errors in batch-mode'
Caption = 'btnQueryStopOnErrors'
Down = True
ImageIndex = 63
OnClick = btnQueryStopOnErrorsClick
Action = MainForm.actQueryStopOnErrors
end
object btnQueryWordWrap: TToolButton
Left = 197
Top = 0
Hint = 'Wrap long lines'
Caption = 'Wrap long lines'
ImageIndex = 62
OnClick = btnQueryWordWrapClick
Action = MainForm.actQueryWordWrap
end
end
end
@ -1332,7 +1309,7 @@ object MDIChild: TMDIChild
object btnBlobViewAsHtml: TToolButton
Left = 0
Top = 88
Action = MainForm.HTMLview
Action = MainForm.actHTMLview
Wrap = True
end
object btnBlobCopy: TToolButton
@ -1546,20 +1523,13 @@ object MDIChild: TMDIChild
Left = 8
Top = 16
object NewDatabase1: TMenuItem
Caption = 'Create database...'
ImageIndex = 6
OnClick = CreateDatabase
Action = MainForm.actCreateDatabase
end
object menuAlterdatabase: TMenuItem
Caption = 'Alter database ...'
Enabled = False
ImageIndex = 8
OnClick = menuAlterdatabaseClick
Action = MainForm.actEditDatabase
end
object PopupmenuDropDatabase: TMenuItem
Caption = 'Drop database...'
ImageIndex = 7
OnClick = DropDB
Action = MainForm.actDropDatabase
end
object N17: TMenuItem
Caption = '-'
@ -1568,7 +1538,7 @@ object MDIChild: TMDIChild
Action = MainForm.actCreateTable
end
object menuTreeAlterTable: TMenuItem
Action = MainForm.actAlterTable
Action = MainForm.actEditTableProperties
end
object menuTreeCreateView: TMenuItem
Action = MainForm.actCreateView
@ -1608,11 +1578,11 @@ object MDIChild: TMDIChild
Left = 72
Top = 16
object menuproperties: TMenuItem
Action = MainForm.actTableProperties
Action = MainForm.actEditTableFields
Default = True
end
object menuAlterTable: TMenuItem
Action = MainForm.actAlterTable
Action = MainForm.actEditTableProperties
end
object actView1: TMenuItem
Action = MainForm.actEditView
@ -1757,24 +1727,14 @@ object MDIChild: TMDIChild
Left = 104
Top = 16
object MenuEditField: TMenuItem
Caption = 'Properties'
Action = MainForm.actEditField
Default = True
ImageIndex = 44
ShortCut = 32781
OnClick = UpdateField
end
object MenuAddField: TMenuItem
Caption = 'Add Field...'
ImageIndex = 45
ShortCut = 16449
OnClick = MenuAddFieldClick
Action = MainForm.actCreateField
end
object DropField1: TMenuItem
Caption = 'Drop Field(s)...'
Hint = 'Delete Field(s) from Table'
ImageIndex = 46
ShortCut = 16430
OnClick = DropField
Action = MainForm.actDropFields
end
object menuRenameColumn: TMenuItem
Caption = 'Rename Field'
@ -1786,9 +1746,7 @@ object MDIChild: TMDIChild
Caption = '-'
end
object ManageIndexes1: TMenuItem
Caption = '&Manage Indexes...'
ImageIndex = 13
OnClick = ManageIndexes1Click
Action = MainForm.actEditIndexes
end
object N3: TMenuItem
Caption = '-'
@ -1815,10 +1773,10 @@ object MDIChild: TMDIChild
Left = 8
Top = 48
object Copy3: TMenuItem
Action = MainForm.EditCopy1
Action = MainForm.actCopy
end
object Paste2: TMenuItem
Action = MainForm.EditPaste1
Action = MainForm.actPaste
end
object setNULL1: TMenuItem
Caption = 'Set NULL'
@ -1829,10 +1787,7 @@ object MDIChild: TMDIChild
Caption = '-'
end
object Delete1: TMenuItem
Caption = 'Delete record(s)'
ImageIndex = 26
ShortCut = 16430
OnClick = Delete1Click
Action = MainForm.actDataSetDelete
end
object N6: TMenuItem
Caption = '-'
@ -1950,7 +1905,7 @@ object MDIChild: TMDIChild
OnClick = Filter1Click
end
object Find1: TMenuItem
Action = MainForm.DataSearch
Action = MainForm.actDataSearch
end
object N9: TMenuItem
Caption = '-'
@ -1960,18 +1915,18 @@ object MDIChild: TMDIChild
Caption = 'Copy data'
object CopyasCSVData1: TMenuItem
Tag = 48
Action = MainForm.Copy2CSV
Action = MainForm.actCopyAsCSV
end
object CopycontentsasHTML1: TMenuItem
Tag = 49
Action = MainForm.CopyHTMLtable
Action = MainForm.actCopyAsHTML
end
object CopyasXMLdata1: TMenuItem
Action = MainForm.Copy2XML
Action = MainForm.actCopyAsXML
end
end
object Exportdata2: TMenuItem
Action = MainForm.ExportData
Action = MainForm.actExportData
end
object N12: TMenuItem
Caption = '-'
@ -2011,7 +1966,7 @@ object MDIChild: TMDIChild
end
end
object ViewasHTML1: TMenuItem
Action = MainForm.HTMLview
Action = MainForm.actHTMLview
end
object InsertfilesintoBLOBfields3: TMenuItem
Action = MainForm.actInsertFiles
@ -2020,10 +1975,7 @@ object MDIChild: TMDIChild
Caption = '-'
end
object menuSQLhelpData: TMenuItem
Caption = 'Lookup field datatype in SQL help ...'
ImageIndex = 31
ShortCut = 112
OnClick = menuSQLhelpClick
Action = MainForm.actSQLhelp
end
object Refresh3: TMenuItem
Tag = 28
@ -2039,27 +1991,27 @@ object MDIChild: TMDIChild
Left = 40
Top = 48
object Copy4: TMenuItem
Action = MainForm.EditCopy1
Action = MainForm.actCopy
end
object HTMLview1: TMenuItem
Action = MainForm.HTMLview
Action = MainForm.actHTMLview
end
object N14: TMenuItem
Caption = '-'
end
object Copyrecords1: TMenuItem
Tag = 48
Action = MainForm.Copy2CSV
Action = MainForm.actCopyAsCSV
end
object CopycontentsasHTML2: TMenuItem
Tag = 49
Action = MainForm.CopyHTMLtable
Action = MainForm.actCopyAsHTML
end
object CopyasXMLdata2: TMenuItem
Action = MainForm.Copy2XML
Action = MainForm.actCopyAsXML
end
object Exportdata1: TMenuItem
Action = MainForm.ExportData
Action = MainForm.actExportData
end
end
object TimerConnected: TTimer
@ -2073,7 +2025,7 @@ object MDIChild: TMDIChild
Left = 72
Top = 48
object Copy1: TMenuItem
Action = MainForm.EditCopy1
Action = MainForm.actCopy
end
object Clear2: TMenuItem
Caption = 'Clear'
@ -2224,113 +2176,70 @@ object MDIChild: TMDIChild
Left = 104
Top = 120
end
object FindDialogQuery: TFindDialog
OnFind = FindDialogQueryFind
Left = 8
Top = 224
end
object SynEditSearch1: TSynEditSearch
Left = 72
Top = 192
end
object ReplaceDialogQuery: TReplaceDialog
OnFind = ReplaceDialogQueryFind
OnReplace = ReplaceDialogQueryReplace
Left = 40
Top = 224
end
object popupQuery: TPopupMenu
Images = MainForm.PngImageListMain
OnPopup = popupQueryPopup
Left = 40
Top = 80
object MenuRun: TMenuItem
Action = MainForm.ExecuteQuery
Action = MainForm.actExecuteQuery
end
object MenuRunSelection: TMenuItem
Action = MainForm.ExecuteSelection
Action = MainForm.actExecuteSelection
end
object MenuRunLine: TMenuItem
Action = MainForm.ExecuteLine
Action = MainForm.actExecuteLine
end
object MenuItem1: TMenuItem
Caption = '-'
end
object menucopy: TMenuItem
Action = MainForm.EditCopy1
Action = MainForm.actCopy
end
object menupaste: TMenuItem
Action = MainForm.EditPaste1
Action = MainForm.actPaste
end
object menuclear: TMenuItem
Caption = 'Clear'
ImageIndex = 58
ShortCut = 16471
OnClick = menuclearClick
Action = MainForm.actClearQueryEditor
end
object N22: TMenuItem
Caption = '-'
end
object MenuFind: TMenuItem
Caption = 'Find...'
ImageIndex = 30
ShortCut = 16454
OnClick = btnQueryFindClick
Action = MainForm.actQueryFind
end
object MenuReplace: TMenuItem
Caption = 'Replace ...'
Hint = 'Search and replace...'
ImageIndex = 59
ShortCut = 16466
OnClick = btnQueryReplaceClick
Action = MainForm.actQueryReplace
end
object MenuItem2: TMenuItem
Caption = '-'
end
object menuload: TMenuItem
Caption = 'Load from file ...'
ImageIndex = 52
ShortCut = 16463
OnClick = btnQueryLoadClick
end
object menuInsertFileAtCursor: TMenuItem
Caption = 'Insert file at cursor ...'
ImageIndex = 52
ShortCut = 24655
OnClick = menuInsertFileAtCursorClick
Action = MainForm.actLoadSQL
end
object menusave: TMenuItem
Caption = 'Save to file ...'
ImageIndex = 10
ShortCut = 16467
OnClick = btnQuerySaveClick
Action = MainForm.actSaveSQL
end
object menuSaveSelectionToFile: TMenuItem
Tag = 1
Caption = 'Save selection to file ...'
ImageIndex = 10
ShortCut = 24659
OnClick = btnQuerySaveClick
Action = MainForm.actSaveSQLselection
end
object menuSaveAsSnippet: TMenuItem
Caption = 'Save as snippet ...'
ImageIndex = 54
OnClick = btnQuerySaveSnippetClick
Action = MainForm.actSaveSQLSnippet
end
object menuSaveSelectionAsSnippet: TMenuItem
Tag = 1
Caption = 'Save selection as snippet ...'
ImageIndex = 54
OnClick = btnQuerySaveSnippetClick
Action = MainForm.actSaveSQLSelectionSnippet
end
object N23: TMenuItem
Caption = '-'
end
object menuSQLhelp: TMenuItem
Caption = 'Lookup in SQL help ...'
ImageIndex = 31
ShortCut = 112
OnClick = menuSQLhelpClick
Action = MainForm.actSQLhelp
end
object N24: TMenuItem
Caption = '-'
@ -2367,10 +2276,7 @@ object MDIChild: TMDIChild
OnClick = menuExploreClick
end
object menuHelp: TMenuItem
Caption = 'Help'
ImageIndex = 31
ShortCut = 112
OnClick = CallSQLHelp
Action = MainForm.actSQLhelp
end
end
object popupFilter: TPopupMenu
@ -2388,24 +2294,19 @@ object MDIChild: TMDIChild
Caption = '-'
end
object menuFilterCopy: TMenuItem
Action = MainForm.EditCopy1
Action = MainForm.actCopy
end
object menuFilterPaste: TMenuItem
Action = MainForm.EditPaste1
Action = MainForm.actPaste
end
object menuFilterClear: TMenuItem
Caption = 'Clear'
ImageIndex = 58
ShortCut = 16471
OnClick = menuclearClick
Action = MainForm.actClearFilterEditor
end
object N8: TMenuItem
Caption = '-'
end
object menuFilterSQLhelp: TMenuItem
Caption = 'Lookup in SQL help'
ImageIndex = 31
OnClick = menuSQLhelpClick
Action = MainForm.actSQLhelp
end
object N25: TMenuItem
Caption = '-'

View File

@ -221,9 +221,7 @@ type
OpenDialogSQLFile: TOpenDialog;
SaveDialogSQLFile: TSaveDialog;
btnQuerySaveSnippet: TToolButton;
FindDialogQuery: TFindDialog;
SynEditSearch1: TSynEditSearch;
ReplaceDialogQuery: TReplaceDialog;
N16: TMenuItem;
ManageIndexes1: TMenuItem;
tabCommandStats: TTabSheet;
@ -259,7 +257,6 @@ type
menuRenameColumn: TMenuItem;
N22: TMenuItem;
N23: TMenuItem;
menuInsertFileAtCursor: TMenuItem;
menuSaveSelectionToFile: TMenuItem;
menuSaveAsSnippet: TMenuItem;
menuSaveSelectionAsSnippet: TMenuItem;
@ -315,7 +312,6 @@ type
procedure menuRenameColumnClick(Sender: TObject);
procedure ListColumnsNewText(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; NewText: WideString);
procedure menuclearClick(Sender: TObject);
procedure popupQueryPopup(Sender: TObject);
procedure lboxQueryHelpersClick(Sender: TObject);
procedure lboxQueryHelpersDblClick(Sender: TObject);
@ -330,15 +326,7 @@ type
procedure gridMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure controlsKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure CallSQLHelp(Sender: TObject);
procedure CallSQLHelpWithKeyword(keyword: String);
procedure ManageIndexes1Click(Sender: TObject);
procedure ZQueryGridAfterPost(DataSet: TDataSet);
procedure btnQueryReplaceClick(Sender: TObject);
procedure ReplaceDialogQueryReplace(Sender: TObject);
procedure ReplaceDialogQueryFind(Sender: TObject);
procedure FindDialogQueryFind(Sender: TObject);
procedure btnQuerySaveSnippetClick(Sender: TObject);
procedure SynCompletionProposal1AfterCodeCompletion(Sender: TObject;
const Value: WideString; Shift: TShiftState; Index: Integer; EndToken: WideChar);
procedure SynCompletionProposal1CodeCompletion(Sender: TObject;
@ -361,21 +349,17 @@ type
procedure viewdata(Sender: TObject);
procedure RefreshFieldListClick(Sender: TObject);
procedure MenuRefreshClick(Sender: TObject);
procedure DropDB(Sender: TObject);
procedure LogSQL(msg: WideString = ''; comment: Boolean = true );
procedure ShowVariablesAndProcesses(Sender: TObject);
procedure CreateDatabase(Sender: TObject);
procedure KillProcess(Sender: TObject);
procedure PageControlHostChange(Sender: TObject);
procedure ExecSQLClick(Sender: TObject; Selection: Boolean = false;
CurrentLine: Boolean=false);
procedure DropField(Sender: TObject);
procedure SynMemoQueryChange(Sender: TObject);
procedure TimerHostUptimeTimer(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure FormDeactivate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure UpdateField(Sender: TObject);
procedure ListTablesNewText(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; NewText: WideString);
procedure MenuRenameTableClick(Sender: TObject);
@ -388,7 +372,6 @@ type
procedure TimerConnectErrorCloseWindowTimer(Sender: TObject);
procedure gridDataTitleClick(Column: TColumn);
procedure Filter1Click(Sender: TObject);
procedure Delete1Click(Sender: TObject);
procedure QuickFilterClick(Sender: TObject);
procedure btnBlobWordWrapClick(Sender: TObject);
procedure pageCtlEditorsChange(Sender: TObject);
@ -420,13 +403,9 @@ type
procedure popupHostPopup(Sender: TObject);
procedure Saveastextfile1Click(Sender: TObject);
procedure popupTreeViewPopup(Sender: TObject);
procedure btnQueryFindClick(Sender: TObject);
procedure btnQuerySaveClick(Sender: TObject);
procedure btnQueryLoadClick(Sender: TObject);
procedure btnFilterPreviousClick(Sender: TObject);
procedure btnFilterNextClick(Sender: TObject);
procedure ComboBoxWhereFiltersChange(Sender: TObject);
procedure btnQueryStopOnErrorsClick(Sender: TObject);
procedure DBGridDblClick(Sender: TObject);
procedure SaveDialogExportDataTypeChange(Sender: TObject);
procedure GridDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol:
@ -435,7 +414,6 @@ type
procedure InsertDate(Sender: TObject);
procedure btnBlobCopyClick(Sender: TObject);
procedure setNULL1Click(Sender: TObject);
procedure MenuAddFieldClick(Sender: TObject);
procedure ZQueryGridBeforeClose(DataSet: TDataSet);
function GetNamedVar( SQLQuery: WideString; x: String;
HandleErrors: Boolean = false; DisplayErrors: Boolean = false ) : String;
@ -459,7 +437,6 @@ type
procedure QueryLoad( filename: String; ReplaceContent: Boolean = true );
procedure AddOrRemoveFromQueryLoadHistory( filename: String;
AddIt: Boolean = true; CheckIfFileExists: Boolean = true );
procedure btnQueryWordWrapClick(Sender: TObject);
procedure popupQueryLoadClick( sender: TObject );
procedure FillPopupQueryLoad;
procedure PopupQueryLoadRemoveAbsentFiles( sender: TObject );
@ -469,11 +446,8 @@ type
procedure menuDeleteSnippetClick(Sender: TObject);
function GetCalculatedLimit( Table: String ): Int64;
procedure menuExploreClick(Sender: TObject);
procedure menuInsertFileAtCursorClick(Sender: TObject);
procedure menuInsertSnippetAtCursorClick(Sender: TObject);
procedure menuLoadSnippetClick(Sender: TObject);
procedure menuAlterdatabaseClick(Sender: TObject);
procedure menuSQLhelpClick(Sender: TObject);
procedure RunAsyncPost(ds: TDeferDataSet);
procedure vstGetNodeDataSize(Sender: TBaseVirtualTree; var
NodeDataSize: Integer);
@ -522,6 +496,7 @@ type
TRect);
procedure ListProcessesChange(Sender: TBaseVirtualTree; Node: PVirtualNode);
procedure editFilterVTChange(Sender: TObject);
procedure ListColumnsDblClick(Sender: TObject);
procedure ListTablesEdited(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex);
procedure ListVariablesDblClick(Sender: TObject);
@ -540,7 +515,7 @@ type
viewingdata : Boolean;
WhereFilters : TStringList;
WhereFiltersIndex : Integer;
StopOnErrors, WordWrap : Boolean;
WordWrap : Boolean;
FMysqlConn : TMysqlConn;
FConn : TOpenConnProf;
QueryRunningInterlock : Integer;
@ -549,7 +524,6 @@ type
UserQueryFiring : Boolean;
CachedTableLists : TStringList;
QueryHelpersSelectedItems : Array[0..3] of Array of Integer;
CreateDatabaseForm : TCreateDatabaseForm;
EditVariableForm : TfrmEditVariable;
FileNameSessionLog : String;
FileHandleSessionLog : Textfile;
@ -606,6 +580,7 @@ type
prefCSVTerminator : String[10];
prefLogToFile,
prefPreferShowTables : Boolean;
CreateDatabaseForm : TCreateDatabaseForm;
CreateTableForm : TCreateTableForm;
TablePropertiesForm : Ttbl_properties_form;
@ -1025,9 +1000,6 @@ begin
ComboBoxQueryDelimiter.ItemIndex := Mainform.GetRegValue( REGNAME_DELIMITERSELECTED, 0 );
end;
// Synchronize internal variables with defaults from DFM.
StopOnErrors := btnQueryStopOnErrors.Down;
// Restore width of columns of all VirtualTrees
RestoreListSetup(ListVariables);
RestoreListSetup(ListStatus);
@ -1635,10 +1607,9 @@ begin
Mainform.actDatasetInsert.Enabled := inDataTab;
Mainform.actDatasetDelete.Enabled := inDataTab;
Mainform.actDatasetPost.Enabled := inDataTab;
Mainform.ExecuteQuery.Enabled := PageControlMain.ActivePage = tabQuery;
Mainform.ExecuteSelection.Enabled := PageControlMain.ActivePage = tabQuery;
Mainform.ExecuteLine.Enabled := PageControlMain.ActivePage = tabQuery;
Mainform.actExecuteQuery.Enabled := PageControlMain.ActivePage = tabQuery;
Mainform.actExecuteSelection.Enabled := PageControlMain.ActivePage = tabQuery;
Mainform.actExecuteLine.Enabled := PageControlMain.ActivePage = tabQuery;
if (PageControlMain.ActivePage = tabData) and (not dataselected) then
viewdata(Sender);
if PageControlMain.ActivePage = tabQuery then
@ -1788,7 +1759,6 @@ var
begin
// DB-Properties
Screen.Cursor := crHourGlass;
Mainform.ButtonDropDatabase.Hint := 'Drop Database...|Drop Database ' + db + '...';
// Remember selected nodes
SelectedCaptions := GetVTCaptions(ListTables, True);
@ -2166,90 +2136,85 @@ begin
ViewSelected := NodeData.NodeType = NODETYPE_VIEW;
end;
Mainform.actTableProperties.Enabled := NodeSelected;
Mainform.actEditTableFields.Enabled := NodeSelected;
Mainform.actEmptyTables.Enabled := tableSelected;
Mainform.actAlterTable.Enabled := tableSelected;
Mainform.actEditTableProperties.Enabled := tableSelected;
MenuRenameTable.Enabled := NodeSelected;
Mainform.actCopyTable.Enabled := NodeSelected;
Mainform.actEditView.Enabled := ViewSelected and (mysql_version >= 50001);
Mainform.actCreateView.Enabled := FrmIsFocussed and (mysql_version >= 50001);
MainForm.ButtonDropDatabase.Enabled := (ActiveDatabase <> '') and FrmIsFocussed;
MainForm.actCreateDatabase.Enabled := FrmIsFocussed;
MainForm.actDropDatabase.Enabled := (ActiveDatabase <> '') and FrmIsFocussed;
MainForm.actEditDatabase.Enabled := (ActiveDatabase <> '') and FrmIsFocussed and (mysql_version >= 50002);
if mysql_version < 50002 then
MainForm.actEditDatabase.Hint := STR_NOTSUPPORTED
else
MainForm.actEditDatabase.Hint := 'Rename and/or modify character set of database';
MainForm.actDropTablesAndViews.Enabled := NodeSelected or ((PageControlMain.ActivePage <> tabDatabase) and (SelectedTable <> '') and FrmIsFocussed);
MainForm.actCreateTable.Enabled := (ActiveDatabase <> '') and FrmIsFocussed;
MainForm.ButtonImportTextFile.Enabled := (mysql_version >= 32206) and FrmIsFocussed;
MainForm.MenuImportTextFile.Enabled := MainForm.ButtonImportTextFile.Enabled;
MainForm.actImportCSV.Enabled := (mysql_version >= 32206) and FrmIsFocussed;
MainForm.actExportTables.Enabled := FrmIsFocussed;
MainForm.actRefresh.Enabled := FrmIsFocussed;
MainForm.actLoadSQL.Enabled := FrmIsFocussed;
MainForm.actFlushHosts.Enabled := FrmIsFocussed;
MainForm.actFlushLogs.Enabled := FrmIsFocussed;
MainForm.actFlushPrivileges.Enabled := FrmIsFocussed;
MainForm.actFlushTables.Enabled := FrmIsFocussed;
MainForm.actFlushTableswithreadlock.Enabled := FrmIsFocussed;
MainForm.actFlushStatus.Enabled := FrmIsFocussed;
MainForm.actUserManager.Enabled := FrmIsFocussed;
MainForm.actMaintenance.Enabled := FrmIsFocussed;
MainForm.actInsertFiles.Enabled := FrmIsFocussed;
{***
Activate export-options if we're on Data- or Query-tab
PrintList should only be active if we're focussing one of the ListViews,
at least as long we are not able to print DBGrids
@see Issue 1686582
}
inDataOrQueryTab := FrmIsFocussed and ((PageControlMain.ActivePage = tabData) or (PageControlMain.ActivePage = tabQuery));
MainForm.actPrintList.Enabled := (not inDataOrQueryTab) and FrmIsFocussed;
// Both the Query and the Data grid may have a nil DataSet reference,
// either in case the relevant grid has not been used yet, or when
// an error has occurred.
inDataOrQueryTabNotEmpty := inDataOrQueryTab and
not (
(getActiveGrid.DataSource.DataSet = nil)
or getActiveGrid.DataSource.DataSet.IsEmpty
);
MainForm.actCopyAsCSV.Enabled := inDataOrQueryTabNotEmpty;
MainForm.actCopyAsHTML.Enabled := inDataOrQueryTabNotEmpty;
MainForm.actCopyAsXML.Enabled := inDataOrQueryTabNotEmpty;
MainForm.actExportData.Enabled := inDataOrQueryTabNotEmpty;
MainForm.actHTMLView.Enabled := inDataOrQueryTabNotEmpty;
Delete1.Enabled := inDataOrQueryTabNotEmpty; // Menuitem in popupDataGrid ("Delete record(s)")
// Hide irrelevant toolbars
ShowDbTlb := PageControlMain.ActivePage = tabDatabase;
if not ShowDbTlb then MainForm.ToolBarDatabase.Visible := False;
ShowTableTlb := PageControlMain.ActivePage = tabTable;
if not ShowTableTlb then MainForm.ToolBarTable.Visible := False;
ShowDataTlb := (PageControlMain.ActivePage = tabData) or (PageControlMain.ActivePage = tabTable);
if not ShowDataTlb then MainForm.ToolBarData.Visible := False;
// Unhide relevant toolbar
MainForm.ToolBarDatabase.Visible := ShowDbTlb;
MainForm.ToolBarTable.Visible := ShowTableTlb;
MainForm.ToolBarData.Visible := ShowDataTlb;
with MainForm do
begin
ButtonRefresh.Enabled := FrmIsFocussed;
actExportTables.Enabled := FrmIsFocussed;
ButtonCreateDatabase.Enabled := FrmIsFocussed;
MenuRefresh.Enabled := FrmIsFocussed;
MenuCreateDatabase.Enabled := FrmIsFocussed;
MenuDropDatabase.Enabled := FrmIsFocussed;
LoadSQL.Enabled := FrmIsFocussed;
MenuFlushHosts.Enabled := FrmIsFocussed;
MenuFlushLogs.Enabled := FrmIsFocussed;
FlushUserPrivileges1.Enabled := FrmIsFocussed;
MenuFlushTables.Enabled := FrmIsFocussed;
MenuFlushTableswithreadlock.Enabled := FrmIsFocussed;
MenuFlushStatus.Enabled := FrmIsFocussed;
UserManager.Enabled := FrmIsFocussed;
actMaintenance.Enabled := FrmIsFocussed;
actInsertFiles.Enabled := FrmIsFocussed;
{***
Activate export-options if we're on Data- or Query-tab
PrintList should only be active if we're focussing one of the ListViews,
at least as long we are not able to print DBGrids
@see Issue 1686582
}
inDataOrQueryTab := FrmIsFocussed and ((PageControlMain.ActivePage = tabData) or (PageControlMain.ActivePage = tabQuery));
actPrintList.Enabled := (not inDataOrQueryTab) and FrmIsFocussed;
// Both the Query and the Data grid may have a nil DataSet reference,
// either in case the relevant grid has not been used yet, or when
// an error has occurred.
inDataOrQueryTabNotEmpty := inDataOrQueryTab and
not (
(getActiveGrid.DataSource.DataSet = nil)
or getActiveGrid.DataSource.DataSet.IsEmpty
);
Copy2CSV.Enabled := inDataOrQueryTabNotEmpty;
CopyHTMLtable.Enabled := inDataOrQueryTabNotEmpty;
Copy2XML.Enabled := inDataOrQueryTabNotEmpty;
ExportData.Enabled := inDataOrQueryTabNotEmpty;
HTMLView.Enabled := inDataOrQueryTabNotEmpty;
Self.Delete1.Enabled := inDataOrQueryTabNotEmpty; // Menuitem in popupDataGrid ("Delete record(s)")
// Hide irrelevant toolbars
ShowDbTlb := PageControlMain.ActivePage = tabDatabase;
if not ShowDbTlb then ToolBarDatabase.Visible := False;
ShowTableTlb := PageControlMain.ActivePage = tabTable;
if not ShowTableTlb then ToolBarTable.Visible := False;
ShowDataTlb := (PageControlMain.ActivePage = tabData) or (PageControlMain.ActivePage = tabTable);
if not ShowDataTlb then ToolBarData.Visible := False;
// Unhide relevant toolbar
ToolBarDatabase.Visible := ShowDbTlb;
ToolBarTable.Visible := ShowTableTlb;
ToolBarData.Visible := ShowDataTlb;
if FrmIsFocussed then begin
actDatasetFirst.DataSource := DataSource1;
actDatasetLast.DataSource := DataSource1;
actDatasetInsert.DataSource := DataSource1;
actDatasetDelete.DataSource := DataSource1;
actDatasetPost.DataSource := DataSource1;
end;
btnSQLHelp.Enabled := (mysql_version >= 40100) and FrmIsFocussed;
menuSQLHelp.Enabled := btnSQLHelp.Enabled and FrmIsFocussed;
if not FrmIsFocussed then begin
// Empty "connected" and "uptime"
MainForm.showstatus('', 1);
MainForm.showstatus('', 2);
MainForm.showstatus('', 3);
end;
tabEditors.tabVisible := inDataOrQueryTab;
if FrmIsFocussed then begin
MainForm.actDatasetFirst.DataSource := DataSource1;
MainForm.actDatasetLast.DataSource := DataSource1;
MainForm.actDatasetInsert.DataSource := DataSource1;
MainForm.actDatasetDelete.DataSource := DataSource1;
MainForm.actDatasetPost.DataSource := DataSource1;
end;
MainForm.actSQLhelp.Enabled := (mysql_version >= 40100) and FrmIsFocussed;
if not FrmIsFocussed then begin
// Empty "connected" and "uptime"
MainForm.showstatus('', 1);
MainForm.showstatus('', 2);
MainForm.showstatus('', 3);
end;
tabEditors.tabVisible := inDataOrQueryTab;
end;
@ -2262,48 +2227,6 @@ begin
end;
procedure TMDIChild.DropDB(Sender: TObject);
var
tndb_ : PVirtualNode;
db: String;
begin
// Drop DB.
case DBtree.GetNodeLevel(DBtree.GetFirstSelected) of
1: tndb_ := DBtree.GetFirstSelected;
2: tndb_ := DBtree.GetFirstSelected.Parent;
else Exit;
end;
if not Assigned(tndb_) then raise Exception.Create('Internal error: Cannot drop NIL database.');
db := Databases[tndb_.Index];
if MessageDlg('Drop Database "'+db+'"?' + crlf + crlf + 'WARNING: You will lose all tables in database '+db+'!', mtConfirmation, [mbok,mbcancel], 0) <> mrok then
abort;
Screen.Cursor := crSQLWait;
try
ExecUpdateQuery( 'DROP DATABASE ' + mask(db) );
if DatabasesWanted.IndexOf(db) > -1 then begin
DatabasesWanted.Delete( DatabasesWanted.IndexOf(db) );
with TRegistry.Create do begin
if OpenKey(REGPATH + REGKEY_SESSIONS + FConn.Description, false) then begin
WriteString( 'OnlyDBs', ImplodeStr( ';', DatabasesWanted ) );
CloseKey;
end;
Free;
end;
end;
DBtree.Selected[DBtree.GetFirst] := true;
RefreshTree(False);
except
MessageDLG('Dropping failed.'+crlf+'Maybe '''+db+''' is not a valid database-name.', mtError, [mbOK], 0)
end;
Screen.Cursor := crDefault;
end;
procedure TMDIChild.ShowVariablesAndProcesses(Sender: TObject);
procedure addLVitem( caption: String; commandCount: Int64; totalCount: Int64 );
@ -2583,8 +2506,8 @@ begin
ds := nil;
try
MainForm.showstatus( 'Initializing SQL...' );
Mainform.ExecuteQuery.Enabled := false;
Mainform.ExecuteSelection.Enabled := false;
Mainform.actExecuteQuery.Enabled := false;
Mainform.actExecuteSelection.Enabled := false;
// Let EnsureActiveDatabase know that we've fired user queries.
UserQueryFiring := true;
@ -2632,16 +2555,12 @@ begin
except
on E:Exception do
begin
if (
( btnQueryStopOnErrors.Down ) or
( i = (SQL.Count - 1) )
) then
begin
if Mainform.actQueryStopOnErrors.Checked or (i = SQL.Count - 1) then begin
Screen.Cursor := crDefault;
MessageDlg( E.Message, mtError, [mbOK], 0 );
ProgressBarQuery.Hide();
Mainform.ExecuteQuery.Enabled := true;
Mainform.ExecuteSelection.Enabled := true;
Mainform.actExecuteQuery.Enabled := true;
Mainform.actExecuteSelection.Enabled := true;
Break;
end;
end;
@ -2662,8 +2581,8 @@ begin
end;
ProgressBarQuery.Hide();
Mainform.ExecuteQuery.Enabled := true;
Mainform.ExecuteSelection.Enabled := true;
Mainform.actExecuteQuery.Enabled := true;
Mainform.actExecuteSelection.Enabled := true;
// count chars:
SynMemoQuery.OnChange( Self );
@ -2722,52 +2641,9 @@ begin
SomeSelected := Length(Sender.GetSortedSelection(False))>0;
// Toggle state of menuitems and buttons
Mainform.btnTableDropField.Enabled := SomeSelected;
DropField1.Enabled := SomeSelected;
MenuEditField.Enabled := OneFocused and SomeSelected;
Mainform.btnTableEditField.enabled := OneFocused and SomeSelected;
Mainform.actDropFields.Enabled := SomeSelected;
Mainform.actEditField.enabled := OneFocused and SomeSelected;
menuRenameColumn.Enabled := OneFocused and SomeSelected;
menuEditField.Enabled := OneFocused and SomeSelected;
end;
procedure TMDIChild.DropField(Sender: TObject);
var
i : Integer;
dropCmd : String;
dropList : TStringList;
begin
// Drop Columns
// We allow the user to select and delete multiple listItems
dropList := GetVTCaptions( ListColumns, True );
// User confirmation
if MessageDlg('Drop ' + IntToStr(dropList.Count) + ' field(s): ' + ImplodeStr( ', ', dropList ) + ' ?', mtConfirmation, [mbok,mbcancel], 0) = mrok then
try
// Concat fields for ALTER query
for i := 0 to dropList.Count - 1 do
dropCmd := dropCmd + 'DROP ' + mask(dropList[i]) + ', ';
// Remove trailing comma
delete(dropCmd, Length(dropCmd)-1, 2);
// Execute field dropping
ExecUpdateQuery( 'ALTER TABLE '+mask(SelectedTable)+' ' + dropCmd );
// Rely on the server respective ExecUpdateQuery has raised an exception so the
// following code will be skipped on any error
ListColumns.BeginUpdate;
ListColumns.DeleteSelectedNodes;
ListColumns.EndUpdate;
// Set focus on first item
ListColumns.FocusedNode := ListColumns.GetFirstVisible;
except
On E : Exception do
begin
MessageDlg( E.Message, mtError, [mbOK], 0 );
end;
end;
end;
@ -2957,12 +2833,16 @@ procedure TMDIChild.SynMemoQueryChange(Sender: TObject);
var somechars : Boolean;
begin
PanelCharsInQueryWindow.Caption := FormatByteNumber( SynMemoQuery.GetTextLen );
somechars := Length(SynMemoQuery.Text) > 0;
Mainform.ExecuteQuery.Enabled := somechars;
Mainform.ExecuteSelection.Enabled := SynMemoQuery.SelAvail;
Mainform.ExecuteLine.Enabled := SynMemoQuery.LineText <> '';
btnQuerySave.Enabled := somechars;
btnQuerySaveSnippet.Enabled := somechars;
somechars := SynMemoQuery.GetTextLen > 0;
Mainform.actExecuteQuery.Enabled := somechars;
Mainform.actExecuteSelection.Enabled := SynMemoQuery.SelAvail;
Mainform.actExecuteLine.Enabled := SynMemoQuery.LineText <> '';
Mainform.actSaveSQL.Enabled := somechars;
// Inserting file at cursor only makes sense with content
Mainform.actSaveSQLselection.Enabled := SynMemoQuery.SelAvail;
Mainform.actSaveSQLSnippet.Enabled := somechars;
Mainform.actSaveSQLSelectionSnippet.Enabled := SynMemoQuery.SelAvail;
Mainform.actClearQueryEditor.Enabled := somechars;
end;
@ -3021,65 +2901,6 @@ begin
end;
{ Edit field }
procedure TMDIChild.UpdateField(Sender: TObject);
var
fn : String;
fem : TFieldEditorMode;
begin
fn := '';
fem := femFieldAdd;
if Assigned(ListColumns.FocusedNode) and (vsSelected in ListColumns.FocusedNode.States) then
fn := ListColumns.Text[ListColumns.FocusedNode, 0];
if fn<>'' then
fem := femFieldUpdate;
FieldEditorWindow (Self,fem,fn);
end;
{ Add new field }
procedure TMDIChild.MenuAddFieldClick(Sender: TObject);
begin
FieldEditorWindow (Self,femFieldAdd);
end;
procedure TMDIChild.CreateDatabase(Sender: TObject);
var
newdb: String;
begin
// Create database:
// Create modal form once on demand
if CreateDatabaseForm = nil then
CreateDatabaseForm := TCreateDatabaseForm.Create(Self);
// Rely on the modalresult being set correctly
if CreateDatabaseForm.ShowModal = mrOK then
begin
newdb := CreateDatabaseForm.editDBName.Text;
// Add DB to OnlyDBs-regkey if this is not empty
if DatabasesWanted.Count > 0 then
begin
DatabasesWanted.Add( newdb );
with TRegistry.Create do
begin
if OpenKey(REGPATH + REGKEY_SESSIONS + FConn.Description, false) then
begin
WriteString( 'OnlyDBs', ImplodeStr( ';', DatabasesWanted ) );
CloseKey;
end;
Free;
end;
end;
// reload db nodes and switch to new one
RefreshTree(False, newdb);
end;
end;
{***
Rename table after checking the new name for invalid characters
}
@ -3163,11 +2984,6 @@ begin
end;
procedure TMDIChild.ManageIndexes1Click(Sender: TObject);
begin
FieldEditorWindow (Self,femIndexEditor);
end;
procedure TMDIChild.Markall3Click(Sender: TObject);
begin
// select all in history
@ -3175,28 +2991,9 @@ begin
end;
{**
Clear Query memo
}
procedure TMDIChild.menuclearClick(Sender: TObject);
var
memo : TSynMemo;
begin
// Clear SynMemo
if SynMemoFilter.Focused then
memo := SynMemoFilter
else
memo := SynMemoQuery;
// Make sure to add this step to SynMemo's undo history
memo.SelectAll;
memo.SelText := '';
memo.SelStart := 0;
memo.SelEnd := 0;
end;
procedure TMDIChild.ListTablesDblClick(Sender: TObject);
begin
Mainform.actTableProperties.Execute;
Mainform.actEditTableFields.Execute;
end;
@ -3224,7 +3021,6 @@ begin
end;
procedure TMDIChild.Filter1Click(Sender: TObject);
begin
// Set WHERE-Filter
@ -3233,105 +3029,6 @@ begin
end;
// open Find-Dialog
procedure TMDIChild.btnQueryFindClick(Sender: TObject);
begin
FindDialogQuery.execute;
// if something is selected search for that text
if SynMemoQuery.SelAvail and (SynMemoQuery.BlockBegin.Line = SynMemoQuery.BlockEnd.Line)
then
FindDialogQuery.FindText := SynMemoQuery.SelText
else
FindDialogQuery.FindText := SynMemoQuery.GetWordAtRowCol(SynMemoQuery.CaretXY);
end;
// open Replace-Dialog
procedure TMDIChild.btnQueryReplaceClick(Sender: TObject);
begin
ReplaceDialogQuery.execute;
// if something is selected search for that text
if SynMemoQuery.SelAvail and (SynMemoQuery.BlockBegin.Line = SynMemoQuery.BlockEnd.Line)
then
ReplaceDialogQuery.FindText := SynMemoQuery.SelText
else
ReplaceDialogQuery.FindText := SynMemoQuery.GetWordAtRowCol(SynMemoQuery.CaretXY);
end;
// Search-Dialog is searching...
procedure TMDIChild.FindDialogQueryFind(Sender: TObject);
var
Options: TSynSearchOptions;
Search: String;
begin
Search := FindDialogQuery.FindText;
Options := [];
if Sender is TReplaceDialog then
Include(Options, ssoEntireScope);
if not (frDown in FindDialogQuery.Options) then
Include(Options, ssoBackwards);
if frMatchCase in FindDialogQuery.Options then
Include(Options, ssoMatchCase);
if frWholeWord in FindDialogQuery.Options then
Include(Options, ssoWholeWord);
if SynMemoQuery.SearchReplace(Search, '', Options) = 0 then
begin
MessageBeep(MB_ICONASTERISK);
Mainform.ShowStatus( 'SearchText ''' + Search + ''' not found!', 0);
end;
end;
{ Find Text for replace-dialog }
procedure TMDIChild.ReplaceDialogQueryFind(Sender: TObject);
begin
FindDialogQuery.FindText := ReplaceDialogQuery.FindText;
FindDialogQueryFind( ReplaceDialogQuery );
end;
{ Replace Text with replace-dialog }
procedure TMDIChild.ReplaceDialogQueryReplace(Sender: TObject);
var
Options: TSynSearchOptions;
Search: String;
begin
Search := ReplaceDialogQuery.FindText;
Options := [ssoEntireScope]; // Do replaces always on entire scope, because the standard-dialog lacks of a down/up-option
if frReplaceAll in ReplaceDialogQuery.Options then
Include( Options, ssoReplaceAll );
if not (frDown in ReplaceDialogQuery.Options) then
Include(Options, ssoBackwards);
if frMatchCase in ReplaceDialogQuery.Options then
Include(Options, ssoMatchCase);
if frWholeWord in ReplaceDialogQuery.Options then
Include(Options, ssoWholeWord);
if frReplace in ReplaceDialogQuery.Options then // Replace instead of ReplaceAll is pressed
Include(Options, ssoReplace)
else
Include(Options, ssoReplaceAll);
if SynMemoQuery.SearchReplace( Search, ReplaceDialogQuery.ReplaceText, Options) = 0 then
begin
MessageBeep(MB_ICONASTERISK);
Mainform.ShowStatus( 'SearchText ''' + Search + ''' not found!', 0);
if ssoBackwards in Options then
SynMemoQuery.BlockEnd := SynMemoQuery.BlockBegin
else
SynMemoQuery.BlockBegin := SynMemoQuery.BlockEnd;
SynMemoQuery.CaretXY := SynMemoQuery.BlockBegin;
end;
end;
procedure TMDIChild.Delete1Click(Sender: TObject);
begin
// Delete record(s)
if gridData.SelectedRows.Count = 0 then begin
if MessageDLG('Delete 1 Record(s)?', mtConfirmation, [mbOK, mbCancel], 0) = mrOK then
GetVisualDataSet().Delete(); // unsafe ...
end else
if MessageDLG('Delete '+IntToStr(gridData.SelectedRows.count)+' Record(s)?', mtConfirmation, [mbOK, mbCancel], 0) = mrOK then
gridData.SelectedRows.Delete;
end;
procedure TMDIChild.QuickFilterClick(Sender: TObject);
var
filter,value,column : String;
@ -3682,22 +3379,9 @@ begin
end;
procedure TMDIChild.popupQueryPopup(Sender: TObject);
var
somechars : Boolean;
begin
// Sets cursor into memo and activates TAction(s) like paste
SynMemoQuery.SetFocus;
somechars := SynMemoQuery.GetTextLen > 0;
// Inserting file at cursor only makes sense with content
MenuInsertFileAtCursor.Enabled := somechars;
Menusave.Enabled := somechars;
MenuSaveSelectionToFile.Enabled := SynMemoQuery.SelAvail;
MenuSaveAsSnippet.Enabled := somechars;
MenuSaveSelectionAsSnippet.Enabled := SynMemoQuery.SelAvail;
MenuClear.Enabled := somechars;
menuSQLHelp.Enabled := (mysql_version >= 40100) and (SynMemoQuery.WordAtCursor <> '');
// Insert keyword into menuitem, so it's very clear what the menuitem does
menuSQLHelp.Caption := 'Lookup "'+sstr(SynMemoQuery.WordAtCursor,50)+'" in SQL help ...';
end;
procedure TMDIChild.popupResultGridPopup(Sender: TObject);
@ -3743,7 +3427,7 @@ var
begin
// Check for F1-pressed
if Key = VK_F1 then
CallSQLHelp( self )
Mainform.actSQLhelp.Execute
// Simulate Ctrl+A-behaviour of common editors
else if ( Shift = [ssCtrl] ) and ( Key = Ord('A') ) then
@ -3938,133 +3622,14 @@ begin
L := 0
else
L := DBtree.GetNodeLevel(DBtree.GetFirstSelected);
PopupMenuDropDatabase.Enabled := L = 1;
Mainform.actCreateTable.Enabled := L in [1,2];
Mainform.actCreateView.Enabled := (L in [1,2]) and (mysql_version >= 50001);
menuAlterDatabase.Enabled := (L = 1) and (mysql_version >= 50002);
if mysql_version < 50002 then
menuAlterDatabase.Hint := STR_NOTSUPPORTED
else
menuAlterDatabase.Hint := 'Rename and/or modify character set of database';
Mainform.actAlterTable.Enabled := (L = 2) and (GetSelectedNodeType = NODETYPE_TABLE);
Mainform.actEditTableProperties.Enabled := (L = 2) and (GetSelectedNodeType = NODETYPE_TABLE);
Mainform.actEditView.Enabled := (L = 2) and (GetSelectedNodeType = NODETYPE_VIEW);
MainForm.actDropTablesAndViews.Enabled := (L = 2);
end;
procedure TMDIChild.btnQuerySaveSnippetClick(Sender: TObject);
var
snippetname : String;
mayChange : Boolean;
begin
// Save snippet
if InputQuery( 'Save snippet', 'Snippet name:', snippetname) then
begin
if Copy( snippetname, Length(snippetname)-4, 4 ) <> '.sql' then
snippetname := snippetname + '.sql';
// cleanup snippetname from special characters
snippetname := DIRNAME_SNIPPETS + goodfilename(snippetname);
if FileExists( snippetname ) then
begin
if MessageDlg( 'Overwrite existing snippet '+snippetname+'?', mtConfirmation, [mbOK, mbCancel], 0 ) <> mrOK then
exit;
end;
Screen.Cursor := crHourglass;
// Save complete content or just the selected text,
// depending on the tag of calling control
case (Sender as TComponent).Tag of
0: SaveUnicodeFile(snippetname, SynMemoQuery.Text);
1: SaveUnicodeFile(snippetname, SynMemoQuery.SelText);
end;
FillPopupQueryLoad;
if tabsetQueryHelpers.TabIndex = 3 then begin
// SQL Snippets selected in query helper, refresh list
mayChange := True; // Unused; satisfies callee parameter collection which is probably dictated by tabset.
tabsetQueryHelpersChange(Sender, 3, mayChange);
end;
Screen.Cursor := crDefault;
end;
end;
procedure TMDIChild.CallSQLHelp(Sender: TObject);
var
keyword : String;
begin
// Call SQL Help from various places
if mysql_version < 40100 then
exit;
keyword := '';
// Query-Tab
if SynMemoQuery.Focused then
keyword := SynMemoQuery.WordAtCursor
// LogSQL-Tab
else if SynMemoSQLLog.Focused then
keyword := SynMemoSQLLog.WordAtCursor
// Filter-Tab
else if SynMemoFilter.Focused then
keyword := SynMemoFilter.WordAtCursor
// Data-Tab
else if (PageControlMain.ActivePage = tabData)
and (-1 < gridData.SelectedField.Index)
and (gridData.SelectedField.Index <= Length(VTRowDataListColumns)) then
begin
keyword := VTRowDataListColumns[gridData.SelectedField.Index].Captions[1];
end
// Table-Tab
else if ListColumns.Focused and Assigned(ListColumns.FocusedNode) then
begin
keyword := ListColumns.Text[ListColumns.FocusedNode, 1];
end
else if lboxQueryHelpers.Focused then
begin
// Makes only sense if one of the tabs "SQL fn" or "SQL kw" was selected
if tabsetQueryHelpers.TabIndex in [1,2] then
begin
keyword := lboxQueryHelpers.Items[lboxQueryHelpers.ItemIndex];
end;
end;
// Clean existing paranthesis, fx: char(64)
if Pos( '(', keyword ) > 0 then
begin
keyword := Copy( keyword, 1, Pos( '(', keyword )-1 );
end;
// Show the window
CallSQLHelpWithKeyword( keyword );
end;
{***
Show SQL Help window directly using a keyword
@param String SQL-keyword
@see FieldeditForm.btnDatatypeHelp
}
procedure TMDIChild.CallSQLHelpWithKeyword( keyword: String );
begin
// Set help-keyword and show window
SQLhelpWindow(self, keyword);
end;
procedure TMDIChild.btnQuerySaveClick(Sender: TObject);
begin
// Save SQL
if SaveDialogSQLFile.Execute then
begin
Screen.Cursor := crHourGlass;
// Save complete content or just the selected text,
// depending on the tag of calling control
case (Sender as TComponent).Tag of
0: SaveUnicodeFile( SaveDialogSQLFile.FileName, SynMemoQuery.Text );
1: SaveUnicodeFile( SaveDialogSQLFile.FileName, SynMemoQuery.SelText );
end;
Screen.Cursor := crDefault;
end;
end;
procedure TMDIChild.popupQueryLoadClick( sender: TObject );
var
filename : String;
@ -4086,28 +3651,6 @@ begin
end;
procedure TMDIChild.btnQueryLoadClick(Sender: TObject);
begin
// Click on the btnQueryLoad
if OpenDialogSQLfile.Execute then
begin
QueryLoad( OpenDialogSQLfile.FileName );
end;
end;
{**
Insert SQL file at cursor
}
procedure TMDIChild.menuInsertFileAtCursorClick(Sender: TObject);
begin
if OpenDialogSQLfile.Execute then
begin
QueryLoad( OpenDialogSQLfile.FileName, False );
end;
end;
procedure TMDIChild.AddOrRemoveFromQueryLoadHistory( filename: String; AddIt: Boolean = true; CheckIfFileExists: Boolean = true );
var
i : Integer;
@ -4312,12 +3855,6 @@ begin
SynMemoFilter.Text := ComboBoxWhereFilters.Items[ComboBoxWhereFilters.ItemIndex];
end;
procedure TMDIChild.btnQueryStopOnErrorsClick(Sender: TObject);
begin
StopOnErrors := not StopOnErrors;
btnQueryStopOnErrors.Down := StopOnErrors;
end;
procedure TMDIChild.btnUnsafeEditClick(Sender: TObject);
var
confirmed: Boolean;
@ -5747,28 +5284,6 @@ begin
end;
{**
Call context sensitive help from popupmenu (fx popupQuery)
}
procedure TMDIChild.menuSQLhelpClick(Sender: TObject);
begin
CallSQLHelp( Sender );
end;
{**
Modify existing database properties
}
procedure TMDIChild.menuAlterdatabaseClick(Sender: TObject);
begin
if CreateDatabaseForm = nil then
CreateDatabaseForm := TCreateDatabaseForm.Create(Self);
CreateDatabaseForm.modifyDB := ActiveDatabase;
CreateDatabaseForm.ShowModal;
end;
{***
Add a new query delimiter and select it
@param term The delimiter to add and/or select
@ -5859,7 +5374,7 @@ begin
if ( command = 'CLIENTSQL_ERROR' ) then
begin
LogSQL( parameter, True );
if ( StopOnErrors ) then
if Mainform.actQueryStopOnErrors.Checked then
raise Exception.Create( parameter );
end;
end;
@ -6047,16 +5562,13 @@ end;
}
procedure TMDIChild.popupFilterPopup(Sender: TObject);
var
somechars : Boolean;
somechars: Boolean;
begin
// Sets cursor into memo and activates TAction(s) like paste
SynMemoFilter.SetFocus;
somechars := SynMemoFilter.GetTextLen > 0;
// Inserting file at cursor only makes sense with content
MenuFilterClear.Enabled := somechars;
menuFilterSQLHelp.Enabled := (mysql_version >= 40100) and (SynMemoFilter.WordAtCursor <> '');
// Insert keyword into menuitem, so it's very clear what the menuitem does
menuFilterSQLHelp.Caption := 'Lookup "'+sstr(SynMemoFilter.WordAtCursor,50)+'" in SQL help ...';
Mainform.actClearFilterEditor.Enabled := somechars;
end;
@ -6477,16 +5989,6 @@ begin
end;
{**
Toggle wordwrap mode in query editor
}
procedure TMDIChild.btnQueryWordWrapClick(Sender: TObject);
begin
SynMemoQuery.WordWrap := not SynMemoQuery.WordWrap;
btnQueryWordWrap.Down := SynMemoQuery.WordWrap;
end;
{**
One or more files from explorer or somewhere else were dropped onto the
filter editor - load the contents of the first file
@ -6928,5 +6430,9 @@ begin
Result := CachedTableLists.IndexOf(db) > -1;
end;
procedure TMDIChild.ListColumnsDblClick(Sender: TObject);
begin
Mainform.actEditField.Execute;
end;
end.

View File

@ -1012,7 +1012,7 @@ end;
}
procedure TFieldEditForm.btnDatatypeHelpClick(Sender: TObject);
begin
Mainform.ChildWin.CallSQLHelpWithKeyword(ComboBoxType.Text);
Mainform.CallSQLHelpWithKeyword(ComboBoxType.Text);
end;

File diff suppressed because it is too large Load Diff

View File

@ -35,11 +35,11 @@ type
PasteItem: TMenuItem;
StatusBar: TStatusBar;
ActionList1: TActionList;
EditCopy1: TEditCopy;
EditPaste1: TEditPaste;
FileNew1: TAction;
FileExit1: TAction;
FileClose1: TWindowClose;
actCopy: TEditCopy;
actPaste: TEditPaste;
actOpenSession: TAction;
actExitApplication: TAction;
actCloseSession: TWindowClose;
Extra1: TMenuItem;
FlushUserPrivileges1: TMenuItem;
MenuCopyCSV: TMenuItem;
@ -51,7 +51,6 @@ type
N4: TMenuItem;
MenuDropDatabase: TMenuItem;
MenuDropTable: TMenuItem;
ResetWindowOptions1: TMenuItem;
N5: TMenuItem;
MenuImportTextFile: TMenuItem;
Flush1: TMenuItem;
@ -65,14 +64,14 @@ type
MenuPreferences: TMenuItem;
N7: TMenuItem;
menuReadme: TMenuItem;
UserManager: TAction;
ShowAboutBox: TAction;
actUserManager: TAction;
actAboutBox: TAction;
actMaintenance: TAction;
menuMaintenance: TMenuItem;
ImExport1: TMenuItem;
CopyContentsasHTMLTable1: TMenuItem;
CopyHTMLtable: TAction;
Copy2CSV: TAction;
actCopyAsHTML: TAction;
actCopyAsCSV: TAction;
menuWebsite: TMenuItem;
N9: TMenuItem;
N11: TMenuItem;
@ -102,27 +101,27 @@ type
ButtonOK: TButton;
UpDownLimitStart: TUpDown;
UpDownLimitEnd: TUpDown;
EditUndo1: TEditUndo;
actUndo: TEditUndo;
ToolButton14: TToolButton;
ExecuteQuery: TAction;
ExecuteSelection: TAction;
actExecuteQuery: TAction;
actExecuteSelection: TAction;
SaveDialog2: TSaveDialog;
ExportSettings1: TMenuItem;
Importsettings1: TMenuItem;
OpenDialog2: TOpenDialog;
menuSupportForum: TMenuItem;
Copy2XML: TAction;
ExportData: TAction;
actCopyAsXML: TAction;
actExportData: TAction;
Exportdata1: TMenuItem;
CopyasXMLdata1: TMenuItem;
ExecuteLine: TAction;
HTMLview: TAction;
actExecuteLine: TAction;
actHTMLview: TAction;
actInsertFiles: TAction;
InsertfilesintoBLOBfields1: TMenuItem;
actExportTables: TAction;
DataSearch: TAction;
actDataSearch: TAction;
actDropTablesAndViews: TAction;
LoadSQL: TAction;
actLoadSQL: TAction;
ImportSQL1: TMenuItem;
menuConnections: TPopupMenu;
miNewConnection: TMenuItem;
@ -165,70 +164,121 @@ type
btnTableManageIndexes: TToolButton;
actCreateTable: TAction;
actEmptyTables: TAction;
actTableProperties: TAction;
actAlterTable: TAction;
procedure actAlterTableExecute(Sender: TObject);
actEditTableFields: TAction;
actEditTableProperties: TAction;
actEditField: TAction;
actCreateField: TAction;
actDropFields: TAction;
actEditIndexes: TAction;
actDropDatabase: TAction;
actCreateDatabase: TAction;
actEditDatabase: TAction;
actSQLhelp: TAction;
actRefresh: TAction;
actImportCSV: TAction;
actCut: TEditCut;
actSelectAll: TEditSelectAll;
Cut1: TMenuItem;
actExportSettings: TAction;
actImportSettings: TAction;
actPreferences: TAction;
actFlushHosts: TAction;
actFlushLogs: TAction;
actFlushPrivileges: TAction;
actFlushTables: TAction;
actFlushTableswithreadlock: TAction;
actFlushStatus: TAction;
actUpdateCheck: TAction;
actWebMainsite: TAction;
actWebDownloadpage: TAction;
actWebForum: TAction;
actWebBugtracker: TAction;
actWebFeaturetracker: TAction;
actReadme: TAction;
actSaveSQL: TAction;
actSaveSQLselection: TAction;
actSaveSQLSnippet: TAction;
actSaveSQLSelectionSnippet: TAction;
actClearQueryEditor: TAction;
actClearFilterEditor: TAction;
actQueryStopOnErrors: TAction;
actQueryWordWrap: TAction;
actQueryFind: TAction;
actQueryReplace: TAction;
FindDialogQuery: TFindDialog;
ReplaceDialogQuery: TReplaceDialog;
procedure actCreateFieldExecute(Sender: TObject);
procedure actEditTablePropertiesExecute(Sender: TObject);
procedure actCreateTableExecute(Sender: TObject);
procedure actCreateViewExecute(Sender: TObject);
procedure btnSQLHelpClick(Sender: TObject);
procedure menuWindowClick(Sender: TObject);
procedure focusWindow(Sender: TObject);
procedure menuConnectionsPopup(Sender: TObject);
procedure ShowConnections(Sender: TObject);
procedure FileExit1Execute(Sender: TObject);
procedure FlushClick(Sender: TObject);
procedure actExitApplicationExecute(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure ButtonRefreshClick(Sender: TObject);
procedure ButtonCreateDatabaseClick(Sender: TObject);
procedure ButtonDropDatabaseClick(Sender: TObject);
procedure ResetWindowOptions1Click(Sender: TObject);
procedure ButtonImportTextfileClick(Sender: TObject);
procedure MenuPreferencesClick(Sender: TObject);
procedure menuReadmeClick(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure UserManagerExecute(Sender: TObject);
procedure ShowAboutBoxExecute(Sender: TObject);
procedure actUserManagerExecute(Sender: TObject);
procedure actAboutBoxExecute(Sender: TObject);
procedure actClearEditorExecute(Sender: TObject);
procedure actMaintenanceExecute(Sender: TObject);
procedure actEditViewExecute(Sender: TObject);
procedure CopyHTMLtableExecute(Sender: TObject);
procedure Copy2CSVExecute(Sender: TObject);
procedure actCopyAsHTMLExecute(Sender: TObject);
procedure actCopyAsCSVExecute(Sender: TObject);
procedure actPrintListExecute(Sender: TObject);
procedure actCopyTableExecute(Sender: TObject);
procedure showstatus(msg: string=''; panel: Integer=4);
procedure ButtonOKClick(Sender: TObject);
procedure LimitPanelEnter(Sender: TObject);
procedure LimitPanelExit(Sender: TObject);
procedure OpenURL(Sender: TObject);
function mask(str: String) : String;
procedure ExportSettings1Click(Sender: TObject);
procedure Importsettings1Click(Sender: TObject);
procedure ExecuteQueryExecute(Sender: TObject);
procedure ExecuteSelectionExecute(Sender: TObject);
procedure Copy2XMLExecute(Sender: TObject);
procedure ExportDataExecute(Sender: TObject);
procedure ExecuteLineExecute(Sender: TObject);
procedure HTMLviewExecute(Sender: TObject);
procedure actExecuteQueryExecute(Sender: TObject);
procedure actExecuteSelectionExecute(Sender: TObject);
procedure actCopyAsXMLExecute(Sender: TObject);
procedure actCreateDatabaseExecute(Sender: TObject);
procedure actExportDataExecute(Sender: TObject);
procedure actExecuteLineExecute(Sender: TObject);
procedure actHTMLviewExecute(Sender: TObject);
procedure actInsertFilesExecute(Sender: TObject);
procedure actExportTablesExecute(Sender: TObject);
procedure DataSearchExecute(Sender: TObject);
procedure actDataSearchExecute(Sender: TObject);
procedure actDataSetDeleteExecute(Sender: TObject);
procedure btnTableAddFieldClick(Sender: TObject);
procedure btnTableEditFieldClick(Sender: TObject);
procedure actDropDatabaseExecute(Sender: TObject);
procedure actDropFieldsExecute(Sender: TObject);
procedure actDropTablesAndViewsExecute(Sender: TObject);
procedure actEditDatabaseExecute(Sender: TObject);
procedure actEditIndexesExecute(Sender: TObject);
procedure actEmptyTablesExecute(Sender: TObject);
procedure actTablePropertiesExecute(Sender: TObject);
procedure LoadSQLExecute(Sender: TObject);
procedure actEditFieldExecute(Sender: TObject);
procedure actEditTableFieldsExecute(Sender: TObject);
procedure actExportSettingsExecute(Sender: TObject);
procedure actFlushExecute(Sender: TObject);
procedure actImportCSVExecute(Sender: TObject);
procedure actImportSettingsExecute(Sender: TObject);
procedure actLoadSQLExecute(Sender: TObject);
procedure actOpenSessionExecute(Sender: TObject);
procedure actPreferencesExecute(Sender: TObject);
procedure actQueryFindExecute(Sender: TObject);
procedure actQueryReplaceExecute(Sender: TObject);
procedure actQueryStopOnErrorsExecute(Sender: TObject);
procedure actQueryWordWrapExecute(Sender: TObject);
procedure actReadmeExecute(Sender: TObject);
procedure actRefreshExecute(Sender: TObject);
procedure actSaveSQLExecute(Sender: TObject);
procedure actSaveSQLSnippetExecute(Sender: TObject);
procedure actSQLhelpExecute(Sender: TObject);
procedure actUpdateCheckExecute(Sender: TObject);
procedure actWebbrowse(Sender: TObject);
procedure EnsureConnected;
function ExecuteRemoteQuery(sender: THandle; query: string): TDataSet;
procedure ExecuteRemoteNonQuery(sender: THandle; query: string);
procedure FindDialogQueryFind(Sender: TObject);
procedure HandleWMComplete(var msg: TMessage); message WM_COMPLETED;
procedure HandleWMCopyData(var msg: TWMCopyData); message WM_COPYDATA;
procedure HandleWMProcessLog(var msg: TMessage); message WM_PROCESSLOG;
procedure menuUpdateCheckClick(Sender: TObject);
procedure btnTableDropFieldClick(Sender: TObject);
procedure btnTableManageIndexesClick(Sender: TObject);
procedure ReplaceDialogQueryFind(Sender: TObject);
procedure ReplaceDialogQueryReplace(Sender: TObject);
private
regMain : TRegistry;
function GetChildwin: TMDIChild;
@ -240,6 +290,7 @@ type
UserManagerForm: TUserManagerForm;
SelectDBObjectForm: TfrmSelectDBObject;
procedure OpenRegistry(Session: String = '');
procedure CallSQLHelpWithKeyword( keyword: String );
function GetRegValue( valueName: String; defaultValue: Integer; Session: String = '' ) : Integer; Overload;
function GetRegValue( valueName: String; defaultValue: Boolean; Session: String = '' ) : Boolean; Overload;
function GetRegValue( valueName: String; defaultValue: String; Session: String = '' ) : String; Overload;
@ -295,19 +346,11 @@ uses
MysqlConn,
UpdateCheck,
fieldeditor,
createdatabase,
createtable;
{$R *.DFM}
procedure TMainForm.ShowConnections(Sender: TObject);
begin
if ActiveMDIChild = nil then
ConnectionWindow(Self)
else begin
debug('perf: new connection clicked.');
ShellExec( ExtractFileName(paramstr(0)), ExtractFilePath(paramstr(0)) );
end;
end;
procedure TMainForm.HandleWMComplete(var msg: TMessage);
begin
@ -358,22 +401,19 @@ begin
StatusBar.Repaint;
end;
procedure TMainForm.FileExit1Execute(Sender: TObject);
procedure TMainForm.actExitApplicationExecute(Sender: TObject);
begin
Close;
end;
procedure TMainForm.FlushClick(Sender: TObject);
procedure TMainForm.actFlushExecute(Sender: TObject);
var
flushwhat : String;
flushwhat: String;
begin
if sender is TMenuItem then
flushwhat := UpperCase((sender as TMenuItem).Caption)
else if sender is TToolButton then
flushwhat := 'PRIVILEGES';
flushwhat := UpperCase(TAction(Sender).Caption);
delete(flushwhat, pos('&', flushwhat), 1);
ChildWin.ExecUpdateQuery('FLUSH ' + flushwhat);
if sender = MenuFlushTableswithreadlock then begin
if Sender = actFlushTableswithreadlock then begin
MessageDlg(
'Tables have been flushed and read lock acquired.'#10 +
'Perform backup or snapshot of table data files now.'#10 +
@ -611,95 +651,61 @@ begin
end;
end else
// Cannot be done in OnCreate because we need ready forms here:
ShowConnections(self);
actOpenSession.Execute;
end;
procedure TMainForm.ButtonRefreshClick(Sender: TObject);
begin
// Refresh
// Force data tab update when appropriate.
Childwin.dataselected := false;
if ChildWin.PageControlMain.ActivePage = ChildWin.tabHost then
ChildWin.ShowVariablesAndProcesses(self)
else if ChildWin.PageControlMain.ActivePage = ChildWin.tabDatabase then
ChildWin.MenuRefreshClick(self)
else if ChildWin.PageControlMain.ActivePage = ChildWin.tabTable then
ChildWin.ShowTableProperties(ChildWin.SelectedTable)
else if ChildWin.PageControlMain.ActivePage = ChildWin.tabData then
ChildWin.viewdata(Sender)
else
ChildWin.RefreshTree(True);
end;
procedure TMainForm.ButtonCreateDatabaseClick(Sender: TObject);
begin
// create database
ChildWin.CreateDatabase(self);
end;
procedure TMainForm.ButtonDropDatabaseClick(Sender: TObject);
begin
// drop db
if ChildWin.ActiveDatabase <> '' then
ChildWin.DropDB(self);
end;
procedure TMainForm.btnSQLHelpClick(Sender: TObject);
begin
// SQL help
ChildWin.CallSQLHelp( Sender );
end;
procedure TMainForm.ResetWindowOptions1Click(Sender: TObject);
procedure TMainForm.actCreateDatabaseExecute(Sender: TObject);
var
reg : TRegistry;
newdb: String;
begin
// reset all options for window-size, height ...
// Create database:
// Create modal form once on demand
if Childwin.CreateDatabaseForm = nil then
Childwin.CreateDatabaseForm := TCreateDatabaseForm.Create(Self);
if ActiveMDIChild <> nil then
// Rely on the modalresult being set correctly
if Childwin.CreateDatabaseForm.ShowModal = mrOK then
begin
MessageDlg('Close all open windows before you do this.', mtError, [mbok], 0);
exit;
end;
reg := TRegistry.Create;
with reg do
begin
Access := KEY_ALL_ACCESS;
if OpenKey(REGPATH, false) then
newdb := Childwin.CreateDatabaseForm.editDBName.Text;
// Add DB to OnlyDBs-regkey if this is not empty
if Childwin.DatabasesWanted.Count > 0 then
begin
DeleteValue(REGNAME_CHILDWINSTATE);
DeleteValue(REGNAME_CHILDWINLEFT);
DeleteValue(REGNAME_CHILDWINTOP);
DeleteValue(REGNAME_CHILDWINWIDTH);
DeleteValue(REGNAME_CHILDWINHEIGHT);
DeleteValue(REGNAME_QUERYMEMOHEIGHT);
DeleteValue(REGNAME_DBTREEWIDTH);
DeleteValue(REGNAME_SQLOUTHEIGHT);
CloseKey;
MessageDlg('All Window-Settings were reset to default values.', mtInformation, [mbok], 0);
Childwin.DatabasesWanted.Add( newdb );
with TRegistry.Create do
begin
if OpenKey(REGPATH + REGKEY_SESSIONS + Childwin.Conn.Description, false) then
begin
WriteString( 'OnlyDBs', ImplodeStr( ';', Childwin.DatabasesWanted ) );
CloseKey;
end;
Free;
end;
end;
Free;
// reload db nodes and switch to new one
Childwin.RefreshTree(False, newdb);
end;
end;
procedure TMainForm.ButtonImportTextfileClick(Sender: TObject);
procedure TMainForm.actImportCSVExecute(Sender: TObject);
begin
// Import Textfile
loaddataWindow(self);
end;
procedure TMainForm.MenuPreferencesClick(Sender: TObject);
procedure TMainForm.actPreferencesExecute(Sender: TObject);
var
f: Toptionsform;
begin
// Preferences
OptionsWindow (Self);
f := Toptionsform.Create(Self);
f.ShowModal;
FreeAndNil(f);
end;
procedure TMainForm.menuReadmeClick(Sender: TObject);
procedure TMainForm.actReadmeExecute(Sender: TObject);
begin
// show readme.txt
ShellExec( 'readme.txt', ExtractFilePath(paramstr(0)) );
@ -715,7 +721,7 @@ begin
StatusBar.Panels[0].Width := Statusbar.Width - room;
end;
procedure TMainForm.UserManagerExecute(Sender: TObject);
procedure TMainForm.actUserManagerExecute(Sender: TObject);
begin
if UserManagerForm = nil then
UserManagerForm := TUserManagerForm.Create(Self);
@ -759,12 +765,26 @@ begin
menuWindow.Delete(0);
end;
procedure TMainForm.ShowAboutBoxExecute(Sender: TObject);
procedure TMainForm.actAboutBoxExecute(Sender: TObject);
begin
// Info-Box
AboutWindow (Self);
end;
procedure TMainForm.actClearEditorExecute(Sender: TObject);
var
m: TSynMemo;
begin
if Sender = actClearQueryEditor then
m := Childwin.SynMemoQuery
else
m := Childwin.SynMemoFilter;
m.SelectAll;
m.SelText := '';
m.SelStart := 0;
m.SelEnd := 0;
end;
procedure TMainForm.actMaintenanceExecute(Sender: TObject);
begin
// optimize / repair... tables
@ -815,7 +835,7 @@ begin
end;
procedure TMainForm.Copy2CSVExecute(Sender: TObject);
procedure TMainForm.actCopyAsCSVExecute(Sender: TObject);
begin
// Copy data in actual dataset as CSV
if ChildWin.PageControlMain.ActivePage = ChildWin.tabData then
@ -825,7 +845,7 @@ begin
end;
procedure TMainForm.CopyHTMLtableExecute(Sender: TObject);
procedure TMainForm.actCopyAsHTMLExecute(Sender: TObject);
begin
// Copy data in actual dataset as HTML
if ChildWin.PageControlMain.ActivePage = ChildWin.tabData then
@ -933,13 +953,11 @@ begin
end;
procedure TMainForm.OpenURL(Sender: TObject);
procedure TMainForm.actWebbrowse(Sender: TObject);
begin
// open url (hint)
if sender is TMenuItem then
ShellExec( TMenuItem(Sender).Hint )
else
ShellExec( TControl(Sender).Hint );
// Browse to URL (hint)
ShellExec( TAction(Sender).Hint );
end;
@ -952,7 +970,7 @@ begin
end;
procedure TMainForm.ExportSettings1Click(Sender: TObject);
procedure TMainForm.actExportSettingsExecute(Sender: TObject);
begin
// Export settings to .reg-file
if SaveDialog2.Execute then begin
@ -961,7 +979,7 @@ begin
end;
end;
procedure TMainForm.Importsettings1Click(Sender: TObject);
procedure TMainForm.actImportSettingsExecute(Sender: TObject);
begin
// Import settings from .reg-file
if OpenDialog2.Execute then begin
@ -970,22 +988,22 @@ begin
end;
end;
procedure TMainForm.ExecuteQueryExecute(Sender: TObject);
procedure TMainForm.actExecuteQueryExecute(Sender: TObject);
begin
ChildWin.ExecSqlClick(sender, false);
end;
procedure TMainForm.ExecuteSelectionExecute(Sender: TObject);
procedure TMainForm.actExecuteSelectionExecute(Sender: TObject);
begin
ChildWin.ExecSqlClick(sender, true);
end;
procedure TMainForm.ExecuteLineExecute(Sender: TObject);
procedure TMainForm.actExecuteLineExecute(Sender: TObject);
begin
ChildWin.ExecSqlClick(sender, false, true);
end;
procedure TMainForm.Copy2XMLExecute(Sender: TObject);
procedure TMainForm.actCopyAsXMLExecute(Sender: TObject);
begin
// Copy data in actual dataset as XML
if ChildWin.PageControlMain.ActivePage = ChildWin.tabData then
@ -994,7 +1012,8 @@ begin
dataset2xml(ChildWin.GetVisualDataset(), 'SQL-query');
end;
procedure TMainForm.ExportDataExecute(Sender: TObject);
procedure TMainForm.actExportDataExecute(Sender: TObject);
var
query : TDataSet;
begin
@ -1047,7 +1066,7 @@ end;
// view HTML
procedure TMainForm.HTMLviewExecute(Sender: TObject);
procedure TMainForm.actHTMLviewExecute(Sender: TObject);
var
g : TTntDBGrid;
filename,extension : String;
@ -1093,7 +1112,7 @@ begin
ExportTablesWindow (Self);
end;
procedure TMainForm.DataSearchExecute(Sender: TObject);
procedure TMainForm.actDataSearchExecute(Sender: TObject);
begin
with ChildWin.EditDataSearch do
begin
@ -1175,10 +1194,11 @@ end;
// Load SQL-file, make sure that SheetQuery is activated
procedure TMainForm.LoadSQLExecute(Sender: TObject);
procedure TMainForm.actLoadSQLExecute(Sender: TObject);
begin
ChildWin.PageControlMain.ActivePage := ChildWin.tabQuery;
ChildWin.btnQueryLoadClick( sender );
if ChildWin.OpenDialogSQLfile.Execute then
ChildWin.QueryLoad( ChildWin.OpenDialogSQLfile.FileName );
end;
@ -1357,14 +1377,21 @@ begin
ShowStatus( STATUS_MSG_READY );
end;
procedure TMainForm.actDataSetDeleteExecute(Sender: TObject);
begin
ChildWin.Delete1Click(sender);
abort;
// Delete record(s)
if Childwin.gridData.SelectedRows.Count = 0 then begin
if MessageDLG('Delete 1 Record(s)?', mtConfirmation, [mbOK, mbCancel], 0) = mrOK then
Childwin.GetVisualDataSet.Delete; // unsafe ...
end else
if MessageDLG('Delete '+IntToStr(Childwin.gridData.SelectedRows.count)+' Record(s)?', mtConfirmation, [mbOK, mbCancel], 0) = mrOK then
Childwin.gridData.SelectedRows.Delete;
abort; // TOTO: is this right?
end;
procedure TMainForm.menuUpdateCheckClick(Sender: TObject);
procedure TMainForm.actUpdateCheckExecute(Sender: TObject);
var
frm : TfrmUpdateCheck;
begin
@ -1373,26 +1400,67 @@ begin
FreeAndNil(frm);
end;
procedure TMainForm.btnTableAddFieldClick(Sender: TObject);
procedure TMainForm.actCreateFieldExecute(Sender: TObject);
begin
FieldEditorWindow(Childwin, femFieldAdd);
end;
procedure TMainForm.btnTableEditFieldClick(Sender: TObject);
procedure TMainForm.actEditFieldExecute(Sender: TObject);
var
fieldname: WideString;
fem: TFieldEditorMode;
begin
Childwin.UpdateField(Sender);
fieldname := '';
fem := femFieldAdd;
if Assigned(Childwin.ListColumns.FocusedNode) and (vsSelected in Childwin.ListColumns.FocusedNode.States) then
fieldname := Childwin.ListColumns.Text[Childwin.ListColumns.FocusedNode, 0];
if fieldname <> '' then
fem := femFieldUpdate;
FieldEditorWindow(Childwin, fem, fieldname);
end;
procedure TMainForm.btnTableDropFieldClick(Sender: TObject);
procedure TMainForm.actDropFieldsExecute(Sender: TObject);
var
i: Integer;
dropCmd: String;
dropList: TStringList;
begin
Childwin.DropField(Sender);
// We allow the user to select and delete multiple listItems
dropList := GetVTCaptions( Childwin.ListColumns, True );
// User confirmation
if MessageDlg('Delete ' + IntToStr(dropList.Count) + ' field(s): ' + ImplodeStr( ', ', dropList ) + ' ?', mtConfirmation, [mbok,mbcancel], 0) = mrok then
try
// Concat fields for ALTER query
for i := 0 to dropList.Count - 1 do
dropCmd := dropCmd + 'DROP ' + mask(dropList[i]) + ', ';
// Remove trailing comma
delete(dropCmd, Length(dropCmd)-1, 2);
// Execute field dropping
Childwin.ExecUpdateQuery( 'ALTER TABLE '+mask(Childwin.SelectedTable)+' ' + dropCmd );
// Rely on the server respective ExecUpdateQuery has raised an exception so the
// following code will be skipped on any error
Childwin.ListColumns.BeginUpdate;
Childwin.ListColumns.DeleteSelectedNodes;
Childwin.ListColumns.EndUpdate;
// Set focus on first item
Childwin.ListColumns.FocusedNode := Childwin.ListColumns.GetFirstVisible;
except
On E : Exception do begin
MessageDlg( E.Message, mtError, [mbOK], 0 );
end;
end;
end;
procedure TMainForm.btnTableManageIndexesClick(Sender: TObject);
procedure TMainForm.actEditIndexesExecute(Sender: TObject);
begin
FieldEditorWindow(Childwin, femIndexEditor);
end;
procedure TMainForm.actCreateTableExecute(Sender: TObject);
begin
if Childwin.CreateTableForm = nil then
@ -1400,6 +1468,7 @@ begin
Childwin.CreateTableForm.ShowModal;
end;
procedure TMainForm.actEmptyTablesExecute(Sender: TObject);
var
t: TStringList;
@ -1432,7 +1501,8 @@ begin
Screen.Cursor := crDefault;
end;
procedure TMainForm.actTablePropertiesExecute(Sender: TObject);
procedure TMainForm.actEditTableFieldsExecute(Sender: TObject);
var
NodeData: PVTreeData;
begin
@ -1444,7 +1514,8 @@ begin
end;
end;
procedure TMainForm.actAlterTableExecute(Sender: TObject);
procedure TMainForm.actEditTablePropertiesExecute(Sender: TObject);
var
NodeData: PVTreeData;
caller: TComponent;
@ -1463,4 +1534,300 @@ begin
Childwin.TablePropertiesForm.ShowModal;
end;
procedure TMainForm.actDropDatabaseExecute(Sender: TObject);
var
tndb: PVirtualNode;
db: String;
begin
// Drop DB.
case Childwin.DBtree.GetNodeLevel(Childwin.DBtree.GetFirstSelected) of
1: tndb := Childwin.DBtree.GetFirstSelected;
2: tndb := Childwin.DBtree.GetFirstSelected.Parent;
else Exit;
end;
if not Assigned(tndb) then raise Exception.Create('Internal error: Cannot drop NIL database.');
db := Childwin.Databases[tndb.Index];
if MessageDlg('Drop Database "'+db+'"?' + crlf + crlf + 'WARNING: You will lose all tables in database '+db+'!', mtConfirmation, [mbok,mbcancel], 0) <> mrok then
Abort;
Screen.Cursor := crHourglass;
try
Childwin.ExecUpdateQuery( 'DROP DATABASE ' + mask(db) );
if Childwin.DatabasesWanted.IndexOf(db) > -1 then begin
Childwin.DatabasesWanted.Delete( Childwin.DatabasesWanted.IndexOf(db) );
with TRegistry.Create do begin
if OpenKey(REGPATH + REGKEY_SESSIONS + Childwin.Conn.Description, false) then begin
WriteString( 'OnlyDBs', ImplodeStr( ';', Childwin.DatabasesWanted ) );
CloseKey;
end;
Free;
end;
end;
Childwin.DBtree.Selected[Childwin.DBtree.GetFirst] := true;
Childwin.RefreshTree(False);
except
MessageDLG('Dropping failed.'+crlf+'Maybe '''+db+''' is not a valid database-name.', mtError, [mbOK], 0)
end;
Screen.Cursor := crDefault;
end;
procedure TMainForm.actEditDatabaseExecute(Sender: TObject);
begin
if Childwin.CreateDatabaseForm = nil then
Childwin.CreateDatabaseForm := TCreateDatabaseForm.Create(Self);
Childwin.CreateDatabaseForm.modifyDB := Childwin.ActiveDatabase;
Childwin.CreateDatabaseForm.ShowModal;
end;
procedure TMainForm.actOpenSessionExecute(Sender: TObject);
begin
if ActiveMDIChild = nil then
ConnectionWindow(Self)
else begin
debug('perf: new connection clicked.');
ShellExec( ExtractFileName(paramstr(0)), ExtractFilePath(paramstr(0)) );
end;
end;
procedure TMainForm.actQueryFindExecute(Sender: TObject);
var
m: TSynMemo;
begin
FindDialogQuery.execute;
m := Childwin.SynMemoQuery;
// if something is selected search for that text
if m.SelAvail and (m.BlockBegin.Line = m.BlockEnd.Line)
then
FindDialogQuery.FindText := m.SelText
else
FindDialogQuery.FindText := m.GetWordAtRowCol(m.CaretXY);
end;
procedure TMainForm.actQueryReplaceExecute(Sender: TObject);
var
m: TSynMemo;
begin
ReplaceDialogQuery.execute;
m := Childwin.SynMemoQuery;
// if something is selected search for that text
if m.SelAvail and (m.BlockBegin.Line = m.BlockEnd.Line)
then
ReplaceDialogQuery.FindText := m.SelText
else
ReplaceDialogQuery.FindText := m.GetWordAtRowCol(m.CaretXY);
end;
procedure TMainForm.actRefreshExecute(Sender: TObject);
begin
// Refresh
// Force data tab update when appropriate.
Childwin.dataselected := false;
if ChildWin.PageControlMain.ActivePage = ChildWin.tabHost then
ChildWin.ShowVariablesAndProcesses(self)
else if ChildWin.PageControlMain.ActivePage = ChildWin.tabDatabase then
ChildWin.MenuRefreshClick(self)
else if ChildWin.PageControlMain.ActivePage = ChildWin.tabTable then
ChildWin.ShowTableProperties(ChildWin.SelectedTable)
else if ChildWin.PageControlMain.ActivePage = ChildWin.tabData then
ChildWin.viewdata(Sender)
else
ChildWin.RefreshTree(True);
end;
procedure TMainForm.actSQLhelpExecute(Sender: TObject);
var
keyword : String;
begin
// Call SQL Help from various places
if Childwin.mysql_version < 40100 then
exit;
keyword := '';
// Query-Tab
if Childwin.SynMemoQuery.Focused then
keyword := Childwin.SynMemoQuery.WordAtCursor
// LogSQL-Tab
else if Childwin.SynMemoSQLLog.Focused then
keyword := Childwin.SynMemoSQLLog.WordAtCursor
// Filter-Tab
else if Childwin.SynMemoFilter.Focused then
keyword := Childwin.SynMemoFilter.WordAtCursor
// Data-Tab
else if (Childwin.PageControlMain.ActivePage = Childwin.tabData)
and (-1 < Childwin.gridData.SelectedField.Index)
and (Childwin.gridData.SelectedField.Index <= Length(Childwin.VTRowDataListColumns)) then
begin
keyword := Childwin.VTRowDataListColumns[Childwin.gridData.SelectedField.Index].Captions[1];
end
// Table-Tab
else if Childwin.ListColumns.Focused and Assigned(Childwin.ListColumns.FocusedNode) then
begin
keyword := Childwin.ListColumns.Text[Childwin.ListColumns.FocusedNode, 1];
end
else if Childwin.lboxQueryHelpers.Focused then
begin
// Makes only sense if one of the tabs "SQL fn" or "SQL kw" was selected
if Childwin.tabsetQueryHelpers.TabIndex in [1,2] then
begin
keyword := Childwin.lboxQueryHelpers.Items[Childwin.lboxQueryHelpers.ItemIndex];
end;
end;
// Clean existing paranthesis, fx: char(64)
if Pos( '(', keyword ) > 0 then
begin
keyword := Copy( keyword, 1, Pos( '(', keyword )-1 );
end;
// Show the window
CallSQLHelpWithKeyword( keyword );
end;
{***
Show SQL Help window directly using a keyword
@param String SQL-keyword
@see FieldeditForm.btnDatatypeHelp
}
procedure TMainform.CallSQLHelpWithKeyword( keyword: String );
begin
// Set help-keyword and show window
SQLhelpWindow(Self, keyword);
end;
procedure TMainForm.actSaveSQLExecute(Sender: TObject);
begin
// Save SQL
if Childwin.SaveDialogSQLFile.Execute then
begin
Screen.Cursor := crHourGlass;
// Save complete content or just the selected text,
// depending on the tag of calling control
case (Sender as TAction).Tag of
0: SaveUnicodeFile( Childwin.SaveDialogSQLFile.FileName, Childwin.SynMemoQuery.Text );
1: SaveUnicodeFile( Childwin.SaveDialogSQLFile.FileName, Childwin.SynMemoQuery.SelText );
end;
Screen.Cursor := crDefault;
end;
end;
procedure TMainForm.actSaveSQLSnippetExecute(Sender: TObject);
var
snippetname : String;
mayChange : Boolean;
begin
// Save snippet
if InputQuery( 'Save snippet', 'Snippet name:', snippetname) then
begin
if Copy( snippetname, Length(snippetname)-4, 4 ) <> '.sql' then
snippetname := snippetname + '.sql';
// cleanup snippetname from special characters
snippetname := DIRNAME_SNIPPETS + goodfilename(snippetname);
if FileExists( snippetname ) then
begin
if MessageDlg( 'Overwrite existing snippet '+snippetname+'?', mtConfirmation, [mbOK, mbCancel], 0 ) <> mrOK then
exit;
end;
Screen.Cursor := crHourglass;
// Save complete content or just the selected text,
// depending on the tag of calling control
case (Sender as TComponent).Tag of
0: SaveUnicodeFile(snippetname, Childwin.SynMemoQuery.Text);
1: SaveUnicodeFile(snippetname, Childwin.SynMemoQuery.SelText);
end;
Childwin.FillPopupQueryLoad;
if Childwin.tabsetQueryHelpers.TabIndex = 3 then begin
// SQL Snippets selected in query helper, refresh list
mayChange := True; // Unused; satisfies callee parameter collection which is probably dictated by tabset.
Childwin.tabsetQueryHelpersChange(Sender, 3, mayChange);
end;
Screen.Cursor := crDefault;
end;
end;
procedure TMainForm.actQueryStopOnErrorsExecute(Sender: TObject);
begin
// Weird fix: dummy routine to avoid the sending action getting disabled
end;
procedure TMainForm.actQueryWordWrapExecute(Sender: TObject);
begin
Childwin.SynMemoQuery.WordWrap := TAction(Sender).Checked;
end;
procedure TMainForm.FindDialogQueryFind(Sender: TObject);
var
Options: TSynSearchOptions;
Search: String;
begin
Search := FindDialogQuery.FindText;
Options := [];
if Sender is TReplaceDialog then
Include(Options, ssoEntireScope);
if not (frDown in FindDialogQuery.Options) then
Include(Options, ssoBackwards);
if frMatchCase in FindDialogQuery.Options then
Include(Options, ssoMatchCase);
if frWholeWord in FindDialogQuery.Options then
Include(Options, ssoWholeWord);
if Childwin.SynMemoQuery.SearchReplace(Search, '', Options) = 0 then
begin
MessageBeep(MB_ICONASTERISK);
ShowStatus( 'SearchText ''' + Search + ''' not found!', 0);
end;
end;
procedure TMainForm.ReplaceDialogQueryFind(Sender: TObject);
begin
FindDialogQuery.FindText := ReplaceDialogQuery.FindText;
FindDialogQueryFind( ReplaceDialogQuery );
end;
procedure TMainForm.ReplaceDialogQueryReplace(Sender: TObject);
var
Options: TSynSearchOptions;
Search: String;
begin
Search := ReplaceDialogQuery.FindText;
Options := [ssoEntireScope]; // Do replaces always on entire scope, because the standard-dialog lacks of a down/up-option
if frReplaceAll in ReplaceDialogQuery.Options then
Include( Options, ssoReplaceAll );
if not (frDown in ReplaceDialogQuery.Options) then
Include(Options, ssoBackwards);
if frMatchCase in ReplaceDialogQuery.Options then
Include(Options, ssoMatchCase);
if frWholeWord in ReplaceDialogQuery.Options then
Include(Options, ssoWholeWord);
if frReplace in ReplaceDialogQuery.Options then // Replace instead of ReplaceAll is pressed
Include(Options, ssoReplace)
else
Include(Options, ssoReplaceAll);
if Childwin.SynMemoQuery.SearchReplace( Search, ReplaceDialogQuery.ReplaceText, Options) = 0 then
begin
MessageBeep(MB_ICONASTERISK);
ShowStatus( 'SearchText ''' + Search + ''' not found!', 0);
if ssoBackwards in Options then
Childwin.SynMemoQuery.BlockEnd := Childwin.SynMemoQuery.BlockBegin
else
Childwin.SynMemoQuery.BlockBegin := Childwin.SynMemoQuery.BlockEnd;
Childwin.SynMemoQuery.CaretXY := Childwin.SynMemoQuery.BlockBegin;
end;
end;
end.

View File

@ -279,7 +279,7 @@ end;
procedure Toptimize.btnHelpClick(Sender: TObject);
begin
Mainform.Childwin.CallSQLHelpWithKeyword('OPTIMIZE');
Mainform.CallSQLHelpWithKeyword('OPTIMIZE');
end;

View File

@ -110,24 +110,12 @@ type
{ Public declarations }
end;
function OptionsWindow (AOwner : TComponent; Flags : String = '') : Boolean;
implementation
uses childwin, main, helpers;
{$R *.DFM}
function OptionsWindow (AOwner : TComponent; Flags : String = '') : Boolean;
var
f : Toptionsform;
begin
f := Toptionsform.Create(AOwner);
Result := (f.ShowModal=mrOK);
FreeAndNil (f);
end;
procedure Toptionsform.ButtonCancelClick(Sender: TObject);
begin
// Cancel

View File

@ -143,7 +143,7 @@ begin
keyword := 'CREATE VIEW'
else
keyword := 'ALTER VIEW';
Mainform.ChildWin.CallSQLHelpWithKeyword(keyword);
Mainform.CallSQLHelpWithKeyword(keyword);
end;