From 5b0bb48d0aca96b94adee79dbbb6115253b25486 Mon Sep 17 00:00:00 2001 From: Ansgar Becker Date: Tue, 1 Jul 2008 18:59:07 +0000 Subject: [PATCH] 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. --- source/about.dfm | 3 +- source/about.pas | 6 - source/childwin.dfm | 213 +++--------- source/childwin.pas | 704 ++++++------------------------------- source/fieldeditor.pas | 2 +- source/main.dfm | 591 ++++++++++++++++++++----------- source/main.pas | 707 +++++++++++++++++++++++++++++--------- source/optimizetables.pas | 2 +- source/options.pas | 12 - source/view.pas | 2 +- 10 files changed, 1100 insertions(+), 1142 deletions(-) diff --git a/source/about.dfm b/source/about.dfm index c4f5e595..b142e21d 100644 --- a/source/about.dfm +++ b/source/about.dfm @@ -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 diff --git a/source/about.pas b/source/about.pas index 7dbe7cb5..69587859 100644 --- a/source/about.pas +++ b/source/about.pas @@ -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 ); diff --git a/source/childwin.dfm b/source/childwin.dfm index f32c3a03..a05b5727 100644 --- a/source/childwin.dfm +++ b/source/childwin.dfm @@ -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 = '-' diff --git a/source/childwin.pas b/source/childwin.pas index 4e0c82ba..586d8644 100644 --- a/source/childwin.pas +++ b/source/childwin.pas @@ -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. diff --git a/source/fieldeditor.pas b/source/fieldeditor.pas index 586495b7..21ff9ce7 100644 --- a/source/fieldeditor.pas +++ b/source/fieldeditor.pas @@ -1012,7 +1012,7 @@ end; } procedure TFieldEditForm.btnDatatypeHelpClick(Sender: TObject); begin - Mainform.ChildWin.CallSQLHelpWithKeyword(ComboBoxType.Text); + Mainform.CallSQLHelpWithKeyword(ComboBoxType.Text); end; diff --git a/source/main.dfm b/source/main.dfm index b4c67587..4896b97c 100644 --- a/source/main.dfm +++ b/source/main.dfm @@ -1,7 +1,7 @@ object MainForm: TMainForm Left = 241 Top = 114 - ClientHeight = 446 + ClientHeight = 506 ClientWidth = 632 Color = clAppWorkSpace Font.Charset = DEFAULT_CHARSET @@ -20,7 +20,7 @@ object MainForm: TMainForm TextHeight = 13 object StatusBar: TStatusBar Left = 0 - Top = 427 + Top = 487 Width = 632 Height = 19 AutoHint = True @@ -72,7 +72,7 @@ object MainForm: TMainForm object ToolButton9: TToolButton Left = 0 Top = 0 - Action = FileNew1 + Action = actOpenSession AutoSize = True DropdownMenu = menuConnections Style = tbsDropDown @@ -80,7 +80,7 @@ object MainForm: TMainForm object FileCloseItem2: TToolButton Left = 42 Top = 0 - Action = FileClose1 + Action = actCloseSession AutoSize = True end object tlbSep1: TToolButton @@ -94,20 +94,20 @@ object MainForm: TMainForm object ToolButton5: TToolButton Left = 73 Top = 0 - Action = EditCopy1 + Action = actCopy AutoSize = True end object ToolButton6: TToolButton Left = 96 Top = 0 - Action = EditPaste1 + Action = actPaste AutoSize = True end object ToolButton14: TToolButton Left = 119 Top = 0 Hint = 'Undo' - Action = EditUndo1 + Action = actUndo end object ToolButton12: TToolButton Left = 142 @@ -125,22 +125,14 @@ object MainForm: TMainForm object ButtonCreateDatabase: TToolButton Left = 173 Top = 0 - Hint = 'Create Database' + Action = actCreateDatabase AutoSize = True - Caption = 'Create Database' - Enabled = False - ImageIndex = 6 - OnClick = ButtonCreateDatabaseClick end object ButtonDropDatabase: TToolButton Left = 196 Top = 0 - Hint = 'Drop Database...' + Action = actDropDatabase AutoSize = True - Caption = 'Drop Database' - Enabled = False - ImageIndex = 7 - OnClick = ButtonDropDatabaseClick end object ToolButton2: TToolButton Left = 219 @@ -153,12 +145,8 @@ object MainForm: TMainForm object ButtonRefresh: TToolButton Left = 227 Top = 0 - Hint = 'Refresh' + Action = actRefresh AutoSize = True - Caption = 'Refresh' - Enabled = False - ImageIndex = 0 - OnClick = ButtonRefreshClick end object tlbSep5: TToolButton Left = 250 @@ -171,18 +159,14 @@ object MainForm: TMainForm object ButtonUserManager: TToolButton Left = 258 Top = 0 - Action = UserManager + Action = actUserManager AutoSize = True end object ButtonImportTextfile: TToolButton Left = 281 Top = 0 - Hint = 'Import CSV file' + Action = actImportCSV AutoSize = True - Caption = 'Import CSV file' - Enabled = False - ImageIndex = 50 - OnClick = ButtonImportTextfileClick end object ButtonExport: TToolButton Left = 304 @@ -202,11 +186,7 @@ object MainForm: TMainForm object btnSQLHelp: TToolButton Left = 335 Top = 0 - Hint = 'SQL Help' - Caption = 'btnSQLHelp' - Enabled = False - ImageIndex = 31 - OnClick = btnSQLHelpClick + Action = actSQLhelp end end object ToolBarData: TToolBar @@ -384,34 +364,22 @@ object MainForm: TMainForm object btnTableEditField: TToolButton Left = 0 Top = 0 - Hint = 'Edit field ...' - Caption = 'btnTableEditField' - ImageIndex = 44 - OnClick = btnTableEditFieldClick + Action = actEditField end object btnTableAddField: TToolButton Left = 23 Top = 0 - Hint = 'Add field' - Caption = 'btnTableAddField' - ImageIndex = 45 - OnClick = btnTableAddFieldClick + Action = actCreateField end object btnTableDropField: TToolButton Left = 46 Top = 0 - Hint = 'Delete field...' - Caption = 'btnTableDropField' - ImageIndex = 46 - OnClick = btnTableDropFieldClick + Action = actDropFields end object btnTableManageIndexes: TToolButton Left = 69 Top = 0 - Hint = 'Edit indexes...' - Caption = 'btnTableManageIndexes' - ImageIndex = 13 - OnClick = btnTableManageIndexesClick + Action = actEditIndexes end end end @@ -425,36 +393,29 @@ object MainForm: TMainForm Hint = 'File related commands' object FileNewItem: TMenuItem Tag = 23 - Action = FileNew1 + Action = actOpenSession Caption = '&Connection...' Hint = 'Connection...|Establish connection with MySQL-Host' end object FileCloseItem: TMenuItem Tag = 24 - Action = FileClose1 + Action = actCloseSession end object N1: TMenuItem Caption = '-' end - object ResetWindowOptions1: TMenuItem - Tag = 25 - Caption = 'Reset Window-Options' - OnClick = ResetWindowOptions1Click - end object ExportSettings1: TMenuItem - Caption = 'Export settings...' - OnClick = ExportSettings1Click + Action = actExportSettings end object Importsettings1: TMenuItem - Caption = 'Import settings...' - OnClick = Importsettings1Click + Action = actImportSettings end object N5: TMenuItem Caption = '-' end object FileExitItem: TMenuItem Tag = 26 - Action = FileExit1 + Action = actExitApplication ShortCut = 32883 end end @@ -463,10 +424,13 @@ object MainForm: TMainForm Caption = '&Edit' Hint = 'Edit commands' object CopyItem: TMenuItem - Action = EditCopy1 + Action = actCopy end object PasteItem: TMenuItem - Action = EditPaste1 + Action = actPaste + end + object Cut1: TMenuItem + Action = actCut end end object Extra1: TMenuItem @@ -474,20 +438,14 @@ object MainForm: TMainForm Caption = '&Tools' object MenuRefresh: TMenuItem Tag = 28 - Caption = 'Refresh' - Enabled = False - ImageIndex = 0 - OnClick = ButtonRefreshClick + Action = actRefresh end object N3: TMenuItem Caption = '-' end object MenuCreateDatabase: TMenuItem Tag = 29 - Caption = 'Create Database...' - Enabled = False - ImageIndex = 6 - OnClick = ButtonCreateDatabaseClick + Action = actCreateDatabase end object MenuCreateTable: TMenuItem Tag = 30 @@ -498,10 +456,7 @@ object MainForm: TMainForm end object MenuDropDatabase: TMenuItem Tag = 31 - Caption = 'Drop Database...' - Enabled = False - ImageIndex = 7 - OnClick = ButtonDropDatabaseClick + Action = actDropDatabase end object MenuDropTable: TMenuItem Tag = 32 @@ -515,52 +470,34 @@ object MainForm: TMainForm Caption = 'Flush' object MenuFlushHosts: TMenuItem Tag = 37 - Caption = 'Hosts' - Enabled = False - Hint = 'Flush Privileges|Flush Hosts' - OnClick = FlushClick + Action = actFlushHosts end object MenuFlushLogs: TMenuItem Tag = 38 - Caption = 'Logs' - Enabled = False - Hint = 'Flush Logs' - OnClick = FlushClick + Action = actFlushLogs end object FlushUserPrivileges1: TMenuItem Tag = 39 - Caption = 'Privileges' - Enabled = False - Hint = 'Flush Privileges|Flush User-Privileges' - OnClick = FlushClick + Action = actFlushPrivileges end object MenuFlushTables: TMenuItem Tag = 40 - Caption = 'Tables' - Enabled = False - Hint = 'Flush Privileges|Flush Tables' - OnClick = FlushClick + Action = actFlushTables end object MenuFlushTableswithreadlock: TMenuItem Tag = 41 - Caption = 'Tables with read lock' - Enabled = False - Hint = 'Flush Privileges|Flush Tables with read lock' - OnClick = FlushClick + Action = actFlushTableswithreadlock end object MenuFlushStatus: TMenuItem Tag = 42 - Caption = 'Status' - Enabled = False - Hint = 'Flush Status' - OnClick = FlushClick + Action = actFlushStatus end end object N6: TMenuItem Caption = '-' end object MenuUserManager: TMenuItem - Action = UserManager + Action = actUserManager end object menuMaintenance: TMenuItem Action = actMaintenance @@ -570,21 +507,17 @@ object MainForm: TMainForm end object MenuPreferences: TMenuItem Tag = 36 - Caption = 'Preferences' - OnClick = MenuPreferencesClick + Action = actPreferences end end object Import1: TMenuItem Caption = '&Import' object MenuImportTextFile: TMenuItem Tag = 43 - Caption = 'Import CSV file...' - Enabled = False - ImageIndex = 50 - OnClick = ButtonImportTextfileClick + Action = actImportCSV end object ImportSQL1: TMenuItem - Action = LoadSQL + Action = actLoadSQL end object InsertfilesintoBLOBfields1: TMenuItem Action = actInsertFiles @@ -602,17 +535,17 @@ object MainForm: TMainForm end object MenuCopyCSV: TMenuItem Tag = 48 - Action = Copy2CSV + Action = actCopyAsCSV end object CopyContentsasHTMLTable1: TMenuItem Tag = 49 - Action = CopyHTMLtable + Action = actCopyAsHTML end object CopyasXMLdata1: TMenuItem - Action = Copy2XML + Action = actCopyAsXML end object Exportdata1: TMenuItem - Action = ExportData + Action = actExportData end end object menuWindow: TMenuItem @@ -627,60 +560,39 @@ object MainForm: TMainForm Caption = '&Help' Hint = 'Help topics' object menuSQLHelp: TMenuItem - Caption = 'SQL Help' - Enabled = False - ImageIndex = 31 - ShortCut = 112 - OnClick = btnSQLHelpClick + Action = actSQLhelp end object N8: TMenuItem Caption = '-' end object menuUpdateCheck: TMenuItem - Caption = 'Check for updates ...' - ImageIndex = 0 - OnClick = menuUpdateCheckClick + Action = actUpdateCheck end object menuWebsite: TMenuItem Tag = 56 - Caption = 'HeidiSQL Website' - Hint = 'http://www.heidisql.com/' - ImageIndex = 69 - OnClick = OpenURL + Action = actWebMainsite end object menuDownload: TMenuItem - Caption = 'Download-Page' - Hint = 'http://download.heidisql.com/' - ImageIndex = 69 - OnClick = OpenURL + Action = actWebDownloadpage end object menuSupportForum: TMenuItem - Caption = 'Support-Forum' - Hint = 'http://www.heidisql.com/forum/' - ImageIndex = 69 - OnClick = OpenURL + Action = actWebForum end object menuBugtracker: TMenuItem - Caption = 'Bugtracker' - Hint = 'http://bugs.heidisql.com/' - OnClick = OpenURL + Action = actWebBugtracker end object menuFeaturetracker: TMenuItem - Caption = 'Featuretracker' - Hint = 'http://rfe.heidisql.com/' - OnClick = OpenURL + Action = actWebFeaturetracker end object N9: TMenuItem Caption = '-' end object menuReadme: TMenuItem Tag = 55 - Caption = 'Readme' - ImageIndex = 68 - OnClick = menuReadmeClick + Action = actReadme end object menuAbout: TMenuItem - Action = ShowAboutBox + Action = actAboutBox Hint = 'About HeidiSQL' end end @@ -689,96 +601,124 @@ object MainForm: TMainForm Images = PngImageListMain Left = 72 Top = 120 - object FileNew1: TAction + object actOpenSession: TAction Category = 'File' - Caption = '&Connection' + Caption = 'New &connection' Hint = 'Connection...|Establish Connection with MySQL-Host' ImageIndex = 37 ShortCut = 16462 - OnExecute = ShowConnections + OnExecute = actOpenSessionExecute end - object FileClose1: TWindowClose + object actCloseSession: TWindowClose Category = 'File' Caption = '&Close' Hint = 'Close|Close Connection' ImageIndex = 29 end - object FileExit1: TAction + object actExitApplication: TAction Category = 'File' Caption = 'E&xit' Hint = 'Exit|Exit application' ImageIndex = 26 - OnExecute = FileExit1Execute + OnExecute = actExitApplicationExecute end - object EditCopy1: TEditCopy + object actCopy: TEditCopy Tag = 27 - Category = 'Edit' + Category = 'Various' Caption = '&Copy' Enabled = False Hint = 'Copy|Copy to Clipboard' ImageIndex = 3 end - object EditPaste1: TEditPaste + object actPaste: TEditPaste Tag = 58 - Category = 'Edit' + Category = 'Various' Caption = '&Paste' Hint = 'Paste|Paste from Clipboard' ImageIndex = 4 end - object UserManager: TAction + object actUserManager: TAction Tag = 34 + Category = 'Tools' Caption = 'User-Manager' Enabled = False Hint = 'User-Manager' ImageIndex = 11 - OnExecute = UserManagerExecute + OnExecute = actUserManagerExecute end - object ShowAboutBox: TAction + object actCut: TEditCut + Category = 'Various' + Caption = 'Cu&t' + Hint = 'Cut|Cuts the selection and puts it on the Clipboard' + ImageIndex = 2 + ShortCut = 16472 + end + object actUndo: TEditUndo + Category = 'Various' + Caption = '&Undo' + Enabled = False + ImageIndex = 40 + ShortCut = 32776 + end + object actSelectAll: TEditSelectAll + Category = 'Various' + Caption = 'Select &All' + Hint = 'Select All|Selects the entire document' + ShortCut = 16449 + end + object actAboutBox: TAction Tag = 57 + Category = 'Various' Caption = 'About...' Hint = 'About MySQL-Front' - OnExecute = ShowAboutBoxExecute + OnExecute = actAboutBoxExecute end object actMaintenance: TAction Tag = 35 + Category = 'Tools' Caption = 'Maintenance' Enabled = False Hint = 'Optimize, repair and analyse tables' ImageIndex = 39 OnExecute = actMaintenanceExecute end - object CopyHTMLtable: TAction + object actCopyAsHTML: TAction Tag = 49 + Category = 'Export/Import' Caption = 'Copy as HTML-table' Enabled = False Hint = 'Copy data as HTML-table' ImageIndex = 32 - OnExecute = CopyHTMLtableExecute + OnExecute = actCopyAsHTMLExecute end - object Copy2CSV: TAction + object actCopyAsCSV: TAction Tag = 48 + Category = 'Export/Import' Caption = 'Copy as CSV-data' Enabled = False Hint = 'Copy data as CSV-data' ImageIndex = 49 - OnExecute = Copy2CSVExecute + OnExecute = actCopyAsCSVExecute end - object Copy2XML: TAction + object actCopyAsXML: TAction + Category = 'Export/Import' Caption = 'Copy as XML-data' Enabled = False Hint = 'Copy data as XML-data' ImageIndex = 48 - OnExecute = Copy2XMLExecute + OnExecute = actCopyAsXMLExecute end - object ExportData: TAction + object actExportData: TAction + Category = 'Export/Import' Caption = 'Export data ...' Enabled = False Hint = 'Save table-data to file ...' ImageIndex = 20 - OnExecute = ExportDataExecute + OnExecute = actExportDataExecute end object actPrintList: TAction Tag = 61 + Category = 'Various' Caption = 'Print...' Enabled = False Hint = 'Print List or Data' @@ -788,74 +728,78 @@ object MainForm: TMainForm end object actCopyTable: TAction Tag = 62 + Category = 'Tools' Caption = 'Create table copy ...' Enabled = False Hint = 'Create a base table copy of this table or view' ImageIndex = 19 OnExecute = actCopyTableExecute end - object EditUndo1: TEditUndo - Category = 'Edit' - Caption = '&Undo' - Enabled = False - ImageIndex = 40 - ShortCut = 32776 - end - object ExecuteQuery: TAction + object actExecuteQuery: TAction + Category = 'SQL' Caption = 'Run' Enabled = False Hint = 'Execute SQL...|Execute SQL-query/queries...' ImageIndex = 57 ShortCut = 120 - OnExecute = ExecuteQueryExecute + OnExecute = actExecuteQueryExecute end - object ExecuteSelection: TAction + object actExecuteSelection: TAction + Category = 'SQL' Caption = 'Run Selection' Enabled = False Hint = 'Execute selected SQL...|Execute selected SQL-query/queries...' ImageIndex = 61 ShortCut = 16504 - OnExecute = ExecuteSelectionExecute + OnExecute = actExecuteSelectionExecute end - object ExecuteLine: TAction + object actExecuteLine: TAction + Category = 'SQL' Caption = 'Run current line' Hint = 'Execute Line|Executes the current line of SQL' ImageIndex = 61 ShortCut = 24696 - OnExecute = ExecuteLineExecute + OnExecute = actExecuteLineExecute end - object HTMLview: TAction + object actHTMLview: TAction + Category = 'Export/Import' Caption = 'HTML-view' Hint = 'View contents as HTML-file' ImageIndex = 32 - OnExecute = HTMLviewExecute + OnExecute = actHTMLviewExecute end object actInsertFiles: TAction + Category = 'Export/Import' Caption = 'Insert files into BLOB-fields...' Enabled = False ImageIndex = 47 OnExecute = actInsertFilesExecute end object actExportTables: TAction + Category = 'Export/Import' Caption = 'Export tables as SQL' Enabled = False ImageIndex = 20 OnExecute = actExportTablesExecute end - object LoadSQL: TAction + object actLoadSQL: TAction + Category = 'SQL' Caption = 'Load SQL-file ...' Enabled = False Hint = 'Load SQL-file ...' ImageIndex = 52 - OnExecute = LoadSQLExecute + ShortCut = 16463 + OnExecute = actLoadSQLExecute end - object DataSearch: TAction + object actDataSearch: TAction + Category = 'Data' Caption = 'Find...' ImageIndex = 30 ShortCut = 16454 - OnExecute = DataSearchExecute + OnExecute = actDataSearchExecute end object actDropTablesAndViews: TAction + Category = 'Database' Caption = 'Drop table/view ...' Enabled = False Hint = 'Deletes tables and/or views' @@ -863,6 +807,7 @@ object MainForm: TMainForm OnExecute = actDropTablesAndViewsExecute end object actEditView: TAction + Category = 'Database' Caption = 'Edit view ...' Enabled = False Hint = 'Edit view ...' @@ -870,6 +815,7 @@ object MainForm: TMainForm OnExecute = actEditViewExecute end object actCreateView: TAction + Category = 'Database' Caption = 'Create view ...' Enabled = False Hint = 'Create view ...' @@ -877,59 +823,307 @@ object MainForm: TMainForm OnExecute = actCreateViewExecute end object actDataSetFirst: TDataSetFirst - Category = 'Dataset' + Category = 'Data' Caption = '&First' Hint = 'First' ImageIndex = 89 end object actDataSetLast: TDataSetLast - Category = 'Dataset' + Category = 'Data' Caption = '&Last' Hint = 'Last' ImageIndex = 90 end object actDataSetInsert: TDataSetInsert - Category = 'Dataset' + Category = 'Data' Caption = '&Insert' Hint = 'Insert' ImageIndex = 45 end object actDataSetDelete: TDataSetDelete - Category = 'Dataset' + Category = 'Data' Caption = '&Delete' Hint = 'Delete' ImageIndex = 46 + ShortCut = 16430 OnExecute = actDataSetDeleteExecute end object actDataSetPost: TDataSetPost - Category = 'Dataset' + Category = 'Data' Caption = 'P&ost' Hint = 'Post' ImageIndex = 55 end object actCreateTable: TAction + Category = 'Database' Caption = 'Create new table' Hint = 'Create new table in selected database' ImageIndex = 15 OnExecute = actCreateTableExecute end object actEmptyTables: TAction + Category = 'Database' Caption = 'Empty table(s) ...' Hint = 'Delete all rows in selected table(s)' ImageIndex = 46 ShortCut = 8238 OnExecute = actEmptyTablesExecute end - object actTableProperties: TAction + object actEditTableFields: TAction + Category = 'Database' Caption = 'Table properties' ImageIndex = 44 - OnExecute = actTablePropertiesExecute + OnExecute = actEditTableFieldsExecute end - object actAlterTable: TAction + object actEditTableProperties: TAction + Category = 'Database' Caption = 'Alter table ...' Hint = 'Edit table engine, charset, auto increment etc.' ImageIndex = 17 - OnExecute = actAlterTableExecute + OnExecute = actEditTablePropertiesExecute + end + object actEditField: TAction + Category = 'Table' + Caption = 'Edit field' + Hint = 'Edit field properties' + ImageIndex = 44 + OnExecute = actEditFieldExecute + end + object actCreateField: TAction + Category = 'Table' + Caption = 'Add field' + Hint = 'Create new field in selected table' + ImageIndex = 45 + OnExecute = actCreateFieldExecute + end + object actDropFields: TAction + Category = 'Table' + Caption = 'Delete selected field(s) ...' + Hint = 'Delete selected field(s)' + ImageIndex = 46 + OnExecute = actDropFieldsExecute + end + object actEditIndexes: TAction + Category = 'Table' + Caption = 'Edit indexes' + Hint = 'Create and edit indexes for the selected table' + ImageIndex = 13 + OnExecute = actEditIndexesExecute + end + object actDropDatabase: TAction + Category = 'Database' + Caption = 'Drop Database' + Hint = 'Delete database and all contained tables and objects' + ImageIndex = 7 + OnExecute = actDropDatabaseExecute + end + object actCreateDatabase: TAction + Category = 'Database' + Caption = 'Create database' + Hint = 'Create a new, blank database' + ImageIndex = 6 + OnExecute = actCreateDatabaseExecute + end + object actEditDatabase: TAction + Category = 'Database' + Caption = 'Edit database' + Hint = 'Edit database properties' + ImageIndex = 8 + OnExecute = actEditDatabaseExecute + end + object actSQLhelp: TAction + Category = 'Tools' + Caption = 'SQL help' + ImageIndex = 31 + ShortCut = 112 + OnExecute = actSQLhelpExecute + end + object actRefresh: TAction + Category = 'Various' + Caption = 'Refresh' + Hint = 'Refresh' + ImageIndex = 0 + OnExecute = actRefreshExecute + end + object actImportCSV: TAction + Category = 'Export/Import' + Caption = 'Import CSV file' + ImageIndex = 50 + OnExecute = actImportCSVExecute + end + object actExportSettings: TAction + Category = 'Export/Import' + Caption = 'Export settings ...' + OnExecute = actExportSettingsExecute + end + object actImportSettings: TAction + Category = 'Export/Import' + Caption = 'Import settings ...' + OnExecute = actImportSettingsExecute + end + object actPreferences: TAction + Category = 'Tools' + Caption = 'Preferences' + OnExecute = actPreferencesExecute + end + object actFlushHosts: TAction + Category = 'Tools' + Caption = 'Hosts' + OnExecute = actFlushExecute + end + object actFlushLogs: TAction + Category = 'Tools' + Caption = 'Logs' + OnExecute = actFlushExecute + end + object actFlushPrivileges: TAction + Category = 'Tools' + Caption = 'Privileges' + OnExecute = actFlushExecute + end + object actFlushTables: TAction + Category = 'Tools' + Caption = 'Tables' + OnExecute = actFlushExecute + end + object actFlushTableswithreadlock: TAction + Category = 'Tools' + Caption = 'Tables with read lock' + OnExecute = actFlushExecute + end + object actFlushStatus: TAction + Category = 'Tools' + Caption = 'Status' + OnExecute = actFlushExecute + end + object actUpdateCheck: TAction + Category = 'Tools' + Caption = 'Check for updates ...' + ImageIndex = 0 + OnExecute = actUpdateCheckExecute + end + object actWebMainsite: TAction + Category = 'Various' + Caption = 'HeidiSQL website' + Hint = 'http://www.heidisql.com/' + ImageIndex = 69 + OnExecute = actWebbrowse + end + object actWebDownloadpage: TAction + Category = 'Various' + Caption = 'Download page' + Hint = 'http://www.heidisql.com/download.php' + ImageIndex = 69 + OnExecute = actWebbrowse + end + object actWebForum: TAction + Category = 'Various' + Caption = 'User to user forum' + Hint = 'http://www.heidisql.com/forum/' + ImageIndex = 69 + OnExecute = actWebbrowse + end + object actWebBugtracker: TAction + Category = 'Various' + Caption = 'Bug tracker' + Hint = 'http://bugs.heidisql.com/' + ImageIndex = 69 + OnExecute = actWebbrowse + end + object actWebFeaturetracker: TAction + Category = 'Various' + Caption = 'Feature tracker' + Hint = 'http://rfe.heidisql.com/' + ImageIndex = 69 + OnExecute = actWebbrowse + end + object actReadme: TAction + Category = 'Various' + Caption = 'Readme' + Hint = 'Open readme file' + ImageIndex = 68 + OnExecute = actReadmeExecute + end + object actSaveSQL: TAction + Category = 'SQL' + Caption = 'Save to file ...' + Hint = 'Save SQL to a textfile' + ImageIndex = 10 + ShortCut = 16467 + OnExecute = actSaveSQLExecute + end + object actSaveSQLselection: TAction + Tag = 1 + Category = 'SQL' + Caption = 'Save selection to file ...' + Hint = 'Save selected text to a file' + ImageIndex = 10 + ShortCut = 24659 + OnExecute = actSaveSQLExecute + end + object actSaveSQLSnippet: TAction + Category = 'SQL' + Caption = 'Save as snippet ...' + Hint = 'Save as snippet ...' + ImageIndex = 54 + OnExecute = actSaveSQLSnippetExecute + end + object actSaveSQLSelectionSnippet: TAction + Tag = 1 + Category = 'SQL' + Caption = 'Save selection as snippet ...' + Hint = 'Save selected text as snippet ...' + ImageIndex = 54 + OnExecute = actSaveSQLSnippetExecute + end + object actClearQueryEditor: TAction + Category = 'SQL' + Caption = 'Clear' + Hint = 'Clear query editor' + ImageIndex = 58 + ShortCut = 16471 + OnExecute = actClearEditorExecute + end + object actClearFilterEditor: TAction + Category = 'SQL' + Caption = 'Clear' + Hint = 'Clear filter editor' + ImageIndex = 58 + ShortCut = 16471 + OnExecute = actClearEditorExecute + end + object actQueryStopOnErrors: TAction + Category = 'SQL' + AutoCheck = True + Caption = 'Stop on errors in batch mode' + Checked = True + Hint = 'Stop on errors in batch mode' + ImageIndex = 63 + OnExecute = actQueryStopOnErrorsExecute + end + object actQueryWordWrap: TAction + Category = 'SQL' + AutoCheck = True + Caption = 'Wrap long lines' + Hint = 'Wrap long lines' + ImageIndex = 62 + OnExecute = actQueryWordWrapExecute + end + object actQueryFind: TAction + Category = 'SQL' + Caption = 'Find text ...' + Hint = 'Find text ...' + ImageIndex = 30 + ShortCut = 16454 + OnExecute = actQueryFindExecute + end + object actQueryReplace: TAction + Category = 'SQL' + Caption = 'Replace text ...' + Hint = 'Replace text ...' + ImageIndex = 59 + ShortCut = 16466 + OnExecute = actQueryReplaceExecute end end object SaveDialog2: TSaveDialog @@ -953,11 +1147,9 @@ object MainForm: TMainForm Left = 72 Top = 88 object miNewConnection: TMenuItem - Caption = 'New Connection...' + Action = actOpenSession SubMenuImages = PngImageListMain Default = True - ImageIndex = 37 - OnClick = ShowConnections end end object PngImageListMain: TPngImageList @@ -3761,4 +3953,15 @@ object MainForm: TMainForm Top = 120 Bitmap = {} end + object FindDialogQuery: TFindDialog + OnFind = FindDialogQueryFind + Left = 8 + Top = 160 + end + object ReplaceDialogQuery: TReplaceDialog + OnFind = ReplaceDialogQueryFind + OnReplace = ReplaceDialogQueryReplace + Left = 40 + Top = 160 + end end diff --git a/source/main.pas b/source/main.pas index 37b5828e..3dc1e3e5 100644 --- a/source/main.pas +++ b/source/main.pas @@ -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. diff --git a/source/optimizetables.pas b/source/optimizetables.pas index b0a9bbeb..0b1e0713 100644 --- a/source/optimizetables.pas +++ b/source/optimizetables.pas @@ -279,7 +279,7 @@ end; procedure Toptimize.btnHelpClick(Sender: TObject); begin - Mainform.Childwin.CallSQLHelpWithKeyword('OPTIMIZE'); + Mainform.CallSQLHelpWithKeyword('OPTIMIZE'); end; diff --git a/source/options.pas b/source/options.pas index 73900bc0..7910fa8c 100644 --- a/source/options.pas +++ b/source/options.pas @@ -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 diff --git a/source/view.pas b/source/view.pas index 1cb382cd..cbfe3af2 100644 --- a/source/view.pas +++ b/source/view.pas @@ -143,7 +143,7 @@ begin keyword := 'CREATE VIEW' else keyword := 'ALTER VIEW'; - Mainform.ChildWin.CallSQLHelpWithKeyword(keyword); + Mainform.CallSQLHelpWithKeyword(keyword); end;