git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.DevExpressVCL@31 05c56307-c608-d34a-929d-697000501d7a
746 lines
25 KiB
ObjectPascal
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.
|
|
|