diff --git a/source/event_editor.pas b/source/event_editor.pas index 359b40e8..c8940d75 100644 --- a/source/event_editor.pas +++ b/source/event_editor.pas @@ -4,7 +4,7 @@ interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, - Vcl.Dialogs, Vcl.StdCtrls, SynEdit, SynMemo, SynRegExpr, Vcl.ComCtrls, Vcl.ExtCtrls, System.WideStrUtils, + Vcl.Dialogs, Vcl.StdCtrls, Vcl.Menus, SynEdit, SynMemo, SynRegExpr, Vcl.ComCtrls, Vcl.ExtCtrls, System.WideStrUtils, apphelpers, dbconnection, dbstructures, gnugettext, extra_controls; type @@ -81,6 +81,7 @@ begin 'DAY_HOUR|DAY_MINUTE|DAY_SECOND|HOUR_MINUTE|HOUR_SECOND|MINUTE_SECOND'); grpState.Items := Explode('|', 'Enable|Disable|Disable on slave'); FMainSynMemo := SynMemoBody; + btnSave.Hint := ShortCutToText(MainForm.actSaveSQL.ShortCut); end; diff --git a/source/main.pas b/source/main.pas index 5926e399..00005c42 100644 --- a/source/main.pas +++ b/source/main.pas @@ -5023,18 +5023,37 @@ end; procedure TMainForm.actSaveSQLExecute(Sender: TObject); var i: Integer; + ObjEditor: TDBObjectEditor; + Handled: Boolean; begin - if QueryTabs.ActiveTab.MemoFilename <> '' then begin - QueryTabs.ActiveTab.SaveContents(QueryTabs.ActiveTab.MemoFilename, False); - for i:=0 to QueryTabs.Count-1 do begin - if QueryTabs[i] = QueryTabs.ActiveTab then - continue; - if QueryTabs[i].MemoFilename = QueryTabs.ActiveTab.MemoFilename then - QueryTabs[i].Memo.Modified := True; + Handled := False; + if QueryTabs.HasActiveTab then begin + // Save SQL tab contents to file + if QueryTabs.ActiveTab.MemoFilename <> '' then begin + QueryTabs.ActiveTab.SaveContents(QueryTabs.ActiveTab.MemoFilename, False); + for i:=0 to QueryTabs.Count-1 do begin + if QueryTabs[i] = QueryTabs.ActiveTab then + continue; + if QueryTabs[i].MemoFilename = QueryTabs.ActiveTab.MemoFilename then + QueryTabs[i].Memo.Modified := True; + end; + ValidateQueryControls(Sender); + end else + actSaveSQLAsExecute(Sender); + Handled := True; + end + else if PageControlMain.ActivePage = tabEditor then begin + // Save table, procedure, etc. + ObjEditor := ActiveObjectEditor; + if Assigned(ObjEditor) and ObjEditor.Modified then begin + ObjEditor.ApplyModifications; + Handled := True; end; - ValidateQueryControls(Sender); - end else - actSaveSQLAsExecute(Sender); + end; + if not Handled then begin + MessageBeep(MB_ICONASTERISK); + end; + end; @@ -6585,7 +6604,7 @@ var NotEmpty, HasSelection, HasConnection: Boolean; Tab: TQueryTab; cap: String; - InQueryTab: Boolean; + InQueryTab, InEditorTab: Boolean; Conn: TDBConnection; begin // Enable/disable TActions, according to the current window/connection state @@ -6604,6 +6623,7 @@ begin SetTabCaption(Tab.TabSheet.PageIndex, cap); end; InQueryTab := QueryTabs.HasActiveTab; + InEditorTab := PageControlMain.ActivePage = tabEditor; Tab := QueryTabs.ActiveTab; NotEmpty := InQueryTab and (Tab.Memo.GetTextLen > 0); HasSelection := InQueryTab and Tab.Memo.SelAvail; @@ -6614,7 +6634,7 @@ begin actExecuteCurrentQuery.Enabled := actExecuteQuery.Enabled; actExplainCurrentQuery.Enabled := actExecuteQuery.Enabled and (Conn.Parameters.NetTypeGroup in [ngMySQL, ngPgSQL, ngSQLite]); actSaveSQLAs.Enabled := InQueryTab and NotEmpty; - actSaveSQL.Enabled := actSaveSQLAs.Enabled and Tab.Memo.Modified; + actSaveSQL.Enabled := (actSaveSQLAs.Enabled and Tab.Memo.Modified) or InEditorTab; actSaveSQLselection.Enabled := InQueryTab and HasSelection; actSaveSQLSnippet.Enabled := InQueryTab and NotEmpty; actSaveSQLSelectionSnippet.Enabled := InQueryTab and HasSelection; diff --git a/source/routine_editor.pas b/source/routine_editor.pas index ec5e98b8..d1a14873 100644 --- a/source/routine_editor.pas +++ b/source/routine_editor.pas @@ -116,6 +116,7 @@ begin Parameters := TRoutineParamList.Create; editName.MaxLength := NAME_LEN; FMainSynMemo := SynMemoBody; + btnSave.Hint := ShortCutToText(MainForm.actSaveSQL.ShortCut); end; diff --git a/source/table_editor.pas b/source/table_editor.pas index f38e2c92..6ac8daab 100644 --- a/source/table_editor.pas +++ b/source/table_editor.pas @@ -255,6 +255,7 @@ begin FDeletedCheckConstraints.Duplicates := dupIgnore; editName.MaxLength := NAME_LEN; FAlterRestrictedMessageDisplayed := False; + btnSave.Hint := ShortCutToText(MainForm.actSaveSQL.ShortCut); end; diff --git a/source/trigger_editor.pas b/source/trigger_editor.pas index 37c37c9b..a086b654 100644 --- a/source/trigger_editor.pas +++ b/source/trigger_editor.pas @@ -3,7 +3,7 @@ unit trigger_editor; interface uses - Winapi.Windows, System.SysUtils, System.Classes, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, SynEdit, SynMemo, + Winapi.Windows, System.SysUtils, System.Classes, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Menus, SynEdit, SynMemo, SynCompletionProposal, SynRegExpr, dbconnection, dbstructures, dbstructures.mysql, apphelpers, gnugettext, Vcl.ComCtrls, extra_controls; @@ -78,6 +78,7 @@ begin SynCompletionProposalStatement.TimerInterval := Mainform.SynCompletionProposal.TimerInterval; SynCompletionProposalStatement.Margin := Mainform.SynCompletionProposal.Margin; FMainSynMemo := SynMemoBody; + btnSave.Hint := ShortCutToText(MainForm.actSaveSQL.ShortCut); end; diff --git a/source/view.pas b/source/view.pas index 1ed9d33a..1b364c17 100644 --- a/source/view.pas +++ b/source/view.pas @@ -4,7 +4,7 @@ interface uses Winapi.Windows, System.SysUtils, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, SynEdit, SynMemo, - Vcl.ExtCtrls, + Vcl.ExtCtrls, Vcl.Menus, dbconnection, dbstructures, dbstructures.mysql, apphelpers, gnugettext, Vcl.ComCtrls, extra_controls; type @@ -66,6 +66,7 @@ begin comboSecurity.Items.Add('Definer'); comboSecurity.Items.Add('Invoker'); FMainSynMemo := SynMemoBody; + btnSave.Hint := ShortCutToText(MainForm.actSaveSQL.ShortCut); end;