800 lines
28 KiB
ObjectPascal
800 lines
28 KiB
ObjectPascal
{*******************************************************************}
|
|
{ }
|
|
{ Developer Express Visual Component Library }
|
|
{ ExpressBars Customization Form }
|
|
{ }
|
|
{ Copyright (c) 1998-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 EXPRESSBARS 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 dxBarSkinnedCustForm;
|
|
|
|
{$I cxVer.inc}
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
|
|
StdCtrls, ComCtrls, ExtCtrls, Menus, Buttons, cxClasses, dxBar, ActnList,
|
|
ToolWin, ImgList, Contnrs, dxBarCustomCustomizationForm, dxSkinsCore, cxButtons,
|
|
cxControls, cxContainer, cxEdit, cxLabel, cxCheckBox, cxGroupBox, cxGraphics,
|
|
cxTextEdit, cxMaskEdit, cxDropDownEdit, cxListBox, dxSkinscxPCPainter,
|
|
cxPC, cxCheckListBox, cxLookAndFeels, cxLookAndFeelPainters,
|
|
dxSkinsDefaultPainters, dxSkinsdxBarPainter;
|
|
|
|
type
|
|
TdxBarPermissiveProc = function (Sender: TComponent): Boolean of object;
|
|
|
|
TdxBarSkinnedCustomizationForm = class(TdxBarCustomCustomizationForm)
|
|
BBarDelete: TcxButton;
|
|
BBarNew: TcxButton;
|
|
BBarRename: TcxButton;
|
|
BBarReset: TcxButton;
|
|
BClose: TcxButton;
|
|
Bevel1: TBevel;
|
|
Bevel2: TBevel;
|
|
Bevel3: TBevel;
|
|
BHelp: TcxButton;
|
|
BResetUsageData: TcxButton;
|
|
CategoriesPopupButtonPlace: TcxButton;
|
|
CBHint1Ex: TcxCheckBox;
|
|
CBHint2: TcxCheckBox;
|
|
CBHint2Ex: TcxCheckBox;
|
|
CBLargeIcons: TcxCheckBox;
|
|
CBLargeIconsEx: TcxCheckBox;
|
|
CBMenusShowRecentItemsFirst: TcxCheckBox;
|
|
CBShowFullMenusAfterDelay: TcxCheckBox;
|
|
ComboBoxMenuAnimations: TcxComboBox;
|
|
ComboBoxMenuAnimationsEx: TcxComboBox;
|
|
CommandsPopupButtonPlace: TcxButton;
|
|
DescriptionLabel: TcxLabel;
|
|
EnhancedOptionsPanel: TPanel;
|
|
Label1: TcxLabel;
|
|
Label2: TcxLabel;
|
|
Label3: TcxLabel;
|
|
LabelCategories: TcxLabel;
|
|
LabelCommands: TcxLabel;
|
|
LabelDescription: TcxLabel;
|
|
LabelMenuAnimations: TcxLabel;
|
|
LabelToobars: TcxLabel;
|
|
lbCategories: TcxListBox;
|
|
lbItems: TcxListBox;
|
|
LeftBevel: TBevel;
|
|
PageControl: TcxPageControl;
|
|
Panel1: TPanel;
|
|
Panel6: TPanel;
|
|
Panel7: TPanel;
|
|
Panel9: TPanel;
|
|
RightBevel: TBevel;
|
|
StandardOptionsPanel: TPanel;
|
|
TabSheet1: TcxTabSheet;
|
|
TopBevel: TBevel;
|
|
tsItems: TcxTabSheet;
|
|
tsOptions: TcxTabSheet;
|
|
tsToolbars: TcxTabSheet;
|
|
tvKeyTips: TTreeView;
|
|
lbBarsList: TcxListBox;
|
|
CBHint1: TcxCheckBox;
|
|
Bevel4: TBevel;
|
|
Bevel5: TBevel;
|
|
function GetIsSkinUsed: Boolean;
|
|
procedure BResetUsageDataClick(Sender: TObject);
|
|
procedure CBHint1Click(Sender: TObject);
|
|
procedure CBHint1ExClick(Sender: TObject);
|
|
procedure CBHint2Click(Sender: TObject);
|
|
procedure CBLargeIconsClick(Sender: TObject);
|
|
procedure CBMenusShowRecentItemsFirstClick(Sender: TObject);
|
|
procedure CBShowFullMenusAfterDelayClick(Sender: TObject);
|
|
procedure ComboBoxMenuAnimationsClick(Sender: TObject);
|
|
procedure lbItemsDrawItem(AControl: TcxListBox; ACanvas: TcxCanvas;
|
|
AIndex: Integer; ARect: TRect; AState: TOwnerDrawState);
|
|
procedure BCloseClick(Sender: TObject);
|
|
procedure BHelpClick(Sender: TObject);
|
|
private
|
|
FLookAndFeel: TcxLookAndFeel;
|
|
protected
|
|
function GetBarItemsBackgroundColor: TColor; override;
|
|
function GetBarListBox: TListBox; override;
|
|
function GetCategoriesList: TListBox; override;
|
|
function GetItemsListBox: TListBox; override;
|
|
function GetPainterClass: TdxBarCustomizationFormPainterClass; override;
|
|
procedure PrepareControls; override;
|
|
procedure SynchronizeListBoxes; override;
|
|
|
|
property IsSkinUsed: Boolean read GetIsSkinUsed;
|
|
property LookAndFeel: TcxLookAndFeel read FLookAndFeel;
|
|
public
|
|
constructor CreateEx(ABarManager: TdxBarManager); override;
|
|
destructor Destroy; override;
|
|
procedure BarManagerStyleChanged; override;
|
|
procedure DesignSelectionChanged(Sender: TObject); override;
|
|
procedure SelectPage(APageIndex: Integer); override;
|
|
procedure SwitchToItemsPage; override;
|
|
procedure UpdateHelpButton; override;
|
|
procedure UpdateOptions; override;
|
|
end;
|
|
|
|
implementation
|
|
|
|
{$R *.DFM}
|
|
|
|
uses
|
|
{$IFDEF DELPHI8}
|
|
Types,
|
|
{$ENDIF}
|
|
dxBarNameEd, dxBarPopupMenuEd, dxBarItemEd, dxBarStrs, dxBarAddGroupItemsEd,
|
|
TypInfo, dxUxTheme, dxThemeManager, dxThemeConsts, dxOffice11, dxBarCustForm,
|
|
dxSkinInfo, dxSkinsLookAndFeelPainter, Math, cxGeometry;
|
|
|
|
const
|
|
dxBarButtonHeight = 24;
|
|
|
|
type
|
|
TdxBarAccess = class(TdxBar);
|
|
TdxBarItemAccess = class(TdxBarItem);
|
|
TdxBarManagerAccess = class(TdxBarManager);
|
|
TcxControlAccess = class(TcxControl);
|
|
|
|
{ TdxBarCustomizationFormSkinPainter }
|
|
|
|
TdxBarCustomizationFormSkinPainter = class(TdxBarCustomizationFormPainter)
|
|
private
|
|
class function GetLookAndFeelPainter: TcxCustomLookAndFeelPainterClass;
|
|
class function GetPopupMenuElement: TdxSkinElement;
|
|
class function GetPopupMenuLinkDropButtonElement: TdxSkinElement;
|
|
class function GetPopupMenuLinkSelectedElement(AIsDropDown: Boolean): TdxSkinElement;
|
|
class function GetSideStripElement: TdxSkinElement;
|
|
class function GetSkinElementColor(AElement: TdxSkinElement; ATextColor: Boolean): TColor;
|
|
class function GetSkinInfo(var ASkinInfo: TdxSkinInfo): Boolean;
|
|
protected
|
|
class procedure DrawSkinElement(ACanvas: TCanvas; const R: TRect;
|
|
AElement: TdxSkinElement);
|
|
class procedure DrawSkinElementContent(ACanvas: TCanvas; R: TRect;
|
|
AElement: TdxSkinElement);
|
|
|
|
class procedure DrawButtonOrSubItemArrowBackground(ACanvas: TCanvas;
|
|
R: TRect; AItem: TdxBarItem; Selected: Boolean); override;
|
|
class procedure DrawButtonOrSubItemBackground(ACanvas: TCanvas;
|
|
AItem: TdxBarItem; const ABounds, ASideStripRect, AArrowRect: TRect;
|
|
ASelected: Boolean); override;
|
|
class procedure DrawButtonOrSubItemGlyph(ACanvas: TCanvas; R: TRect;
|
|
AItem: TdxBarItem; ASelected: Boolean); override;
|
|
|
|
class procedure DrawEditEdge(ACanvas: TCanvas; var AItemRect: TRect;
|
|
AItem: TdxCustomBarEdit; ASelected: Boolean); override;
|
|
class procedure InternalDrawCaption(ACanvas: TCanvas;
|
|
var ATextRect: TRect; const AText: string; AItem: TdxCustomBarEdit;
|
|
ASelected: Boolean); override;
|
|
public
|
|
class function BrushColors(Selected: Boolean; AItem: TdxBarItem): TColor; override;
|
|
class procedure DrawCheckBox(ACanvas: TCanvas; R: TRect; AChecked, AEnabled: Boolean); override;
|
|
class procedure DrawComboBoxButton(ACanvas: TCanvas; AItem: TdxBarItem;
|
|
ARect: TRect; ASelected: Boolean); override;
|
|
class procedure DrawEdit(ACanvas: TCanvas; ARect: TRect; AItem: TdxCustomBarEdit;
|
|
Selected: Boolean; ADrawArrowButton: Boolean); override;
|
|
class procedure DrawFocusedRect(ACanvas: TCanvas; ARect: TRect; AItem: TdxBarItem); override;
|
|
class function FontColors(Selected: Boolean): TColor; override;
|
|
class function GetBarButtonHeight: Integer; override;
|
|
class function GetComboBoxButtonWidth: Integer; override;
|
|
end;
|
|
|
|
{ TdxBarCustomizationForm }
|
|
|
|
constructor TdxBarSkinnedCustomizationForm.CreateEx(ABarManager: TdxBarManager);
|
|
|
|
{$IFDEF DELPHI7}
|
|
procedure SetupBevelSize(ALabel: TcxLabel; ABevel: TBevel);
|
|
begin
|
|
with ABevel, BoundsRect do
|
|
BoundsRect := Rect(ALabel.BoundsRect.Right, Top, Right, Bottom);
|
|
end;
|
|
{$ENDIF}
|
|
|
|
begin
|
|
FLookAndFeel := TcxLookAndFeel.Create(Self);
|
|
inherited CreateEx(ABarManager);
|
|
Constraints.MinWidth := Width;
|
|
Constraints.MaxWidth := Width;
|
|
{$IFDEF DELPHI7}
|
|
SetupBevelSize(LabelDescription, Bevel1);
|
|
SetupBevelSize(Label3, Bevel3);
|
|
SetupBevelSize(Label2, Bevel2);
|
|
{$ENDIF}
|
|
end;
|
|
|
|
destructor TdxBarSkinnedCustomizationForm.Destroy;
|
|
begin
|
|
FreeAndNil(FLookAndFeel);
|
|
inherited Destroy;
|
|
end;
|
|
|
|
function TdxBarSkinnedCustomizationForm.GetBarItemsBackgroundColor: TColor;
|
|
begin
|
|
Result := LookAndFeelPainter.DefaultEditorBackgroundColor(False);
|
|
if Result = clDefault then
|
|
Result := inherited GetBarItemsBackgroundColor;
|
|
end;
|
|
|
|
procedure TdxBarSkinnedCustomizationForm.PrepareControls;
|
|
|
|
procedure PrepareMenuAnimationsLabel(ALabel: TcxLabel; ComboBox: TcxComboBox);
|
|
begin
|
|
with ALabel do
|
|
begin
|
|
Caption := cxGetResourceString(@dxSBAR_MENUANIMATIONS);
|
|
if Left + Width + 10 > ComboBox.Left then
|
|
ComboBox.Left := Left + Width + 10;
|
|
end;
|
|
end;
|
|
|
|
procedure PrepareToolBarsSheet;
|
|
begin
|
|
BBarReset.Visible := not BarManager.Designing and TdxBarManagerAccess(BarManager).CanReset;
|
|
LabelToobars.Caption := cxGetResourceString(@dxSBAR_TOOLBARS);
|
|
LabelToobars.FocusControl := lbBarsList;
|
|
tsToolbars.Caption := cxGetResourceString(@dxSBAR_TABSHEET1);
|
|
end;
|
|
|
|
procedure PrepareItemsSheet;
|
|
begin
|
|
tsItems.Caption := cxGetResourceString(@dxSBAR_TABSHEET2);
|
|
LabelCommands.FocusControl := lbItems;
|
|
|
|
ReplaceByCheckableButton(cxGetResourceString(@dxSBAR_MODIFY),
|
|
CategoriesPopupButtonPlace, LabelCategories, CategoriesPopupMenu);
|
|
ReplaceByCheckableButton(cxGetResourceString(@dxSBAR_MODIFY),
|
|
CommandsPopupButtonPlace, LabelCommands, CommandsPopupMenu);
|
|
|
|
LabelCategories.Caption := cxGetResourceString(@dxSBAR_CATEGORIES);
|
|
LabelCommands.Caption := cxGetResourceString(@dxSBAR_COMMANDS);
|
|
LabelDescription.Caption := cxGetResourceString(@dxSBAR_DESCRIPTION);
|
|
end;
|
|
|
|
procedure PrepareOptionsSheet;
|
|
begin
|
|
tsOptions.Caption := cxGetResourceString(@dxSBAR_TABSHEET3);
|
|
|
|
if BarManager.GetPaintStyle = bmsStandard then
|
|
begin
|
|
CBLargeIcons.Caption := cxGetResourceString(@dxSBAR_LARGEICONS);
|
|
CBHint1.Caption := cxGetResourceString(@dxSBAR_HINTOPT1);
|
|
CBHint2.Caption := cxGetResourceString(@dxSBAR_HINTOPT2);
|
|
PrepareMenuAnimationsLabel(LabelMenuAnimations, ComboBoxMenuAnimations);
|
|
with ComboBoxMenuAnimations do
|
|
Width := PrepareMenuAnimationsComboBox(Font, Properties.Items);
|
|
end
|
|
else
|
|
begin
|
|
Label3.Caption := cxGetResourceString(@dxSBAR_PERSMENUSANDTOOLBARS);
|
|
CBMenusShowRecentItemsFirst.Caption := cxGetResourceString(@dxSBAR_MENUSSHOWRECENTITEMS);
|
|
CBShowFullMenusAfterDelay.Caption := cxGetResourceString(@dxSBAR_SHOWFULLMENUSAFTERDELAY);
|
|
with BResetUsageData do
|
|
begin
|
|
Caption := cxGetResourceString(@dxSBAR_RESETUSAGEDATA);
|
|
Width := cxTextWidth(Font, GetTextOf(Caption)) + 17;
|
|
end;
|
|
Label2.Caption := cxGetResourceString(@dxSBAR_OTHEROPTIONS);
|
|
CBLargeIconsEx.Caption := cxGetResourceString(@dxSBAR_LARGEICONS);
|
|
CBHint1Ex.Caption := cxGetResourceString(@dxSBAR_HINTOPT1);
|
|
CBHint2Ex.Caption := cxGetResourceString(@dxSBAR_HINTOPT2);
|
|
PrepareMenuAnimationsLabel(Label1, ComboBoxMenuAnimationsEx);
|
|
with ComboBoxMenuAnimationsEx do
|
|
Width := PrepareMenuAnimationsComboBox(Font, Properties.Items);
|
|
end;
|
|
end;
|
|
|
|
procedure PrepareKeyTipsSheet;
|
|
|
|
procedure GetKeyTipsTree(AContainer: IdxBarAccessibilityHelper;
|
|
ANodes: TTreeNodes; AParentNode: TTreeNode);
|
|
var
|
|
AChild, AContainerHelper: TdxBarAccessibilityHelper;
|
|
I: Integer;
|
|
begin
|
|
AContainerHelper := AContainer.GetBarHelper;
|
|
if AContainerHelper.Selectable then
|
|
AParentNode := ANodes.AddChild(AParentNode, AContainerHelper.OwnerObject.ClassName);
|
|
for I := 0 to AContainerHelper.ChildCount - 1 do
|
|
begin
|
|
AChild := AContainerHelper.Childs[I];
|
|
GetKeyTipsTree(AChild, ANodes, AParentNode);
|
|
end;
|
|
end;
|
|
|
|
var
|
|
AKeyTipWindowsManager: IdxBarKeyTipWindowsManager;
|
|
ARootAccessibleObject: IdxBarAccessibilityHelper;
|
|
begin
|
|
ARootAccessibleObject := GetRootAccessibleObject(BarManager.Owner.Handle);
|
|
if (ARootAccessibleObject <> nil) and ARootAccessibleObject.AreKeyTipsSupported(AKeyTipWindowsManager) then
|
|
begin
|
|
GetKeyTipsTree(ARootAccessibleObject, tvKeyTips.Items, nil);
|
|
end;
|
|
end;
|
|
|
|
procedure PrepareButtons;
|
|
begin
|
|
BResetUsageData.Enabled := not BarManager.Designing;
|
|
with BClose do
|
|
begin
|
|
Caption := cxGetResourceString(@dxSBAR_CLOSE);
|
|
Width := Max(cxTextWidth(Font, GetTextOf(Caption)) + 49, BBarNew.Width);
|
|
Left := Parent.Width - RightBevel.Width - Width;
|
|
end;
|
|
UpdateHelpButton;
|
|
end;
|
|
|
|
procedure PrepareButtonsActions;
|
|
begin
|
|
BBarNew.Action := aNewToolBar;
|
|
BBarReset.Action := aResetToolBar;
|
|
BBarDelete.Action := aDeleteToolBar;
|
|
BBarRename.Action := aRenameToolBar;
|
|
end;
|
|
|
|
begin
|
|
PrepareButtons;
|
|
PrepareButtonsActions;
|
|
PrepareToolBarsSheet;
|
|
PrepareItemsSheet;
|
|
PrepareOptionsSheet;
|
|
PrepareKeyTipsSheet;
|
|
end;
|
|
|
|
procedure TdxBarSkinnedCustomizationForm.SynchronizeListBoxes;
|
|
begin
|
|
SynchronizeListBox(lbBarsList.InnerListBox);
|
|
SynchronizeListBox(lbCategories.InnerListBox);
|
|
SynchronizeListBox(lbItems.InnerListBox);
|
|
end;
|
|
|
|
function TdxBarSkinnedCustomizationForm.GetBarListBox: TListBox;
|
|
begin
|
|
Result := lbBarsList.InnerListBox;
|
|
end;
|
|
|
|
function TdxBarSkinnedCustomizationForm.GetItemsListBox: TListBox;
|
|
begin
|
|
Result := lbItems.InnerListBox;
|
|
end;
|
|
|
|
function TdxBarSkinnedCustomizationForm.GetCategoriesList: TListBox;
|
|
begin
|
|
Result := lbCategories.InnerListBox;
|
|
end;
|
|
|
|
function TdxBarSkinnedCustomizationForm.GetPainterClass: TdxBarCustomizationFormPainterClass;
|
|
begin
|
|
if BarManager.PainterClass = TdxBarSkinPainter then
|
|
Result := TdxBarCustomizationFormSkinPainter
|
|
else
|
|
Result := inherited GetPainterClass;
|
|
end;
|
|
|
|
procedure TdxBarSkinnedCustomizationForm.BarManagerStyleChanged;
|
|
const
|
|
LookAndFeelKindMap: array[TdxBarManagerStyle] of TcxLookAndFeelKind = (
|
|
lfStandard, lfStandard, lfUltraFlat, cxDefaultLookAndFeelKind,
|
|
lfOffice11, cxDefaultLookAndFeelKind);
|
|
begin
|
|
inherited BarManagerStyleChanged;
|
|
if IsLookAndFeelUsed then
|
|
LookAndFeel.Assign(BarManager.LookAndFeel)
|
|
else
|
|
begin
|
|
LookAndFeel.SkinName := '';
|
|
LookAndFeel.NativeStyle := BarManager.Style = bmsXP;
|
|
LookAndFeel.Kind := LookAndFeelKindMap[BarManager.Style];
|
|
end;
|
|
SetControlLookAndFeel(Self, LookAndFeel);
|
|
end;
|
|
|
|
procedure TdxBarSkinnedCustomizationForm.DesignSelectionChanged(Sender: TObject);
|
|
begin
|
|
if not (csDestroying in (Application.ComponentState + ComponentState)) then
|
|
begin
|
|
SynchronizeListBoxSelection(lbBarsList.InnerListBox);
|
|
SynchronizeListBoxSelection(lbItems.InnerListBox);
|
|
end;
|
|
end;
|
|
|
|
procedure TdxBarSkinnedCustomizationForm.SelectPage(APageIndex: Integer);
|
|
begin
|
|
PageControl.ActivePageIndex := APageIndex;
|
|
end;
|
|
|
|
procedure TdxBarSkinnedCustomizationForm.SwitchToItemsPage;
|
|
begin
|
|
PageControl.ActivePage := tsItems;
|
|
end;
|
|
|
|
procedure TdxBarSkinnedCustomizationForm.UpdateHelpButton;
|
|
begin
|
|
BHelp.Glyph := BarManager.HelpButtonGlyph;
|
|
BHelp.Visible := BarManager.ShowHelpButton;
|
|
end;
|
|
|
|
procedure TdxBarSkinnedCustomizationForm.UpdateOptions;
|
|
begin
|
|
StandardOptionsPanel.Visible := BarManager.GetPaintStyle = bmsStandard;
|
|
EnhancedOptionsPanel.Visible := BarManager.GetPaintStyle <> bmsStandard;
|
|
|
|
CBMenusShowRecentItemsFirst.Checked := BarManager.MenusShowRecentItemsFirst;
|
|
CBShowFullMenusAfterDelay.Checked := BarManager.ShowFullMenusAfterDelay;
|
|
CBShowFullMenusAfterDelay.Enabled := CBMenusShowRecentItemsFirst.Checked;
|
|
|
|
CBLargeIcons.Checked := BarManager.LargeIcons;
|
|
CBLargeIconsEx.Checked := BarManager.LargeIcons;
|
|
CBHint1.Checked := BarManager.ShowHint;
|
|
CBHint1Ex.Checked := BarManager.ShowHint;
|
|
CBHint2.Checked := BarManager.ShowShortcutInHint;
|
|
CBHint2Ex.Checked := BarManager.ShowShortcutInHint;
|
|
CBHint2Ex.Enabled := CBHint1Ex.Checked;
|
|
ComboBoxMenuAnimations.ItemIndex := Ord(BarManager.MenuAnimations);
|
|
ComboBoxMenuAnimationsEx.ItemIndex := Ord(BarManager.MenuAnimations);
|
|
end;
|
|
|
|
procedure TdxBarSkinnedCustomizationForm.CBMenusShowRecentItemsFirstClick(Sender: TObject);
|
|
begin
|
|
CBShowFullMenusAfterDelay.Enabled := CBMenusShowRecentItemsFirst.Checked;
|
|
BarManager.MenusShowRecentItemsFirst := CBMenusShowRecentItemsFirst.Checked;
|
|
end;
|
|
|
|
procedure TdxBarSkinnedCustomizationForm.CBShowFullMenusAfterDelayClick(Sender: TObject);
|
|
begin
|
|
BarManager.ShowFullMenusAfterDelay := CBShowFullMenusAfterDelay.Checked;
|
|
end;
|
|
|
|
procedure TdxBarSkinnedCustomizationForm.BResetUsageDataClick(Sender: TObject);
|
|
begin
|
|
BarManager.ResetUsageDataWithConfirmation;
|
|
end;
|
|
|
|
procedure TdxBarSkinnedCustomizationForm.CBLargeIconsClick(Sender: TObject);
|
|
begin
|
|
BarManager.LargeIcons := TcxCheckBox(Sender).Checked;
|
|
end;
|
|
|
|
procedure TdxBarSkinnedCustomizationForm.CBHint1Click(Sender: TObject);
|
|
begin
|
|
BarManager.ShowHint := TcxCheckBox(Sender).Checked;
|
|
end;
|
|
|
|
procedure TdxBarSkinnedCustomizationForm.CBHint1ExClick(Sender: TObject);
|
|
begin
|
|
CBHint2Ex.Enabled := CBHint1Ex.Checked;
|
|
CBHint1Click(Sender);
|
|
end;
|
|
|
|
procedure TdxBarSkinnedCustomizationForm.CBHint2Click(Sender: TObject);
|
|
begin
|
|
BarManager.ShowShortCutInHint := TcxCheckBox(Sender).Checked;
|
|
end;
|
|
|
|
procedure TdxBarSkinnedCustomizationForm.ComboBoxMenuAnimationsClick(Sender: TObject);
|
|
begin
|
|
BarManager.MenuAnimations := TdxBarMenuAnimations(TcxComboBox(Sender).ItemIndex);
|
|
end;
|
|
|
|
function TdxBarSkinnedCustomizationForm.GetIsSkinUsed: Boolean;
|
|
begin
|
|
Result := Assigned(LookAndFeel.SkinPainter);
|
|
end;
|
|
|
|
procedure TdxBarSkinnedCustomizationForm.lbItemsDrawItem(
|
|
AControl: TcxListBox; ACanvas: TcxCanvas; AIndex: Integer; ARect: TRect;
|
|
AState: TOwnerDrawState);
|
|
var
|
|
ABitmap: TcxBitmap;
|
|
AItem: TdxBarItem;
|
|
R: TRect;
|
|
begin
|
|
AItem := ItemList[AIndex];
|
|
if Assigned(AItem) then
|
|
begin
|
|
ABitmap := TcxBitmap.CreateSize(ARect, pf32bit);
|
|
try
|
|
ABitmap.Canvas.Font := ACanvas.Font;
|
|
TdxBarItemAccess(AItem).DrawCustomizingImage(ABitmap.Canvas, ABitmap.ClientRect, AState);
|
|
if odFocused in AState then
|
|
PainterClass.DrawFocusedRect(ABitmap.Canvas, ABitmap.ClientRect, AItem);
|
|
cxBitBlt(ACanvas.Handle, ABitmap.Canvas.Handle, ARect, cxNullPoint, SRCCOPY);
|
|
finally
|
|
ABitmap.Free;
|
|
end;
|
|
|
|
if AIndex + 1 = lbItems.Items.Count then
|
|
begin
|
|
R := ARect;
|
|
R.Top := R.Bottom;
|
|
R.Bottom := ClientHeight;
|
|
ACanvas.FillRect(R, PainterClass.BrushColors(False, AItem));
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
{ TdxBarCustomizationFormSkinPainter }
|
|
|
|
class function TdxBarCustomizationFormSkinPainter.BrushColors(
|
|
Selected: Boolean; AItem: TdxBarItem): TColor;
|
|
begin
|
|
Result := GetSkinElementColor(GetPopupMenuElement, False);
|
|
if Result = clDefault then
|
|
Result := inherited BrushColors(Selected, AItem)
|
|
end;
|
|
|
|
class procedure TdxBarCustomizationFormSkinPainter.DrawCheckBox(
|
|
ACanvas: TCanvas; R: TRect; AChecked, AEnabled: Boolean);
|
|
const
|
|
EnableMap: array[Boolean] of TcxButtonState = (cxbsDisabled, cxbsNormal);
|
|
var
|
|
AcxCanvas: TcxCanvas;
|
|
begin
|
|
AcxCanvas := TcxCanvas.Create(ACanvas);
|
|
try
|
|
InflateRect(R, -1, -1);
|
|
GetLookAndFeelPainter.DrawCheckButton(AcxCanvas, R, EnableMap[AEnabled], AChecked);
|
|
finally
|
|
AcxCanvas.Free;
|
|
end;
|
|
end;
|
|
|
|
class procedure TdxBarCustomizationFormSkinPainter.DrawComboBoxButton(
|
|
ACanvas: TCanvas; AItem: TdxBarItem; ARect: TRect; ASelected: Boolean);
|
|
const
|
|
ComboBoxStateMap: array[Boolean] of TcxButtonState = (cxbsNormal, cxbsHot);
|
|
var
|
|
AcxCanvas: TcxCanvas;
|
|
begin
|
|
AcxCanvas := TcxCanvas.Create(ACanvas);
|
|
try
|
|
FillRectByColor(ACanvas.Handle, ARect,
|
|
GetLookAndFeelPainter.DefaultEditorBackgroundColorEx(esckNormal));
|
|
GetLookAndFeelPainter.DrawEditorButton(AcxCanvas, ARect,
|
|
cxbkComboBtn, ComboBoxStateMap[ASelected]);
|
|
finally
|
|
AcxCanvas.Free;
|
|
end;
|
|
end;
|
|
|
|
class procedure TdxBarCustomizationFormSkinPainter.DrawEdit(ACanvas: TCanvas;
|
|
ARect: TRect; AItem: TdxCustomBarEdit; Selected: Boolean; ADrawArrowButton: Boolean);
|
|
var
|
|
R, ASideStripRect: TRect;
|
|
begin
|
|
CalcButtonOrSubItemRects(AItem, ARect, ASideStripRect, R, R);
|
|
DrawSkinElementContent(ACanvas, ARect, GetPopupMenuElement);
|
|
DrawSkinElement(ACanvas, ASideStripRect, GetSideStripElement);
|
|
if Selected then
|
|
DrawSkinElement(ACanvas, ARect, GetPopupMenuLinkSelectedElement(False));
|
|
ARect.Left := ASideStripRect.Right + 5;
|
|
inherited DrawEdit(ACanvas, ARect, AItem, Selected, ADrawArrowButton);
|
|
end;
|
|
|
|
class procedure TdxBarCustomizationFormSkinPainter.DrawFocusedRect(
|
|
ACanvas: TCanvas; ARect: TRect; AItem: TdxBarItem);
|
|
begin
|
|
// nothing
|
|
end;
|
|
|
|
class procedure TdxBarCustomizationFormSkinPainter.DrawButtonOrSubItemArrowBackground(
|
|
ACanvas: TCanvas; R: TRect; AItem: TdxBarItem; Selected: Boolean);
|
|
begin
|
|
if Selected then
|
|
DrawSkinElement(ACanvas, R, GetPopupMenuLinkDropButtonElement);
|
|
end;
|
|
|
|
class procedure TdxBarCustomizationFormSkinPainter.DrawButtonOrSubItemBackground(
|
|
ACanvas: TCanvas; AItem: TdxBarItem; const ABounds, ASideStripRect: TRect;
|
|
const AArrowRect: TRect; ASelected: Boolean);
|
|
var
|
|
AIsDropDown: Boolean;
|
|
begin
|
|
AIsDropDown := (AItem is TdxBarButton) and (TdxBarButton(AItem).ButtonStyle = bsDropDown);
|
|
DrawSkinElementContent(ACanvas, ABounds, GetPopupMenuElement);
|
|
DrawSkinElement(ACanvas, ASideStripRect, GetSideStripElement);
|
|
if ASelected then
|
|
DrawSkinElement(ACanvas, cxRectSetRight(ABounds, AArrowRect.Left),
|
|
GetPopupMenuLinkSelectedElement(AIsDropDown));
|
|
if AIsDropDown then
|
|
DrawButtonOrSubItemArrowBackground(ACanvas, AArrowRect, AItem, ASelected);
|
|
end;
|
|
|
|
class procedure TdxBarCustomizationFormSkinPainter.DrawButtonOrSubItemGlyph(
|
|
ACanvas: TCanvas; R: TRect; AItem: TdxBarItem; ASelected: Boolean);
|
|
begin
|
|
R := cxRectCenter(R, GetGlyphSize(AItem));
|
|
TransparentDraw(ACanvas.Handle, 0, R, R, AItem.Glyph, AItem.GetCurImages,
|
|
AItem.ImageIndex, AItem.BarManager.ImageListBkColor, True, False, False{Flat},
|
|
ASelected, False, False, False{Shadow}, False{Faded},
|
|
AItem.BarManager.ImageOptions.UseLeftBottomPixelAsTransparent);
|
|
end;
|
|
|
|
class procedure TdxBarCustomizationFormSkinPainter.DrawEditEdge(ACanvas: TCanvas;
|
|
var AItemRect: TRect; AItem: TdxCustomBarEdit; ASelected: Boolean);
|
|
begin
|
|
InflateRect(AItemRect, -2, -2);
|
|
FrameRectByColor(ACanvas.Handle, AItemRect,
|
|
GetLookAndFeelPainter.GetContainerBorderColor(ASelected));
|
|
InflateRect(AItemRect, -1, -1);
|
|
end;
|
|
|
|
class procedure TdxBarCustomizationFormSkinPainter.DrawSkinElement(
|
|
ACanvas: TCanvas; const R: TRect; AElement: TdxSkinElement);
|
|
begin
|
|
if Assigned(AElement) then
|
|
AElement.Draw(ACanvas.Handle, R);
|
|
end;
|
|
|
|
class procedure TdxBarCustomizationFormSkinPainter.DrawSkinElementContent(
|
|
ACanvas: TCanvas; R: TRect; AElement: TdxSkinElement);
|
|
var
|
|
AcxCanvas: TcxCanvas;
|
|
begin
|
|
if Assigned(AElement) then
|
|
begin
|
|
AcxCanvas := TcxCanvas.Create(ACanvas);
|
|
try
|
|
AcxCanvas.SaveClipRegion;
|
|
try
|
|
AcxCanvas.SetClipRegion(TcxRegion.Create(R), roIntersect);
|
|
with AElement.Image, AElement.Borders do
|
|
begin
|
|
Dec(R.Left, Max(Margins.Left, Left.Thin));
|
|
Dec(R.Top, Max(Margins.Top, Top.Thin));
|
|
Inc(R.Bottom, Max(Margins.Bottom, Bottom.Thin));
|
|
Inc(R.Right, Max(Margins.Right, Right.Thin));
|
|
end;
|
|
AElement.Draw(ACanvas.Handle, R);
|
|
finally
|
|
AcxCanvas.RestoreClipRegion;
|
|
end;
|
|
finally
|
|
AcxCanvas.Free;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
class function TdxBarCustomizationFormSkinPainter.FontColors(Selected: Boolean): TColor;
|
|
begin
|
|
Result := GetSkinElementColor(GetPopupMenuElement, True);
|
|
if Result = clDefault then
|
|
Result := inherited FontColors(Selected);
|
|
end;
|
|
|
|
class function TdxBarCustomizationFormSkinPainter.GetSkinElementColor(
|
|
AElement: TdxSkinElement; ATextColor: Boolean): TColor;
|
|
begin
|
|
if AElement = nil then
|
|
Result := clDefault
|
|
else
|
|
if ATextColor then
|
|
Result := AElement.TextColor
|
|
else
|
|
Result := AElement.Color;
|
|
end;
|
|
|
|
class function TdxBarCustomizationFormSkinPainter.GetLookAndFeelPainter: TcxCustomLookAndFeelPainterClass;
|
|
begin
|
|
Result := dxBarCustomizingForm.LookAndFeelPainter;
|
|
end;
|
|
|
|
class function TdxBarCustomizationFormSkinPainter.GetPopupMenuElement: TdxSkinElement;
|
|
var
|
|
ASkinInfo: TdxSkinInfo;
|
|
begin
|
|
if GetSkinInfo(ASkinInfo) then
|
|
Result := ASkinInfo.PopupMenu
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
class function TdxBarCustomizationFormSkinPainter.GetPopupMenuLinkDropButtonElement: TdxSkinElement;
|
|
var
|
|
ASkinInfo: TdxSkinInfo;
|
|
begin
|
|
if GetSkinInfo(ASkinInfo) then
|
|
Result := ASkinInfo.PopupMenuSplitButton2
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
class function TdxBarCustomizationFormSkinPainter.GetPopupMenuLinkSelectedElement(
|
|
AIsDropDown: Boolean): TdxSkinElement;
|
|
var
|
|
ASkinInfo: TdxSkinInfo;
|
|
begin
|
|
if not GetSkinInfo(ASkinInfo) then
|
|
Result := nil
|
|
else
|
|
if AIsDropDown then
|
|
Result := ASkinInfo.PopupMenuSplitButton
|
|
else
|
|
Result := ASkinInfo.PopupMenuLinkSelected;
|
|
end;
|
|
|
|
class function TdxBarCustomizationFormSkinPainter.GetSideStripElement: TdxSkinElement;
|
|
var
|
|
ASkinInfo: TdxSkinInfo;
|
|
begin
|
|
if GetSkinInfo(ASkinInfo) then
|
|
Result := ASkinInfo.PopupMenuSideStrip
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
class function TdxBarCustomizationFormSkinPainter.GetSkinInfo(
|
|
var ASkinInfo: TdxSkinInfo): Boolean;
|
|
begin
|
|
Result := GetExtendedStylePainters.GetPainterData(GetLookAndFeelPainter, ASkinInfo);
|
|
end;
|
|
|
|
class function TdxBarCustomizationFormSkinPainter.GetBarButtonHeight: Integer;
|
|
begin
|
|
Result := dxBarButtonHeight;
|
|
end;
|
|
|
|
class function TdxBarCustomizationFormSkinPainter.GetComboBoxButtonWidth: Integer;
|
|
var
|
|
ASize: TSize;
|
|
begin
|
|
ASize := GetLookAndFeelPainter.EditButtonSize;
|
|
Result := Max(ASize.cx, ASize.cy);
|
|
if Result = 0 then
|
|
Result := inherited GetComboBoxButtonWidth;
|
|
end;
|
|
|
|
class procedure TdxBarCustomizationFormSkinPainter.InternalDrawCaption(
|
|
ACanvas: TCanvas; var ATextRect: TRect; const AText: string;
|
|
AItem: TdxCustomBarEdit; ASelected: Boolean);
|
|
begin
|
|
Inc(ATextRect.Right, cxTextOffset + 1);
|
|
ACanvas.Font.Color := FontColors(ASelected);
|
|
ACanvas.Brush.Style := bsClear;
|
|
cxDrawText(ACanvas.Handle, AText, ATextRect,
|
|
DT_NOCLIP or DT_NOPREFIX or DT_SINGLELINE or DT_LEFT or DT_VCENTER);
|
|
end;
|
|
|
|
procedure TdxBarSkinnedCustomizationForm.BCloseClick(Sender: TObject);
|
|
begin
|
|
Close;
|
|
end;
|
|
|
|
procedure TdxBarSkinnedCustomizationForm.BHelpClick(Sender: TObject);
|
|
begin
|
|
DoShowHelp;
|
|
end;
|
|
|
|
initialization
|
|
dxBarCustomizationFormClass := TdxBarSkinnedCustomizationForm;
|
|
|
|
finalization
|
|
dxBarCustomizationFormClass := TdxBarCustomizationForm;
|
|
|
|
end.
|