diff --git a/source/helpers.pas b/source/helpers.pas index bb2294bc..18ae0e6f 100644 --- a/source/helpers.pas +++ b/source/helpers.pas @@ -12,7 +12,7 @@ uses Classes, SysUtils, Graphics, GraphUtil, ClipBrd, Dialogs, Forms, Controls, ComCtrls, ShellApi, CheckLst, Windows, Contnrs, ShlObj, ActiveX, VirtualTrees, SynRegExpr, Messages, Math, Registry, SynEditHighlighter, DateUtils, Generics.Collections, StrUtils, AnsiStrings, TlHelp32, Types, - dbconnection, mysql_structures; + dbconnection, mysql_structures, SynMemo, Menus; type @@ -1900,6 +1900,9 @@ end; procedure TDBObjectEditor.Init(Obj: TDBObject); var editName: TWinControl; + SynMemo: TSynMemo; + popup: TPopupMenu; + Item: TMenuItem; begin Mainform.ShowStatusMsg('Initializing editor ...'); Mainform.LogSQL(Self.ClassName+'.Init, using object "'+Obj.Name+'"', lcDebug); @@ -1913,6 +1916,25 @@ begin if Assigned(editName) and editName.CanFocus then editName.SetFocus; end; + SynMemo := FindComponent('SynMemoBody') as TSynMemo; + if Assigned(SynMemo) and (not Assigned(SynMemo.PopupMenu)) then begin + popup := TPopupMenu.Create(Self); + popup.Images := MainForm.ImageListMain; + Item := TMenuItem.Create(popup); + Item.Action := MainForm.actCopy; + popup.Items.Add(Item); + Item := TMenuItem.Create(popup); + Item.Action := MainForm.actCut; + popup.Items.Add(Item); + Item := TMenuItem.Create(popup); + Item.Action := MainForm.actPaste; + popup.Items.Add(Item); + Item := TMenuItem.Create(popup); + Item.Action := MainForm.actSelectAll; + popup.Items.Add(Item); + SynMemo.PopupMenu := popup; + end; + end; function TDBObjectEditor.DeInit: TModalResult; diff --git a/source/trigger_editor.dfm b/source/trigger_editor.dfm index 5b2eeb6a..531bf9df 100644 --- a/source/trigger_editor.dfm +++ b/source/trigger_editor.dfm @@ -53,7 +53,7 @@ object frmTriggerEditor: TfrmTriggerEditor TextHint = 'Enter trigger name' OnChange = Modification end - object SynMemoStatement: TSynMemo + object SynMemoBody: TSynMemo Left = 3 Top = 106 Width = 471 @@ -72,7 +72,7 @@ object frmTriggerEditor: TfrmTriggerEditor Gutter.Font.Name = 'Courier New' Gutter.Font.Style = [] Lines.Strings = ( - 'SynMemoStatement') + 'SynMemoBody') OnChange = Modification end object btnHelp: TButton @@ -166,7 +166,7 @@ object frmTriggerEditor: TfrmTriggerEditor Images = MainForm.ImageListMain OnExecute = SynCompletionProposalStatementExecute ShortCut = 16416 - Editor = SynMemoStatement + Editor = SynMemoBody Left = 264 Top = 304 end diff --git a/source/trigger_editor.pas b/source/trigger_editor.pas index 86ad4d5d..321b2502 100644 --- a/source/trigger_editor.pas +++ b/source/trigger_editor.pas @@ -12,7 +12,7 @@ type TfrmTriggerEditor = class(TFrame) lblName: TLabel; editName: TEdit; - SynMemoStatement: TSynMemo; + SynMemoBody: TSynMemo; btnHelp: TButton; btnDiscard: TButton; btnSave: TButton; @@ -57,7 +57,7 @@ var i: Integer; begin inherited; - SynMemoStatement.Highlighter := Mainform.SynSQLSyn1; + SynMemoBody.Highlighter := Mainform.SynSQLSyn1; editName.MaxLength := NAME_LEN; comboTiming.Items.Text := 'BEFORE'+CRLF+'AFTER'; comboEvent.Items.Text := 'INSERT'+CRLF+'UPDATE'+CRLF+'DELETE'; @@ -87,7 +87,7 @@ begin comboDefiner.Text := ''; comboDefiner.TextHint := 'Current user ('+Obj.Connection.CurrentUserHostCombination+')'; comboDefiner.Hint := 'Leave empty for current user ('+Obj.Connection.CurrentUserHostCombination+')'; - SynMemoStatement.Text := 'BEGIN'+CRLF+CRLF+'END'; + SynMemoBody.Text := 'BEGIN'+CRLF+CRLF+'END'; comboEvent.ItemIndex := 0; comboTiming.ItemIndex := 0; DBObjects := MainForm.ActiveConnection.GetDBObjects(Mainform.ActiveDatabase); @@ -110,7 +110,7 @@ begin comboTable.ItemIndex := comboTable.Items.IndexOf(Definitions.Col('Table')); comboTiming.ItemIndex := comboTiming.Items.IndexOf(UpperCase(Definitions.Col('Timing'))); comboEvent.ItemIndex := comboEvent.Items.IndexOf(UpperCase(Definitions.Col('Event'))); - SynMemoStatement.Text := Definitions.Col('Statement'); + SynMemoBody.Text := Definitions.Col('Statement'); Found := True; break; end; @@ -137,7 +137,7 @@ begin btnSave.Enabled := Modified and (editName.Text <> '') and (comboTable.ItemIndex > -1) and (comboTiming.ItemIndex > -1) and (comboEvent.ItemIndex > -1) - and (SynMemoStatement.Text <> ''); + and (SynMemoBody.Text <> ''); btnDiscard.Enabled := Modified; end; @@ -189,7 +189,7 @@ begin sql := sql + 'TRIGGER '+DBObject.Connection.QuoteIdent(editName.Text)+' '+ comboTiming.Items[comboTiming.ItemIndex]+' '+comboEvent.Items[comboEvent.ItemIndex]+ ' ON '+DBObject.Connection.QuoteIdent(comboTable.Text)+ - ' FOR EACH ROW '+SynMemoStatement.Text; + ' FOR EACH ROW '+SynMemoBody.Text; MainForm.ActiveConnection.Query(sql); DBObject.Name := editName.Text; DBObject.CreateCode := ''; diff --git a/source/view.dfm b/source/view.dfm index bce9a8ae..b6a7737c 100644 --- a/source/view.dfm +++ b/source/view.dfm @@ -63,7 +63,7 @@ object frmView: TfrmView TabOrder = 2 OnClick = Modification end - object SynMemoSelect: TSynMemo + object SynMemoBody: TSynMemo Left = 3 Top = 143 Width = 444 diff --git a/source/view.pas b/source/view.pas index 86b080ed..5a21066b 100644 --- a/source/view.pas +++ b/source/view.pas @@ -13,7 +13,7 @@ type editName: TEdit; lblName: TLabel; rgAlgorithm: TRadioGroup; - SynMemoSelect: TSynMemo; + SynMemoBody: TSynMemo; lblSelect: TLabel; btnDiscard: TButton; btnSave: TButton; @@ -50,8 +50,8 @@ uses main; constructor TfrmView.Create(AOwner: TComponent); begin inherited; - SynMemoSelect.Highlighter := Mainform.SynSQLSyn1; - Mainform.SynCompletionProposal.AddEditor(SynMemoSelect); + SynMemoBody.Highlighter := Mainform.SynSQLSyn1; + Mainform.SynCompletionProposal.AddEditor(SynMemoBody); editName.MaxLength := NAME_LEN; end; @@ -77,14 +77,14 @@ begin rgCheck.ItemIndex := rgCheck.Items.IndexOf(CheckOption); if rgCheck.ItemIndex = -1 then rgCheck.ItemIndex := 0; - SynMemoSelect.Text := SelectCode; + SynMemoBody.Text := SelectCode; // User may not be allowed to run SHOW CREATE VIEW, in which case we have an empty CreateCode. // Disable editor in this case. lblDisabledWhy.Visible := SelectCode = ''; editName.Enabled := not lblDisabledWhy.Visible; rgAlgorithm.Enabled := editName.Enabled; rgCheck.Enabled := rgAlgorithm.Enabled; - SynMemoSelect.Enabled := rgAlgorithm.Enabled; + SynMemoBody.Enabled := rgAlgorithm.Enabled; end else begin // Create mode editName.Text := ''; @@ -92,7 +92,7 @@ begin rgAlgorithm.ItemIndex := 0; rgCheck.Enabled := True; rgCheck.ItemIndex := 0; - SynMemoSelect.Text := 'SELECT '; + SynMemoBody.Text := 'SELECT '; lblDisabledWhy.Hide; end; Modified := False; @@ -160,7 +160,7 @@ begin sql := sql + 'ALGORITHM = '+Uppercase(rgAlgorithm.Items[rgAlgorithm.ItemIndex])+' '; if comboDefiner.Text <> '' then sql := sql + 'DEFINER='+DBObject.Connection.QuoteIdent(comboDefiner.Text, True, '@')+' '; - sql := sql + 'VIEW ' + viewname+' AS '+SynMemoSelect.Text+' '; + sql := sql + 'VIEW ' + viewname+' AS '+SynMemoBody.Text+' '; if rgCheck.Enabled and (rgCheck.ItemIndex > 0) then sql := sql + 'WITH '+Uppercase(rgCheck.Items[rgCheck.ItemIndex])+' CHECK OPTION';