unit spkt_Appearance; {$mode Delphi} (******************************************************************************* * * * File: spkt_Appearance.pas * * Description: Base classes for the appearance classes of the toolbar elements* * Copyright: (c) 2009 by Spook. * * License: Modified LGPL (with linking exception, like Lazarus LCL) * ' See "license.txt" in this installation * * * *******************************************************************************) interface uses Graphics, Classes, Forms, SysUtils, SpkGUITools, SpkXMLParser, SpkXMLTools, spkt_Dispatch, spkt_Exceptions; type TSpkPaneStyle = ( psRectangleFlat, psRectangleEtched, psRectangleRaised, psDividerFlat, psDividerEtched, psDividerRaised ); TSpkElementStyle = (esRounded, esRectangle); TSpkStyle = ( spkOffice2007Blue, spkOffice2007Silver, spkOffice2007SilverTurquoise, spkMetroLight, spkMetroDark ); { TSpkTabAppearance } TSpkTabAppearance = class(TPersistent) private FDispatch: TSpkBaseAppearanceDispatch; FTabHeaderFont: TFont; FBorderColor: TColor; FGradientFromColor: TColor; FGradientToColor: TColor; FGradientType: TBackgroundKind; FInactiveHeaderFontColor: TColor; // Getter & setter methods procedure SetHeaderFont(const Value: TFont); procedure SetBorderColor(const Value: TColor); procedure SetGradientFromColor(const Value: TColor); procedure SetGradientToColor(const Value: TColor); procedure SetGradientType(const Value: TBackgroundKind); procedure SetInactiveHeaderFontColor(const Value: TColor); procedure TabHeaderFontChange(Sender: TObject); public // *** Constructor, destructor, Assign *** // Remarks: Appearance must have Assign because it exists as a // published property. constructor Create(ADispatch: TSpkBaseAppearanceDispatch); destructor Destroy; override; procedure Assign(Source: TPersistent); override; procedure LoadFromXML(Node: TSpkXMLNode); procedure SaveToPascal(AList: TStrings); procedure SaveToXML(Node: TSpkXMLNode); procedure Reset(AStyle: TSpkStyle = spkOffice2007Blue); published property TabHeaderFont: TFont read FTabHeaderFont write SetHeaderFont; property BorderColor: TColor read FBorderColor write SetBorderColor; property GradientFromColor: TColor read FGradientFromColor write SetGradientFromColor; property GradientToColor: TColor read FGradientToColor write SetGradientToColor; property GradientType: TBackgroundKind read FGradientType write SetGradientType; property InactiveTabHeaderFontColor: TColor read FInactiveHeaderFontColor write SetInactiveHeaderFontColor; end; { TSpkPaneAppearance } TSpkPaneAppearance = class(TPersistent) private FDispatch: TSpkBaseAppearanceDispatch; FCaptionFont: TFont; FBorderDarkColor: TColor; FBorderLightColor: TColor; FCaptionBgColor: TColor; FGradientFromColor: TColor; FGradientToColor: TColor; FGradientType: TBackgroundKind; FHotTrackBrightnessChange: Integer; FStyle: TSpkPaneStyle; procedure SetCaptionBgColor(const Value: TColor); procedure SetCaptionFont(const Value: TFont); procedure SetBorderDarkColor(const Value: TColor); procedure SetBorderLightColor(const Value: TColor); procedure SetGradientFromColor(const Value: TColor); procedure SetGradientToColor(const Value: TColor); procedure SetGradientType(const Value: TBackgroundKind); procedure SetHotTrackBrightnessChange(const Value: Integer); procedure SetStyle(const Value: TSpkPaneStyle); procedure CaptionFontChange(Sender: TObject); public constructor Create(ADispatch: TSpkBaseAppearanceDispatch); destructor Destroy; override; procedure Assign(Source: TPersistent); override; procedure LoadFromXML(Node: TSpkXMLNode); procedure SaveToPascal(AList: TStrings); procedure SaveToXML(Node: TSpkXMLNode); procedure Reset(AStyle: TSpkStyle = spkOffice2007Blue); published property BorderDarkColor: TColor read FBorderDarkColor write SetBorderDarkColor; property BorderLightColor: TColor read FBorderLightColor write SetBorderLightColor; property CaptionBgColor: TColor read FCaptionBgColor write SetCaptionBgColor; property CaptionFont: TFont read FCaptionFont write SetCaptionFont; property GradientFromColor: TColor read FGradientFromColor write SetGradientFromColor; property GradientToColor: TColor read FGradientToColor write SetGradientToColor; property GradientType: TBackgroundKind read FGradientType write SetGradientType; property HotTrackBrightnessChange: Integer read FHotTrackBrightnessChange write SetHotTrackBrightnessChange default 20; property Style: TSpkPaneStyle read FStyle write SetStyle default psRectangleEtched; end; { TSpkElementAppearance } TSpkElementAppearance = class(TPersistent) private FDispatch: TSpkBaseAppearanceDispatch; FCaptionFont: TFont; FIdleFrameColor: TColor; FIdleGradientFromColor: TColor; FIdleGradientToColor: TColor; FIdleGradientType: TBackgroundKind; FIdleInnerLightColor: TColor; FIdleInnerDarkColor: TColor; FIdleCaptionColor: TColor; FHotTrackFrameColor: TColor; FHotTrackGradientFromColor: TColor; FHotTrackGradientToColor: TColor; FHotTrackGradientType: TBackgroundKind; FHotTrackInnerLightColor: TColor; FHotTrackInnerDarkColor: TColor; FHotTrackCaptionColor: TColor; FHotTrackBrightnessChange: Integer; FActiveFrameColor: TColor; FActiveGradientFromColor: TColor; FActiveGradientToColor: TColor; FActiveGradientType: TBackgroundKind; FActiveInnerLightColor: TColor; FActiveInnerDarkColor: TColor; FActiveCaptionColor: TColor; FStyle: TSpkElementStyle; procedure SetActiveCaptionColor(const Value: TColor); procedure SetActiveFrameColor(const Value: TColor); procedure SetActiveGradientFromColor(const Value: TColor); procedure SetActiveGradientToColor(const Value: TColor); procedure SetActiveGradientType(const Value: TBackgroundKind); procedure SetActiveInnerDarkColor(const Value: TColor); procedure SetActiveInnerLightColor(const Value: TColor); procedure SetCaptionFont(const Value: TFont); procedure SetHotTrackCaptionColor(const Value: TColor); procedure SetHotTrackFrameColor(const Value: TColor); procedure SetHotTrackGradientFromColor(const Value: TColor); procedure SetHotTrackGradientToColor(const Value: TColor); procedure SetHotTrackGradientType(const Value: TBackgroundKind); procedure SetHotTrackInnerDarkColor(const Value: TColor); procedure SetHotTrackInnerLightColor(const Value: TColor); procedure SetHotTrackBrightnessChange(const Value: Integer); procedure SetIdleCaptionColor(const Value: TColor); procedure SetIdleFrameColor(const Value: TColor); procedure SetIdleGradientFromColor(const Value: TColor); procedure SetIdleGradientToColor(const Value: TColor); procedure SetIdleGradientType(const Value: TBackgroundKind); procedure SetIdleInnerDarkColor(const Value: TColor); procedure SetIdleInnerLightColor(const Value: TColor); procedure SetStyle(const Value: TSpkElementStyle); procedure CaptionFontChange(Sender: TObject); public constructor Create(ADispatch: TSpkBaseAppearanceDispatch); destructor Destroy; override; procedure Assign(Source: TPersistent); override; procedure LoadFromXML(Node: TSpkXMLNode); procedure SaveToPascal(AList: TStrings); 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; property IdleGradientFromColor: TColor read FIdleGradientFromColor write SetIdleGradientFromColor; property IdleGradientToColor: TColor read FIdleGradientToColor write SetIdleGradientToColor; property IdleGradientType: TBackgroundKind read FIdleGradientType write SetIdleGradientType; property IdleInnerLightColor: TColor read FIdleInnerLightColor write SetIdleInnerLightColor; property IdleInnerDarkColor: TColor read FIdleInnerDarkColor write SetIdleInnerDarkColor; property IdleCaptionColor: TColor read FIdleCaptionColor write SetIdleCaptionColor; property HotTrackFrameColor: TColor read FHotTrackFrameColor write SetHotTrackFrameColor; property HotTrackGradientFromColor: TColor read FHotTrackGradientFromColor write SetHotTrackGradientFromColor; property HotTrackGradientToColor: TColor read FHotTrackGradientToColor write SetHotTrackGradientToColor; property HotTrackGradientType: TBackgroundKind read FHotTrackGradientType write SetHotTrackGradientType; property HotTrackInnerLightColor: TColor read FHotTrackInnerLightColor write SetHotTrackInnerLightColor; property HotTrackInnerDarkColor: TColor read FHotTrackInnerDarkColor write SetHotTrackInnerDarkColor; property HotTrackCaptionColor: TColor read FHotTrackCaptionColor write SetHotTrackCaptionColor; property HotTrackBrightnessChange: Integer read FHotTrackBrightnessChange write SetHotTrackBrightnessChange default 20; property ActiveFrameColor: TColor read FActiveFrameColor write SetActiveFrameColor; property ActiveGradientFromColor: TColor read FActiveGradientFromColor write SetActiveGradientFromColor; property ActiveGradientToColor: TColor read FActiveGradientToColor write SetActiveGradientToColor; property ActiveGradientType: TBackgroundKind read FActiveGradientType write SetActiveGradientType; property ActiveInnerLightColor: TColor read FActiveInnerLightColor write SetActiveInnerLightColor; property ActiveInnerDarkColor: TColor read FActiveInnerDarkColor write SetActiveInnerDarkColor; property ActiveCaptionColor: TColor read FActiveCaptionColor write SetActiveCaptionColor; property Style: TSpkElementStyle read FStyle write SetStyle; end; { TSpkToolbarAppearance } TSpkToolbarAppearance = class; TSpkToolbarAppearanceDispatch = class(TSpkBaseAppearanceDispatch) private FToolbarAppearance: TSpkToolbarAppearance; public constructor Create(AToolbarAppearance: TSpkToolbarAppearance); procedure NotifyAppearanceChanged; override; end; TSpkToolbarAppearance = class(TPersistent) private FAppearanceDispatch: TSpkToolbarAppearanceDispatch; FTab: TSpkTabAppearance; FPane: TSpkPaneAppearance; FElement: TSpkElementAppearance; FDispatch: TSpkBaseAppearanceDispatch; procedure SetElementAppearance(const Value: TSpkElementAppearance); procedure SetPaneAppearance(const Value: TSpkPaneAppearance); procedure SetTabAppearance(const Value: TSpkTabAppearance); public constructor Create(ADispatch: TSpkBaseAppearanceDispatch); reintroduce; destructor Destroy; override; procedure Assign(Source: TPersistent); override; procedure NotifyAppearanceChanged; procedure Reset(AStyle: TSpkStyle = spkOffice2007Blue); procedure SaveToPascal(AList: TStrings); procedure SaveToXML(Node: TSpkXMLNode); procedure LoadFromXML(Node: TSpkXMLNode); published property Tab: TSpkTabAppearance read FTab write SetTabAppearance; property Pane: TSpkPaneAppearance read FPane write SetPaneAppearance; property Element: TSpkElementAppearance read FElement write SetElementAppearance; end; procedure SetDefaultFont(AFont: TFont); implementation uses LCLIntf, LCLType, typinfo, spkGraphTools; procedure SaveFontToPascal(AList: TStrings; AFont: TFont; AName: String); var sty: String; begin sty := ''; if fsBold in AFont.Style then sty := sty + 'fsBold,'; if fsItalic in AFont.Style then sty := sty + 'fsItalic,'; if fsUnderline in AFont.Style then sty := sty + 'fsUnderline,'; if fsStrikeout in AFont.Style then sty := sty + 'fsStrikeout,'; if sty <> '' then Delete(sty, Length(sty), 1); with AList do begin Add(AName + '.Name := ''' + AFont.Name + ''';'); Add(AName + '.Size := ' + IntToStr(AFont.Size) + ';'); Add(AName + '.Style := [' + sty + '];'); Add(AName + '.Color := $' + IntToHex(AFont.Color, 8) + ';'); end; end; { TSpkBaseToolbarAppearance } constructor TSpkTabAppearance.Create(ADispatch: TSpkBaseAppearanceDispatch); begin inherited Create; FDispatch := ADispatch; FTabHeaderFont := TFont.Create; FTabHeaderFont.OnChange := TabHeaderFontChange; Reset; end; destructor TSpkTabAppearance.Destroy; begin FTabHeaderFont.Free; inherited; end; procedure TSpkTabAppearance.Assign(Source: TPersistent); var SrcAppearance: TSpkTabAppearance; begin if Source is TSpkTabAppearance then begin SrcAppearance := TSpkTabAppearance(Source); FTabHeaderFont.Assign(SrcAppearance.TabHeaderFont); FBorderColor := SrcAppearance.BorderColor; FGradientFromColor := SrcAppearance.GradientFromColor; FGradientToColor := SrcAppearance.GradientToColor; FGradientType := SrcAppearance.GradientType; FInactiveHeaderFontColor := SrcAppearance.InactiveTabHeaderFontColor; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end else raise AssignException.Create('TSpkToolbarAppearance.Assign: Cannot assign the object '+Source.ClassName+' to TSpkToolbarAppearance!'); end; procedure TSpkTabAppearance.LoadFromXML(Node: TSpkXMLNode); var Subnode: TSpkXMLNode; begin if not Assigned(Node) then exit; Subnode := Node['TabHeaderFont',false]; if Assigned(Subnode) then TSpkXMLTools.Load(Subnode, FTabHeaderFont); Subnode := Node['BorderColor',false]; if Assigned(Subnode) then FBorderColor := Subnode.TextAsColor; Subnode := Node['GradientFromColor',false]; if Assigned(Subnode) then FGradientFromColor := Subnode.TextAsColor; Subnode := Node['GradientToColor',false]; if Assigned(Subnode) then FGradientToColor := Subnode.TextAsColor; Subnode := Node['GradientType',false]; if Assigned(Subnode) then FGradientType := TBackgroundKind(Subnode.TextAsInteger); Subnode := Node['InactiveTabHeaderFontColor', false]; if Assigned(Subnode) then FInactiveHeaderFontColor := Subnode.TextAsColor; end; procedure TSpkTabAppearance.Reset(AStyle: TSpkStyle); begin SetDefaultFont(FTabHeaderFont); case AStyle of spkOffice2007Blue: begin FTabHeaderFont.Color := rgb(21, 66, 139); FBorderColor := rgb(141, 178, 227); FGradientFromColor := rgb(222, 232, 245); FGradientToColor := rgb(199, 216, 237); FGradientType := bkConcave; FInactiveHeaderFontColor := FTabHeaderFont.Color; end; spkOffice2007Silver, spkOffice2007SilverTurquoise: begin FTabHeaderFont.Style := []; FTabHeaderFont.Color := $007A534C; FBorderColor := $00BEBEBE; FGradientFromColor := $00F4F2F2; FGradientToColor := $00EFE6E1; FGradientType := bkConcave; FInactiveHeaderFontColor := $007A534C; end; spkMetroLight: begin FTabHeaderFont.Style := []; FTabHeaderFont.Color := $0095572A; FBorderColor := $00D2D0CF; FGradientFromColor := $00F1F1F1; FGradientToColor := $00F1F1F1; FGradientType := bkSolid; FInactiveHeaderFontColor := $00696969; end; spkMetroDark: begin FTabHeaderFont.Style := []; FTabHeaderFont.Color := $00FFFFFF; FBorderColor := $00000000; FGradientFromColor := $00464646; FGradientToColor := $00464646; FGradientType := bkSolid; FInactiveHeaderFontColor := $00787878; end; end; end; procedure TSpkTabAppearance.SaveToPascal(AList: TStrings); begin with AList do begin Add(' with Tab do begin'); SaveFontToPascal(AList, FTabHeaderFont, ' TabHeaderFont'); Add(' BorderColor := $' + IntToHex(FBorderColor, 8) + ';'); Add(' GradientFromColor := $' + IntToHex(FGradientFromColor, 8) + ';'); Add(' GradientToColor := $' + IntToHex(FGradientToColor, 8) + ';'); Add(' GradientType := ' + GetEnumName(TypeInfo(TBackgroundKind), ord(FGradientType)) + ';'); Add(' InactiveHeaderFontColor := $' + IntToHex(FInactiveHeaderFontColor, 8) + ';'); Add(' end;'); end; end; procedure TSpkTabAppearance.SaveToXML(Node: TSpkXMLNode); var Subnode: TSpkXMLNode; begin if not(assigned(Node)) then exit; Subnode := Node['TabHeaderFont',true]; TSpkXMLTools.Save(Subnode, FTabHeaderFont); Subnode := Node['BorderColor',true]; Subnode.TextAsColor := FBorderColor; Subnode := Node['GradientFromColor',true]; Subnode.TextAsColor := FGradientFromColor; Subnode := Node['GradientToColor',true]; Subnode.TextAsColor := FGradientToColor; Subnode := Node['GradientType',true]; Subnode.TextAsInteger := integer(FGradientType); Subnode := Node['InactiveTabHeaderFontColor', true]; Subnode.TextAsColor := FInactiveHeaderFontColor; end; procedure TSpkTabAppearance.SetBorderColor(const Value: TColor); begin FBorderColor := Value; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; procedure TSpkTabAppearance.SetGradientFromColor(const Value: TColor); begin FGradientFromColor := Value; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; procedure TSpkTabAppearance.SetGradientToColor(const Value: TColor); begin FGradientToColor := Value; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; procedure TSpkTabAppearance.SetGradientType(const Value: TBackgroundKind); begin FGradientType := Value; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; procedure TSpkTabAppearance.SetHeaderFont(const Value: TFont); begin FTabHeaderFont.Assign(Value); if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; procedure TSpkTabAppearance.SetInactiveHeaderFontColor(const Value: TColor); begin FInactiveHeaderFontColor := Value; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; procedure TSpkTabAppearance.TabHeaderFontChange(Sender: TObject); begin if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; { TSpkPaneAppearance } constructor TSpkPaneAppearance.Create(ADispatch: TSpkBaseAppearanceDispatch); begin inherited Create; FDispatch := ADispatch; FCaptionFont := TFont.Create; FCaptionFont.OnChange := CaptionFontChange; FHotTrackBrightnessChange := 20; FStyle := psRectangleEtched; Reset; end; destructor TSpkPaneAppearance.Destroy; begin FCaptionFont.Free; inherited Destroy; end; procedure TSpkPaneAppearance.Assign(Source: TPersistent); var SrcAppearance: TSpkPaneAppearance; begin if Source is TSpkPaneAppearance then begin SrcAppearance := TSpkPaneAppearance(Source); FCaptionFont.Assign(SrcAppearance.CaptionFont); FBorderDarkColor := SrcAppearance.BorderDarkColor; FBorderLightColor := SrcAppearance.BorderLightColor; FCaptionBgColor := SrcAppearance.CaptionBgColor; FGradientFromColor := SrcAppearance.GradientFromColor; FGradientToColor := SrcAppearance.GradientToColor; FGradientType := SrcAppearance.GradientType; FHotTrackBrightnessChange := SrcAppearance.HotTrackBrightnessChange; FStyle := SrcAppearance.Style; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end else raise AssignException.Create('TSpkPaneAppearance.Assign: Cannot assign the class '+Source.ClassName+' to TSpkPaneAppearance!'); end; procedure TSpkPaneAppearance.CaptionFontChange(Sender: TObject); begin if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; procedure TSpkPaneAppearance.LoadFromXML(Node: TSpkXMLNode); var Subnode: TSpkXMLNode; begin if not(Assigned(Node)) then exit; Subnode := Node['CaptionFont', false]; if Assigned(Subnode) then TSpkXMLTools.Load(Subnode, FCaptionFont); Subnode := Node['BorderDarkColor', false]; if Assigned(Subnode) then FBorderDarkColor := Subnode.TextAsColor; Subnode := Node['BorderLightColor', false]; if Assigned(Subnode) then FBorderLightColor := Subnode.TextAsColor; Subnode := Node['CaptionBgColor', false]; if Assigned(Subnode) then FCaptionBgColor := Subnode.TextAsColor; Subnode := Node['GradientFromColor', false]; if Assigned(Subnode) then FGradientFromColor := Subnode.TextAsColor; Subnode := Node['GradientToColor', false]; if Assigned(Subnode) then FGradientToColor := Subnode.TextAsColor; Subnode := Node['GradientType', false]; if Assigned(Subnode) then FGradientType := TBackgroundKind(Subnode.TextAsInteger); Subnode := Node['HotTrackBrightnessChange', false]; if Assigned(Subnode) then FHotTrackBrightnessChange := Subnode.TextAsInteger; Subnode := Node['Style', false]; if Assigned(Subnode) then FStyle := TSpkPaneStyle(SubNode.TextAsInteger); end; procedure TSpkPaneAppearance.Reset(AStyle: TSpkStyle = spkOffice2007Blue); begin SetDefaultFont(FCaptionFont); case AStyle of spkOffice2007Blue: begin FCaptionFont.Style := []; FCaptionFont.Color := rgb(21, 66, 139); FBorderDarkColor := rgb(158, 190, 218); FBorderLightColor := rgb(237, 242, 248); FCaptionBgColor := rgb(194, 217, 241); FGradientFromColor := rgb(222, 232, 245); FGradientToColor := rgb(199, 216, 237); FGradientType := bkConcave; FHotTrackBrightnessChange := 20; FStyle := psRectangleEtched; end; spkOffice2007Silver, spkOffice2007SilverTurquoise: begin FCaptionFont.Style := []; FCaptionFont.Color := $00363636; FBorderDarkColor := $00A6A6A6; FBorderLightColor := $00FFFFFF; FCaptionBgColor := $00E4E4E4; FGradientFromColor := $00F8F8F8; FGradientToColor := $00E9E9E9; FGradientType := bkConcave; FHotTrackBrightnessChange := 20; FStyle := psRectangleEtched; end; spkMetroLight: begin FCaptionFont.Style := []; FCaptionFont.Color := $00696969; FBorderDarkColor := $00D2D0CF; FBorderLightColor := $00F8F2ED; FCaptionBgColor := $00F1F1F1; FGradientFromColor := $00F1F1F1; FGradientToColor := $00F1F1F1; FGradientType := bkSolid; FHotTrackBrightnessChange := 0; FStyle := psDividerFlat; end; spkMetroDark: begin FCaptionFont.Style := []; FCaptionFont.Color := $00FFFFFF; FBorderDarkColor := $008C8482; FBorderLightColor := $00A29D9B; FCaptionBgColor := $00464646; FGradientFromColor := $00464646; FGradientToColor := $00F1F1F1; FGradientType := bkSolid; FHotTrackBrightnessChange := 0; FStyle := psDividerFlat; end; end; end; procedure TSpkPaneAppearance.SaveToPascal(AList: TStrings); begin with AList do begin Add(' with Pane do begin'); SaveFontToPascal(AList, FCaptionFont, ' CaptionFont'); Add(' BorderDarkColor := $' + IntToHex(FBorderDarkColor, 8) + ';'); Add(' BorderLightColor := $' + IntToHex(FBorderLightColor, 8) + ';'); Add(' CaptionBgColor := $' + IntToHex(FcaptionBgColor, 8) + ';'); Add(' GradientFromColor := $' + IntToHex(FGradientFromColor, 8) + ';'); Add(' GradientToColor := $' + IntToHex(FGradientToColor, 8) + ';'); Add(' GradientType := ' + GetEnumName(TypeInfo(TBackgroundKind), ord(FGradientType)) + ';'); Add(' HotTrackBrightnessChange = ' + IntToStr(FHotTrackBrightnessChange) + ';'); Add(' Style := ' + GetEnumName(TypeInfo(TSpkPaneStyle), ord(FStyle)) +';'); Add(' end;'); end; end; procedure TSpkPaneAppearance.SaveToXML(Node: TSpkXMLNode); var Subnode: TSpkXMLNode; begin if not Assigned(Node) then exit; Subnode := Node['CaptionFont',true]; TSpkXMLTools.Save(Subnode, FCaptionFont); Subnode := Node['BorderDarkColor',true]; Subnode.TextAsColor := FBorderDarkColor; Subnode := Node['BorderLightColor',true]; Subnode.TextAsColor := FBorderLightColor; Subnode := Node['CaptionBgColor',true]; Subnode.TextAsColor := FCaptionBgColor; Subnode := Node['GradientFromColor',true]; Subnode.TextAsColor := FGradientFromColor; Subnode := Node['GradientToColor',true]; Subnode.TextAsColor := FGradientToColor; Subnode := Node['GradientType',true]; Subnode.TextAsInteger := integer(FGradientType); Subnode := Node['HotTrackBrightnessChange',true]; Subnode.TextAsInteger := FHotTrackBrightnessChange; Subnode := Node['Style', true]; Subnode.TextAsInteger := integer(FStyle); end; procedure TSpkPaneAppearance.SetBorderDarkColor(const Value: TColor); begin FBorderDarkColor := Value; if Assigned(FDispatch) then FDispatch.NotifyAppearanceChanged; end; procedure TSpkPaneAppearance.SetBorderLightColor(const Value: TColor); begin FBorderLightColor := Value; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; procedure TSpkPaneAppearance.SetCaptionBgColor(const Value: TColor); begin FCaptionBgColor := Value; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; procedure TSpkPaneAppearance.SetCaptionFont(const Value: TFont); begin FCaptionFont.Assign(Value); if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; procedure TSpkPaneAppearance.SetGradientFromColor(const Value: TColor); begin FGradientFromColor := Value; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; procedure TSpkPaneAppearance.SetGradientToColor(const Value: TColor); begin FGradientToColor := Value; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; procedure TSpkPaneAppearance.SetGradientType(const Value: TBackgroundKind); begin FGradientType := Value; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; procedure TSpkPaneAppearance.SetHotTrackBrightnessChange(const Value: Integer); begin FHotTrackBrightnessChange := Value; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; procedure TSpkPaneAppearance.SetStyle(const Value: TSpkPaneStyle); begin FStyle := Value; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; { TSpkElementAppearance } constructor TSpkElementAppearance.Create(ADispatch: TSpkBaseAppearanceDispatch); begin inherited Create; FDispatch := ADispatch; FCaptionFont := TFont.Create; FCaptionFont.OnChange := CaptionFontChange; FHotTrackBrightnessChange := 40; Reset; end; destructor TSpkElementAppearance.Destroy; begin FCaptionFont.Free; inherited Destroy; end; procedure TSpkElementAppearance.Assign(Source: TPersistent); var SrcAppearance: TSpkElementAppearance; begin if Source is TSpkElementAppearance then begin SrcAppearance := TSpkElementAppearance(Source); FCaptionFont.Assign(SrcAppearance.CaptionFont); FIdleFrameColor := SrcAppearance.IdleFrameColor; FIdleGradientFromColor := SrcAppearance.IdleGradientFromColor; FIdleGradientToColor := SrcAppearance.IdleGradientToColor; FIdleGradientType := SrcAppearance.IdleGradientType; FIdleInnerLightColor := SrcAppearance.IdleInnerLightColor; FIdleInnerDarkColor := SrcAppearance.IdleInnerDarkColor; FIdleCaptionColor := SrcAppearance.IdleCaptionColor; FHotTrackFrameColor := SrcAppearance.HotTrackFrameColor; FHotTrackGradientFromColor := SrcAppearance.HotTrackGradientFromColor; FHotTrackGradientToColor := SrcAppearance.HotTrackGradientToColor; FHotTrackGradientType := SrcAppearance.HotTrackGradientType; FHotTrackInnerLightColor := SrcAppearance.HotTrackInnerLightColor; FHotTrackInnerDarkColor := SrcAppearance.HotTrackInnerDarkColor; FHotTrackCaptionColor := SrcAppearance.HotTrackCaptionColor; FHotTrackBrightnessChange := SrcAppearance.HotTrackBrightnessChange; FActiveFrameColor := SrcAppearance.ActiveFrameColor; FActiveGradientFromColor := SrcAppearance.ActiveGradientFromColor; FActiveGradientToColor := SrcAppearance.ActiveGradientToColor; FActiveGradientType := SrcAppearance.ActiveGradientType; FActiveInnerLightColor := SrcAppearance.ActiveInnerLightColor; FActiveInnerDarkColor := SrcAppearance.ActiveInnerDarkColor; FActiveCaptionColor := SrcAppearance.ActiveCaptionColor; FStyle := SrcAppearance.Style; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end else raise AssignException.Create('TSpkElementAppearance.Assign: Cannot assign the objecct '+Source.ClassName+' to TSpkElementAppearance!'); end; procedure TSpkElementAppearance.CaptionFontChange(Sender: TObject); begin if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; 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; begin if not Assigned(Node) then exit; Subnode := Node['CaptionFont', false]; if Assigned(Subnode) then TSpkXMLTools.Load(Subnode, FCaptionFont); // Idle Subnode := Node['IdleFrameColor', false]; if Assigned(Subnode) then FIdleFrameColor := Subnode.TextAsColor; Subnode := Node['IdleGradientFromColor', false]; if Assigned(Subnode) then FIdleGradientFromColor := Subnode.TextAsColor; Subnode := Node['IdleGradientToColor', false]; if Assigned(Subnode) then FIdleGradientToColor := Subnode.TextAsColor; Subnode := Node['IdleGradientType', false]; if Assigned(Subnode) then FIdleGradientType := TBackgroundKind(Subnode.TextAsInteger); Subnode := Node['IdleInnerLightColor', false]; if Assigned(Subnode) then FIdleInnerLightColor := Subnode.TextAsColor; Subnode := Node['IdleInnerDarkColor', false]; if Assigned(Subnode) then FIdleInnerDarkColor := Subnode.TextAsColor; Subnode := Node['IdleCaptionColor', false]; if Assigned(Subnode) then FIdleCaptionColor := Subnode.TextAsColor; // HotTrack Subnode := Node['HottrackFrameColor', false]; if Assigned(Subnode) then FHottrackFrameColor := Subnode.TextAsColor; Subnode := Node['HottrackGradientFromColor', false]; if Assigned(Subnode) then FHottrackGradientFromColor := Subnode.TextAsColor; Subnode := Node['HottrackGradientToColor', false]; if Assigned(Subnode) then FHottrackGradientToColor := Subnode.TextAsColor; Subnode := Node['HottrackGradientType', false]; if Assigned(Subnode) then FHottrackGradientType := TBackgroundKind(Subnode.TextAsInteger); Subnode := Node['HottrackInnerLightColor', false]; if Assigned(Subnode) then FHottrackInnerLightColor := Subnode.TextAsColor; Subnode := Node['HottrackInnerDarkColor', false]; if Assigned(Subnode) then FHottrackInnerDarkColor := Subnode.TextAsColor; Subnode := Node['HottrackCaptionColor', false]; if Assigned(Subnode) then FHottrackCaptionColor := Subnode.TextAsColor; Subnode := Node['HottrackBrightnessChange', false]; if Assigned(Subnode) then FHottrackBrightnessChange := Subnode.TextAsInteger; // Active Subnode := Node['ActiveFrameColor', false]; if Assigned(Subnode) then FActiveFrameColor := Subnode.TextAsColor; Subnode := Node['ActiveGradientFromColor', false]; if Assigned(Subnode) then FActiveGradientFromColor := Subnode.TextAsColor; Subnode := Node['ActiveGradientToColor', false]; if Assigned(Subnode) then FActiveGradientToColor := Subnode.TextAsColor; Subnode := Node['ActiveGradientType', false]; if Assigned(Subnode) then FActiveGradientType := TBackgroundKind(Subnode.TextAsInteger); Subnode := Node['ActiveInnerLightColor', false]; if Assigned(Subnode) then FActiveInnerLightColor := Subnode.TextAsColor; Subnode := Node['ActiveInnerDarkColor', false]; if Assigned(Subnode) then FActiveInnerDarkColor := Subnode.TextAsColor; Subnode := Node['ActiveCaptionColor', false]; if Assigned(Subnode) then FActiveCaptionColor := Subnode.TextAsColor; // Other Subnode := Node['Style', false]; if Assigned(SubNode) then FStyle := TSpkElementStyle(Subnode.TextAsInteger); end; procedure TSpkElementAppearance.Reset(AStyle: TSpkStyle = spkOffice2007Blue); begin SetDefaultFont(FCaptionFont); case AStyle of spkOffice2007Blue: begin FIdleFrameColor := rgb(155, 183, 224); FIdleGradientFromColor := rgb(200, 219, 238); FIdleGradientToColor := rgb(188, 208, 233); FIdleGradientType := bkConcave; FIdleInnerLightColor := rgb(213, 227, 241); FIdleInnerDarkColor := rgb(190, 211, 236); FIdleCaptionColor := rgb(86, 125, 177); FHotTrackFrameColor := rgb(221, 207, 155); FHotTrackGradientFromColor := rgb(255, 252, 218); FHotTrackGradientToColor := rgb(255, 215, 77); FHotTrackGradientType := bkConcave; FHotTrackInnerLightColor := rgb(255, 241, 197); FHotTrackInnerDarkColor := rgb(216, 194, 122); FHotTrackCaptionColor := rgb(111, 66, 135); FHotTrackBrightnessChange := 40; FActiveFrameColor := rgb(139, 118, 84); FActiveGradientFromColor := rgb(254, 187, 108); FActiveGradientToColor := rgb(252, 146, 61); FActiveGradientType := bkConcave; FActiveInnerLightColor := rgb(252, 169, 14); FActiveInnerDarkColor := rgb(252, 169, 14); FActiveCaptionColor := rgb(110, 66, 128); FStyle := esRounded; end; spkOffice2007Silver, spkOffice2007SilverTurquoise: begin FCaptionFont.Style := []; FCaptionFont.Color := $008B4215; FIdleFrameColor := $00B8B1A9; FIdleGradientFromColor := $00F4F4F2; FIdleGradientToColor := $00E6E5E3; FIdleGradientType := bkConcave; FIdleInnerDarkColor := $00C7C0BA; FIdleInnerLightColor := $00F6F2F0; FIdleCaptionColor := $0060655F; FHotTrackBrightnessChange := 40; FHotTrackFrameColor := $009BCFDD; FHotTrackGradientFromColor := $00DAFCFF; FHotTrackGradientToColor := $004DD7FF; FHotTrackGradientType := bkConcave; FHotTrackInnerDarkColor := $007AC2D8; FHotTrackInnerLightColor := $00C5F1FF; FHotTrackCaptionColor := $0087426F; if AStyle = spkOffice2007SilverTurquoise then begin FHotTrackFrameColor := $009E7D0E; FHotTrackGradientFromColor := $00FBF1D0; FHotTrackGradientToColor := $00F4DD8A; FHotTrackInnerDarkColor := $00C19A11; FHotTrackInnerLightColor := $00FAEFC9; end; FActiveFrameColor := $0054768B; FActiveGradientFromColor := $006CBBFE; FActiveGradientToColor := $003D92FC; FActiveGradientType := bkConcave; FActiveInnerDarkColor := $000EA9FC; FActiveInnerLightColor := $000EA9FC; FActiveCaptionColor := $0080426E; if AStyle = spkOffice2007SilverTurquoise then begin FActiveFrameColor := $0077620B; FActiveGradientFromColor := $00F4DB82; FActiveGradientToColor := $00ECC53E; FActiveInnerDarkColor := $00735B0B; FActiveInnerLightColor := $00F3D87A; end; FStyle := esRounded; end; spkMetroLight: begin FCaptionFont.Style := []; FCaptionFont.Color := $003F3F3F; FIdleFrameColor := $00CDCDCD; FIdleGradientFromColor := $00DFDFDF; FIdleGradientToColor := $00DFDFDF; FIdleGradientType := bkSolid; FIdleInnerDarkColor := $00CDCDCD; FIdleInnerLightColor := $00EBEBEB; FIdleCaptionColor := $00696969; FHotTrackFrameColor := $00F9CEA4; FHotTrackGradientFromColor := $00F7EFE8; FHotTrackGradientToColor := $00F7EFE8; FHotTrackGradientType := bkSolid; FHotTrackInnerDarkColor := $00F7EFE8; FHotTrackInnerLightColor := $00F7EFE8; FHotTrackCaptionColor := $003F3F3F; FHotTrackBrightnessChange := 20; FActiveFrameColor := $00E4A262; FActiveGradientFromColor := $00F7E0C9; FActiveGradientToColor := $00F7E0C9; FActiveGradientType := bkSolid; FActiveInnerDarkColor := $00F7E0C9; FActiveInnerLightColor := $00F7E0C9; FActiveCaptionColor := $002C2C2C; FStyle := esRectangle; end; spkMetroDark: begin FCaptionFont.Style := []; FCaptionFont.Color := $003F3F3F; FIdleFrameColor := $008C8482; FIdleGradientFromColor := $00444444; FIdleGradientToColor := $00444444; FIdleGradientType := bkSolid; FIdleInnerDarkColor := $008C8482; FIdleInnerLightColor := $00444444; FIdleCaptionColor := $00B6B6B6; FHotTrackFrameColor := $00C4793C; FHotTrackGradientFromColor := $00805B3D; FHotTrackGradientToColor := $00805B3D; FHotTrackGradientType := bkSolid; FHotTrackInnerDarkColor := $00805B3D; FHotTrackInnerLightColor := $00805B3D; FHotTrackCaptionColor := $00F2F2F2; FHotTrackBrightnessChange := 10; FActiveFrameColor := $00000000; FActiveGradientFromColor := $00000000; FActiveGradientToColor := $00000000; FActiveGradientType := bkSolid; FActiveInnerDarkColor := $00000000; FActiveInnerLightColor := $00000000; FActiveCaptionColor := $00E4E4E4; FStyle := esRectangle; end; end; end; procedure TSpkElementAppearance.SaveToPascal(AList: TStrings); begin with AList do begin Add(' with Element do begin'); SaveFontToPascal(AList, FCaptionFont, ' CaptionFont'); Add(' IdleFrameColor := $' + IntToHex(FIdleFrameColor, 8) + ';'); Add(' IdleGradientFromColor := $' + IntToHex(FIdleGradientFromColor, 8) + ';'); Add(' IdleGradientToColor := $' + IntToHex(FIdleGradientToColor, 8) + ';'); Add(' IdleGradientType := ' + GetEnumName(TypeInfo(TBackgroundKind), ord(FIdleGradientType)) + ';'); Add(' IdleInnerDarkColor := $' + IntToHex(FIdleInnerDarkColor, 8) + ';'); Add(' IdleInnerLightColor := $' + IntToHex(FIdleInnerLightColor, 8) + ';'); Add(' IdleCaptionColor := $' + IntToHex(FIdleCaptionColor, 8) + ';'); Add(' HotTrackFrameColor := $' + IntToHex(FHotTrackFrameColor, 8) + ';'); Add(' HotTrackGradientFromColor := $' + IntToHex(FHotTrackGradientFromColor, 8) + ';'); Add(' HotTrackGradientToColor := $' + IntToHex(FHotTrackGradientToColor, 8) + ';'); Add(' HotTrackGradientType := ' + GetEnumName(TypeInfo(TBackgroundKind), ord(FHotTrackGradientType)) + ';'); Add(' HotTrackInnerDarkColor := $' + IntToHex(FHotTrackInnerDarkColor, 8) + ';'); Add(' HotTrackInnerLightColor := $' + IntToHex(FHotTrackInnerLightColor, 8) + ';'); Add(' HotTrackCaptionColor := $' + IntToHex(FHotTrackCaptionColor, 8) + ';'); Add(' HotTrackBrightnessChange := ' + IntToStr(FHotTrackBrightnessChange) + ';'); Add(' ActiveFrameColor := $' + IntToHex(FActiveFrameColor, 8) + ';'); Add(' ActiveGradientFromColor := $' + IntToHex(FActiveGradientFromColor, 8) + ';'); Add(' ActiveGradientToColor := $' + IntToHex(FActiveGradientToColor, 8) + ';'); Add(' ActiveGradientType := ' + GetEnumName(TypeInfo(TBackgroundKind), ord(FActiveGradientType)) + ';'); Add(' ActiveInnerDarkColor := $' + IntToHex(FActiveInnerDarkColor, 8) + ';'); Add(' ActiveInnerLightColor := $' + IntToHex(FActiveInnerLightColor, 8) + ';'); Add(' ActiveCaptionColor := $' + IntToHex(FActiveCaptionColor, 8) + ';'); Add(' Style := ' + GetEnumName(TypeInfo(TSpkElementStyle), ord(FStyle)) + ';'); Add(' end;'); end; end; procedure TSpkElementAppearance.SaveToXML(Node: TSpkXMLNode); var Subnode: TSpkXMLNode; begin if not Assigned(Node) then exit; Subnode := Node['CaptionFont', true]; TSpkXMLTools.Save(Subnode, FCaptionFont); // Idle Subnode := Node['IdleFrameColor', true]; Subnode.TextAsColor := FIdleFrameColor; Subnode := Node['IdleGradientFromColor', true]; Subnode.TextAsColor := FIdleGradientFromColor; Subnode := Node['IdleGradientToColor', true]; Subnode.TextAsColor := FIdleGradientToColor; Subnode := Node['IdleGradientType', true]; Subnode.TextAsInteger := integer(FIdleGradientType); Subnode := Node['IdleInnerLightColor', true]; Subnode.TextAsColor := FIdleInnerLightColor; Subnode := Node['IdleInnerDarkColor', true]; Subnode.TextAsColor := FIdleInnerDarkColor; Subnode := Node['IdleCaptionColor', true]; Subnode.TextAsColor := FIdleCaptionColor; // HotTrack Subnode := Node['HottrackFrameColor', true]; Subnode.TextAsColor := FHottrackFrameColor; Subnode := Node['HottrackGradientFromColor', true]; Subnode.TextAsColor := FHottrackGradientFromColor; Subnode := Node['HottrackGradientToColor', true]; Subnode.TextAsColor := FHottrackGradientToColor; Subnode := Node['HottrackGradientType', true]; Subnode.TextAsInteger := integer(FHottrackGradientType); Subnode := Node['HottrackInnerLightColor', true]; Subnode.TextAsColor := FHottrackInnerLightColor; Subnode := Node['HottrackInnerDarkColor', true]; Subnode.TextAsColor := FHottrackInnerDarkColor; Subnode := Node['HottrackCaptionColor', true]; Subnode.TextAsColor := FHottrackCaptionColor; Subnode := Node['HottrackBrightnessChange', true]; Subnode.TextAsInteger := FHotTrackBrightnessChange; // Active Subnode := Node['ActiveFrameColor', true]; Subnode.TextAsColor := FActiveFrameColor; Subnode := Node['ActiveGradientFromColor', true]; Subnode.TextAsColor := FActiveGradientFromColor; Subnode := Node['ActiveGradientToColor', true]; Subnode.TextAsColor := FActiveGradientToColor; Subnode := Node['ActiveGradientType', true]; Subnode.TextAsInteger := integer(FActiveGradientType); Subnode := Node['ActiveInnerLightColor', true]; Subnode.TextAsColor := FActiveInnerLightColor; Subnode := Node['ActiveInnerDarkColor', true]; Subnode.TextAsColor := FActiveInnerDarkColor; Subnode := Node['ActiveCaptionColor', true]; Subnode.TextAsColor := FActiveCaptionColor; // Other Subnode := Node['Style', true]; Subnode.TextAsInteger := integer(FStyle); end; procedure TSpkElementAppearance.SetActiveCaptionColor(const Value: TColor); begin FActiveCaptionColor := Value; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; procedure TSpkElementAppearance.SetActiveFrameColor(const Value: TColor); begin FActiveFrameColor := Value; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; procedure TSpkElementAppearance.SetActiveGradientFromColor(const Value: TColor); begin FActiveGradientFromColor := Value; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; procedure TSpkElementAppearance.SetActiveGradientToColor(const Value: TColor); begin FActiveGradientToColor := Value; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; procedure TSpkElementAppearance.SetActiveGradientType(const Value: TBackgroundKind); begin FActiveGradientType := Value; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; procedure TSpkElementAppearance.SetActiveInnerDarkColor(const Value: TColor); begin FActiveInnerDarkColor := Value; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; procedure TSpkElementAppearance.SetActiveInnerLightColor(const Value: TColor); begin FActiveInnerLightColor := Value; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; procedure TSpkElementAppearance.SetCaptionFont(const Value: TFont); begin FCaptionFont.Assign(Value); if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; procedure TSpkElementAppearance.SetHotTrackBrightnessChange(const Value: Integer); begin FHotTrackBrightnessChange := Value; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; procedure TSpkElementAppearance.SetHotTrackCaptionColor(const Value: TColor); begin FHotTrackCaptionColor := Value; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; procedure TSpkElementAppearance.SetHotTrackFrameColor(const Value: TColor); begin FHotTrackFrameColor := Value; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; procedure TSpkElementAppearance.SetHotTrackGradientFromColor(const Value: TColor); begin FHotTrackGradientFromColor := Value; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; procedure TSpkElementAppearance.SetHotTrackGradientToColor(const Value: TColor); begin FHotTrackGradientToColor := Value; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; procedure TSpkElementAppearance.SetHotTrackGradientType(const Value: TBackgroundKind); begin FHotTrackGradientType := Value; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; procedure TSpkElementAppearance.SetHotTrackInnerDarkColor(const Value: TColor); begin FHotTrackInnerDarkColor := Value; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; procedure TSpkElementAppearance.SetHotTrackInnerLightColor(const Value: TColor); begin FHotTrackInnerLightColor := Value; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; procedure TSpkElementAppearance.SetIdleCaptionColor(const Value: TColor); begin FIdleCaptionColor := Value; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; procedure TSpkElementAppearance.SetIdleFrameColor(const Value: TColor); begin FIdleFrameColor := Value; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; procedure TSpkElementAppearance.SetIdleGradientFromColor(const Value: TColor); begin FIdleGradientFromColor := Value; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; procedure TSpkElementAppearance.SetIdleGradientToColor(const Value: TColor); begin FIdleGradientToColor := Value; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; procedure TSpkElementAppearance.SetIdleGradientType(const Value: TBackgroundKind); begin FIdleGradientType := Value; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; procedure TSpkElementAppearance.SetIdleInnerDarkColor(const Value: TColor); begin FIdleInnerDarkColor := Value; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; procedure TSpkElementAppearance.SetIdleInnerLightColor(const Value: TColor); begin FIdleInnerLightColor := Value; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; procedure TSpkElementAppearance.SetStyle(const Value: TSpkElementStyle); begin FStyle := Value; if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end; { TSpkToolbarAppearanceDispatch } constructor TSpkToolbarAppearanceDispatch.Create( AToolbarAppearance: TSpkToolbarAppearance); begin inherited Create; FToolbarAppearance := AToolbarAppearance; end; procedure TSpkToolbarAppearanceDispatch.NotifyAppearanceChanged; begin if FToolbarAppearance <> nil then FToolbarAppearance.NotifyAppearanceChanged; end; { TSpkToolbarAppearance } constructor TSpkToolbarAppearance.Create(ADispatch : TSpkBaseAppearanceDispatch); begin inherited Create; FDispatch := ADispatch; FAppearanceDispatch := TSpkToolbarAppearanceDispatch.Create(self); FTab := TSpkTabAppearance.Create(FAppearanceDispatch); FPane := TSpkPaneAppearance.create(FAppearanceDispatch); FElement := TSpkElementAppearance.create(FAppearanceDispatch); end; destructor TSpkToolbarAppearance.Destroy; begin FElement.Free; FPane.Free; FTab.Free; FAppearanceDispatch.Free; inherited; end; procedure TSpkToolbarAppearance.Assign(Source: TPersistent); var Src: TSpkToolbarAppearance; begin if Source is TSpkToolbarAppearance then begin Src := TSpkToolbarAppearance(Source); self.FTab.Assign(Src.Tab); self.FPane.Assign(Src.Pane); self.FElement.Assign(Src.Element); if FDispatch <> nil then FDispatch.NotifyAppearanceChanged; end else raise AssignException.Create('TSpkToolbarAppearance.Assign: Cannot assign the object '+Source.ClassName+' to TSpkToolbarAppearance!'); end; procedure TSpkToolbarAppearance.LoadFromXML(Node: TSpkXMLNode); var Subnode: TSpkXMLNode; begin Tab.Reset; Pane.Reset; Element.Reset; if not Assigned(Node) then exit; Subnode := Node['Tab', false]; if Assigned(Subnode) then Tab.LoadFromXML(Subnode); Subnode := Node['Pane', false]; if Assigned(Subnode) then Pane.LoadFromXML(Subnode); Subnode := Node['Element', false]; if Assigned(Subnode) then Element.LoadFromXML(Subnode); end; procedure TSpkToolbarAppearance.NotifyAppearanceChanged; begin if Assigned(FDispatch) then FDispatch.NotifyAppearanceChanged; end; procedure TSpkToolbarAppearance.Reset(AStyle: TSpkStyle = spkOffice2007Blue); begin FTab.Reset(AStyle); FPane.Reset(AStyle); FElement.Reset(AStyle); if Assigned(FAppearanceDispatch) then FAppearanceDispatch.NotifyAppearanceChanged; end; procedure TSpkToolbarAppearance.SaveToPascal(AList: TStrings); begin AList.Add('with Appearance do begin'); FTab.SaveToPascal(AList); FPane.SaveToPascal(AList); FElement.SaveToPascal(AList); AList.Add('end;'); end; procedure TSpkToolbarAppearance.SaveToXML(Node: TSpkXMLNode); var Subnode: TSpkXMLNode; begin Subnode := Node['Tab',true]; FTab.SaveToXML(Subnode); Subnode := Node['Pane',true]; FPane.SaveToXML(Subnode); Subnode := Node['Element',true]; FElement.SaveToXML(Subnode); end; procedure TSpkToolbarAppearance.SetElementAppearance( const Value: TSpkElementAppearance); begin FElement.Assign(Value); end; procedure TSpkToolbarAppearance.SetPaneAppearance(const Value: TSpkPaneAppearance); begin FPane.Assign(Value); end; procedure TSpkToolbarAppearance.SetTabAppearance(const Value: TSpkTabAppearance); begin FTab.Assign(Value); end; procedure SetDefaultFont(AFont: TFont); begin //AFont.Assign(Screen.MenuFont); // wp: If this really is harmful this proc should be removed. end; end.