Componentes.Terceros.DevExp.../internal/x.36/1/ExpressSkins Library/Sources/dxSkinsdxNavBar2Painter.pas
2008-09-04 11:31:51 +00:00

746 lines
25 KiB
ObjectPascal

{********************************************************************}
{ }
{ Developer Express Visual Component Library }
{ ExpressSkins Library }
{ }
{ Copyright (c) 2006-2008 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 dxSkinsdxNavBar2Painter;
interface
uses
Types, Windows, Graphics, Classes, ImgList,
dxNavBar, dxNavBarBase, dxNavBarCollns, dxNavBarStyles, dxNavBarExplorerViews,
dxNavBarGraphics, dxNavBarConsts, dxNavBarOffice11Views, dxNavBarOfficeViews,
cxLookAndFeels, cxLookAndFeelPainters,cxGraphics, cxClasses, dxSkinInfo,
dxNavBarSkinBasedViews, dxSkinsCore, dxSkinsLookAndFeelPainter, dxNavBarCustomPainters;
type
TdxNavBarSkinPainterHelper = class(TdxNavBarSkinBasedPainterHelper)
private
FLookAndFeel: TcxLookAndFeel;
protected
function GetSkinsCount: Integer; override;
function GetSkinNames(AIndex: Integer): TdxSkinName; override;
function GetSkinInfoClass: TdxSkinInfoClass; override;
function GetSkinName: TdxSkinName; override;
function GetSkinPainterData(var AData: TdxSkinInfo): Boolean; override;
procedure LookAndFeelChanged(Sender: TcxLookAndFeel; AChangedValues: TcxLookAndFeelValues);
procedure SetSkinName(AValue: TdxSkinName); override;
public
constructor Create(ASkinName: TdxSkinName); override;
destructor Destroy; override;
function NavBarDragDropItemTarget: TdxSkinElement; override;
function NavBarSeparator: TdxSkinElement; override;
function NavPanePopupControl: TdxSkinElement; override;
end;
{ TdxNavBarSkinNavPaneLinkViewInfo }
TdxNavBarSkinNavPaneLinkViewInfo = class(TdxNavBarSkinBasedNavPaneLinkViewInfo)
public
function SelectionRect: TRect; override;
end;
{ TdxNavBarSkinNavPaneGroupViewInfo }
TdxNavBarSkinNavPaneGroupViewInfo = class(TdxNavBarSkinBasedNavPaneGroupViewInfo);
{ TdxNavBarSkinOverflowPanelViewInfo }
TdxNavBarSkinOverflowPanelViewInfo = class(TdxNavBarSkinBasedOverflowPanelViewInfo)
private
function GetMinHeight: Integer;
protected
function GetHeight: Integer; override;
function GetImageWidthAddon: Integer; override;
function GetSignWidth: Integer; override;
end;
{ TdxNavBarSkinNavPaneViewInfo }
TdxNavBarSkinNavPaneViewInfo = class(TdxNavBarSkinBasedNavPaneViewInfo)
protected
function GetGroupBorderOffsets: TRect; override;
function GetGroupCaptionSignSize: TSize; override;
function GetGroupHeaderTextIndent: Integer; override;
function GetHeaderClientOffset: TRect; override;
function GetHeaderHeightAddon: Integer; override;
function GetHeaderSignIndents: TRect; override;
function GetOverflowPanelViewInfoClass: TdxNavBarOverflowPanelViewInfoClass; override;
public
function BorderColor: TColor; override;
function BorderWidth: Integer; override;
function CollapseBarFontColor: TColor; override;
end;
{ TdxNavBarSkinPopupControlViewInfo }
TdxNavBarSkinPopupControlViewInfo = class(TdxNavBarSkinBasedPopupControlViewInfo)
protected
function GetBorderOffsets: TRect; override;
end;
{ TdxNavBarSkinNavPanePainter }
TdxNavBarSkinNavPanePainter = class(TdxNavBarSkinBasedNavPanePainter)
private
function GetLookAndFeel: TcxLookAndFeel;
function GetOverflowPanelViewInfo: TdxNavBarSkinOverflowPanelViewInfo;
function GetSkinName: TdxSkinName;
function GetSkinNameAssigned: Boolean;
function IsSkinNameStored: Boolean;
procedure SetLookAndFeel(AValue: TcxLookAndFeel);
procedure SetSkinName(const AValue: TdxSkinName);
procedure SetSkinNameAssigned(AValue: Boolean);
protected
class function GetViewInfoClass: TdxNavBarViewInfoClass; override;
class function GetGroupViewInfoClass: TdxNavBarGroupViewInfoClass; override;
class function GetLinkViewInfoClass: TdxNavBarLinkViewInfoClass; override;
class function GetSkinPainterHelperClass: TdxNavBarSkinBasedPainterHelperClass; override;
class function GetPopupControlViewInfoClass: TdxNavBarPopupControlViewInfoClass; override;
function GetSplitterType: Integer; override;
function GetMasterLookAndFeel: TcxLookAndFeel; override;
public
procedure Assign(Source: TPersistent); override;
procedure DrawBackground; override;
procedure DrawBorder; override;
procedure DrawGroupBackground(AGroupViewInfo: TdxNavBarGroupViewInfo); override;
procedure DrawGroupControl(ACanvas: TCanvas; ARect: TRect;
AGroupViewInfo: TdxNavBarGroupViewInfo); override;
procedure DrawSeparator(ALinkViewInfo: TdxNavBarLinkViewInfo); override;
procedure DrawSizeGrip(ACanvas: TCanvas; const ARect: TRect); override;
property LookAndFeel: TcxLookAndFeel read GetLookAndFeel write SetLookAndFeel;
property OverflowPanelViewInfo: TdxNavBarSkinOverflowPanelViewInfo read GetOverflowPanelViewInfo;
published
property SkinName: TdxSkinName read GetSkinName write SetSkinName stored IsSkinNameStored;
property SkinNameAssigned: Boolean read GetSkinNameAssigned write SetSkinNameAssigned default False;
end;
{ TdxNavBarSkinExplorerBarViewInfo }
TdxNavBarSkinExplorerBarViewInfo = class(TdxNavBarExplorerBarViewInfo)
protected
function GetHelper: TdxNavBarSkinPainterHelper;
function GetGroupBorderOffsets: TRect; override;
function GetGroupCaptionSignSize: TSize; override;
end;
{ TdxNavBarSkinExplorerBarPainter }
TdxNavBarSkinExplorerBarPainter = class(TdxNavBarSkinBasedExplorerBarPainter)
private
function GetLookAndFeel: TcxLookAndFeel;
function GetSkinName: TdxSkinName;
function GetSkinNameAssigned: Boolean;
function IsSkinNameStored: Boolean;
procedure SetLookAndFeel(AValue: TcxLookAndFeel);
procedure SetSkinName(const AValue: TdxSkinName);
procedure SetSkinNameAssigned(AValue: Boolean);
protected
class function GetViewInfoClass: TdxNavBarViewInfoClass; override;
class function GetSkinPainterHelperClass: TdxNavBarSkinBasedPainterHelperClass; override;
class function SignPainterClass: TdxNavBarCustomSignPainterClass; override;
function GetMasterLookAndFeel: TcxLookAndFeel; override;
public
procedure Assign(Source: TPersistent); override;
procedure DrawBackground; override;
procedure DrawGroupBackground(AGroupViewInfo: TdxNavBarGroupViewInfo); override;
procedure DrawGroupControl(ACanvas: TCanvas; ARect: TRect;
AGroupViewInfo: TdxNavBarGroupViewInfo); override;
procedure DrawGroupControlSplitter(AGroupViewInfo: TdxNavBarExplorerBarGroupViewInfo); override;
procedure DrawSeparator(ALinkViewInfo: TdxNavBarLinkViewInfo); override;
property LookAndFeel: TcxLookAndFeel read GetLookAndFeel write SetLookAndFeel;
published
property SkinName: TdxSkinName read GetSkinName write SetSkinName stored IsSkinNameStored;
property SkinNameAssigned: Boolean read GetSkinNameAssigned write SetSkinNameAssigned default False;
end;
implementation
uses
dxNavBarViewsFact, Math, cxGeometry;
type
TdxCustomNavBarAccess = class(TdxCustomNavBar);
{ TdxNavBarSkinPainterHelper }
constructor TdxNavBarSkinPainterHelper.Create(ASkinName: TdxSkinName);
begin
inherited Create(ASkinName);
FLookAndFeel := TcxLookAndFeel.Create(nil);
FLookAndFeel.NativeStyle := False;
FLookAndFeel.OnChanged := LookAndFeelChanged;
end;
destructor TdxNavBarSkinPainterHelper.Destroy;
begin
FLookAndFeel.Free;
inherited;
end;
function TdxNavBarSkinPainterHelper.NavBarDragDropItemTarget: TdxSkinElement;
begin
Result := nil;
end;
function TdxNavBarSkinPainterHelper.NavBarSeparator: TdxSkinElement;
begin
Result := nil;
end;
function TdxNavBarSkinPainterHelper.NavPanePopupControl: TdxSkinElement;
var
ASkinInfo: TdxSkinInfo;
begin
Result := nil;
if GetSkinPainterData(ASkinInfo) then
Result := ASkinInfo.NavPaneFormBorder;
end;
function TdxNavBarSkinPainterHelper.GetSkinsCount: Integer;
begin
Result := GetExtendedStylePainters.Count;
end;
function TdxNavBarSkinPainterHelper.GetSkinNames(AIndex: Integer): TdxSkinName;
begin
Result := GetExtendedStylePainters.Names[AIndex];
end;
function TdxNavBarSkinPainterHelper.GetSkinInfoClass: TdxSkinInfoClass;
begin
Result := TdxSkinInfo;
end;
function TdxNavBarSkinPainterHelper.GetSkinName: TdxSkinName;
begin
Result := FLookAndFeel.SkinName;
end;
function TdxNavBarSkinPainterHelper.GetSkinPainterData(var AData: TdxSkinInfo): Boolean;
begin
Result := GetExtendedStylePainters.GetPainterData(FLookAndFeel.SkinPainter, AData);
end;
procedure TdxNavBarSkinPainterHelper.LookAndFeelChanged(Sender: TcxLookAndFeel; AChangedValues: TcxLookAndFeelValues);
begin
DoChanged;
end;
procedure TdxNavBarSkinPainterHelper.SetSkinName(AValue: TdxSkinName);
begin
FLookAndFeel.SkinName := AValue;
end;
{ TdxNavBarSkinNavPaneLinkViewInfo }
function TdxNavBarSkinNavPaneLinkViewInfo.SelectionRect: TRect;
begin
Result := Rect;
InflateRect(Result, -1, 0);
if not TdxCustomNavBarAccess(NavBar).IsInternal then
Result := cxRectContent(Result, GetSkinElementOffsets(GetSkinHelper.NavPaneGroupClient));
end;
{ TdxNavBarSkinOverflowPanelViewInfo }
function TdxNavBarSkinOverflowPanelViewInfo.GetHeight: Integer;
begin
Result := inherited GetHeight;
if IsSkinAvailable and (Result > 0) then
Result := Max(Result, GetMinHeight);
end;
function TdxNavBarSkinOverflowPanelViewInfo.GetImageWidthAddon: Integer;
var
AElement: TdxSkinElement;
begin
AElement := GetSkinHelper.NavPaneOverflowPanelItem;
if AElement = nil then
Result := inherited GetImageWidthAddon
else
with AElement.ContentOffset do
Result := (Left + Right) div 2;
end;
function TdxNavBarSkinOverflowPanelViewInfo.GetSignWidth: Integer;
begin
if IsSkinAvailable then
Result := GetItemSelectionWidth
else
Result := inherited GetSignWidth;
end;
function TdxNavBarSkinOverflowPanelViewInfo.GetMinHeight: Integer;
var
AElement: TdxSkinElement;
begin
Result := GetClientOffset.Top + GetClientOffset.Bottom + GetImageHeight;
AElement := GetSkinHelper.NavPaneOverflowPanelItem;
if AElement <> nil then
with AElement.ContentOffset do
Inc(Result, Top + Bottom);
end;
{ TdxNavBarSkinNavPaneViewInfo }
function TdxNavBarSkinNavPaneViewInfo.BorderColor: TColor;
begin
if IsSkinAvailable then
Result := HeaderFontColor
else
Result := inherited BorderColor;
end;
function TdxNavBarSkinNavPaneViewInfo.BorderWidth: Integer;
begin
if IsSkinAvailable then
Result := 0
else
Result := inherited BorderWidth;
end;
function TdxNavBarSkinNavPaneViewInfo.CollapseBarFontColor: TColor;
var
AElement: TdxSkinElement;
begin
AElement := GetSkinHelper.NavPaneItemPanel;
if AElement <> nil then
Result := AElement.TextColor
else
Result := inherited CollapseBarFontColor;
end;
function TdxNavBarSkinNavPaneViewInfo.GetGroupBorderOffsets: TRect;
var
AOffsets: TRect;
begin
Result := inherited GetGroupBorderOffsets;
if not TdxCustomNavBarAccess(NavBar).IsInternal then
begin
if IsTopBorderNeeded then
Result.Top := Result.Top + 1;
if IsBottomBorderNeeded then
Result.Bottom := Result.Bottom + 1;
AOffsets := GetSkinElementOffsets(GetSkinHelper.NavPaneGroupClient);
Inc(Result.Left, AOffsets.Left);
Inc(Result.Right, AOffsets.Right);
end;
end;
function TdxNavBarSkinNavPaneViewInfo.GetGroupCaptionSignSize: TSize;
var
AElement: TdxSkinElement;
begin
AElement := GetSkinHelper.NavePaneHeaderSign(False);
if AElement <> nil then
Result := AElement.Size
else
Result := inherited GetGroupCaptionSignSize;
end;
function TdxNavBarSkinNavPaneViewInfo.GetGroupHeaderTextIndent: Integer;
begin
if IsSkinAvailable then
Result := 0
else
Result := inherited GetGroupHeaderTextIndent;
end;
function TdxNavBarSkinNavPaneViewInfo.GetHeaderClientOffset: TRect;
var
AElement: TdxSkinElement;
begin
AElement := GetSkinHelper.NavPaneHeader;
if AElement <> nil then
Result := AElement.ContentOffset.Rect
else
Result := inherited GetHeaderClientOffset;
end;
function TdxNavBarSkinNavPaneViewInfo.GetHeaderHeightAddon: Integer;
begin
if IsSkinAvailable then
Result := GetHeaderClientOffset.Top + GetHeaderClientOffset.Bottom
else
Result := inherited GetHeaderHeightAddon;
end;
function TdxNavBarSkinNavPaneViewInfo.GetHeaderSignIndents: TRect;
begin
Result := inherited GetHeaderSignIndents;
if IsSkinAvailable then
Result.Right := 0;
end;
function TdxNavBarSkinNavPaneViewInfo.GetOverflowPanelViewInfoClass: TdxNavBarOverflowPanelViewInfoClass;
begin
Result := TdxNavBarSkinOverflowPanelViewInfo;
end;
{ TdxNavBarSkinPopupControlViewInfo }
function TdxNavBarSkinPopupControlViewInfo.GetBorderOffsets: TRect;
var
AElement: TdxSkinElement;
begin
AElement := GetSkinHelper.NavPanePopupControl;
if AElement <> nil then
if not AElement.Image.Empty then
Result := AElement.Image.Margins.Rect
else
with AElement.Borders do
Result := cxRect(Left.Thin, Top.Thin, Right.Thin, Bottom.Thin)
else
Result := inherited GetBorderOffsets;
end;
{ TdxNavBarSkinNavPanePainter }
procedure TdxNavBarSkinNavPanePainter.Assign(Source: TPersistent);
begin
if Source is TdxNavBarSkinNavPanePainter then
LookAndFeel := TdxNavBarSkinNavPanePainter(Source).LookAndFeel
else
inherited;
end;
class function TdxNavBarSkinNavPanePainter.GetViewInfoClass: TdxNavBarViewInfoClass;
begin
Result := TdxNavBarSkinNavPaneViewInfo;
end;
class function TdxNavBarSkinNavPanePainter.GetGroupViewInfoClass: TdxNavBarGroupViewInfoClass;
begin
Result := TdxNavBarSkinNavPaneGroupViewInfo;
end;
class function TdxNavBarSkinNavPanePainter.GetLinkViewInfoClass: TdxNavBarLinkViewInfoClass;
begin
Result := TdxNavBarSkinNavPaneLinkViewInfo;
end;
class function TdxNavBarSkinNavPanePainter.GetSkinPainterHelperClass: TdxNavBarSkinBasedPainterHelperClass;
begin
Result := TdxNavBarSkinPainterHelper;
end;
class function TdxNavBarSkinNavPanePainter.GetPopupControlViewInfoClass: TdxNavBarPopupControlViewInfoClass;
begin
Result := TdxNavBarSkinPopupControlViewInfo;
end;
function TdxNavBarSkinNavPanePainter.GetSplitterType: Integer;
begin
Result := 0;
end;
function TdxNavBarSkinNavPanePainter.GetMasterLookAndFeel: TcxLookAndFeel;
begin
Result := LookAndFeel;
end;
function TdxNavBarSkinNavPanePainter.IsSkinNameStored: Boolean;
begin
Result := SkinNameAssigned;
end;
function TdxNavBarSkinNavPanePainter.GetLookAndFeel: TcxLookAndFeel;
begin
Result := TdxNavBarSkinPainterHelper(FSkinBasedPainterHelper).FLookAndFeel;
end;
function TdxNavBarSkinNavPanePainter.GetOverflowPanelViewInfo: TdxNavBarSkinOverflowPanelViewInfo;
begin
Result := TdxNavBarSkinOverflowPanelViewInfo(inherited OverflowPanelViewInfo);
end;
function TdxNavBarSkinNavPanePainter.GetSkinName: TdxSkinName;
begin
Result := ColorSchemeName;
end;
function TdxNavBarSkinNavPanePainter.GetSkinNameAssigned: Boolean;
begin
Result := lfvSkinName in LookAndFeel.AssignedValues;
end;
procedure TdxNavBarSkinNavPanePainter.SetLookAndFeel(AValue: TcxLookAndFeel);
begin
LookAndFeel.Assign(AValue);
end;
procedure TdxNavBarSkinNavPanePainter.SetSkinName(const AValue: TdxSkinName);
begin
ColorSchemeName := AValue;
end;
procedure TdxNavBarSkinNavPanePainter.SetSkinNameAssigned(AValue: Boolean);
begin
if AValue then
LookAndFeel.AssignedValues := LookAndFeel.AssignedValues + [lfvSkinName]
else
LookAndFeel.AssignedValues := LookAndFeel.AssignedValues - [lfvSkinName];
end;
procedure TdxNavBarSkinNavPanePainter.DrawBackground;
var
AElement: TdxSkinElement;
begin
AElement := FSkinBasedPainterHelper.NavBarBackground;
if AElement = nil then
inherited DrawBackground
else
begin
Canvas.Brush.Color := AElement.Color;
Canvas.FillRect(NavBar.ClientRect);
end;
end;
procedure TdxNavBarSkinNavPanePainter.DrawBorder;
procedure DrawBorder(AElement: TdxSkinElement; ADrawRect, AClipRect: TRect);
begin
if AElement = nil then Exit;
cxCanvas.SaveClipRegion;
try
cxCanvas.SetClipRegion(TcxRegion.Create(AClipRect), roIntersect);
AElement.Draw(cxCanvas.Handle, ADrawRect);
finally
cxCanvas.RestoreClipRegion;
end;
end;
procedure DrawTopBorder(const ARect: TRect);
begin
DrawBorder(FSkinBasedPainterHelper.NavPaneHeader, cxRectSetBottom(ARect, ARect.Top + 1), cxRectSetHeight(ARect, 1));
end;
procedure DrawBottomBorder(const ARect: TRect);
begin
DrawBorder(FSkinBasedPainterHelper.NavPaneSplitter, cxRectSetTop(ARect, ARect.Bottom - 1), cxRectSetBottom(ARect, ARect.Bottom, 1));
end;
begin
if not IsSkinAvailable then
inherited DrawBorder
else
if not TdxCustomNavBarAccess(NavBar).IsInternal then
begin
if TdxNavBarSkinNavPaneViewInfo(ViewInfo).IsTopBorderNeeded then
DrawTopBorder(NavBar.ClientRect);
if TdxNavBarSkinNavPaneViewInfo(ViewInfo).IsBottomBorderNeeded then
DrawBottomBorder(NavBar.ClientRect);
end
end;
procedure TdxNavBarSkinNavPanePainter.DrawGroupBackground(AGroupViewInfo: TdxNavBarGroupViewInfo);
begin
if not DrawSkinElement(FSkinBasedPainterHelper.NavPaneGroupClient, Canvas, AGroupViewInfo.ItemsRect,
0, esNormal, TdxCustomNavBarAccess(NavBar).IsInternal) then
inherited DrawGroupBackground(AGroupViewInfo)
end;
procedure TdxNavBarSkinNavPanePainter.DrawGroupControl(ACanvas: TCanvas; ARect: TRect;
AGroupViewInfo: TdxNavBarGroupViewInfo);
begin
if not DrawSkinElement(FSkinBasedPainterHelper.NavPaneGroupClient, ACanvas, ARect,
0, esNormal, True) then
inherited DrawGroupControl(ACanvas, ARect, AGroupViewInfo);
end;
procedure TdxNavBarSkinNavPanePainter.DrawSeparator(ALinkViewInfo: TdxNavBarLinkViewInfo);
var
ARect: TRect;
begin
Canvas.Brush.Color := ALinkViewInfo.FontColor;
ARect := cxRectInflate(ALinkViewInfo.Rect, -1, 0);
if not TdxCustomNavBarAccess(NavBar).IsInternal then
ARect := cxRectContent(ARect, GetSkinElementOffsets(FSkinBasedPainterHelper.NavPaneGroupClient));
Canvas.FillRect(cxRectCenter(ARect, cxRectWidth(ARect), 1));
end;
procedure TdxNavBarSkinNavPanePainter.DrawSizeGrip(ACanvas: TCanvas; const ARect: TRect);
begin
if not DrawSkinElement(FSkinBasedPainterHelper.NavPaneSizeGrip, ACanvas, ARect) then
inherited;
end;
{ TdxNavBarSkinExplorerBarViewInfo }
function TdxNavBarSkinExplorerBarViewInfo.GetHelper: TdxNavBarSkinPainterHelper;
begin
Result := TdxNavBarSkinPainterHelper(TdxNavBarSkinExplorerBarPainter(Painter).FSkinBasedPainterHelper);
end;
function TdxNavBarSkinExplorerBarViewInfo.GetGroupBorderOffsets: TRect;
begin
if TdxNavBarSkinExplorerBarPainter(Painter).IsSkinAvailable then
Result := GetSkinElementOffsets(GetHelper.NavBarGroupClient)
else
Result := inherited GetGroupBorderOffsets;
end;
function TdxNavBarSkinExplorerBarViewInfo.GetGroupCaptionSignSize: TSize;
var
AElement: TdxSkinElement;
begin
AElement := GetHelper.NavBarGroupSigns(True);
if AElement <> nil then
Result := AElement.Size
else
Result := inherited GetGroupCaptionSignSize;
end;
{ TdxNavBarSkinExplorerBarPainter }
procedure TdxNavBarSkinExplorerBarPainter.Assign(Source: TPersistent);
begin
if Source is TdxNavBarSkinExplorerBarPainter then
LookAndFeel := TdxNavBarSkinExplorerBarPainter(Source).LookAndFeel
else
inherited;
end;
procedure TdxNavBarSkinExplorerBarPainter.DrawBackground;
begin
if not DrawSkinElement(FSkinBasedPainterHelper.NavBarBackground, Canvas, NavBar.ClientRect) then
inherited;
end;
procedure TdxNavBarSkinExplorerBarPainter.DrawGroupBackground(AGroupViewInfo: TdxNavBarGroupViewInfo);
begin
if not IsSkinAvailable then
inherited;
end;
procedure TdxNavBarSkinExplorerBarPainter.DrawGroupControl(ACanvas: TCanvas;
ARect: TRect; AGroupViewInfo: TdxNavBarGroupViewInfo);
begin
if not DrawSkinElement(FSkinBasedPainterHelper.NavBarGroupClient, ACanvas, ARect, 0, esNormal, True) then
inherited;
end;
procedure TdxNavBarSkinExplorerBarPainter.DrawGroupControlSplitter(AGroupViewInfo: TdxNavBarExplorerBarGroupViewInfo);
begin
//do nothing
end;
procedure TdxNavBarSkinExplorerBarPainter.DrawSeparator(ALinkViewInfo: TdxNavBarLinkViewInfo);
var
ARect: TRect;
begin
Canvas.Brush.Color := ALinkViewInfo.FontColor;
ARect := cxRectInflate(ALinkViewInfo.Rect, -1, 0);
ARect := cxRectContent(ARect, GetSkinElementOffsets(FSkinBasedPainterHelper.NavBarGroupClient));
Canvas.FillRect(cxRectCenter(ARect, cxRectWidth(ARect), 1));
end;
class function TdxNavBarSkinExplorerBarPainter.GetViewInfoClass: TdxNavBarViewInfoClass;
begin
Result := TdxNavBarSkinExplorerBarViewInfo;
end;
class function TdxNavBarSkinExplorerBarPainter.GetSkinPainterHelperClass: TdxNavBarSkinBasedPainterHelperClass;
begin
Result := TdxNavBarSkinPainterHelper;
end;
class function TdxNavBarSkinExplorerBarPainter.SignPainterClass: TdxNavBarCustomSignPainterClass;
begin
Result := TdxNavBarExplorerBarSignPainter;
end;
function TdxNavBarSkinExplorerBarPainter.GetMasterLookAndFeel: TcxLookAndFeel;
begin
Result := LookAndFeel;
end;
function TdxNavBarSkinExplorerBarPainter.IsSkinNameStored: Boolean;
begin
Result := SkinNameAssigned;
end;
procedure TdxNavBarSkinExplorerBarPainter.SetLookAndFeel(AValue: TcxLookAndFeel);
begin
LookAndFeel.Assign(AValue);
end;
procedure TdxNavBarSkinExplorerBarPainter.SetSkinName(const AValue: TdxSkinName);
begin
ColorSchemeName := AValue;
end;
function TdxNavBarSkinExplorerBarPainter.GetLookAndFeel: TcxLookAndFeel;
begin
Result := TdxNavBarSkinPainterHelper(FSkinBasedPainterHelper).FLookAndFeel;
end;
function TdxNavBarSkinExplorerBarPainter.GetSkinName: TdxSkinName;
begin
Result := ColorSchemeName;
end;
function TdxNavBarSkinExplorerBarPainter.GetSkinNameAssigned: Boolean;
begin
Result := lfvSkinName in LookAndFeel.AssignedValues;
end;
procedure TdxNavBarSkinExplorerBarPainter.SetSkinNameAssigned(AValue: Boolean);
begin
if AValue then
LookAndFeel.AssignedValues := LookAndFeel.AssignedValues + [lfvSkinName]
else
LookAndFeel.AssignedValues := LookAndFeel.AssignedValues - [lfvSkinName];
end;
initialization
dxNavBarViewsFactory.RegisterView(dxNavBarSkinExplorerBarView,
'SkinExplorerBarView', TdxNavBarSkinExplorerBarPainter);
dxNavBarViewsFactory.RegisterView(dxNavBarSkinNavigatorPaneView,
'SkinNavigationPaneView', TdxNavBarSkinNavPanePainter);
RegisterClasses([TdxNavBarSkinNavPanePainter, TdxNavBarSkinExplorerBarPainter]);
finalization
dxNavBarViewsFactory.UnRegisterView(dxNavBarSkinExplorerBarView);
dxNavBarViewsFactory.UnRegisterView(dxNavBarSkinNavigatorPaneView);
end.