261 lines
8.1 KiB
ObjectPascal
261 lines
8.1 KiB
ObjectPascal
// SPDX-License-Identifier: LGPL-3.0-linking-exception
|
|
{******************************* CONTRIBUTOR(S) ******************************
|
|
- Edivando S. Santos Brasil | mailedivando@gmail.com
|
|
(Compatibility with delphi VCL 11/2018)
|
|
|
|
***************************** END CONTRIBUTOR(S) *****************************}
|
|
unit BCDefaultThemeManager;
|
|
|
|
{$I bgracontrols.inc}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, {$IFDEF FPC}LResources, CustomDrawnDrawers,{$ENDIF}
|
|
Forms, Controls, Graphics, Dialogs,
|
|
{$IFNDEF FPC}BGRAGraphics, GraphType, FPImage, {$ENDIF}
|
|
BCButton, BCButtonFocus, BCNumericKeyboard, BCThemeManager,
|
|
BCSamples, {$IFDEF FPC}BGRACustomDrawn,{$ENDIF} BCKeyboard;
|
|
|
|
type
|
|
|
|
{ TBCDefaultThemeManager }
|
|
|
|
TBCDefaultThemeManager = class(TBCThemeManager)
|
|
private
|
|
FBCStyle: TBCSampleStyle;
|
|
FButton: TBCButton;
|
|
FButtonFocus: TBCButtonFocus;
|
|
FCDStyle: TCDDrawStyle;
|
|
procedure SetFBCStyle(AValue: TBCSampleStyle);
|
|
procedure SetFButton(AValue: TBCButton);
|
|
procedure SetFButtonFocus(AValue: TBCButtonFocus);
|
|
procedure SetFCDStyle(AValue: TCDDrawStyle);
|
|
protected
|
|
|
|
public
|
|
constructor Create(AOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
public
|
|
procedure Apply(AControl: TWinControl); override;
|
|
procedure Apply(); override;
|
|
published
|
|
property Button: TBCButton read FButton write SetFButton;
|
|
property ButtonFocus: TBCButtonFocus read FButtonFocus write SetFButtonFocus;
|
|
property BCStyle: TBCSampleStyle read FBCStyle write SetFBCStyle;
|
|
property CDStyle: TCDDrawStyle read FCDStyle write SetFCDStyle;
|
|
end;
|
|
|
|
{$IFDEF FPC}procedure Register;{$ENDIF}
|
|
|
|
implementation
|
|
|
|
{$IFDEF FPC}procedure Register;
|
|
begin
|
|
RegisterComponents('BGRA Controls', [TBCDefaultThemeManager]);
|
|
end;
|
|
{$ENDIF}
|
|
|
|
{ TBCDefaultThemeManager }
|
|
|
|
procedure TBCDefaultThemeManager.SetFButton(AValue: TBCButton);
|
|
begin
|
|
if FButton = AValue then
|
|
Exit;
|
|
FButton := AValue;
|
|
end;
|
|
|
|
procedure TBCDefaultThemeManager.SetFBCStyle(AValue: TBCSampleStyle);
|
|
begin
|
|
if FBCStyle = AValue then
|
|
Exit;
|
|
FBCStyle := AValue;
|
|
end;
|
|
|
|
procedure TBCDefaultThemeManager.SetFButtonFocus(AValue: TBCButtonFocus);
|
|
begin
|
|
if FButtonFocus = AValue then
|
|
Exit;
|
|
FButtonFocus := AValue;
|
|
end;
|
|
|
|
procedure TBCDefaultThemeManager.SetFCDStyle(AValue: TCDDrawStyle);
|
|
begin
|
|
if FCDStyle = AValue then
|
|
Exit;
|
|
FCDStyle := AValue;
|
|
end;
|
|
|
|
constructor TBCDefaultThemeManager.Create(AOwner: TComponent);
|
|
begin
|
|
inherited Create(AOwner);
|
|
FBCStyle := ssDefault;
|
|
FCDStyle := dsDefault;
|
|
end;
|
|
|
|
destructor TBCDefaultThemeManager.Destroy;
|
|
begin
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TBCDefaultThemeManager.Apply(AControl: TWinControl);
|
|
var
|
|
i: integer;
|
|
removeTempButton: boolean;
|
|
removeTempButtonFocus: boolean;
|
|
tempButton: TBCButton;
|
|
tempButtonFocus: TBCButtonFocus;
|
|
begin
|
|
removeTempButton := False;
|
|
removeTempButtonFocus := False;
|
|
|
|
if (Assigned(FButton)) and (FBCStyle = ssDefault) then
|
|
tempButton := FButton
|
|
else
|
|
begin
|
|
tempButton := TBCButton.Create(Self);
|
|
tempButton.Name := 'BCDefaultThemeManager_tempButton';
|
|
removeTempButton := True;
|
|
StyleButtonsSample(tempButton, FBCStyle);
|
|
end;
|
|
|
|
if (Assigned(FButton)) and (FBCStyle = ssDefault) then
|
|
tempButtonFocus := FButtonFocus
|
|
else
|
|
begin
|
|
tempButtonFocus := TBCButtonFocus.Create(Self);
|
|
tempButtonFocus.Name := 'BCDefaultThemeManager_tempButtonFocus';
|
|
removeTempButtonFocus := True;
|
|
StyleButtonsFocusSample(tempButtonFocus, FBCStyle);
|
|
end;
|
|
|
|
{ Controls }
|
|
for i := 0 to AControl.ControlCount - 1 do
|
|
begin
|
|
{ BCButton }
|
|
if (AControl.Controls[i] is TBCButton) then
|
|
with TBCButton(AControl.Controls[i]) do
|
|
if (Assigned(ThemeManager)) and
|
|
(TBCDefaultThemeManager(ThemeManager).Name = Self.Name) and
|
|
(tempButton.Name <> AControl.Controls[i].Name) then
|
|
begin
|
|
Assign(tempButton);
|
|
end;
|
|
{ BCButtonFocus }
|
|
if (AControl.Controls[i] is TBCButtonFocus) then
|
|
with TBCButtonFocus(AControl.Controls[i]) do
|
|
if (Assigned(ThemeManager)) and
|
|
(TBCDefaultThemeManager(ThemeManager).Name = Self.Name) then
|
|
begin
|
|
Assign(tempButtonFocus);
|
|
end;
|
|
{ Custom Drawn }
|
|
if (AControl.Controls[i] is TBCDButton) then
|
|
with TBCDButton(AControl.Controls[i]) do
|
|
if (Assigned(ThemeManager)) and
|
|
(TBCDefaultThemeManager(ThemeManager).Name = Self.Name) and
|
|
(tempButtonFocus.Name <> AControl.Controls[i].Name) then
|
|
begin
|
|
DrawStyle := CDStyle;
|
|
end;
|
|
if (AControl.Controls[i] is TBCDEdit) then
|
|
with TBCDEdit(AControl.Controls[i]) do
|
|
if (Assigned(ThemeManager)) and
|
|
(TBCDefaultThemeManager(ThemeManager).Name = Self.Name) and
|
|
(tempButtonFocus.Name <> AControl.Controls[i].Name) then
|
|
begin
|
|
DrawStyle := CDStyle;
|
|
end;
|
|
if (AControl.Controls[i] is TBCDStaticText) then
|
|
with TBCDStaticText(AControl.Controls[i]) do
|
|
if (Assigned(ThemeManager)) and
|
|
(TBCDefaultThemeManager(ThemeManager).Name = Self.Name) and
|
|
(tempButtonFocus.Name <> AControl.Controls[i].Name) then
|
|
begin
|
|
DrawStyle := CDStyle;
|
|
end;
|
|
if (AControl.Controls[i] is TBCDProgressBar) then
|
|
with TBCDProgressBar(AControl.Controls[i]) do
|
|
if (Assigned(ThemeManager)) and
|
|
(TBCDefaultThemeManager(ThemeManager).Name = Self.Name) and
|
|
(tempButtonFocus.Name <> AControl.Controls[i].Name) then
|
|
begin
|
|
DrawStyle := CDStyle;
|
|
end;
|
|
if (AControl.Controls[i] is TBCDSpinEdit) then
|
|
with TBCDSpinEdit(AControl.Controls[i]) do
|
|
if (Assigned(ThemeManager)) and
|
|
(TBCDefaultThemeManager(ThemeManager).Name = Self.Name) and
|
|
(tempButtonFocus.Name <> AControl.Controls[i].Name) then
|
|
begin
|
|
DrawStyle := CDStyle;
|
|
end;
|
|
if (AControl.Controls[i] is TBCDCheckBox) then
|
|
with TBCDCheckBox(AControl.Controls[i]) do
|
|
if (Assigned(ThemeManager)) and
|
|
(TBCDefaultThemeManager(ThemeManager).Name = Self.Name) and
|
|
(tempButtonFocus.Name <> AControl.Controls[i].Name) then
|
|
begin
|
|
DrawStyle := CDStyle;
|
|
end;
|
|
if (AControl.Controls[i] is TBCDRadioButton) then
|
|
with TBCDRadioButton(AControl.Controls[i]) do
|
|
if (Assigned(ThemeManager)) and
|
|
(TBCDefaultThemeManager(ThemeManager).Name = Self.Name) and
|
|
(tempButtonFocus.Name <> AControl.Controls[i].Name) then
|
|
begin
|
|
DrawStyle := CDStyle;
|
|
end;
|
|
end;
|
|
{ Components }
|
|
for i := 0 to AControl.ComponentCount - 1 do
|
|
begin
|
|
{ BCNumericKeyboard }
|
|
if (AControl.Components[i] is TBCNumericKeyboard) then
|
|
with TBCNumericKeyboard(AControl.Components[i]) do
|
|
if (Assigned(ThemeManager)) and
|
|
(TBCDefaultThemeManager(ThemeManager).Name = Self.Name) and
|
|
(tempButton.Name <> TBCNumericKeyboard(AControl.Components[i]).ButtonStyle.Name) then
|
|
begin
|
|
ButtonStyle.Assign(tempButton);
|
|
UpdateButtonStyle;
|
|
end;
|
|
{ BCRealNumericKeyboard }
|
|
if (AControl.Components[i] is TBCRealNumericKeyboard) then
|
|
with TBCRealNumericKeyboard(AControl.Components[i]) do
|
|
if (Assigned(ThemeManager)) and
|
|
(TBCDefaultThemeManager(ThemeManager).Name = Self.Name) and
|
|
(tempButton.Name <> TBCRealNumericKeyboard(AControl.Components[i]).ButtonStyle.Name) then
|
|
begin
|
|
ButtonStyle.Assign(tempButton);
|
|
UpdateButtonStyle;
|
|
end;
|
|
{ BCKeyboard }
|
|
if (AControl.Components[i] is TBCKeyboard) then
|
|
with TBCKeyboard(AControl.Components[i]) do
|
|
if (Assigned(ThemeManager)) and
|
|
(TBCDefaultThemeManager(ThemeManager).Name = Self.Name) and
|
|
(tempButton.Name <> TBCKeyboard(AControl.Components[i]).ButtonStyle.Name) then
|
|
begin
|
|
ButtonStyle.Assign(tempButton);
|
|
UpdateButtonStyle;
|
|
end;
|
|
end;
|
|
|
|
if removeTempButton then
|
|
tempButton.Free;
|
|
|
|
if removeTempButtonFocus then
|
|
tempButtonFocus.Free;
|
|
end;
|
|
|
|
procedure TBCDefaultThemeManager.Apply;
|
|
begin
|
|
if Self.Owner is TWinControl then
|
|
Apply(Self.Owner as TWinControl)
|
|
else
|
|
raise Exception.Create('The parent is not TWinControl descendant.');
|
|
end;
|
|
|
|
end.
|