diff --git a/source/connections.dfm b/source/connections.dfm index 6dd90073..a8daaad5 100644 --- a/source/connections.dfm +++ b/source/connections.dfm @@ -115,6 +115,7 @@ object connform: Tconnform Align = alClient Images = MainForm.VirtualImageListMain TabOrder = 6 + OnChange = PageControlDetailsChange object tabStart: TTabSheet Caption = 'Start' ImageIndex = 112 diff --git a/source/connections.pas b/source/connections.pas index 92c9620f..c3c41c7d 100644 --- a/source/connections.pas +++ b/source/connections.pas @@ -199,6 +199,7 @@ type procedure actFilterExecute(Sender: TObject); procedure timerEditFilterDelayTimer(Sender: TObject); procedure chkSSHActiveClick(Sender: TObject); + procedure PageControlDetailsChange(Sender: TObject); private { Private declarations } FLoaded: Boolean; @@ -1528,6 +1529,7 @@ begin menuSave.Enabled := btnSave.Enabled; menuSaveAs.Enabled := SessionFocused; menuDelete.Enabled := btnDelete.Enabled; + TExtForm.PageControlTabHighlight(PageControlDetails); Caption := GetWindowCaption; end; @@ -1574,6 +1576,11 @@ begin FButtonAnimationStep := 0; end; +procedure Tconnform.PageControlDetailsChange(Sender: TObject); +begin + ValidateControls; +end; + procedure Tconnform.PickFile(Sender: TObject); var Selector: TOpenDialog; diff --git a/source/event_editor.pas b/source/event_editor.pas index b4c5b085..359b40e8 100644 --- a/source/event_editor.pas +++ b/source/event_editor.pas @@ -5,7 +5,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, - apphelpers, dbconnection, dbstructures, gnugettext; + apphelpers, dbconnection, dbstructures, gnugettext, extra_controls; type TFrame = TDBObjectEditor; @@ -196,6 +196,7 @@ begin btnSave.Enabled := Modified; btnDiscard.Enabled := Modified; Mainform.ShowStatusMsg; + TExtForm.PageControlTabHighlight(PageControlMain); Screen.Cursor := crDefault; end; @@ -309,6 +310,7 @@ end; procedure TfrmEventEditor.PageControlMainChange(Sender: TObject); begin UpdateSQLcode; + TExtForm.PageControlTabHighlight(PageControlMain); end; diff --git a/source/extra_controls.pas b/source/extra_controls.pas index 27b1fa15..73b9f587 100644 --- a/source/extra_controls.pas +++ b/source/extra_controls.pas @@ -4,7 +4,7 @@ interface uses System.Classes, System.SysUtils, Vcl.Forms, Winapi.Windows, Winapi.Messages, System.Types, Vcl.StdCtrls, Vcl.Clipbrd, - SizeGrip, apphelpers, Vcl.Graphics, Vcl.Dialogs, gnugettext, Vcl.ImgList, Vcl.ComCtrls, + SizeGrip, apphelpers, Vcl.Graphics, Vcl.Dialogs, gnugettext, Vcl.ImgList, Vcl.VirtualImageList, Vcl.ComCtrls, Winapi.ShLwApi, Vcl.ExtCtrls, VirtualTrees, VirtualTrees.Types, SynRegExpr, Vcl.Controls, Winapi.ShlObj, SynEditMiscClasses, SynUnicode; @@ -29,6 +29,7 @@ type class procedure RestoreListSetup(List: TVirtualStringTree); function ScaleSize(x: Extended): Integer; overload; class function ScaleSize(x: Extended; Control: TControl): Integer; overload; + class procedure PageControlTabHighlight(PageControl: TPageControl); end; // Modern file-open-dialog with high DPI support and encoding selector @@ -417,6 +418,31 @@ begin end; +class procedure TExtForm.PageControlTabHighlight(PageControl: TPageControl); +var + i, CurrentImage, CountOriginals: Integer; + Images: TVirtualImageList; +begin + // Set grayscale icon on inactive tabs + if not (PageControl.Images is TVirtualImageList) then + Exit; + Images := PageControl.Images as TVirtualImageList; + CountOriginals := Images.ImageCollection.Count; + + for i:=0 to PageControl.PageCount-1 do begin + CurrentImage := PageControl.Pages[i].ImageIndex; + if PageControl.ActivePageIndex = i then begin + if CurrentImage >= CountOriginals then + PageControl.Pages[i].ImageIndex := CurrentImage - CountOriginals; + end + else begin + if CurrentImage < CountOriginals then + PageControl.Pages[i].ImageIndex := CurrentImage + CountOriginals; + end; + end; +end; + + { TExtFileOpenDialog } diff --git a/source/main.pas b/source/main.pas index abde7e61..a9735f78 100644 --- a/source/main.pas +++ b/source/main.pas @@ -6272,6 +6272,7 @@ begin else Exit; // Silence compiler warning list.SetFocus; UpdateFilterPanel(Sender); + PageControlTabHighlight(PageControlHost); end; @@ -6527,6 +6528,7 @@ begin ValidateQueryControls(Sender); UpdateLineCharPanel; + PageControlTabHighlight(PageControlMain); end; @@ -9044,7 +9046,10 @@ begin end else begin VirtualImageListMain.ImageCollection := ImageCollectionIcons8; end; + // Add all normal color icons from collection to virtual image list VirtualImageListMain.Add('', 0, VirtualImageListMain.ImageCollection.Count-1); + // Add all icons again in disabled/grayscale mode, used in TExtForm.PageControlTabHighlight + VirtualImageListMain.AddDisabled('', 0, VirtualImageListMain.ImageCollection.Count-1); end; diff --git a/source/preferences.pas b/source/preferences.pas index f37399af..c2d101b9 100644 --- a/source/preferences.pas +++ b/source/preferences.pas @@ -282,6 +282,7 @@ procedure TfrmPreferences.pagecontrolMainChange(Sender: TObject); begin // See OnChanging procedure btnApply.Enabled := FWasModified; + TExtForm.PageControlTabHighlight(pagecontrolMain); end; @@ -800,6 +801,8 @@ begin // Disable global shortcuts MainForm.ActionList1.State := asSuspended; + TExtForm.PageControlTabHighlight(pagecontrolMain); + FRestartOptionTouched := False; btnApply.Enabled := False; screen.Cursor := crdefault; diff --git a/source/routine_editor.dfm b/source/routine_editor.dfm index 8611878b..728884f7 100644 --- a/source/routine_editor.dfm +++ b/source/routine_editor.dfm @@ -131,6 +131,7 @@ object frmRoutineEditor: TfrmRoutineEditor Constraints.MinHeight = 166 Images = MainForm.VirtualImageListMain TabOrder = 0 + OnChange = PageControlMainChange object tabOptions: TTabSheet Caption = 'Options' ImageIndex = 39 diff --git a/source/routine_editor.pas b/source/routine_editor.pas index ca107825..aaeeb699 100644 --- a/source/routine_editor.pas +++ b/source/routine_editor.pas @@ -77,6 +77,7 @@ type procedure btnDiscardClick(Sender: TObject); procedure comboDefinerDropDown(Sender: TObject); procedure btnMoveParamClick(Sender: TObject); + procedure PageControlMainChange(Sender: TObject); private { Private declarations } FAlterRoutineType: String; @@ -181,6 +182,7 @@ begin btnRunProc.Left := Width - btnRunProc.Width - 3; Mainform.actRunRoutines.Enabled := ObjectExists; Mainform.ShowStatusMsg; + TExtForm.PageControlTabHighlight(PageControlMain); Screen.Cursor := crDefault; end; @@ -202,6 +204,11 @@ begin end; +procedure TfrmRoutineEditor.PageControlMainChange(Sender: TObject); +begin + TExtForm.PageControlTabHighlight(PageControlMain); +end; + procedure TfrmRoutineEditor.comboTypeSelect(Sender: TObject); var isfunc: Boolean; diff --git a/source/table_editor.pas b/source/table_editor.pas index 336323eb..c3bd51e9 100644 --- a/source/table_editor.pas +++ b/source/table_editor.pas @@ -2287,6 +2287,7 @@ begin SynMemoAlterCode.SetFocus; end; UpdateSQLcode; + TExtForm.PageControlTabHighlight(PageControlMain); end; diff --git a/source/tabletools.pas b/source/tabletools.pas index 2de45ffc..58ae552e 100644 --- a/source/tabletools.pas +++ b/source/tabletools.pas @@ -538,6 +538,7 @@ var begin // Fired after various user clicks, and also on implicit child node checking SomeChecked := TreeObjects.CheckedCount > 0; + TExtForm.PageControlTabHighlight(tabsTools); btnSeeResults.Visible := tabsTools.ActivePage = tabFind; lblCheckedSize.Caption := f_('Selected objects size: %s', [FormatByteNumber(FObjectSizes)]); if tabsTools.ActivePage = tabMaintenance then begin diff --git a/source/trigger_editor.dfm b/source/trigger_editor.dfm index 9f50e9a1..f9062310 100644 --- a/source/trigger_editor.dfm +++ b/source/trigger_editor.dfm @@ -26,6 +26,7 @@ object frmTriggerEditor: TfrmTriggerEditor Align = alTop Images = MainForm.VirtualImageListMain TabOrder = 4 + OnChange = PageControlMainChange object tabOptions: TTabSheet Caption = 'Options' ImageIndex = 39 diff --git a/source/trigger_editor.pas b/source/trigger_editor.pas index 8f48f2f2..37c37c9b 100644 --- a/source/trigger_editor.pas +++ b/source/trigger_editor.pas @@ -37,6 +37,7 @@ type var CurrentInput: String; var x, y: Integer; var CanExecute: Boolean); procedure comboDefinerDropDown(Sender: TObject); procedure comboChange(Sender: TObject); + procedure PageControlMainChange(Sender: TObject); private { Private declarations } function ComposeCreateStatement: String; @@ -171,6 +172,7 @@ begin btnSave.Enabled := Modified; btnDiscard.Enabled := Modified; Mainform.ShowStatusMsg; + TExtForm.PageControlTabHighlight(PageControlMain); Screen.Cursor := crDefault; end; @@ -188,6 +190,11 @@ begin end; +procedure TfrmTriggerEditor.PageControlMainChange(Sender: TObject); +begin + TExtForm.PageControlTabHighlight(PageControlMain); +end; + procedure TfrmTriggerEditor.btnDiscardClick(Sender: TObject); begin // Reinit editor, discarding changes diff --git a/source/view.dfm b/source/view.dfm index 621d8248..385c86f6 100644 --- a/source/view.dfm +++ b/source/view.dfm @@ -112,6 +112,7 @@ object frmView: TfrmView Align = alTop Images = MainForm.VirtualImageListMain TabOrder = 0 + OnChange = PageControlMainChange object tabOptions: TTabSheet Caption = 'Options' ImageIndex = 14 diff --git a/source/view.pas b/source/view.pas index 1822847f..1ed9d33a 100644 --- a/source/view.pas +++ b/source/view.pas @@ -5,7 +5,7 @@ interface uses Winapi.Windows, System.SysUtils, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, SynEdit, SynMemo, Vcl.ExtCtrls, - dbconnection, dbstructures, dbstructures.mysql, apphelpers, gnugettext, Vcl.ComCtrls; + dbconnection, dbstructures, dbstructures.mysql, apphelpers, gnugettext, Vcl.ComCtrls, extra_controls; type TFrame = TDBObjectEditor; @@ -33,6 +33,7 @@ type procedure btnDiscardClick(Sender: TObject); procedure Modification(Sender: TObject); procedure comboDefinerDropDown(Sender: TObject); + procedure PageControlMainChange(Sender: TObject); private { Private declarations } function ComposeCreateStatement: TSQLBatch; @@ -131,6 +132,7 @@ begin btnSave.Enabled := Modified; btnDiscard.Enabled := Modified; Mainform.ShowStatusMsg; + TExtForm.PageControlTabHighlight(PageControlMain); Screen.Cursor := crDefault; end; @@ -212,6 +214,12 @@ begin end; +procedure TfrmView.PageControlMainChange(Sender: TObject); +begin + TExtForm.PageControlTabHighlight(PageControlMain); +end; + + function TfrmView.ComposeCreateStatement: TSQLBatch; var sql, ViewName, RenameView: String;