git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.DevExpressVCL@38 05c56307-c608-d34a-929d-697000501d7a
1124 lines
36 KiB
ObjectPascal
1124 lines
36 KiB
ObjectPascal
{********************************************************************}
|
|
{ }
|
|
{ Developer Express Visual Component Library }
|
|
{ ExpressSkins Library }
|
|
{ }
|
|
{ Copyright (c) 2006-2009 Developer Express Inc. }
|
|
{ ALL RIGHTS RESERVED }
|
|
{ }
|
|
{ The entire contents of this file is protected by U.S. and }
|
|
{ International Copyright Laws. Unauthorized reproduction, }
|
|
{ reverse-engineering, and distribution of all or any portion of }
|
|
{ the code contained in this file is strictly prohibited and may }
|
|
{ result in severe civil and criminal penalties and will be }
|
|
{ prosecuted to the maximum extent possible under the law. }
|
|
{ }
|
|
{ RESTRICTIONS }
|
|
{ }
|
|
{ THIS SOURCE CODE AND ALL RESULTING INTERMEDIATE FILES }
|
|
{ (DCU, OBJ, DLL, ETC.) ARE CONFIDENTIAL AND PROPRIETARY TRADE }
|
|
{ SECRETS OF DEVELOPER EXPRESS INC. THE REGISTERED DEVELOPER IS }
|
|
{ LICENSED TO DISTRIBUTE THE EXPRESSSKINS AND ALL ACCOMPANYING }
|
|
{ VCL CONTROLS AS PART OF AN EXECUTABLE PROGRAM ONLY. }
|
|
{ }
|
|
{ THE SOURCE CODE CONTAINED WITHIN THIS FILE AND ALL RELATED }
|
|
{ FILES OR ANY PORTION OF ITS CONTENTS SHALL AT NO TIME BE }
|
|
{ COPIED, TRANSFERRED, SOLD, DISTRIBUTED, OR OTHERWISE MADE }
|
|
{ AVAILABLE TO OTHER INDIVIDUALS WITHOUT EXPRESS WRITTEN CONSENT }
|
|
{ AND PERMISSION FROM DEVELOPER EXPRESS INC. }
|
|
{ }
|
|
{ CONSULT THE END USER LICENSE AGREEMENT FOR INFORMATION ON }
|
|
{ ADDITIONAL RESTRICTIONS. }
|
|
{ }
|
|
{********************************************************************}
|
|
|
|
unit dxSkinsdxNavBarPainter;
|
|
|
|
interface
|
|
|
|
uses
|
|
Types, Windows, Graphics, Classes, dxNavBar, dxNavBarBase, dxNavBarCollns, dxNavBarStyles,
|
|
dxNavBarExplorerViews, dxNavBarGraphics, cxLookAndFeels, cxLookAndFeelPainters,
|
|
dxSkinsLookAndFeelPainter, dxNavBarConsts, dxNavBarOffice11Views, ImgList,
|
|
cxGraphics, cxClasses, dxNavBarOfficeViews;
|
|
|
|
type
|
|
|
|
{ TdxNavBarSkinNavPaneLinkViewInfo }
|
|
|
|
TdxNavBarSkinNavPaneLinkViewInfo = class(TdxNavBarOffice3LinkViewInfo)
|
|
public
|
|
function FontColor: TColor; override;
|
|
function SelectionRect: TRect; override;
|
|
end;
|
|
|
|
{ TdxNavBarSkinNavPaneGroupViewInfo }
|
|
|
|
TdxNavBarSkinNavPaneGroupViewInfo = class(TdxNavBarOffice11NavPaneGroupViewInfo)
|
|
public
|
|
function CaptionFontColor: TColor; override;
|
|
end;
|
|
|
|
{ TdxNavBarSkinNavPaneViewInfo }
|
|
|
|
TdxNavBarSkinNavPaneViewInfo = class(TdxNavBarOffice11NavPaneViewInfo)
|
|
protected
|
|
function GetOverflowPanelClientOffset: TRect; override;
|
|
function GetOverflowPanelImageWidthAddon: Integer; override;
|
|
function GetOverflowPanelSignWidth: Integer; override;
|
|
function GetSkinInfo(var ASkinInfo: TdxSkinLookAndFeelPainterInfo): Boolean;
|
|
public
|
|
procedure AssignDefaultNavigationPaneHeaderStyle; override;
|
|
function GetHeaderHeight: Integer; override;
|
|
function GetOverflowPanelHeight: Integer; override;
|
|
function HeaderFont: TFont; override;
|
|
function HeaderFontColor: TColor; override;
|
|
end;
|
|
|
|
{ TdxNavBarSkinNavPanePainter }
|
|
|
|
TdxNavBarSkinNavPanePainter = class(TdxNavBarOffice11NavPanePainter)
|
|
private
|
|
FLookAndFeel: TcxLookAndFeel;
|
|
function GetSkinNameAssigned: Boolean;
|
|
function GetSkinName: TdxSkinName;
|
|
function InternalDrawScrollButton(ADownButton: Boolean; const ARect: TRect;
|
|
AState: TdxNavBarObjectStates): Boolean;
|
|
function IsSkinNameStored: Boolean;
|
|
procedure SetSkinNameAssigned(AValue: Boolean);
|
|
procedure SetSkinName(const Value: TdxSkinName);
|
|
// Custom draw
|
|
function CustomDrawHeader: Boolean;
|
|
function CustomDrawOverflowPanel: Boolean;
|
|
function CustomDrawSplitter: Boolean;
|
|
protected
|
|
function CreateViewInfo: TdxNavBarViewInfo; override;
|
|
function CreateGroupViewInfo(AViewInfo: TdxNavBarViewInfo; AGroup: TdxNavBarGroup;
|
|
ACaptionVisible: Boolean; AItemsVisible: Boolean): TdxNavBarGroupViewInfo; override;
|
|
function CreateLinkViewInfo(AViewInfo: TdxNavBarGroupViewInfo;
|
|
ALink: TdxNavBarItemLink; ACaptionVisible: Boolean;
|
|
AImageVisisble: Boolean): TdxNavBarLinkViewInfo; override;
|
|
function GetMasterLookAndFeel: TcxLookAndFeel; override;
|
|
function GetSkinPainterData(var AData: TdxSkinLookAndFeelPainterInfo): Boolean; virtual;
|
|
function IsSkinAvailable: Boolean;
|
|
procedure LookAndFeelChanged(Sender: TcxLookAndFeel; AChangedValues: TcxLookAndFeelValues); virtual;
|
|
public
|
|
constructor Create(ANavBar: TdxCustomNavBar); override;
|
|
destructor Destroy; override;
|
|
|
|
procedure DrawBackground; override;
|
|
procedure DrawBorder; override;
|
|
procedure DrawBottomScrollButton; override;
|
|
procedure DrawGroupBorder(AGroupViewInfo: TdxNavBarGroupViewInfo); override;
|
|
procedure DrawGroupCaptionButton(AGroupViewInfo: TdxNavBarGroupViewInfo); override;
|
|
procedure DrawGroupControl(ACanvas: TCanvas; ARect: TRect;
|
|
AGroupViewInfo: TdxNavBarGroupViewInfo); override;
|
|
procedure DrawHeader; override;
|
|
procedure DrawItemSelection(ALinkViewInfo: TdxNavBarLinkViewInfo); override;
|
|
procedure DrawOverflowPanel; override;
|
|
procedure DrawOverflowPanelItems; override;
|
|
procedure DrawOverflowPanelSign; override;
|
|
procedure DrawPopupMenuItem(ACanvas: TCanvas; ARect: TRect;
|
|
AImageList: TCustomImageList; AImageIndex: Integer; AText: String;
|
|
State: TdxNavBarObjectStates); override;
|
|
procedure DrawSplitter; override;
|
|
procedure DrawTopScrollButton; override;
|
|
property LookAndFeel: TcxLookAndFeel read FLookAndFeel;
|
|
published
|
|
property SkinName: TdxSkinName read GetSkinName write SetSkinName stored IsSkinNameStored;
|
|
property SkinNameAssigned: Boolean read GetSkinNameAssigned write SetSkinNameAssigned default False;
|
|
end;
|
|
|
|
{ TdxNavBarSkinExplorerBarPainter }
|
|
|
|
TdxNavBarSkinExplorerBarPainter = class(TdxNavBarExplorerBarPainter)
|
|
private
|
|
FLookAndFeel: TcxLookAndFeel;
|
|
function GetSkinNameAssigned: Boolean;
|
|
function GetSkinName: TdxSkinName;
|
|
function IsSkinNameStored: Boolean;
|
|
procedure SetSkinNameAssigned(AValue: Boolean);
|
|
procedure SetSkinName(const Value: TdxSkinName);
|
|
protected
|
|
function CreateGroupViewInfo(AViewInfo: TdxNavBarViewInfo; AGroup: TdxNavBarGroup;
|
|
ACaptionVisible: Boolean; AItemsVisible: Boolean): TdxNavBarGroupViewInfo; override;
|
|
function CreateLinkViewInfo(AViewInfo: TdxNavBarGroupViewInfo;
|
|
ALink: TdxNavBarItemLink; ACaptionVisible: Boolean;
|
|
AImageVisisble: Boolean): TdxNavBarLinkViewInfo; override;
|
|
function GetMasterLookAndFeel: TcxLookAndFeel; override;
|
|
function GetSkinPainterData(var AData: TdxSkinLookAndFeelPainterInfo): Boolean; virtual;
|
|
function IsSkinAvailable: Boolean;
|
|
procedure DrawGroupTopBorder(AGroupViewInfo: TdxNavBarGroupViewInfo);
|
|
procedure LookAndFeelChanged(Sender: TcxLookAndFeel; AChangedValues: TcxLookAndFeelValues); virtual;
|
|
public
|
|
constructor Create(ANavBar: TdxCustomNavBar); override;
|
|
destructor Destroy; override;
|
|
|
|
procedure DrawBackground; override;
|
|
procedure DrawGroupBackground(AGroupViewInfo: TdxNavBarGroupViewInfo); override;
|
|
procedure DrawGroupBorder(AGroupViewInfo: TdxNavBarGroupViewInfo); override;
|
|
procedure DrawGroupCaption(AGroupViewInfo: TdxNavBarGroupViewInfo); override;
|
|
procedure DrawGroupCaptionButton(AGroupViewInfo: TdxNavBarGroupViewInfo); override;
|
|
procedure DrawGroupControl(ACanvas: TCanvas; ARect: TRect;
|
|
AGroupViewInfo: TdxNavBarGroupViewInfo); override;
|
|
property LookAndFeel: TcxLookAndFeel read FLookAndFeel;
|
|
published
|
|
property SkinName: TdxSkinName read GetSkinName write SetSkinName stored IsSkinNameStored;
|
|
property SkinNameAssigned: Boolean read GetSkinNameAssigned write SetSkinNameAssigned default False;
|
|
end;
|
|
|
|
{ TdxNavBarSkinExplorerBarLinkViewInfo }
|
|
|
|
TdxNavBarSkinExplorerBarLinkViewInfo = class(TdxNavBarLinkViewInfo)
|
|
public
|
|
function FontColor: TColor; override;
|
|
end;
|
|
|
|
{ TdxNavBarSkinExplorerBarGroupViewInfo }
|
|
|
|
TdxNavBarSkinExplorerBarGroupViewInfo = class(TdxNavBarGroupViewInfo)
|
|
public
|
|
function CaptionFontColor: TColor; override;
|
|
procedure CalculateBounds(X: Integer; Y: Integer); override;
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses
|
|
dxNavBarViewsFact, dxSkinsCore, Math, cxGeometry;
|
|
|
|
function NavBarObjectStateToSkinState(AState: TdxNavBarObjectStates): TdxSkinElementState;
|
|
begin
|
|
Result := esNormal;
|
|
if sPressed in AState then
|
|
Result := esPressed
|
|
else
|
|
if sHotTracked in AState then
|
|
Result := esHot
|
|
else
|
|
if sDisabled in AState then
|
|
Result := esDisabled;
|
|
end;
|
|
|
|
{ TdxNavBarSkinNavPaneGroupViewInfo }
|
|
|
|
function TdxNavBarSkinNavPaneGroupViewInfo.CaptionFontColor: TColor;
|
|
var
|
|
AElement: TdxSkinElement;
|
|
ASkinInfo: TdxSkinLookAndFeelPainterInfo;
|
|
begin
|
|
with TdxNavBarSkinNavPanePainter(Painter) do
|
|
begin
|
|
AElement := nil;
|
|
if GetSkinPainterData(ASkinInfo) then
|
|
AElement := ASkinInfo.NavPaneGroupButton[False];
|
|
if AElement <> nil then
|
|
Result := AElement.TextColor
|
|
else
|
|
Result := inherited CaptionFontColor;
|
|
end;
|
|
end;
|
|
|
|
{ TdxNavBarSkinNavPaneLinkViewInfo }
|
|
|
|
function TdxNavBarSkinNavPaneLinkViewInfo.FontColor: TColor;
|
|
var
|
|
AElement: TdxSkinElement;
|
|
ASkinInfo: TdxSkinLookAndFeelPainterInfo;
|
|
begin
|
|
with TdxNavBarSkinNavPanePainter(Painter) do
|
|
begin
|
|
AElement := nil;
|
|
if GetSkinPainterData(ASkinInfo) then
|
|
AElement := ASkinInfo.NavPaneItem;
|
|
if AElement <> nil then
|
|
Result := AElement.TextColor
|
|
else
|
|
Result := inherited FontColor;
|
|
end;
|
|
end;
|
|
|
|
function TdxNavBarSkinNavPaneLinkViewInfo.SelectionRect: TRect;
|
|
begin
|
|
Result := Rect;
|
|
InflateRect(Result, -2, 0);
|
|
end;
|
|
|
|
{ TdxNavBarSkinNavPaneViewInfo }
|
|
|
|
procedure TdxNavBarSkinNavPaneViewInfo.AssignDefaultNavigationPaneHeaderStyle;
|
|
begin
|
|
with NavBar.DefaultStyles.NavigationPaneHeader do
|
|
begin
|
|
ResetValues;
|
|
HAlignment := haCenter;
|
|
BackColor := clNone;
|
|
BackColor2 := clNone;
|
|
Font.Color := clNone;
|
|
Font.Name := 'Arial';
|
|
Font.Style := [fsBold];
|
|
Font.Size := 9;
|
|
end;
|
|
end;
|
|
|
|
function TdxNavBarSkinNavPaneViewInfo.HeaderFont: TFont;
|
|
var
|
|
ASkinInfo: TdxSkinLookAndFeelPainterInfo;
|
|
begin
|
|
Result := inherited HeaderFont;
|
|
if (Result.Size = 9) and GetSkinInfo(ASkinInfo) then
|
|
if Assigned(ASkinInfo.NavPaneCaptionFontSize) then
|
|
Result.Size := ASkinInfo.NavPaneCaptionFontSize.Value;
|
|
end;
|
|
|
|
function TdxNavBarSkinNavPaneViewInfo.HeaderFontColor: TColor;
|
|
var
|
|
ASkinInfo: TdxSkinLookAndFeelPainterInfo;
|
|
begin
|
|
if GetSkinInfo(ASkinInfo) and (ASkinInfo.NavPaneGroupCaption <> nil) then
|
|
Result := ASkinInfo.NavPaneGroupCaption.TextColor
|
|
else
|
|
Result := inherited HeaderFontColor;
|
|
end;
|
|
|
|
function TdxNavBarSkinNavPaneViewInfo.GetHeaderHeight: Integer;
|
|
var
|
|
ASkinInfo: TdxSkinLookAndFeelPainterInfo;
|
|
begin
|
|
Result := inherited GetHeaderHeight;
|
|
if GetSkinInfo(ASkinInfo) then
|
|
if Assigned(ASkinInfo.NavPaneCaptionHeight) then
|
|
Result := Max(ASkinInfo.NavPaneCaptionHeight.Value, Result);
|
|
end;
|
|
|
|
function TdxNavBarSkinNavPaneViewInfo.GetOverflowPanelHeight: Integer;
|
|
var
|
|
AOverflowButton: TdxSkinElement;
|
|
AOverflowPanel: TdxSkinElement;
|
|
ASkinInfo: TdxSkinLookAndFeelPainterInfo;
|
|
begin
|
|
Result := inherited GetOverflowPanelHeight;
|
|
if GetSkinInfo(ASkinInfo) then
|
|
begin
|
|
AOverflowButton := ASkinInfo.NavPaneOverflowPanelItem;
|
|
AOverflowPanel := ASkinInfo.NavPaneOverflowPanel;
|
|
if (AOverflowButton <> nil) and (AOverflowPanel <> nil) then
|
|
with AOverflowPanel.ContentOffset do
|
|
Result := Max(Result, Top + Bottom + AOverflowButton.Size.cy);
|
|
end;
|
|
end;
|
|
|
|
function TdxNavBarSkinNavPaneViewInfo.GetOverflowPanelClientOffset: TRect;
|
|
var
|
|
AOverflowPanel: TdxSkinElement;
|
|
ASkinInfo: TdxSkinLookAndFeelPainterInfo;
|
|
begin
|
|
AOverflowPanel := nil;
|
|
if GetSkinInfo(ASkinInfo) then
|
|
AOverflowPanel := ASkinInfo.NavPaneOverflowPanel;
|
|
|
|
if AOverflowPanel = nil then
|
|
Result := inherited GetOverflowPanelClientOffset
|
|
else
|
|
Result := AOverflowPanel.ContentOffset.Rect;
|
|
end;
|
|
|
|
function TdxNavBarSkinNavPaneViewInfo.GetOverflowPanelImageWidthAddon: Integer;
|
|
var
|
|
AOverflowButton: TdxSkinElement;
|
|
ASkinInfo: TdxSkinLookAndFeelPainterInfo;
|
|
begin
|
|
if GetSkinInfo(ASkinInfo) then
|
|
AOverflowButton := ASkinInfo.NavPaneOverflowPanelItem
|
|
else
|
|
AOverflowButton := nil;
|
|
|
|
if AOverflowButton = nil then
|
|
Result := inherited GetOverflowPanelImageWidthAddon
|
|
else
|
|
with AOverflowButton.ContentOffset do
|
|
Result := (Left + Right) div 2;
|
|
end;
|
|
|
|
function TdxNavBarSkinNavPaneViewInfo.GetOverflowPanelSignWidth: Integer;
|
|
var
|
|
ASkinInfo: TdxSkinLookAndFeelPainterInfo;
|
|
begin
|
|
Result := inherited GetOverflowPanelSignWidth;
|
|
if GetSkinInfo(ASkinInfo) then
|
|
begin
|
|
if ASkinInfo.NavPaneOverflowPanelExpandedItem <> nil then
|
|
with ASkinInfo.NavPaneOverflowPanelExpandedItem do
|
|
Result := Max(Size.cx, Result);
|
|
end;
|
|
end;
|
|
|
|
function TdxNavBarSkinNavPaneViewInfo.GetSkinInfo(
|
|
var ASkinInfo: TdxSkinLookAndFeelPainterInfo): Boolean;
|
|
begin
|
|
with TdxNavBarSkinNavPanePainter(Painter) do
|
|
Result := GetSkinPainterData(ASkinInfo);
|
|
end;
|
|
|
|
{ TdxNavBarSkinNavPanePainter }
|
|
|
|
constructor TdxNavBarSkinNavPanePainter.Create(ANavBar: TdxCustomNavBar);
|
|
begin
|
|
inherited Create(ANavBar);
|
|
FLookAndFeel := TcxLookAndFeel.Create(nil);
|
|
FLookAndFeel.NativeStyle := False;
|
|
FLookAndFeel.OnChanged := LookAndFeelChanged;
|
|
end;
|
|
|
|
destructor TdxNavBarSkinNavPanePainter.Destroy;
|
|
begin
|
|
FLookAndFeel.Free;
|
|
inherited Destroy;
|
|
end;
|
|
|
|
function TdxNavBarSkinNavPanePainter.CreateViewInfo: TdxNavBarViewInfo;
|
|
begin
|
|
Result := TdxNavBarSkinNavPaneViewInfo.Create(Self);
|
|
end;
|
|
|
|
function TdxNavBarSkinNavPanePainter.CreateGroupViewInfo(AViewInfo: TdxNavBarViewInfo;
|
|
AGroup: TdxNavBarGroup; ACaptionVisible: Boolean; AItemsVisible: Boolean): TdxNavBarGroupViewInfo;
|
|
begin
|
|
Result := TdxNavBarSkinNavPaneGroupViewInfo.Create(AViewInfo, AGroup, ACaptionVisible,
|
|
AItemsVisible);
|
|
end;
|
|
|
|
function TdxNavBarSkinNavPanePainter.CreateLinkViewInfo(AViewInfo: TdxNavBarGroupViewInfo;
|
|
ALink: TdxNavBarItemLink; ACaptionVisible: Boolean;
|
|
AImageVisisble: Boolean): TdxNavBarLinkViewInfo;
|
|
begin
|
|
Result := TdxNavBarSkinNavPaneLinkViewInfo.Create(AViewInfo, ALink, ACaptionVisible,
|
|
AImageVisisble);
|
|
end;
|
|
|
|
function TdxNavBarSkinNavPanePainter.GetMasterLookAndFeel: TcxLookAndFeel;
|
|
begin
|
|
Result := FLookAndFeel;
|
|
end;
|
|
|
|
function TdxNavBarSkinNavPanePainter.GetSkinPainterData(
|
|
var AData: TdxSkinLookAndFeelPainterInfo): Boolean;
|
|
begin
|
|
Result := GetExtendedStylePainters.GetPainterData(FLookAndFeel.SkinPainter, AData);
|
|
end;
|
|
|
|
procedure TdxNavBarSkinNavPanePainter.LookAndFeelChanged(
|
|
Sender: TcxLookAndFeel; AChangedValues: TcxLookAndFeelValues);
|
|
begin
|
|
NavBar.InvalidateAll(doRecreate);
|
|
end;
|
|
|
|
function TdxNavBarSkinNavPanePainter.InternalDrawScrollButton(ADownButton: Boolean;
|
|
const ARect: TRect; AState: TdxNavBarObjectStates): Boolean;
|
|
var
|
|
AElement: TdxSkinElement;
|
|
ASkinInfo: TdxSkinLookAndFeelPainterInfo;
|
|
begin
|
|
AElement := nil;
|
|
if GetSkinPainterData(ASkinInfo) then
|
|
AElement := ASkinInfo.NavPaneScrollButtons[ADownButton];
|
|
Result := AElement <> nil;
|
|
if Result then
|
|
AElement.Draw(Canvas.Handle, ARect, 0, NavBarObjectStateToSkinState(AState));
|
|
end;
|
|
|
|
function TdxNavBarSkinNavPanePainter.IsSkinAvailable: Boolean;
|
|
begin
|
|
Result := FLookAndFeel.SkinPainter <> nil;
|
|
end;
|
|
|
|
function TdxNavBarSkinNavPanePainter.IsSkinNameStored: Boolean;
|
|
begin
|
|
Result := SkinNameAssigned;
|
|
end;
|
|
|
|
function TdxNavBarSkinNavPanePainter.GetSkinName: TdxSkinName;
|
|
begin
|
|
Result := FLookAndFeel.SkinName;
|
|
end;
|
|
|
|
procedure TdxNavBarSkinNavPanePainter.SetSkinName(const Value: TdxSkinName);
|
|
begin
|
|
FLookAndFeel.SkinName := Value;
|
|
end;
|
|
|
|
function TdxNavBarSkinNavPanePainter.GetSkinNameAssigned: Boolean;
|
|
begin
|
|
Result := lfvSkinName in FLookAndFeel.AssignedValues;
|
|
end;
|
|
|
|
procedure TdxNavBarSkinNavPanePainter.SetSkinNameAssigned(AValue: Boolean);
|
|
begin
|
|
if AValue then
|
|
FLookAndFeel.AssignedValues := FLookAndFeel.AssignedValues + [lfvSkinName]
|
|
else
|
|
FLookAndFeel.AssignedValues := FLookAndFeel.AssignedValues - [lfvSkinName];
|
|
end;
|
|
|
|
function TdxNavBarSkinNavPanePainter.CustomDrawHeader: Boolean;
|
|
begin
|
|
Result := False;
|
|
if Assigned(NavBar.OnCustomDrawNavigationPaneHeader) then
|
|
NavBar.OnCustomDrawNavigationPaneHeader(NavBar, Canvas, ViewInfo, Result);
|
|
end;
|
|
|
|
function TdxNavBarSkinNavPanePainter.CustomDrawOverflowPanel: Boolean;
|
|
begin
|
|
Result := False;
|
|
if Assigned(NavBar.OnCustomDrawNavigationPaneOverflowPanel) then
|
|
NavBar.OnCustomDrawNavigationPaneOverflowPanel(NavBar, Canvas, ViewInfo, Result);
|
|
end;
|
|
|
|
function TdxNavBarSkinNavPanePainter.CustomDrawSplitter: Boolean;
|
|
begin
|
|
Result := False;
|
|
if Assigned(NavBar.OnCustomDrawNavigationPaneSplitter) then
|
|
NavBar.OnCustomDrawNavigationPaneSplitter(NavBar, Canvas, ViewInfo, Result);
|
|
end;
|
|
|
|
procedure TdxNavBarSkinNavPanePainter.DrawBackground;
|
|
var
|
|
AColor: TdxSkinElement;
|
|
ASkinInfo: TdxSkinLookAndFeelPainterInfo;
|
|
begin
|
|
AColor := nil;
|
|
if GetSkinPainterData(ASkinInfo) then
|
|
AColor := ASkinInfo.NavBarBackgroundColor;
|
|
if AColor = nil then
|
|
inherited DrawBackground
|
|
else
|
|
begin
|
|
Canvas.Brush.Color := AColor.Color;
|
|
Canvas.FillRect(NavBar.ClientRect);
|
|
end;
|
|
end;
|
|
|
|
procedure TdxNavBarSkinNavPanePainter.DrawBorder;
|
|
begin
|
|
if not IsSkinAvailable then
|
|
inherited DrawBorder;
|
|
end;
|
|
|
|
procedure TdxNavBarSkinNavPanePainter.DrawBottomScrollButton;
|
|
begin
|
|
with ViewInfo do
|
|
if not InternalDrawScrollButton(True, BottomScrollButtonRect,
|
|
BottomScrollButtonState)
|
|
then
|
|
inherited DrawBottomScrollButton;
|
|
end;
|
|
|
|
procedure TdxNavBarSkinNavPanePainter.DrawHeader;
|
|
var
|
|
AElement: TdxSkinElement;
|
|
ASkinInfo: TdxSkinLookAndFeelPainterInfo;
|
|
begin
|
|
if not CustomDrawHeader then
|
|
begin
|
|
AElement := nil;
|
|
if GetSkinPainterData(ASkinInfo) then
|
|
AElement := ASkinInfo.NavPaneGroupCaption;
|
|
if AElement = nil then
|
|
inherited DrawHeader
|
|
else
|
|
begin
|
|
AElement.Draw(Canvas.Handle, ViewInfo.HeaderRect);
|
|
DrawHeaderText;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TdxNavBarSkinNavPanePainter.DrawGroupBorder(AGroupViewInfo: TdxNavBarGroupViewInfo);
|
|
var
|
|
AElement: TdxSkinElement;
|
|
ASkinInfo: TdxSkinLookAndFeelPainterInfo;
|
|
begin
|
|
AElement := nil;
|
|
if GetSkinPainterData(ASkinInfo) then
|
|
AElement := ASkinInfo.NavPaneGroupClient;
|
|
if AElement = nil then
|
|
inherited DrawGroupBorder(AGroupViewInfo)
|
|
else
|
|
begin
|
|
AElement.Draw(Canvas.Handle, AGroupViewInfo.ControlRect);
|
|
end;
|
|
end;
|
|
|
|
procedure TdxNavBarSkinNavPanePainter.DrawGroupCaptionButton(
|
|
AGroupViewInfo: TdxNavBarGroupViewInfo);
|
|
var
|
|
AElement: TdxSkinElement;
|
|
ARect: TRect;
|
|
ASkinInfo: TdxSkinLookAndFeelPainterInfo;
|
|
begin
|
|
AElement := nil;
|
|
with AGroupViewInfo do
|
|
begin
|
|
if GetSkinPainterData(ASkinInfo) then
|
|
AElement := ASkinInfo.NavPaneGroupButton[sActive in AGroupViewInfo.State];
|
|
if AElement = nil then
|
|
inherited DrawGroupCaptionButton(AGroupViewInfo)
|
|
else
|
|
begin
|
|
ARect := AGroupViewInfo.CaptionRect;
|
|
Dec(ARect.Top);
|
|
AElement.Draw(Canvas.Handle, ARect, 0, NavBarObjectStateToSkinState(State));
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TdxNavBarSkinNavPanePainter.DrawGroupControl(ACanvas: TCanvas; ARect: TRect;
|
|
AGroupViewInfo: TdxNavBarGroupViewInfo);
|
|
var
|
|
AElement: TdxSkinElement;
|
|
ASkinInfo: TdxSkinLookAndFeelPainterInfo;
|
|
begin
|
|
AElement := nil;
|
|
if GetSkinPainterData(ASkinInfo) then
|
|
AElement := ASkinInfo.NavPaneGroupClient;
|
|
|
|
if AElement = nil then
|
|
inherited DrawGroupControl(ACanvas, ARect, AGroupViewInfo)
|
|
else
|
|
AElement.Draw(ACanvas.Handle, ARect);
|
|
end;
|
|
|
|
procedure TdxNavBarSkinNavPanePainter.DrawItemSelection(
|
|
ALinkViewInfo: TdxNavBarLinkViewInfo);
|
|
var
|
|
AItem: TdxSkinElement;
|
|
ASkinInfo: TdxSkinLookAndFeelPainterInfo;
|
|
AState: TdxSkinElementState;
|
|
begin
|
|
AItem := nil;
|
|
AState := NavBarObjectStateToSkinState(ALinkViewInfo.State);
|
|
|
|
if GetSkinPainterData(ASkinInfo) then
|
|
if (AState = esNormal) and (sSelected in ALinkViewInfo.State) then
|
|
AItem := ASkinInfo.NavPaneSelectedItem
|
|
else
|
|
AItem := ASkinInfo.NavPaneItem;
|
|
|
|
if AItem = nil then
|
|
inherited DrawItemSelection(ALinkViewInfo)
|
|
else
|
|
AItem.Draw(Canvas.Handle, ALinkViewInfo.SelectionRect, 0, AState);
|
|
end;
|
|
|
|
procedure TdxNavBarSkinNavPanePainter.DrawOverflowPanel;
|
|
var
|
|
AElement: TdxSkinElement;
|
|
ASkinInfo: TdxSkinLookAndFeelPainterInfo;
|
|
begin
|
|
if not CustomDrawOverflowPanel then
|
|
begin
|
|
AElement := nil;
|
|
if GetSkinPainterData(ASkinInfo) then
|
|
AElement := ASkinInfo.NavPaneOverflowPanel;
|
|
if AElement = nil then
|
|
inherited DrawOverflowPanel
|
|
else
|
|
begin
|
|
AElement.Draw(Canvas.Handle, ViewInfo.OverflowPanelRect);
|
|
DrawOverflowPanelSign;
|
|
DrawOverflowPanelItems;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TdxNavBarSkinNavPanePainter.DrawOverflowPanelItems;
|
|
var
|
|
AElementItem: TdxSkinElement;
|
|
AElementState: TdxSkinElementState;
|
|
AGroup: TdxNavBarGroup;
|
|
ASkinInfo: TdxSkinLookAndFeelPainterInfo;
|
|
I: Integer;
|
|
R: TRect;
|
|
begin
|
|
AElementItem := nil;
|
|
if GetSkinPainterData(ASkinInfo) then
|
|
AElementItem := ASkinInfo.NavPaneOverflowPanelItem;
|
|
if AElementItem = nil then
|
|
inherited DrawOverflowPanelItems
|
|
else
|
|
with ViewInfo do
|
|
for I := 0 to OverflowPanelVisibleItemCount - 1 do
|
|
begin
|
|
R := OverflowPanelItems[I].SelectionRect;
|
|
AGroup := OverflowPanelItems[I].Group;
|
|
if NavBar.NavigationPaneOverflowPanelHotTrackedIndex = I then
|
|
AElementState := esHot
|
|
else
|
|
if NavBar.NavigationPaneOverflowPanelPressedIndex = I then
|
|
AElementState := esPressed
|
|
else
|
|
AElementState := esNormal;
|
|
AElementItem.Draw(Canvas.Handle, R, Byte(AGroup = NavBar.ActiveGroup),
|
|
AElementState);
|
|
R := ViewInfo.OverflowPanelItems[I].Rect;
|
|
with ImagePainterClass do
|
|
if IsValidImage(GetOverflowPanelImageList, GetOverflowPanelImageIndex(AGroup)) then
|
|
DrawImage(Canvas, GetOverflowPanelImageList, GetOverflowPanelImageIndex(AGroup), R)
|
|
else
|
|
if NavBar.NavigationPaneOverflowPanelUseSmallImages then
|
|
Canvas.Draw(R.Left, R.Top, dxOffice11NavPaneDefaultSmallBitmap)
|
|
else
|
|
Canvas.Draw(R.Left, R.Top, dxOffice11NavPaneDefaultLargeBitmap);
|
|
end;
|
|
end;
|
|
|
|
procedure TdxNavBarSkinNavPanePainter.DrawOverflowPanelSign;
|
|
var
|
|
AElement: TdxSkinElement;
|
|
ASkinInfo: TdxSkinLookAndFeelPainterInfo;
|
|
AState: TdxSkinElementState;
|
|
begin
|
|
AElement := nil;
|
|
if GetSkinPainterData(ASkinInfo) then
|
|
AElement := ASkinInfo.NavPaneOverflowPanelExpandedItem;
|
|
if AElement = nil then
|
|
inherited DrawOverflowPanelSign
|
|
else
|
|
with ViewInfo do
|
|
begin
|
|
if NavBar.NavigationPaneOverflowPanelSignPressed then
|
|
AState := esPressed
|
|
else
|
|
if NavBar.NavigationPaneOverflowPanelSignHotTracked then
|
|
AState := esHot
|
|
else
|
|
AState := esNormal;
|
|
AElement.Draw(Canvas.Handle, ViewInfo.OverflowPanelSignRect, 0, AState);
|
|
end;
|
|
end;
|
|
|
|
procedure TdxNavBarSkinNavPanePainter.DrawPopupMenuItem(ACanvas: TCanvas; ARect: TRect;
|
|
AImageList: TCustomImageList; AImageIndex: Integer; AText: String;
|
|
State: TdxNavBarObjectStates);
|
|
var
|
|
ABuf: TcxBitmap;
|
|
APopupMenu: TdxSkinElement;
|
|
ASelected: TdxSkinElement;
|
|
ASeparator: TdxSkinElement;
|
|
ASideStrip: TdxSkinElement;
|
|
ASkinInfo: TdxSkinLookAndFeelPainterInfo;
|
|
AImageAreaWidth: Integer;
|
|
R: TRect;
|
|
|
|
function InitializeElements: Boolean;
|
|
begin
|
|
Result := GetSkinPainterData(ASkinInfo);
|
|
if Result then
|
|
begin
|
|
APopupMenu := ASkinInfo.PopupMenu;
|
|
ASelected := ASkinInfo.PopupMenuLinkSelected;
|
|
ASeparator := ASkinInfo.PopupMenuSeparator;
|
|
ASideStrip := ASkinInfo.PopupMenuSideStrip;
|
|
Result := (APopupMenu <> nil) and (ASelected <> nil) and (ASeparator <> nil) and
|
|
(ASideStrip <> nil);
|
|
end;
|
|
end;
|
|
|
|
procedure DrawImage(ACanvas: TCanvas; AIsActive: Boolean; AImageAreaWidth: Integer);
|
|
var
|
|
R: TRect;
|
|
begin
|
|
R := ARect;
|
|
OffsetRect(R, -R.Left, -R.Top);
|
|
R.Right := R.Left + AImageAreaWidth;
|
|
|
|
if AIsActive then
|
|
ASelected.Draw(ACanvas.Handle, R);
|
|
|
|
with TdxNavBarSkinNavPaneViewInfo(ViewInfo) do
|
|
InflateRect(R, -GetOverflowPanelPopupMenuImageIndent,
|
|
-GetOverflowPanelPopupMenuImageIndent);
|
|
AImageList.Draw(ACanvas, R.Left, R.Top, AImageIndex, not (sDisabled in State));
|
|
end;
|
|
|
|
procedure DrawItemText(ACanvas: TCanvas; AImageAreaWidth: Integer);
|
|
var
|
|
R: TRect;
|
|
begin
|
|
R := ARect;
|
|
OffsetRect(R, -R.Left, -R.Top);
|
|
|
|
with TdxNavBarSkinNavPaneViewInfo(ViewInfo) do
|
|
R.Left := AImageAreaWidth + GetOverflowPanelPopupMenuTextIndent;
|
|
|
|
if sDisabled in State then
|
|
ACanvas.Font.Color := clGrayText
|
|
else
|
|
ACanvas.Font.Color := clMenuText;
|
|
|
|
ACanvas.Brush.Style := bsClear;
|
|
cxDrawText(ACanvas.Handle, AText, R, DT_LEFT or DT_VCENTER or DT_SINGLELINE);
|
|
end;
|
|
|
|
procedure DrawMenuBackground(ACanvas: TCanvas; AImageAreaWidth: Integer);
|
|
var
|
|
R: TRect;
|
|
begin
|
|
R := ARect;
|
|
OffsetRect(R, -R.Left, -R.Top);
|
|
with APopupMenu.Borders do
|
|
begin
|
|
Dec(R.Left, Left.Thin);
|
|
Dec(R.Top, Top.Thin);
|
|
Inc(R.Right, Right.Thin);
|
|
Inc(R.Bottom, Bottom.Thin);
|
|
end;
|
|
APopupMenu.Draw(ABuf.Canvas.Handle, R);
|
|
|
|
R := ARect;
|
|
OffsetRect(R, -R.Left, -R.Top);
|
|
R.Right := R.Left + AImageAreaWidth + 2;
|
|
ASideStrip.Draw(ABuf.Canvas.Handle, R);
|
|
end;
|
|
|
|
begin
|
|
if not InitializeElements then
|
|
inherited DrawPopupMenuItem(ACanvas, ARect, AImageList, AImageIndex, AText, State)
|
|
else
|
|
begin
|
|
with TdxNavBarSkinNavPaneViewInfo(ViewInfo) do
|
|
AImageAreaWidth := 2 * GetOverflowPanelPopupMenuImageIndent + GetSmallImageWidth;
|
|
|
|
ABuf := TcxBitmap.CreateSize(ARect);
|
|
try
|
|
ABuf.Canvas.Font := ACanvas.Font;
|
|
ABuf.PixelFormat := pf32bit;
|
|
DrawMenuBackground(ABuf.Canvas, AImageAreaWidth);
|
|
if AText = '-' then
|
|
ASeparator.Draw(ABuf.Canvas.Handle, Rect(AImageAreaWidth + 4,
|
|
cxRectHeight(ARect) div 2, ABuf.Width, cxRectHeight(ARect) div 2 + 1))
|
|
else
|
|
begin
|
|
if sSelected in State then
|
|
begin
|
|
R := ARect;
|
|
OffsetRect(R, -R.Left, -R.Top);
|
|
ASelected.Draw(ABuf.Canvas.Handle, R);
|
|
end;
|
|
DrawImage(ABuf.Canvas, sActive in State, AImageAreaWidth);
|
|
DrawItemText(ABuf.Canvas, AImageAreaWidth);
|
|
end;
|
|
BitBlt(ACanvas.Handle, ARect.Left, ARect.Top, ABuf.Width, ABuf.Height,
|
|
ABuf.Canvas.Handle, 0, 0, SRCCOPY);
|
|
finally
|
|
ABuf.Free;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TdxNavBarSkinNavPanePainter.DrawSplitter;
|
|
var
|
|
AElement: TdxSkinElement;
|
|
ASkinInfo: TdxSkinLookAndFeelPainterInfo;
|
|
begin
|
|
if not CustomDrawSplitter then
|
|
begin
|
|
AElement := nil;
|
|
if GetSkinPainterData(ASkinInfo) then
|
|
AElement := ASkinInfo.NavPaneSplitter;
|
|
if AElement = nil then
|
|
inherited DrawSplitter
|
|
else
|
|
AElement.Draw(Canvas.Handle, ViewInfo.SplitterRect);
|
|
end;
|
|
end;
|
|
|
|
procedure TdxNavBarSkinNavPanePainter.DrawTopScrollButton;
|
|
begin
|
|
with ViewInfo do
|
|
if not InternalDrawScrollButton(False, TopScrollButtonRect,
|
|
TopScrollButtonState)
|
|
then
|
|
inherited DrawTopScrollButton;
|
|
end;
|
|
|
|
{ TdxNavBarSkinExplorerBarPainter }
|
|
|
|
constructor TdxNavBarSkinExplorerBarPainter.Create(ANavBar: TdxCustomNavBar);
|
|
begin
|
|
inherited Create(ANavBar);
|
|
FLookAndFeel := TcxLookAndFeel.Create(nil);
|
|
FLookAndFeel.NativeStyle := False;
|
|
FLookAndFeel.OnChanged := LookAndFeelChanged;
|
|
end;
|
|
|
|
destructor TdxNavBarSkinExplorerBarPainter.Destroy;
|
|
begin
|
|
FLookAndFeel.Free;
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TdxNavBarSkinExplorerBarPainter.DrawBackground;
|
|
var
|
|
ABackground: TdxSkinElement;
|
|
ASkinInfo: TdxSkinLookAndFeelPainterInfo;
|
|
begin
|
|
ABackground := nil;
|
|
if GetSkinPainterData(ASkinInfo) then
|
|
ABackground := ASkinInfo.NavBarBackgroundColor;
|
|
if ABackground = nil then
|
|
inherited DrawBackground
|
|
else
|
|
ABackground.Draw(Canvas.Handle, NavBar.ClientRect);
|
|
end;
|
|
|
|
procedure TdxNavBarSkinExplorerBarPainter.DrawGroupBackground(
|
|
AGroupViewInfo: TdxNavBarGroupViewInfo);
|
|
begin
|
|
if not IsSkinAvailable then
|
|
inherited DrawGroupBackground(AGroupViewInfo);
|
|
end;
|
|
|
|
procedure TdxNavBarSkinExplorerBarPainter.DrawGroupBorder(
|
|
AGroupViewInfo: TdxNavBarGroupViewInfo);
|
|
var
|
|
AElement: TdxSkinElement;
|
|
ASkinInfo: TdxSkinLookAndFeelPainterInfo;
|
|
begin
|
|
AElement := nil;
|
|
if GetSkinPainterData(ASkinInfo) then
|
|
AElement := ASkinInfo.NavBarGroupClient;
|
|
if AElement = nil then
|
|
inherited DrawGroupBorder(AGroupViewInfo)
|
|
else
|
|
begin
|
|
AElement.Draw(Canvas.Handle, AGroupViewInfo.ItemsRect);
|
|
if not AGroupViewInfo.IsCaptionVisible then
|
|
DrawGroupTopBorder(AGroupViewInfo);
|
|
end;
|
|
end;
|
|
|
|
procedure TdxNavBarSkinExplorerBarPainter.DrawGroupTopBorder(
|
|
AGroupViewInfo: TdxNavBarGroupViewInfo);
|
|
var
|
|
ACanvas: TcxCanvas;
|
|
AElement: TdxSkinElement;
|
|
ASkinInfo: TdxSkinLookAndFeelPainterInfo;
|
|
R: TRect;
|
|
begin
|
|
AElement := nil;
|
|
if GetSkinPainterData(ASkinInfo) then
|
|
AElement := ASkinInfo.NavBarGroupHeader;
|
|
if AElement <> nil then
|
|
begin
|
|
ACanvas := TcxCanvas.Create(Canvas);
|
|
try
|
|
ACanvas.SaveClipRegion;
|
|
try
|
|
R := AGroupViewInfo.ItemsRect;
|
|
ACanvas.SetClipRegion(TcxRegion.Create(cxRectSetHeight(R, 1)), roSet);
|
|
R.Bottom := R.Top + 1;
|
|
Dec(R.Top, AElement.Size.cy);
|
|
AElement.Draw(ACanvas.Handle, R);
|
|
finally
|
|
ACanvas.RestoreClipRegion;
|
|
end;
|
|
finally
|
|
ACanvas.Free;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TdxNavBarSkinExplorerBarPainter.DrawGroupCaption(
|
|
AGroupViewInfo: TdxNavBarGroupViewInfo);
|
|
var
|
|
AElement: TdxSkinElement;
|
|
ASkinInfo: TdxSkinLookAndFeelPainterInfo;
|
|
begin
|
|
AElement := nil;
|
|
if GetSkinPainterData(ASkinInfo) then
|
|
AElement := ASkinInfo.NavBarGroupHeader;
|
|
if AElement <> nil then
|
|
begin
|
|
AElement.Draw(Canvas.Handle, AGroupViewInfo.CaptionRect);
|
|
DrawGroupCaptionButton(AGroupViewInfo);
|
|
DrawGroupCaptionText(AGroupViewInfo);
|
|
if AGroupViewInfo.IsCaptionImageVisible then
|
|
DrawGroupCaptionImage(AGroupViewInfo);
|
|
end else
|
|
inherited DrawGroupCaption(AGroupViewInfo);
|
|
end;
|
|
|
|
procedure TdxNavBarSkinExplorerBarPainter.DrawGroupCaptionButton(
|
|
AGroupViewInfo: TdxNavBarGroupViewInfo);
|
|
var
|
|
AElement: TdxSkinElement;
|
|
ASkinInfo: TdxSkinLookAndFeelPainterInfo;
|
|
begin
|
|
AElement := nil;
|
|
with AGroupViewInfo do
|
|
begin
|
|
if GetSkinPainterData(ASkinInfo) then
|
|
AElement := ASkinInfo.NavBarGroupButtons[sExpanded in State];
|
|
if AElement = nil then
|
|
inherited DrawGroupCaptionButton(AGroupViewInfo)
|
|
else
|
|
if Group.ShowExpandButton then
|
|
AElement.Draw(Canvas.Handle, AGroupViewInfo.CaptionSignRect, 0,
|
|
NavBarObjectStateToSkinState(State));
|
|
end;
|
|
end;
|
|
|
|
procedure TdxNavBarSkinExplorerBarPainter.DrawGroupControl(ACanvas: TCanvas;
|
|
ARect: TRect; AGroupViewInfo: TdxNavBarGroupViewInfo);
|
|
var
|
|
AElement: TdxSkinElement;
|
|
ASkinInfo: TdxSkinLookAndFeelPainterInfo;
|
|
begin
|
|
AElement := nil;
|
|
if GetSkinPainterData(ASkinInfo) then
|
|
AElement := ASkinInfo.NavBarGroupClient;
|
|
|
|
if AElement = nil then
|
|
inherited DrawGroupControl(ACanvas, ARect, AGroupViewInfo)
|
|
else
|
|
AElement.Draw(ACanvas.Handle, cxRectInflate(ARect, 1, 0, 1, 1));
|
|
end;
|
|
|
|
function TdxNavBarSkinExplorerBarPainter.CreateGroupViewInfo(
|
|
AViewInfo: TdxNavBarViewInfo; AGroup: TdxNavBarGroup; ACaptionVisible: Boolean;
|
|
AItemsVisible: Boolean): TdxNavBarGroupViewInfo;
|
|
begin
|
|
Result := TdxNavBarSkinExplorerBarGroupViewInfo.Create(AViewInfo, AGroup,
|
|
ACaptionVisible, AItemsVisible);
|
|
end;
|
|
|
|
function TdxNavBarSkinExplorerBarPainter.CreateLinkViewInfo(
|
|
AViewInfo: TdxNavBarGroupViewInfo; ALink: TdxNavBarItemLink; ACaptionVisible: Boolean;
|
|
AImageVisisble: Boolean): TdxNavBarLinkViewInfo;
|
|
begin
|
|
Result := TdxNavBarSkinExplorerBarLinkViewInfo.Create(AViewInfo, ALink,
|
|
ACaptionVisible, AImageVisisble);
|
|
end;
|
|
|
|
function TdxNavBarSkinExplorerBarPainter.GetMasterLookAndFeel: TcxLookAndFeel;
|
|
begin
|
|
Result := FLookAndFeel;
|
|
end;
|
|
|
|
function TdxNavBarSkinExplorerBarPainter.GetSkinPainterData(
|
|
var AData: TdxSkinLookAndFeelPainterInfo): Boolean;
|
|
begin
|
|
Result := GetExtendedStylePainters.GetPainterData(FLookAndFeel.SkinPainter, AData);
|
|
end;
|
|
|
|
function TdxNavBarSkinExplorerBarPainter.IsSkinAvailable: Boolean;
|
|
begin
|
|
Result := FLookAndFeel.SkinPainter <> nil;
|
|
end;
|
|
|
|
procedure TdxNavBarSkinExplorerBarPainter.LookAndFeelChanged(
|
|
Sender: TcxLookAndFeel; AChangedValues: TcxLookAndFeelValues);
|
|
begin
|
|
NavBar.InvalidateAll(doRecreate);
|
|
end;
|
|
|
|
function TdxNavBarSkinExplorerBarPainter.IsSkinNameStored: Boolean;
|
|
begin
|
|
Result := SkinNameAssigned;
|
|
end;
|
|
|
|
function TdxNavBarSkinExplorerBarPainter.GetSkinName: TdxSkinName;
|
|
begin
|
|
Result := FLookAndFeel.SkinName;
|
|
end;
|
|
|
|
procedure TdxNavBarSkinExplorerBarPainter.SetSkinName(const Value: TdxSkinName);
|
|
begin
|
|
FLookAndFeel.SkinName := Value;
|
|
end;
|
|
|
|
function TdxNavBarSkinExplorerBarPainter.GetSkinNameAssigned: Boolean;
|
|
begin
|
|
Result := lfvSkinName in FLookAndFeel.AssignedValues;
|
|
end;
|
|
|
|
procedure TdxNavBarSkinExplorerBarPainter.SetSkinNameAssigned(AValue: Boolean);
|
|
begin
|
|
if AValue then
|
|
FLookAndFeel.AssignedValues := FLookAndFeel.AssignedValues + [lfvSkinName]
|
|
else
|
|
FLookAndFeel.AssignedValues := FLookAndFeel.AssignedValues - [lfvSkinName];
|
|
end;
|
|
|
|
{ TdxNavBarSkinExplorerBarGroupViewInfo }
|
|
|
|
function TdxNavBarSkinExplorerBarGroupViewInfo.CaptionFontColor: TColor;
|
|
var
|
|
AElement: TdxSkinElement;
|
|
ASkinInfo: TdxSkinLookAndFeelPainterInfo;
|
|
begin
|
|
with TdxNavBarSkinExplorerBarPainter(Painter) do
|
|
begin
|
|
AElement := nil;
|
|
if GetSkinPainterData(ASkinInfo) then
|
|
AElement := ASkinInfo.NavBarGroupHeader;
|
|
if AElement <> nil then
|
|
Result := AElement.TextColor
|
|
else
|
|
Result := inherited CaptionFontColor;
|
|
end;
|
|
end;
|
|
|
|
procedure TdxNavBarSkinExplorerBarGroupViewInfo.CalculateBounds(X: Integer; Y: Integer);
|
|
var
|
|
AElement: TdxSkinElement;
|
|
ASkinInfo: TdxSkinLookAndFeelPainterInfo;
|
|
begin
|
|
inherited CalculateBounds(X, Y);
|
|
with TdxNavBarSkinExplorerBarPainter(Painter) do
|
|
begin
|
|
if GetSkinPainterData(ASkinInfo) then
|
|
AElement := ASkinInfo.NavBarGroupHeader
|
|
else
|
|
AElement := nil;
|
|
if (AElement <> nil) and IsCaptionVisible and not IsRectEmpty(FCaptionImageRect) then
|
|
begin
|
|
OffsetRect(FCaptionImageRect, AElement.ContentOffset.Left, 0);
|
|
Inc(FCaptionTextRect.Left, AElement.ContentOffset.Left);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
{ TdxNavBarSkinExplorerBarLinkViewInfo }
|
|
|
|
function TdxNavBarSkinExplorerBarLinkViewInfo.FontColor: TColor;
|
|
var
|
|
AElement: TdxSkinElement;
|
|
ASkinInfo: TdxSkinLookAndFeelPainterInfo;
|
|
begin
|
|
with TdxNavBarSkinExplorerBarPainter(Painter) do
|
|
begin
|
|
AElement := nil;
|
|
if GetSkinPainterData(ASkinInfo) then
|
|
AElement := ASkinInfo.NavBarItem;
|
|
if AElement <> nil then
|
|
Result := AElement.TextColor
|
|
else
|
|
Result := inherited FontColor;
|
|
end;
|
|
end;
|
|
|
|
initialization
|
|
dxNavBarViewsFactory.RegisterView(dxNavBarSkinExplorerBarView,
|
|
'SkinExplorerBarView', TdxNavBarSkinExplorerBarPainter);
|
|
dxNavBarViewsFactory.RegisterView(dxNavBarSkinNavigatorPaneView,
|
|
'SkinNavigationPaneView', TdxNavBarSkinNavPanePainter);
|
|
RegisterClasses([TdxNavBarSkinNavPanePainter, TdxNavBarSkinExplorerBarPainter]);
|
|
|
|
finalization
|
|
dxNavBarViewsFactory.UnRegisterView(dxNavBarSkinExplorerBarView);
|
|
dxNavBarViewsFactory.UnRegisterView(dxNavBarSkinNavigatorPaneView);
|
|
|
|
end.
|