SpkToolbar: Add toggle behavior to toolbar buttons (ButtonKind = bkButton). Together with new properties Checked and GroupIndex this can be used for checkbox and radiobutton effects of toggle buttons.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@5386 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2016-11-27 16:13:48 +00:00
parent 6642ec065b
commit 32d2136b1c
3 changed files with 333 additions and 109 deletions

View File

@ -186,6 +186,19 @@ type
procedure SaveToXML(Node: TSpkXMLNode);
procedure Reset(AStyle: TSpkStyle = spkOffice2007Blue);
procedure GetActiveColors(IsChecked: Boolean; out AFrameColor,
AInnerLightColor, AInnerDarkColor, AGradientFromColor,
AGradientToColor: TColor; out AGradientKind: TBackgroundKind;
ABrightenBy: Integer = 0);
procedure GetHotTrackColors(IsChecked: Boolean; out AFrameColor,
AInnerLightColor, AInnerDarkColor, AGradientFromColor,
AGradientToColor: TColor; out AGradientKind: TBackgroundKind;
ABrightenBy: Integer = 0);
procedure GetIdleColors(IsChecked: Boolean; out AFrameColor,
AInnerLightColor, AInnerDarkColor, AGradientFromColor,
AGradientToColor: TColor; out AGradientKind: TBackgroundKind;
ABrightenBy: Integer = 0);
published
property CaptionFont: TFont read FCaptionFont write SetCaptionFont;
property IdleFrameColor: TColor read FIdleFrameColor write SetIdleFrameColor;
@ -257,7 +270,7 @@ procedure SetDefaultFont(AFont: TFont);
implementation
uses
LCLIntf, LCLType, typinfo;
LCLIntf, LCLType, typinfo, spkGraphTools;
procedure SaveFontToPascal(AList: TStrings; AFont: TFont; AName: String);
var
@ -801,6 +814,101 @@ begin
raise AssignException.create('TSpkElementAppearance.Assign: Nie mogê przypisaæ obiektu '+Source.ClassName+' do TSpkElementAppearance!');
end;
procedure TSpkElementAppearance.GetActiveColors(IsChecked: Boolean;
out AFrameColor, AInnerLightColor, AInnerDarkColor, AGradientFromColor,
AGradientToColor: TColor; out AGradientKind: TBackgroundKind;
ABrightenBy: Integer = 0);
const
DELTA = -20;
begin
AFrameColor := FActiveFrameColor;
AInnerLightColor := FActiveInnerLightColor;
AInnerDarkColor := FActiveInnerDarkColor;
AGradientFromColor := FActiveGradientFromColor;
AGradientToColor := FActiveGradientToColor;
AGradientKind := FActiveGradientType;
if IsChecked then
ABrightenBy := DELTA + ABrightenBy;
if ABrightenBy <> 0 then
begin
AFrameColor := TColorTools.Brighten(AFrameColor, ABrightenBy);
AInnerLightColor := TColorTools.Brighten(AInnerLightColor, ABrightenBy);
AInnerDarkColor := TColortools.Brighten(AInnerDarkColor, ABrightenBy);
AGradientFromColor := TColorTools.Brighten(AGradientFromColor, ABrightenBy);
AGradientToColor := TColorTools.Brighten(AGradientToColor, ABrightenBy);
end;
end;
procedure TSpkElementAppearance.GetIdleColors(IsChecked: Boolean;
out AFrameColor, AInnerLightColor, AInnerDarkColor, AGradientFromColor,
AGradientToColor: TColor; out AGradientKind: TBackgroundKind;
ABrightenBy: Integer = 0);
const
DELTA = 10;
begin
if IsChecked then
begin
ABrightenBy := DELTA + ABrightenBy;
AFrameColor := FActiveFrameColor;
AInnerLightColor := FActiveInnerLightColor;
AInnerDarkColor := FActiveInnerDarkColor;
AGradientFromColor := FActiveGradientFromColor;
AGradientToColor := FActiveGradientToColor;
AGradientKind := FActiveGradientType;
end else
begin
AFrameColor := FIdleFrameColor;
AInnerLightColor := FIdleInnerLightColor;
AInnerDarkColor := FIdleInnerDarkColor;
AGradientFromColor := FIdleGradientFromColor;
AGradientToColor := FIdleGradientToColor;
AGradientKind := FIdleGradientType;
end;
if ABrightenBy <> 0 then
begin
AFrameColor := TColorTools.Brighten(AFrameColor, ABrightenBy);
AInnerLightColor := TColorTools.Brighten(AInnerLightColor, ABrightenBy);
AInnerDarkColor := TColorTools.Brighten(AInnerLightColor, ABrightenBy);
AGradientFromColor := TColorTools.Brighten(AGradientFromColor, ABrightenBy);
AGradientToColor := TColorTools.Brighten(AGradientToColor, ABrightenBy);
end;
end;
procedure TSpkElementAppearance.GetHotTrackColors(IsChecked: Boolean;
out AFrameColor, AInnerLightColor, AInnerDarkColor, AGradientFromColor,
AGradientToColor: TColor; out AGradientKind: TBackgroundKind;
ABrightenBy: Integer = 0);
const
DELTA = 20;
begin
if IsChecked then begin
ABrightenBy := ABrightenBy + DELTA;
AFrameColor := FActiveFrameColor;
AInnerLightColor := FActiveInnerLightColor;
AInnerDarkColor := FActiveInnerDarkColor;
AGradientFromColor := FActiveGradientFromColor;
AGradientToColor := FActiveGradientToColor;
AGradientKind := FActiveGradientType;
end else begin
AFrameColor := FHotTrackFrameColor;
AInnerLightColor := FHotTrackInnerLightColor;
AInnerDarkColor := FHotTrackInnerDarkColor;
AGradientFromColor := FHotTrackGradientFromColor;
AGradientToColor := FHotTrackGradientToColor;
AGradientKind := FHotTrackGradientType;
end;
if ABrightenBy <> 0 then begin
AFrameColor := TColorTools.Brighten(AFrameColor, ABrightenBy);
AInnerLightColor := TColorTools.Brighten(AInnerLightColor, ABrightenBy);
AInnerDarkColor := TColortools.Brighten(AInnerDarkColor, ABrightenBy);
AGradientFromColor := TColorTools.Brighten(AGradientFromColor, ABrightenBy);
AGradientToColor := TColorTools.Brighten(AGradientToColor, ABrightenBy);
end;
end;
procedure TSpkElementAppearance.LoadFromXML(Node: TSpkXMLNode);
var
Subnode: TSpkXMLNode;