git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.DevExpressVCL@8 05c56307-c608-d34a-929d-697000501d7a
2394 lines
66 KiB
ObjectPascal
2394 lines
66 KiB
ObjectPascal
{*******************************************************************}
|
|
{ }
|
|
{ Developer Express Visual Component Library }
|
|
{ ExpressNavBar }
|
|
{ }
|
|
{ Copyright (c) 2002-2007 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 EXPRESSNAVBAR 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 dxfmNavBarDsgnEditor;
|
|
|
|
{$I cxVer.inc}
|
|
|
|
interface
|
|
|
|
uses
|
|
Dialogs, Classes, Controls, Messages, Forms, StdCtrls, ExtCtrls, Menus, ImgList, ComCtrls,
|
|
{$IFDEF DELPHI6}
|
|
{$IFDEF CLR}
|
|
Borland.Vcl.Design.DesignWindows, Borland.Vcl.Design.DesignIntf, Borland.Vcl.Design.DesignEditors,
|
|
{$ELSE}
|
|
DesignWindows, DesignIntf, DesignEditors,
|
|
{$ENDIF}
|
|
{$ELSE}
|
|
DsgnIntf, DsgnWnds, LibIntf,
|
|
{$ENDIF}
|
|
|
|
dxNavBar, dxNavBarBase, dxNavBarCollns, dxNavBarStyles, dxNavBarDsgnUtils,
|
|
cxClasses;
|
|
|
|
type
|
|
TdxfmNavBarDesignWindow = class;
|
|
|
|
TdxNavBarDsgnWindowPageHandler = class
|
|
private
|
|
FDsgnWindow: TdxfmNavBarDesignWindow;
|
|
function GetNavBar: TdxCustomNavBar;
|
|
protected
|
|
class function DesignerCaptionPostfix: string; virtual;
|
|
|
|
function CanAdd: Boolean; virtual;
|
|
function CanCopy: Boolean; virtual;
|
|
function CanCut: Boolean; virtual;
|
|
function CanDelete: Boolean; virtual;
|
|
function CanSelectAll: Boolean; virtual;
|
|
function CanMoveUp: Boolean; virtual;
|
|
function CanMoveDown: Boolean; virtual;
|
|
function CanPaste: Boolean; virtual;
|
|
public
|
|
constructor Create(ADsgnWindow: TdxfmNavBarDesignWindow);
|
|
destructor Destroy; override;
|
|
|
|
procedure Activate;
|
|
procedure Add; virtual;
|
|
procedure Copy; virtual;
|
|
procedure Cut; virtual;
|
|
procedure Delete; virtual;
|
|
procedure DeleteItem(AItem: TComponent); virtual;
|
|
procedure GetSelections(const ASelections: IDesignerSelections); virtual;
|
|
procedure MoveSelection(ADelta: Integer); virtual;
|
|
procedure Paste; virtual;
|
|
procedure SelectAll; virtual;
|
|
procedure UpdateButtonsPanel; virtual;
|
|
procedure UpdateButtonsState;
|
|
procedure UpdateContent; virtual;
|
|
procedure UpdateItem(AItem: TComponent); virtual;
|
|
procedure UpdateScrollBar; virtual;
|
|
procedure UpdateSelections(const ASelections: IDesignerSelections); virtual;
|
|
|
|
property DsgnWindow: TdxfmNavBarDesignWindow read FDsgnWindow;
|
|
property NavBar: TdxCustomNavBar read GetNavBar;
|
|
end;
|
|
|
|
TdxfmNavBarDesignWindow = class(TDesignWindow)
|
|
pcMain: TPageControl;
|
|
tsGroups: TTabSheet;
|
|
tsItems: TTabSheet;
|
|
tsLinks: TTabSheet;
|
|
tsCustomStyles: TTabSheet;
|
|
lbxGroups: TListBox;
|
|
Panel2: TPanel;
|
|
Panel3: TPanel;
|
|
Label1: TLabel;
|
|
Splitter1: TSplitter;
|
|
Panel4: TPanel;
|
|
tvLinkDesignerGroups: TTreeView;
|
|
Panel5: TPanel;
|
|
Label2: TLabel;
|
|
lbxItems: TListBox;
|
|
pnButtons: TPanel;
|
|
lbxCustomStyles: TListBox;
|
|
ilLinkDesigner: TImageList;
|
|
ilPopup: TImageList;
|
|
pmMain: TPopupMenu;
|
|
miAdd: TMenuItem;
|
|
N2: TMenuItem;
|
|
miEdit: TMenuItem;
|
|
miCut: TMenuItem;
|
|
miCopy: TMenuItem;
|
|
miPaste: TMenuItem;
|
|
miDelete: TMenuItem;
|
|
N3: TMenuItem;
|
|
miSelectAll: TMenuItem;
|
|
N4: TMenuItem;
|
|
miMoveUp: TMenuItem;
|
|
miMoveDown: TMenuItem;
|
|
lbxLinkDesignerItems: TListView;
|
|
nbMain: TdxNavBar;
|
|
bgMain: TdxNavBarGroup;
|
|
bgStyles: TdxNavBarGroup;
|
|
biGroups: TdxNavBarItem;
|
|
biItems: TdxNavBarItem;
|
|
biLinks: TdxNavBarItem;
|
|
biViews: TdxNavBarItem;
|
|
biDefaultStyles: TdxNavBarItem;
|
|
biCustomStyles: TdxNavBarItem;
|
|
ilNavBarLarge: TImageList;
|
|
ilNavBarSmall: TImageList;
|
|
tsViews: TTabSheet;
|
|
tsDefaultStyles: TTabSheet;
|
|
lbxDefaultStyles: TListBox;
|
|
pnBtnAddDelete: TPanel;
|
|
btAdd: TButton;
|
|
btDelete: TButton;
|
|
nbPreview: TdxNavBar;
|
|
Label3: TLabel;
|
|
Label4: TLabel;
|
|
cbViewStyles: TComboBox;
|
|
ilPreviewLarge: TImageList;
|
|
ilPreviewSmall: TImageList;
|
|
bgLocal: TdxNavBarGroup;
|
|
bgNews: TdxNavBarGroup;
|
|
biInbox: TdxNavBarItem;
|
|
biOutbox: TdxNavBarItem;
|
|
biSentItems: TdxNavBarItem;
|
|
biDeletedItems: TdxNavBarItem;
|
|
biDrafts: TdxNavBarItem;
|
|
biNews: TdxNavBarItem;
|
|
Panel1: TPanel;
|
|
pnBtnSelect: TPanel;
|
|
btSelectAll: TButton;
|
|
Panel6: TPanel;
|
|
pnBtnMove: TPanel;
|
|
btMoveUp: TButton;
|
|
btMoveDown: TButton;
|
|
Panel7: TPanel;
|
|
pnBtnDefaultSettings: TPanel;
|
|
btnDefaultSettings: TButton;
|
|
pnBtnApply: TPanel;
|
|
btnApply: TButton;
|
|
procedure ListBoxClick(Sender: TObject);
|
|
procedure AddClick(Sender: TObject);
|
|
procedure ActionClick(Sender: TObject);
|
|
procedure MoveUpClick(Sender: TObject);
|
|
procedure MoveDownClick(Sender: TObject);
|
|
procedure tvLinkDesignerGroupsDragDrop(Sender, Source: TObject; X, Y: Integer);
|
|
procedure tvLinkDesignerGroupsDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
|
|
procedure tvLinkDesignerGroupsStartDrag(Sender: TObject; var DragObject: TDragObject);
|
|
procedure lbxLinkDesignerItemsDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
|
|
procedure lbxLinkDesignerItemsDragDrop(Sender, Source: TObject; X, Y: Integer);
|
|
procedure lbxLinkDesignerItemsStartDrag(Sender: TObject; var DragObject: TDragObject);
|
|
procedure tvLinkDesignerGroupsExit(Sender: TObject);
|
|
procedure pmMainPopup(Sender: TObject);
|
|
procedure tvLinkDesignerGroupsClick(Sender: TObject);
|
|
procedure lbxLinkDesignerItemsClick(Sender: TObject);
|
|
procedure tvLinkDesignerGroupsEndDrag(Sender, Target: TObject; X,
|
|
Y: Integer);
|
|
procedure lbxLinkDesignerItemsEndDrag(Sender, Target: TObject; X,
|
|
Y: Integer);
|
|
procedure nbMainLinkClick(Sender: TObject; ALink: TdxNavBarItemLink);
|
|
procedure DefaultSettingsClick(Sender: TObject);
|
|
procedure cbViewStylesChange(Sender: TObject);
|
|
procedure btnApplyClick(Sender: TObject);
|
|
private
|
|
FNavBar: TdxCustomNavBar;
|
|
FHandlers: TList;
|
|
FCurrentHandler: TdxNavBarDsgnWindowPageHandler;
|
|
FSaveCursor: TCursor;
|
|
|
|
function GetNavBarDesigner: TAbstractcxNavBarDesigner;
|
|
procedure SetNavBar(Value: TdxCustomNavBar);
|
|
|
|
function CanAdd: Boolean;
|
|
function CanCopy: Boolean;
|
|
function CanCut: Boolean;
|
|
function CanDelete: Boolean;
|
|
function CanMoveDown: Boolean;
|
|
function CanMoveUp: Boolean;
|
|
function CanPaste: Boolean;
|
|
function CanSelectAll: Boolean;
|
|
procedure Copy;
|
|
procedure Cut;
|
|
procedure Delete;
|
|
procedure HandleException;
|
|
function GetRegistryPath: string;
|
|
procedure Paste;
|
|
procedure RestoreLayout;
|
|
procedure Select(AComponent: TComponent; AddToSelection: Boolean);
|
|
procedure SelectAll;
|
|
procedure SelectNavBar;
|
|
procedure StartWait;
|
|
procedure StopWait;
|
|
procedure StoreLayout;
|
|
procedure UpdateButtonsState;
|
|
procedure UpdateCaption;
|
|
procedure UpdateItem(AItem: TComponent);
|
|
procedure UpdateMenuState;
|
|
procedure UpdateSelections(const ASelections: IDesignerSelections);
|
|
|
|
function GetHandler(Index: Integer): TdxNavBarDsgnWindowPageHandler;
|
|
function GetHandlerCount: Integer;
|
|
protected
|
|
procedure Activated; override;
|
|
{$IFDEF DELPHI9}
|
|
procedure CreateParams(var Params: TCreateParams); override;
|
|
{$ENDIF}
|
|
function UniqueName(Component: TComponent): string; override;
|
|
|
|
procedure ActiveDesignerPageChanged;
|
|
procedure InitializeHandlers;
|
|
procedure InitializeViewStyles;
|
|
procedure FinalizeHandlers;
|
|
public
|
|
constructor Create(AOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
|
|
function ClipboardComponents: Boolean;
|
|
|
|
{$IFDEF DELPHI6}
|
|
function EditAction(Action: TEditAction): Boolean; override;
|
|
{$ELSE}
|
|
procedure EditAction(Action: TEditAction); override;
|
|
{$ENDIF}
|
|
function GetEditState: TEditState; override;
|
|
|
|
{$IFDEF DELPHI6}
|
|
procedure ItemDeleted(const ADesigner: IDesigner; Item: TPersistent); override;
|
|
procedure ItemsModified(const Designer: IDesigner); override;
|
|
procedure SelectionChanged(const ADesigner: IDesigner; const ASelection: IDesignerSelections); override;
|
|
{$ELSE}
|
|
procedure ComponentDeleted(Component: IPersistent); override;
|
|
procedure FormModified; override;
|
|
procedure SelectionChanged(ASelection: TDesignerSelectionList); override;
|
|
{$ENDIF}
|
|
|
|
property CurrentHandler: TdxNavBarDsgnWindowPageHandler read FCurrentHandler write FCurrentHandler;
|
|
property HandlerCount: Integer read GetHandlerCount;
|
|
property Handlers[Index: Integer]: TdxNavBarDsgnWindowPageHandler read GetHandler;
|
|
property NavBar: TdxCustomNavBar read FNavBar write SetNavBar;
|
|
property NavBarDesigner: TAbstractcxNavBarDesigner read GetNavBarDesigner;
|
|
end;
|
|
|
|
procedure dxShowNavBarDesigner(ANavBar: TdxCustomNavBar;
|
|
ADelphiDesigner: IDelphiDesigner);
|
|
|
|
|
|
implementation
|
|
|
|
{$R *.DFM}
|
|
|
|
uses
|
|
Windows, SysUtils, TypInfo, {$IFDEF DELPHI6}Variants,{$ENDIF} Registry
|
|
{$IFNDEF CLR}, ToolsAPI {$ENDIF}, dxNavBarViewsFact, dxNavBarDsgnConsts;
|
|
|
|
type
|
|
TdxNavBarDesigner = class(TAbstractcxNavBarDesigner)
|
|
private
|
|
FDelphiDesigner: IDelphiDesigner;
|
|
FDesignWindow: TdxfmNavBarDesignWindow;
|
|
FUpdateCount: Integer;
|
|
FIsBeingModified: Boolean;
|
|
|
|
function GetDesignWindow: TdxfmNavBarDesignWindow;
|
|
procedure Activate;
|
|
protected
|
|
procedure Modified; override;
|
|
procedure Update(AItem: TComponent); override;
|
|
public
|
|
constructor Create(ANavBar: TdxCustomNavBar; ADelphiDesigner: IDelphiDesigner);
|
|
destructor Destroy; override;
|
|
|
|
procedure BeginUpdate; override;
|
|
procedure CancelUpdate; override;
|
|
procedure EndUpdate; override;
|
|
|
|
property DelphiDesigner: IDelphiDesigner read FDelphiDesigner;
|
|
property DesignWindow: TdxfmNavBarDesignWindow read GetDesignWindow;
|
|
end;
|
|
|
|
|
|
procedure dxShowNavBarDesigner(ANavBar: TdxCustomNavBar; ADelphiDesigner: IDelphiDesigner);
|
|
begin
|
|
if ANavBar.Designer = nil then
|
|
TdxNavBarDesigner.Create(ANavBar, ADelphiDesigner);
|
|
TdxNavBarDesigner(ANavBar.Designer).Activate;
|
|
end;
|
|
|
|
{ TdxWebStyleControllerDesigner }
|
|
|
|
constructor TdxNavBarDesigner.Create(ANavBar: TdxCustomNavBar;
|
|
ADelphiDesigner: IDelphiDesigner);
|
|
begin
|
|
inherited Create(ANavBar);
|
|
FDelphiDesigner := ADelphiDesigner;
|
|
end;
|
|
|
|
destructor TdxNavBarDesigner.Destroy;
|
|
begin
|
|
if FDesignWindow <> nil then
|
|
begin
|
|
FDesignWindow.Designer := nil;
|
|
FDesignWindow.Free;
|
|
end;
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TdxNavBarDesigner.BeginUpdate;
|
|
begin
|
|
Inc(FUpdateCount);
|
|
end;
|
|
|
|
procedure TdxNavBarDesigner.CancelUpdate;
|
|
begin
|
|
if FUpdateCount <> 0 then Dec(FUpdateCount);
|
|
end;
|
|
|
|
procedure TdxNavBarDesigner.EndUpdate;
|
|
begin
|
|
if FUpdateCount <> 0 then
|
|
begin
|
|
Dec(FUpdateCount);
|
|
if FUpdateCount = 0 then Update(nil);
|
|
end;
|
|
end;
|
|
|
|
function TdxNavBarDesigner.GetDesignWindow: TdxfmNavBarDesignWindow;
|
|
begin
|
|
if FDesignWindow = nil then
|
|
begin
|
|
FDesignWindow := TdxfmNavBarDesignWindow.Create(nil);
|
|
FDesignWindow.Designer := DelphiDesigner;
|
|
FDesignWindow.NavBar := NavBar;
|
|
end;
|
|
Result := FDesignWindow;
|
|
end;
|
|
|
|
procedure TdxNavBarDesigner.Activate;
|
|
begin
|
|
DesignWindow.Show;
|
|
end;
|
|
|
|
procedure TdxNavBarDesigner.Modified;
|
|
begin
|
|
if not FIsBeingModified and (DelphiDesigner <> nil) then
|
|
begin
|
|
FIsBeingModified := True;
|
|
try
|
|
DelphiDesigner.Modified;
|
|
finally
|
|
FIsBeingModified := False
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TdxNavBarDesigner.Update(AItem: TComponent);
|
|
begin
|
|
if (FUpdateCount = 0) and (FDesignWindow <> nil) then
|
|
DesignWindow.UpdateItem(AItem);
|
|
end;
|
|
|
|
type
|
|
TdxNavBarDsgnWindowComponentCollectionPageHandler = class(TdxNavBarDsgnWindowPageHandler)
|
|
private
|
|
function GetItem(Index: Integer): TdxNavBarComponentCollectionItem;
|
|
function GetItemCount: Integer;
|
|
function GetSelected(Index: Integer): Boolean;
|
|
function GetSelectedCount: Integer;
|
|
procedure SetSelected(Index: Integer; const Value: Boolean);
|
|
protected
|
|
function MainList: TListBox; virtual;
|
|
class function ItemNamePrefix: string; virtual;
|
|
class function ItemClass: TComponentClass; virtual;
|
|
|
|
function CanAdd: Boolean; override;
|
|
function CanCopy: Boolean; override;
|
|
function CanCut: Boolean; override;
|
|
function CanDelete: Boolean; override;
|
|
function CanSelectAll: Boolean; override;
|
|
function CanMoveUp: Boolean; override;
|
|
function CanMoveDown: Boolean; override;
|
|
function CanPaste: Boolean; override;
|
|
public
|
|
procedure Add; override;
|
|
procedure Copy; override;
|
|
procedure Cut; override;
|
|
procedure Delete; override;
|
|
procedure DeleteItem(AItem: TComponent); override;
|
|
function IndexOf(AItem: TComponent): Integer;
|
|
procedure GetSelections(const ASelections: IDesignerSelections); override;
|
|
procedure MoveSelection(ADelta: Integer); override;
|
|
procedure Paste; override;
|
|
procedure RefreshListValues; virtual;
|
|
procedure SelectAll; override;
|
|
procedure UpdateButtonsPanel; override;
|
|
procedure UpdateContent; override;
|
|
procedure UpdateItem(AItem: TComponent); override;
|
|
procedure UpdateScrollBar; override;
|
|
procedure UpdateSelections(const ASelections: IDesignerSelections); override;
|
|
|
|
property Selected[Index: Integer]: Boolean read GetSelected write SetSelected;
|
|
property SelectedCount: Integer read GetSelectedCount;
|
|
property Items[Index: Integer]: TdxNavBarComponentCollectionItem read GetItem;
|
|
property ItemCount: Integer read GetItemCount;
|
|
|
|
property DsgnWindow: TdxfmNavBarDesignWindow read FDsgnWindow;
|
|
property NavBar: TdxCustomNavBar read GetNavBar;
|
|
end;
|
|
|
|
{ TdxNavBarDsgnWindowComponentCollectionPageHandler }
|
|
|
|
procedure TdxNavBarDsgnWindowComponentCollectionPageHandler.Add;
|
|
begin
|
|
inherited;
|
|
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowComponentCollectionPageHandler.CanAdd: Boolean;
|
|
begin
|
|
Result := (NavBar <> nil) and (NavBar.Owner <> nil);
|
|
if Result then
|
|
Result := not (csInline in NavBar.Owner.ComponentState);
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowComponentCollectionPageHandler.CanCopy: Boolean;
|
|
begin
|
|
Result := SelectedCount <> 0;
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowComponentCollectionPageHandler.CanCut: Boolean;
|
|
begin
|
|
Result := CanCopy and CanDelete;
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowComponentCollectionPageHandler.CanDelete: Boolean;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
Result := SelectedCount <> 0;
|
|
if Result then
|
|
for I := 0 to ItemCount - 1 do
|
|
if Selected[I] and (csAncestor in Items[I].ComponentState) then
|
|
begin
|
|
Result := False;
|
|
Exit;
|
|
end;
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowComponentCollectionPageHandler.CanMoveDown: Boolean;
|
|
var
|
|
I, Counter: Integer;
|
|
begin
|
|
Counter := 0;
|
|
for I := ItemCount - 1 downto 0 do
|
|
begin
|
|
if not Selected[I] then
|
|
begin
|
|
Result := Counter < SelectedCount;
|
|
Exit;
|
|
end;
|
|
Inc(Counter);
|
|
end;
|
|
Result := False;
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowComponentCollectionPageHandler.CanMoveUp: Boolean;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
for I := 0 to ItemCount - 1 do
|
|
if not Selected[I] then
|
|
begin
|
|
Result := I < SelectedCount;
|
|
Exit;
|
|
end;
|
|
Result := False;
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowComponentCollectionPageHandler.CanPaste: Boolean;
|
|
begin
|
|
Result := CanAdd and DsgnWindow.ClipboardComponents and DsgnWindow.Designer.CanPaste;
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowComponentCollectionPageHandler.CanSelectAll: Boolean;
|
|
begin
|
|
Result := ItemCount <> SelectedCount;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowComponentCollectionPageHandler.Copy;
|
|
var
|
|
Components: {$IFDEF DELPHI6}IDesignerSelections{$ELSE}TDesignerSelectionList{$ENDIF};
|
|
begin
|
|
{$IFDEF DELPHI6}
|
|
Components := CreateSelectionList;
|
|
{$ELSE}
|
|
Components := TDesignerSelectionList.Create;
|
|
try
|
|
{$ENDIF}
|
|
GetSelections(Components);
|
|
DsgnWindow.CopyComponents(NavBar.Owner, Components);
|
|
{$IFNDEF DELPHI6}
|
|
finally
|
|
Components.Free;
|
|
end;
|
|
{$ENDIF}
|
|
UpdateScrollBar;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowComponentCollectionPageHandler.Cut;
|
|
begin
|
|
Copy;
|
|
Delete;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowComponentCollectionPageHandler.Delete;
|
|
var
|
|
Selections: IDesignerSelections;
|
|
I: Integer;
|
|
begin
|
|
DsgnWindow.StartWait;
|
|
try
|
|
Selections := CreateSelectionList;
|
|
GetSelections(Selections);
|
|
for I := 0 to Selections.Count - 1 do
|
|
dxNavBarDsgnUtils.TryExtractPersistent(Selections[I]).Free;
|
|
NavBar.DesignerModified;
|
|
finally
|
|
DsgnWindow.StopWait;
|
|
end;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowComponentCollectionPageHandler.DeleteItem(
|
|
AItem: TComponent);
|
|
var
|
|
Index, ItemIndex: Integer;
|
|
begin
|
|
if (AItem = nil) or (AItem.ClassType <> ItemClass) then exit;
|
|
|
|
Index := IndexOf(AItem);
|
|
if Index <> -1 then
|
|
begin
|
|
ItemIndex := MainList.ItemIndex;
|
|
MainList.Items.Delete(Index);
|
|
|
|
if ItemIndex > ItemCount - 1 then
|
|
ItemIndex := ItemCount - 1;
|
|
if ItemIndex <> -1 then
|
|
DsgnWindow.Select(Items[ItemIndex], False)
|
|
else DsgnWindow.SelectNavBar;
|
|
UpdateScrollBar;
|
|
end;
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowComponentCollectionPageHandler.GetItem(
|
|
Index: Integer): TdxNavBarComponentCollectionItem;
|
|
begin
|
|
if MainList <> nil then
|
|
Result := TdxNavBarComponentCollectionItem(MainList.Items.Objects[Index])
|
|
else Result := nil;
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowComponentCollectionPageHandler.GetItemCount: Integer;
|
|
begin
|
|
if MainList <> nil then
|
|
Result := MainList.Items.Count
|
|
else Result := 0;
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowComponentCollectionPageHandler.GetSelected(
|
|
Index: Integer): Boolean;
|
|
begin
|
|
if MainList <> nil then
|
|
Result := MainList.Selected[Index]
|
|
else Result := False;
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowComponentCollectionPageHandler.GetSelectedCount: Integer;
|
|
begin
|
|
if MainList <> nil then
|
|
Result := MainList.SelCount
|
|
else Result := 0;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowComponentCollectionPageHandler.GetSelections(
|
|
const ASelections: IDesignerSelections);
|
|
var
|
|
I: Integer;
|
|
begin
|
|
for I := 0 to ItemCount - 1 do
|
|
if Selected[I] then
|
|
ASelections.Add(dxNavBarDsgnUtils.MakeIComponent(Items[I]));
|
|
if ASelections.Count = 0 then
|
|
ASelections.Add(dxNavBarDsgnUtils.MakeIComponent(NavBar));
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowComponentCollectionPageHandler.IndexOf(
|
|
AItem: TComponent): Integer;
|
|
begin
|
|
Result := MainList.Items.IndexOfObject(AItem);
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowComponentCollectionPageHandler.MainList: TListBox;
|
|
begin
|
|
Result := nil;
|
|
end;
|
|
|
|
class function TdxNavBarDsgnWindowComponentCollectionPageHandler.ItemClass: TComponentClass;
|
|
begin
|
|
Result := nil;
|
|
end;
|
|
|
|
class function TdxNavBarDsgnWindowComponentCollectionPageHandler.ItemNamePrefix: string;
|
|
begin
|
|
Result := '';
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowComponentCollectionPageHandler.MoveSelection(
|
|
ADelta: Integer);
|
|
|
|
procedure MoveDown(ADelta: Integer);
|
|
var
|
|
I, Index: Integer;
|
|
begin
|
|
// for I := ItemCount - 1 downto 0 do
|
|
for I := 0 to ItemCount - 1 do
|
|
if Selected[I] then
|
|
begin
|
|
Index := Items[I].Index;
|
|
Inc(Index, ADelta);
|
|
if Index > ItemCount - 1 then
|
|
Index := ItemCount - 1;
|
|
while (Index < ItemCount) and Selected[Index] do
|
|
Inc(Index);
|
|
Items[I].Index := Index;
|
|
end;
|
|
end;
|
|
|
|
procedure MoveUp(ADelta: Integer);
|
|
var
|
|
I, Index: Integer;
|
|
begin
|
|
// for I := 0 to ItemCount - 1 do
|
|
for I := ItemCount - 1 downto 0 do
|
|
if Selected[I] then
|
|
begin
|
|
Index := Items[I].Index;
|
|
Inc(Index, ADelta);
|
|
if Index < 0 then
|
|
Index := 0;
|
|
while (Index > -1) and Selected[Index] do
|
|
Dec(Index);
|
|
Items[I].Index := Index;
|
|
end;
|
|
end;
|
|
|
|
begin
|
|
DsgnWindow.NavBarDesigner.BeginUpdate;
|
|
try
|
|
if ADelta > 0 then MoveDown(ADelta)
|
|
else MoveUp(ADelta);
|
|
finally
|
|
DsgnWindow.NavBarDesigner.EndUpdate;
|
|
end;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowComponentCollectionPageHandler.Paste;
|
|
var
|
|
Components: {$IFDEF DELPHI6}IDesignerSelections{$ELSE}TDesignerSelectionList{$ENDIF};
|
|
I: Integer;
|
|
begin
|
|
{$IFDEF DELPHI6}
|
|
Components := CreateSelectionList;
|
|
{$ELSE}
|
|
Components := TDesignerSelectionList.Create;
|
|
try
|
|
{$ENDIF}
|
|
DsgnWindow.StartWait;
|
|
try
|
|
MainList.Items.BeginUpdate;
|
|
try
|
|
DsgnWindow.NavBarDesigner.BeginUpdate;
|
|
try
|
|
DsgnWindow.PasteComponents(NavBar.Owner, NavBar, Components);
|
|
finally
|
|
DsgnWindow.NavBarDesigner.EndUpdate;
|
|
end;
|
|
for I := ItemCount - 1 downto ItemCount - Components.Count do
|
|
Selected[I] := True;
|
|
DsgnWindow.Designer.SetSelections(Components);
|
|
finally
|
|
MainList.Items.EndUpdate;
|
|
end;
|
|
finally
|
|
DsgnWindow.StopWait;
|
|
end;
|
|
{$IFNDEF DELPHI6}
|
|
finally
|
|
Components.Free;
|
|
end;
|
|
{$ENDIF}
|
|
UpdateScrollBar;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowComponentCollectionPageHandler.UpdateContent;
|
|
var
|
|
Selections: IDesignerSelections;
|
|
I, Index: Integer;
|
|
Component: TComponent;
|
|
begin
|
|
MainList.Items.BeginUpdate;
|
|
try
|
|
Selections := CreateSelectionList;
|
|
GetSelections(Selections);
|
|
|
|
MainList.Items.Clear;
|
|
if NavBar = nil then Exit;
|
|
RefreshListValues;
|
|
|
|
for I := 0 to Selections.Count - 1 do
|
|
begin
|
|
Component := dxNavBarDsgnUtils.TryExtractComponent(Selections[I]);
|
|
if Component is ItemClass then
|
|
begin
|
|
Index := IndexOf(Component);
|
|
if Index <> -1 then Selected[Index] := True;
|
|
end;
|
|
end;
|
|
finally
|
|
MainList.Items.EndUpdate;
|
|
end;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowComponentCollectionPageHandler.RefreshListValues;
|
|
begin
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowComponentCollectionPageHandler.SelectAll;
|
|
var
|
|
Selections: IDesignerSelections;
|
|
I: Integer;
|
|
begin
|
|
Selections := CreateSelectionList;
|
|
for I := 0 to ItemCount - 1 do
|
|
Selections.Add(dxNavBarDsgnUtils.MakeIComponent(Items[I]));
|
|
DsgnWindow.Designer.SetSelections(Selections);
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowComponentCollectionPageHandler.SetSelected(
|
|
Index: Integer; const Value: Boolean);
|
|
begin
|
|
if MainList <> nil then
|
|
MainList.Selected[Index] := Value;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowComponentCollectionPageHandler.UpdateButtonsPanel;
|
|
begin
|
|
DsgnWindow.pnBtnAddDelete.Visible := True;
|
|
DsgnWindow.pnBtnSelect.Visible := True;
|
|
DsgnWindow.pnBtnMove.Visible := True;
|
|
DsgnWindow.pnBtnDefaultSettings.Visible := False;
|
|
DsgnWindow.pnBtnApply.Visible := False;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowComponentCollectionPageHandler.UpdateItem(AItem: TComponent);
|
|
var
|
|
Index: Integer;
|
|
begin
|
|
if AItem <> nil then
|
|
begin
|
|
Index := IndexOf(AItem);
|
|
if Index <> -1 then
|
|
begin
|
|
MainList.Items[Index] := AItem.Name;
|
|
UpdateScrollBar;
|
|
end
|
|
end
|
|
else UpdateContent;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowComponentCollectionPageHandler.UpdateScrollBar;
|
|
var
|
|
I, NewWidth, CurrentWidth: Integer;
|
|
begin
|
|
NewWidth := 0;
|
|
with MainList do
|
|
begin
|
|
for I := 0 to Items.Count - 1 do
|
|
begin
|
|
CurrentWidth := 2 + Canvas.TextWidth(Items[I]) + 1;
|
|
if CurrentWidth > NewWidth then NewWidth := CurrentWidth;
|
|
end;
|
|
SendMessage(Handle, LB_SETHORIZONTALEXTENT, NewWidth, 0);
|
|
end;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowComponentCollectionPageHandler.UpdateSelections(const ASelections: IDesignerSelections);
|
|
|
|
function InSelection(AItem: TComponent): Boolean;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
Result := False;
|
|
for I := 0 to ASelections.Count - 1 do
|
|
if AItem = dxNavBarDsgnUtils.TryExtractComponent(ASelections[I]) then
|
|
begin
|
|
Result := True;
|
|
break;
|
|
end;
|
|
end;
|
|
|
|
var
|
|
I: Integer;
|
|
begin
|
|
for I := 0 to ItemCount - 1 do
|
|
if Selected[I] xor InSelection(Items[I]) then
|
|
Selected[I] := not Selected[I];
|
|
end;
|
|
|
|
type
|
|
TdxNavBarDsgnWindowGroupsHandler = class(TdxNavBarDsgnWindowComponentCollectionPageHandler)
|
|
protected
|
|
function MainList: TListBox; override;
|
|
class function DesignerCaptionPostfix: string; override;
|
|
class function ItemNamePrefix: string; override;
|
|
class function ItemClass: TComponentClass; override;
|
|
public
|
|
procedure Add; override;
|
|
procedure RefreshListValues; override;
|
|
end;
|
|
|
|
{ TdxNavBarDsgnWindowGroupsHandler }
|
|
|
|
procedure TdxNavBarDsgnWindowGroupsHandler.Add;
|
|
var
|
|
Group: TdxNavBarGroup;
|
|
begin
|
|
Group := NavBar.Groups.Add;
|
|
DsgnWindow.NavBarDesigner.BeginUpdate;
|
|
try
|
|
Group.Name := DsgnWindow.UniqueName(Group);
|
|
finally
|
|
DsgnWindow.NavBarDesigner.CancelUpdate;
|
|
end;
|
|
MainList.Items.AddObject(Group.Name, Group);
|
|
DsgnWindow.Select(Group, False);
|
|
UpdateScrollBar;
|
|
MainList.Update;
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowGroupsHandler.MainList: TListBox;
|
|
begin
|
|
Result := DsgnWindow.lbxGroups;
|
|
end;
|
|
|
|
class function TdxNavBarDsgnWindowGroupsHandler.DesignerCaptionPostfix: string;
|
|
begin
|
|
Result := sdxGroupsDesigner;
|
|
end;
|
|
|
|
class function TdxNavBarDsgnWindowGroupsHandler.ItemNamePrefix: string;
|
|
begin
|
|
Result := sdxGroup;
|
|
end;
|
|
|
|
class function TdxNavBarDsgnWindowGroupsHandler.ItemClass: TComponentClass;
|
|
begin
|
|
Result := TdxNavBarGroup;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowGroupsHandler.RefreshListValues;
|
|
var
|
|
I: Integer;
|
|
Group: TdxNavBarGroup;
|
|
begin
|
|
for I := 0 to NavBar.Groups.Count - 1 do
|
|
begin
|
|
Group := NavBar.Groups[I];
|
|
if Group.Owner = NavBar.Owner then
|
|
MainList.Items.AddObject(Group.Name, Group);
|
|
end;
|
|
end;
|
|
|
|
type
|
|
TdxNavBarDsgnWindowItemsHandler = class(TdxNavBarDsgnWindowComponentCollectionPageHandler)
|
|
protected
|
|
function MainList: TListBox; override;
|
|
class function DesignerCaptionPostfix: string; override;
|
|
class function ItemNamePrefix: string; override;
|
|
class function ItemClass: TComponentClass; override;
|
|
public
|
|
procedure Add; override;
|
|
procedure RefreshListValues; override;
|
|
end;
|
|
|
|
{ TdxNavBarDsgnWindowItemsHandler }
|
|
|
|
procedure TdxNavBarDsgnWindowItemsHandler.Add;
|
|
var
|
|
Item: TdxNavBarItem;
|
|
begin
|
|
Item := NavBar.Items.Add;
|
|
DsgnWindow.NavBarDesigner.BeginUpdate;
|
|
try
|
|
Item.Name := DsgnWindow.UniqueName(Item);
|
|
finally
|
|
DsgnWindow.NavBarDesigner.CancelUpdate;
|
|
end;
|
|
MainList.Items.AddObject(Item.Name, Item);
|
|
DsgnWindow.Select(Item, False);
|
|
UpdateScrollBar;
|
|
MainList.Update;
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowItemsHandler.MainList: TListBox;
|
|
begin
|
|
Result := DsgnWindow.lbxItems;
|
|
end;
|
|
|
|
class function TdxNavBarDsgnWindowItemsHandler.DesignerCaptionPostfix: string;
|
|
begin
|
|
Result := sdxItemsDesigner;
|
|
end;
|
|
|
|
class function TdxNavBarDsgnWindowItemsHandler.ItemNamePrefix: string;
|
|
begin
|
|
Result := sdxItem;
|
|
end;
|
|
|
|
class function TdxNavBarDsgnWindowItemsHandler.ItemClass: TComponentClass;
|
|
begin
|
|
Result := TdxNavBarItem;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowItemsHandler.RefreshListValues;
|
|
var
|
|
I: Integer;
|
|
Item: TdxNavBarItem;
|
|
begin
|
|
for I := 0 to NavBar.Items.Count - 1 do
|
|
begin
|
|
Item := NavBar.Items[I];
|
|
if Item.Owner = NavBar.Owner then
|
|
MainList.Items.AddObject(Item.Name, Item);
|
|
end;
|
|
end;
|
|
|
|
type
|
|
TdxNavBarDsgnWindowCustomStylesHandler = class(TdxNavBarDsgnWindowComponentCollectionPageHandler)
|
|
protected
|
|
function MainList: TListBox; override;
|
|
class function DesignerCaptionPostfix: string; override;
|
|
class function ItemNamePrefix: string; override;
|
|
class function ItemClass: TComponentClass; override;
|
|
public
|
|
procedure Add; override;
|
|
procedure RefreshListValues; override;
|
|
end;
|
|
|
|
{ TdxNavBarDsgnWindowSlylesHandler }
|
|
|
|
procedure TdxNavBarDsgnWindowCustomStylesHandler.Add;
|
|
var
|
|
Style: TdxNavBarStyleItem;
|
|
begin
|
|
Style := NavBar.Styles.Add;
|
|
DsgnWindow.NavBarDesigner.BeginUpdate;
|
|
try
|
|
Style.Name := DsgnWindow.UniqueName(Style);
|
|
finally
|
|
DsgnWindow.NavBarDesigner.CancelUpdate;
|
|
end;
|
|
MainList.Items.AddObject(Style.Name, Style);
|
|
DsgnWindow.Select(Style, False);
|
|
UpdateScrollBar;
|
|
MainList.Update;
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowCustomStylesHandler.MainList: TListBox;
|
|
begin
|
|
Result := DsgnWindow.lbxCustomStyles;
|
|
end;
|
|
|
|
class function TdxNavBarDsgnWindowCustomStylesHandler.DesignerCaptionPostfix: string;
|
|
begin
|
|
Result := sdxCustomStylesDesigner;
|
|
end;
|
|
|
|
class function TdxNavBarDsgnWindowCustomStylesHandler.ItemNamePrefix: string;
|
|
begin
|
|
Result := sdxStyleItem;
|
|
end;
|
|
|
|
class function TdxNavBarDsgnWindowCustomStylesHandler.ItemClass: TComponentClass;
|
|
begin
|
|
Result := TdxNavBarStyleItem;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowCustomStylesHandler.RefreshListValues;
|
|
var
|
|
I: Integer;
|
|
Style: TdxNavBarStyleItem;
|
|
begin
|
|
for I := 0 to NavBar.Styles.Count - 1 do
|
|
begin
|
|
Style := NavBar.Styles[I];
|
|
if Style.Owner = NavBar.Owner then
|
|
MainList.Items.AddObject(Style.Name, Style);
|
|
end;
|
|
end;
|
|
|
|
type
|
|
TdxNavBarDsgnWindowLinksHandler = class(TdxNavBarDsgnWindowPageHandler)
|
|
private
|
|
FSourceItem: TdxNavBarItem;
|
|
FSourceLink: TdxNavBarItemLink;
|
|
FTargetGroup: TdxNavBarGroup;
|
|
FTargetLink: TdxNavBarItemLink;
|
|
|
|
function GetSelectedGroup: TdxNavBarGroup;
|
|
function GetSelectedItem: TdxNavBarItem;
|
|
function GetSelectedLink: TdxNavBarItemLink;
|
|
protected
|
|
function CanAdd: Boolean; override;
|
|
function CanDelete: Boolean; override;
|
|
function CanSelectAll: Boolean; override;
|
|
function CanMoveUp: Boolean; override;
|
|
function CanMoveDown: Boolean; override;
|
|
class function DesignerCaptionPostfix: string; override;
|
|
|
|
function ItemsLV: TListView;
|
|
function LinksTV: TTreeView;
|
|
procedure RefreshGroupTreeView;
|
|
procedure RefreshItemList;
|
|
function GetGroupByNode(ANode: TTreeNode): TdxNavBarGroup;
|
|
function GetLinkByNode(ANode: TTreeNode): TdxNavBarItemLink;
|
|
function GetItemByNode(ANode: TListItem): TdxNavBarItem;
|
|
function GetNodeByGroup(AGroup: TdxNavBarGroup): TTreeNode;
|
|
function GetNodeByLink(ALink: TdxNavBarItemLink): TTreeNode;
|
|
procedure CreateNodeByLink(ALink: TdxNavBarItemLink);
|
|
procedure RemoveNodeByLink(ALink: TdxNavBarItemLink);
|
|
|
|
function GetGroupNodeCation(AGroup: TdxNavBarGroup): string;
|
|
function GetItemNodeCation(AItem: TdxNavBarItem): string;
|
|
procedure SetTargetGroupNodeImage(AImageIndex: Integer);
|
|
procedure SetTargetLinkNodeImage(AImageIndex: Integer);
|
|
procedure UpdateTargets(ANode: TTreeNode);
|
|
procedure ClearTargets;
|
|
|
|
procedure CreateLink(AItem: TdxNavBarItem; AGroup: TdxNavBarGroup; AIndex: Integer);
|
|
procedure MoveLink(ALink: TdxNavBarItemLink; AGroup: TdxNavBarGroup; AIndex: Integer);
|
|
procedure RemoveLink(ALink: TdxNavBarItemLink);
|
|
public
|
|
procedure Add; override;
|
|
procedure Delete; override;
|
|
procedure MoveSelection(ADelta: Integer); override;
|
|
procedure UpdateButtonsPanel; override;
|
|
procedure UpdateContent; override;
|
|
procedure UpdateItem(AItem: TComponent); override;
|
|
|
|
property SelectedGroup: TdxNavBarGroup read GetSelectedGroup;
|
|
property SelectedItem: TdxNavBarItem read GetSelectedItem;
|
|
property SelectedLink: TdxNavBarItemLink read GetSelectedLink;
|
|
property SourceItem: TdxNavBarItem read FSourceItem write FSourceItem;
|
|
property SourceLink: TdxNavBarItemLink read FSourceLink write FSourceLink;
|
|
property TargetGroup: TdxNavBarGroup read FTargetGroup;
|
|
property TargetLink: TdxNavBarItemLink read FTargetLink;
|
|
end;
|
|
|
|
{ TdxNavBarDsgnWindowLinksHandler }
|
|
|
|
function TdxNavBarDsgnWindowLinksHandler.CanAdd: Boolean;
|
|
begin
|
|
Result := (SelectedItem <> nil) and (SelectedGroup <> nil);
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowLinksHandler.CanDelete: Boolean;
|
|
begin
|
|
Result := SelectedLink <> nil;
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowLinksHandler.CanSelectAll: Boolean;
|
|
begin
|
|
Result := False;
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowLinksHandler.CanMoveUp: Boolean;
|
|
begin
|
|
Result := (SelectedLink <> nil) and (SelectedLink.Index > 0);
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowLinksHandler.CanMoveDown: Boolean;
|
|
begin
|
|
Result := (SelectedLink <> nil) and (SelectedLink.Index < SelectedLink.Group.LinkCount - 1);
|
|
end;
|
|
|
|
class function TdxNavBarDsgnWindowLinksHandler.DesignerCaptionPostfix: string;
|
|
begin
|
|
Result := sdxLinksDesigner;
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowLinksHandler.GetGroupByNode(ANode: TTreeNode): TdxNavBarGroup;
|
|
begin
|
|
if TObject(ANode.Data) is TdxNavBarGroup then
|
|
Result := TdxNavBarGroup(ANode.Data)
|
|
else Result := nil;
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowLinksHandler.GetLinkByNode(ANode: TTreeNode): TdxNavBarItemLink;
|
|
begin
|
|
if TObject(ANode.Data) is TdxNavBarItemLink then
|
|
Result := TdxNavBarItemLink(ANode.Data)
|
|
else Result := nil;
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowLinksHandler.GetItemByNode(ANode: TListItem): TdxNavBarItem;
|
|
begin
|
|
if TObject(ANode.Data) is TdxNavBarItem then
|
|
Result := TdxNavBarItem(ANode.Data)
|
|
else Result := nil;
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowLinksHandler.GetNodeByGroup(AGroup: TdxNavBarGroup): TTreeNode;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
Result := nil;
|
|
for I := 0 to DsgnWindow.tvLinkDesignerGroups.Items.Count - 1 do
|
|
if TObject(DsgnWindow.tvLinkDesignerGroups.Items[I].Data) = AGroup then
|
|
begin
|
|
Result := DsgnWindow.tvLinkDesignerGroups.Items[I];
|
|
break;
|
|
end;
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowLinksHandler.GetNodeByLink(ALink: TdxNavBarItemLink): TTreeNode;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
Result := nil;
|
|
for I := 0 to DsgnWindow.tvLinkDesignerGroups.Items.Count - 1 do
|
|
if TObject(DsgnWindow.tvLinkDesignerGroups.Items[I].Data) = ALink then
|
|
begin
|
|
Result := DsgnWindow.tvLinkDesignerGroups.Items[I];
|
|
break;
|
|
end;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowLinksHandler.CreateNodeByLink(ALink: TdxNavBarItemLink);
|
|
var
|
|
ANode: TTreeNode;
|
|
begin
|
|
ANode := GetNodeByGroup(ALink.Group);
|
|
if ANode <> nil then
|
|
begin
|
|
if ALink.Index = ALink.Group.LinkCount - 1 then
|
|
ANode := LinksTV.Items.AddChildObject(ANode, GetItemNodeCation(ALink.Item), ALink)
|
|
else
|
|
begin
|
|
ANode := GetNodeByLink(ALink.Group.Links[ALink.Index + 1]);
|
|
ANode := LinksTV.Items.InsertObject(ANode, GetItemNodeCation(ALink.Item), ALink);
|
|
end;
|
|
with ANode do
|
|
begin
|
|
ImageIndex := 2;
|
|
SelectedIndex := 2;
|
|
end;
|
|
LinksTV.Selected := ANode;
|
|
end;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowLinksHandler.RemoveNodeByLink(ALink: TdxNavBarItemLink);
|
|
var
|
|
ANode: TTreeNode;
|
|
begin
|
|
ANode := GetNodeByLink(ALink);
|
|
if ANode <> nil then
|
|
LinksTV.Items.Delete(ANode);
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowLinksHandler.GetGroupNodeCation(AGroup: TdxNavBarGroup): string;
|
|
begin
|
|
Result := AGroup.Caption + ' [' + AGroup.Name + ']';
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowLinksHandler.GetItemNodeCation(AItem: TdxNavBarItem): string;
|
|
begin
|
|
Result := AItem.Caption + ' [' + AItem.Name + ']';
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowLinksHandler.SetTargetGroupNodeImage(AImageIndex: Integer);
|
|
var
|
|
ANode: TTreeNode;
|
|
begin
|
|
if TargetGroup <> nil then
|
|
begin
|
|
ANode := GetNodeByGroup(TargetGroup);
|
|
if ANode <> nil then
|
|
with ANode do
|
|
begin
|
|
ImageIndex := AImageIndex;
|
|
SelectedIndex := AImageIndex;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowLinksHandler.SetTargetLinkNodeImage(AImageIndex: Integer);
|
|
var
|
|
ANode: TTreeNode;
|
|
begin
|
|
if TargetLink <> nil then
|
|
begin
|
|
ANode := GetNodeByLink(TargetLink);
|
|
if ANode <> nil then
|
|
with ANode do
|
|
begin
|
|
ImageIndex := AImageIndex;
|
|
SelectedIndex := AImageIndex;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowLinksHandler.UpdateTargets(ANode: TTreeNode);
|
|
var
|
|
AGroup: TdxNavBarGroup;
|
|
ALink: TdxNavBarItemLink;
|
|
begin
|
|
if ANode <> nil then
|
|
begin
|
|
ALink := GetLinkByNode(ANode);
|
|
AGroup := GetGroupByNode(ANode);
|
|
end
|
|
else
|
|
begin
|
|
AGroup := nil;
|
|
ALink := nil;
|
|
end;
|
|
if FTargetGroup <> AGroup then
|
|
begin
|
|
SetTargetGroupNodeImage(1);
|
|
FTargetGroup := AGroup;
|
|
SetTargetGroupNodeImage(3);
|
|
end;
|
|
if FTargetLink <> ALink then
|
|
begin
|
|
SetTargetLinkNodeImage(2);
|
|
FTargetLink := ALink;
|
|
SetTargetLinkNodeImage(4);
|
|
end;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowLinksHandler.ClearTargets;
|
|
begin
|
|
SetTargetGroupNodeImage(1);
|
|
SetTargetLinkNodeImage(2);
|
|
FTargetGroup := nil;
|
|
FTargetLink := nil;;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowLinksHandler.Add;
|
|
begin
|
|
CreateLink(SelectedItem, SelectedGroup, -1);
|
|
UpdateButtonsState;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowLinksHandler.Delete;
|
|
begin
|
|
RemoveLink(SelectedLink);
|
|
UpdateButtonsState;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowLinksHandler.MoveSelection(ADelta: Integer);
|
|
begin
|
|
MoveLink(SelectedLink, SelectedGroup, SelectedLink.Index + ADelta);
|
|
UpdateButtonsState;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowLinksHandler.UpdateContent;
|
|
begin
|
|
RefreshItemList;
|
|
RefreshGroupTreeView;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowLinksHandler.UpdateItem(AItem: TComponent);
|
|
begin
|
|
UpdateContent;// TODO
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowLinksHandler.UpdateButtonsPanel;
|
|
begin
|
|
DsgnWindow.pnBtnAddDelete.Visible := True;
|
|
DsgnWindow.pnBtnSelect.Visible := False;
|
|
DsgnWindow.pnBtnMove.Visible := True;
|
|
DsgnWindow.pnBtnDefaultSettings.Visible := False;
|
|
DsgnWindow.pnBtnApply.Visible := False;
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowLinksHandler.ItemsLV: TListView;
|
|
begin
|
|
Result := DsgnWindow.lbxLinkDesignerItems;
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowLinksHandler.LinksTV: TTreeView;
|
|
begin
|
|
Result := DsgnWindow.tvLinkDesignerGroups;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowLinksHandler.CreateLink(AItem: TdxNavBarItem; AGroup: TdxNavBarGroup; AIndex: Integer);
|
|
var
|
|
ALink: TdxNavBarItemLink;
|
|
begin
|
|
DsgnWindow.tvLinkDesignerGroups.Items.BeginUpdate;
|
|
try
|
|
ALink := AGroup.CreateLink(AItem);
|
|
if (AIndex >= 0) and (AIndex < AGroup.LinkCount) then
|
|
ALink.Index := AIndex;
|
|
CreateNodeByLink(ALink);
|
|
finally
|
|
DsgnWindow.tvLinkDesignerGroups.FullExpand;
|
|
DsgnWindow.tvLinkDesignerGroups.Items.EndUpdate;
|
|
end;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowLinksHandler.MoveLink(ALink: TdxNavBarItemLink; AGroup: TdxNavBarGroup; AIndex: Integer);
|
|
var
|
|
AItem: TdxNavBarItem;
|
|
begin
|
|
AItem := ALink.Item;
|
|
RemoveLink(ALink);
|
|
CreateLink(AItem, AGroup, AIndex);
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowLinksHandler.RemoveLink(ALink: TdxNavBarItemLink);
|
|
begin
|
|
RemoveNodeByLink(ALink);
|
|
ALink.Group.RemoveLink(ALink.Index);
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowLinksHandler.RefreshGroupTreeView;
|
|
var
|
|
I, J: Integer;
|
|
Group: TdxNavBarGroup;
|
|
Node: TTreeNode;
|
|
begin
|
|
LinksTV.Items.BeginUpdate;
|
|
try
|
|
LinksTV.Items.Clear;
|
|
if NavBar = nil then Exit;
|
|
|
|
for I := 0 to NavBar.Groups.Count - 1 do
|
|
begin
|
|
Group := NavBar.Groups[I];
|
|
if Group.Owner = NavBar.Owner then
|
|
begin
|
|
Node := LinksTV.Items.AddObject(nil, GetGroupNodeCation(Group), Group);
|
|
Node.ImageIndex := 1;
|
|
Node.SelectedIndex := 1;
|
|
for J := 0 to Group.LinkCount - 1 do
|
|
begin
|
|
with LinksTV.Items.AddChildObject(Node, GetItemNodeCation(Group.Links[J].Item), Group.Links[J]) do
|
|
begin
|
|
ImageIndex := 2;
|
|
SelectedIndex := 2;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
LinksTV.FullExpand;
|
|
finally
|
|
LinksTV.Items.EndUpdate;
|
|
end;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowLinksHandler.RefreshItemList;
|
|
var
|
|
I: Integer;
|
|
Item: TdxNavBarItem;
|
|
begin
|
|
ItemsLV.Items.BeginUpdate;
|
|
try
|
|
ItemsLV.Items.Clear;
|
|
if NavBar = nil then Exit;
|
|
|
|
for I := 0 to NavBar.Items.Count - 1 do
|
|
begin
|
|
Item := NavBar.Items[I];
|
|
if Item.Owner = NavBar.Owner then
|
|
with ItemsLV.Items.Add do
|
|
begin
|
|
Caption := GetItemNodeCation(Item);
|
|
Data := Item;
|
|
ImageIndex := 2;
|
|
end;
|
|
end;
|
|
finally
|
|
ItemsLV.Items.EndUpdate;
|
|
end;
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowLinksHandler.GetSelectedGroup: TdxNavBarGroup;
|
|
var
|
|
ALink: TdxNavBarItemLink;
|
|
begin
|
|
if LinksTV.Selected <> nil then
|
|
begin
|
|
Result := GetGroupByNode(LinksTV.Selected);
|
|
if Result = nil then
|
|
begin
|
|
ALink := GetLinkByNode(LinksTV.Selected);
|
|
if ALink <> nil then Result := ALink.Group;
|
|
end;
|
|
end
|
|
else Result := nil;
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowLinksHandler.GetSelectedItem: TdxNavBarItem;
|
|
begin
|
|
if ItemsLV.Selected <> nil then
|
|
Result := GetItemByNode(ItemsLV.Selected)
|
|
else Result := nil;
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowLinksHandler.GetSelectedLink: TdxNavBarItemLink;
|
|
begin
|
|
if LinksTV.Selected <> nil then
|
|
Result := GetLinkByNode(LinksTV.Selected)
|
|
else Result := nil;
|
|
end;
|
|
|
|
type
|
|
TdxNavBarDsgnWindowViewsHandler = class(TdxNavBarDsgnWindowPageHandler)
|
|
protected
|
|
class function DesignerCaptionPostfix: string; override;
|
|
public
|
|
procedure UpdateButtonsPanel; override;
|
|
procedure UpdateContent; override;
|
|
procedure UpdateItem(AItem: TComponent); override;
|
|
end;
|
|
|
|
{ TdxNavBarDsgnWindowViewsHandler }
|
|
|
|
class function TdxNavBarDsgnWindowViewsHandler.DesignerCaptionPostfix: string;
|
|
begin
|
|
Result := sdxViewsDesigner;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowViewsHandler.UpdateContent;
|
|
begin
|
|
DsgnWindow.cbViewStyles.ItemIndex := NavBar.View;
|
|
DsgnWindow.nbPreview.View := NavBar.View;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowViewsHandler.UpdateButtonsPanel;
|
|
begin
|
|
DsgnWindow.pnBtnAddDelete.Visible := False;
|
|
DsgnWindow.pnBtnSelect.Visible := False;
|
|
DsgnWindow.pnBtnMove.Visible := False;
|
|
DsgnWindow.pnBtnDefaultSettings.Visible := False;
|
|
DsgnWindow.pnBtnApply.Visible := True;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowViewsHandler.UpdateItem(AItem: TComponent);
|
|
begin
|
|
if AItem = nil then UpdateContent;
|
|
end;
|
|
|
|
type
|
|
TdxNavBarDsgnWindowDefaultStylesHandler = class(TdxNavBarDsgnWindowPageHandler)
|
|
private
|
|
function GetItem(Index: Integer): TdxNavBarDefaultStyle;
|
|
function GetItemCount: Integer;
|
|
function GetSelected(Index: Integer): Boolean;
|
|
procedure SetSelected(Index: Integer; const Value: Boolean);
|
|
protected
|
|
class function DesignerCaptionPostfix: string; override;
|
|
function MainList: TListBox;
|
|
public
|
|
procedure GetSelections(const ASelections: IDesignerSelections); override;
|
|
procedure UpdateButtonsPanel; override;
|
|
procedure UpdateContent; override;
|
|
procedure UpdateSelections(const ASelections: IDesignerSelections); override;
|
|
|
|
property Selected[Index: Integer]: Boolean read GetSelected write SetSelected;
|
|
property Items[Index: Integer]: TdxNavBarDefaultStyle read GetItem;
|
|
property ItemCount: Integer read GetItemCount;
|
|
end;
|
|
|
|
{ TdxNavBarDsgnWindowDefaultStylesHandler }
|
|
|
|
class function TdxNavBarDsgnWindowDefaultStylesHandler.DesignerCaptionPostfix: string;
|
|
begin
|
|
Result := sdxDefaultStylesDesigner;
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowDefaultStylesHandler.GetItem(
|
|
Index: Integer): TdxNavBarDefaultStyle;
|
|
begin
|
|
if MainList <> nil then
|
|
Result := TdxNavBarDefaultStyle(MainList.Items.Objects[Index])
|
|
else Result := nil;
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowDefaultStylesHandler.GetItemCount: Integer;
|
|
begin
|
|
if MainList <> nil then
|
|
Result := MainList.Items.Count
|
|
else Result := 0;
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowDefaultStylesHandler.GetSelected(
|
|
Index: Integer): Boolean;
|
|
begin
|
|
if MainList <> nil then
|
|
Result := MainList.Selected[Index]
|
|
else Result := False;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowDefaultStylesHandler.GetSelections(
|
|
const ASelections: IDesignerSelections);
|
|
var
|
|
I: Integer;
|
|
begin
|
|
for I := 0 to ItemCount - 1 do
|
|
if Selected[I] then
|
|
ASelections.Add(dxNavBarDsgnUtils.MakeIPersistent(Items[I]));
|
|
if ASelections.Count = 0 then
|
|
ASelections.Add(dxNavBarDsgnUtils.MakeIComponent(NavBar));
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowDefaultStylesHandler.MainList: TListBox;
|
|
begin
|
|
Result := DsgnWindow.lbxDefaultStyles;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowDefaultStylesHandler.UpdateContent;
|
|
var
|
|
PropList: TPropList;
|
|
V: Variant;
|
|
I: Integer;
|
|
AStyle: TdxNavBarDefaultStyle;
|
|
{$IFNDEF CLR}
|
|
ACount: Integer;
|
|
{$ENDIF}
|
|
begin
|
|
if MainList.Items.Count > 0 then exit;
|
|
{$IFNDEF CLR}
|
|
ACount := GetPropList(TypeInfo(TdxNavBarDefaultStyles), [tkClass], @PropList);
|
|
{$ELSE}
|
|
PropList := GetPropList(TypeInfo(TdxNavBarDefaultStyles), [tkClass]);
|
|
{$ENDIF}
|
|
{$IFNDEF CLR}
|
|
for I := 0 to ACount - 1 do
|
|
{$ELSE}
|
|
for I := Low(PropList) to High(PropList) do
|
|
{$ENDIF}
|
|
begin
|
|
if TdxNavBarDefaultStyle.ClassName = PropList[I].PropType{$IFNDEF CLR}^{$ENDIF}.Name then
|
|
begin
|
|
V := GetPropValue(NavBar.DefaultStyles, PropList[I].Name);
|
|
{$IFNDEF CLR} //TODO !!!!
|
|
AStyle := TdxNavBarDefaultStyle(TVarData(V).VPointer);
|
|
MainList.Items.AddObject(PropList[I].Name, AStyle);
|
|
{$ENDIF}
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowDefaultStylesHandler.UpdateButtonsPanel;
|
|
begin
|
|
DsgnWindow.pnBtnAddDelete.Visible := False;
|
|
DsgnWindow.pnBtnSelect.Visible := False;
|
|
DsgnWindow.pnBtnMove.Visible := False;
|
|
DsgnWindow.pnBtnDefaultSettings.Visible := True;
|
|
DsgnWindow.pnBtnApply.Visible := False;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowDefaultStylesHandler.SetSelected(
|
|
Index: Integer; const Value: Boolean);
|
|
begin
|
|
if MainList <> nil then
|
|
MainList.Selected[Index] := Value;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowDefaultStylesHandler.UpdateSelections(
|
|
const ASelections: IDesignerSelections);
|
|
|
|
function InSelection(AItem: TPersistent): Boolean;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
Result := False;
|
|
for I := 0 to ASelections.Count - 1 do
|
|
if AItem = dxNavBarDsgnUtils.TryExtractPersistent(ASelections[I]) then
|
|
begin
|
|
Result := True;
|
|
break;
|
|
end;
|
|
end;
|
|
|
|
var
|
|
I: Integer;
|
|
begin
|
|
for I := 0 to ItemCount - 1 do
|
|
if Selected[I] xor InSelection(Items[I]) then
|
|
Selected[I] := not Selected[I];
|
|
end;
|
|
|
|
{ TdxNavBarDsgnWindowPageHandler }
|
|
|
|
constructor TdxNavBarDsgnWindowPageHandler.Create(ADsgnWindow: TdxfmNavBarDesignWindow);
|
|
begin
|
|
inherited Create;
|
|
FDsgnWindow := ADsgnWindow;
|
|
end;
|
|
|
|
destructor TdxNavBarDsgnWindowPageHandler.Destroy;
|
|
begin
|
|
inherited;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowPageHandler.Activate;
|
|
begin
|
|
UpdateContent;
|
|
UpdateButtonsPanel;
|
|
UpdateButtonsState;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowPageHandler.Add;
|
|
begin
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowPageHandler.Copy;
|
|
begin
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowPageHandler.Cut;
|
|
begin
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowPageHandler.Delete;
|
|
begin
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowPageHandler.DeleteItem(AItem: TComponent);
|
|
begin
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowPageHandler.GetSelections(const ASelections: IDesignerSelections);
|
|
begin
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowPageHandler.MoveSelection(ADelta: Integer);
|
|
begin
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowPageHandler.Paste;
|
|
begin
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowPageHandler.UpdateContent;
|
|
begin
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowPageHandler.SelectAll;
|
|
begin
|
|
end;
|
|
|
|
class function TdxNavBarDsgnWindowPageHandler.DesignerCaptionPostfix: string;
|
|
begin
|
|
Result := sdxNavBarDesigner;
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowPageHandler.CanAdd: Boolean;
|
|
begin
|
|
Result := False;
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowPageHandler.CanCopy: Boolean;
|
|
begin
|
|
Result := False;
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowPageHandler.CanCut: Boolean;
|
|
begin
|
|
Result := False;
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowPageHandler.CanDelete: Boolean;
|
|
begin
|
|
Result := False;
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowPageHandler.CanSelectAll: Boolean;
|
|
begin
|
|
Result := False;
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowPageHandler.CanMoveUp: Boolean;
|
|
begin
|
|
Result := False;
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowPageHandler.CanMoveDown: Boolean;
|
|
begin
|
|
Result := False;
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowPageHandler.CanPaste: Boolean;
|
|
begin
|
|
Result := False;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowPageHandler.UpdateButtonsPanel;
|
|
begin
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowPageHandler.UpdateButtonsState;
|
|
begin
|
|
DsgnWindow.UpdateButtonsState;
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowPageHandler.UpdateItem(AItem: TComponent);
|
|
begin
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowPageHandler.UpdateScrollBar;
|
|
begin
|
|
end;
|
|
|
|
procedure TdxNavBarDsgnWindowPageHandler.UpdateSelections(const ASelections: IDesignerSelections);
|
|
begin
|
|
end;
|
|
|
|
function TdxNavBarDsgnWindowPageHandler.GetNavBar: TdxCustomNavBar;
|
|
begin
|
|
if DsgnWindow <> nil then
|
|
Result := DsgnWindow.NavBar
|
|
else Result := nil;
|
|
end;
|
|
|
|
{ TdxfmNavBarDesignWindow }
|
|
|
|
constructor TdxfmNavBarDesignWindow.Create(AOwner: TComponent);
|
|
begin
|
|
inherited;
|
|
FHandlers := TList.Create;
|
|
InitializeHandlers;
|
|
InitializeViewStyles;
|
|
|
|
btDelete.Tag := Integer(eaDelete);
|
|
btSelectAll.Tag := Integer(eaSelectAll);
|
|
miCut.Tag := Integer(eaCut);
|
|
miCopy.Tag := Integer(eaCopy);
|
|
miPaste.Tag := Integer(eaPaste);
|
|
miDelete.Tag := Integer(eaDelete);
|
|
miSelectAll.Tag := Integer(eaSelectAll);
|
|
|
|
pcMain.ActivePage := pcMain.Pages[0];
|
|
ActiveDesignerPageChanged;
|
|
RestoreLayout;
|
|
end;
|
|
|
|
destructor TdxfmNavBarDesignWindow.Destroy;
|
|
begin
|
|
FinalizeHandlers;
|
|
FHandlers.Free;
|
|
StoreLayout;
|
|
if NavBarDesigner <> nil then
|
|
TdxNavBarDesigner(NavBarDesigner).FDesignWindow := nil;
|
|
inherited;
|
|
end;
|
|
|
|
function TdxfmNavBarDesignWindow.ClipboardComponents: Boolean;
|
|
begin
|
|
Result := inherited ClipboardComponents;
|
|
end;
|
|
|
|
{$IFDEF DELPHI6}
|
|
function TdxfmNavBarDesignWindow.EditAction(Action: TEditAction): Boolean;
|
|
{$ELSE}
|
|
procedure TdxfmNavBarDesignWindow.EditAction(Action: TEditAction);
|
|
{$ENDIF}
|
|
begin
|
|
{$IFDEF DELPHI6}
|
|
Result := True;
|
|
{$ENDIF}
|
|
case Action of
|
|
eaCut: Cut;
|
|
eaCopy: Copy;
|
|
eaPaste: Paste;
|
|
eaDelete: Delete;
|
|
eaSelectAll: SelectAll;
|
|
end;
|
|
end;
|
|
|
|
function TdxfmNavBarDesignWindow.GetEditState: TEditState;
|
|
begin
|
|
Result := [];
|
|
if CanDelete then
|
|
Result := Result + [esCanDelete];
|
|
if CanSelectAll then
|
|
Result := Result + [esCanSelectAll];
|
|
if CanCut then
|
|
Result := Result + [esCanCut];
|
|
if CanCopy then
|
|
Result := Result + [esCanCopy];
|
|
if CanPaste then
|
|
Result := Result + [esCanPaste];
|
|
end;
|
|
|
|
{$IFDEF DELPHI6}
|
|
procedure TdxfmNavBarDesignWindow.ItemDeleted(const ADesigner: IDesigner;
|
|
Item: TPersistent);
|
|
{$ELSE}
|
|
procedure TdxfmNavBarDesignWindow.ComponentDeleted(Component: IPersistent);
|
|
{$ENDIF}
|
|
var
|
|
AComponent: TComponent;
|
|
begin
|
|
inherited;
|
|
{$IFDEF DELPHI6}
|
|
if Item is TComponent then
|
|
{$ENDIF}
|
|
begin
|
|
AComponent := dxNavBarDsgnUtils.TryExtractComponent({$IFDEF DELPHI6}Item{$ELSE}Component{$ENDIF});
|
|
if (NavBar <> nil) and not (csDestroying in NavBar.ComponentState) and
|
|
(CurrentHandler <> nil) then
|
|
CurrentHandler.DeleteItem(AComponent);
|
|
end;
|
|
end;
|
|
|
|
{$IFDEF DELPHI6}
|
|
procedure TdxfmNavBarDesignWindow.ItemsModified(const Designer: IDesigner);
|
|
{$ELSE}
|
|
procedure TdxfmNavBarDesignWindow.FormModified;
|
|
{$ENDIF}
|
|
begin
|
|
inherited;
|
|
UpdateCaption;
|
|
end;
|
|
|
|
{$IFDEF DELPHI6}
|
|
procedure TdxfmNavBarDesignWindow.SelectionChanged(const ADesigner: IDesigner;
|
|
const ASelection: IDesignerSelections);
|
|
{$ELSE}
|
|
procedure TdxfmNavBarDesignWindow.SelectionChanged(ASelection: TDesignerSelectionList);
|
|
{$ENDIF}
|
|
begin
|
|
inherited;
|
|
{$IFDEF DELPHI6}
|
|
if ADesigner = Designer then
|
|
{$ENDIF}
|
|
UpdateSelections(ASelection);
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.Activated;
|
|
var
|
|
Selections: IDesignerSelections;
|
|
begin
|
|
inherited;
|
|
if CurrentHandler <> nil then
|
|
CurrentHandler.Activate;
|
|
Selections := CreateSelectionList;
|
|
Designer.GetSelections(Selections);
|
|
UpdateSelections(Selections);
|
|
end;
|
|
|
|
{$IFDEF DELPHI9}
|
|
procedure TdxfmNavBarDesignWindow.CreateParams(var Params: TCreateParams);
|
|
begin
|
|
inherited;
|
|
Params.WndParent := Application.MainForm.Handle;
|
|
end;
|
|
{$ENDIF}
|
|
|
|
function TdxfmNavBarDesignWindow.UniqueName(Component: TComponent): string;
|
|
begin
|
|
if CurrentHandler is TdxNavBarDsgnWindowComponentCollectionPageHandler then
|
|
Result := NavBar.Name + (CurrentHandler as TdxNavBarDsgnWindowComponentCollectionPageHandler).ItemNamePrefix
|
|
else
|
|
Result := NavBar.Name;
|
|
Result := Designer.UniqueName(Result);
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.ActiveDesignerPageChanged;
|
|
begin
|
|
SelectNavBar;
|
|
if pcMain.ActivePage.PageIndex < HandlerCount then
|
|
begin
|
|
CurrentHandler := Handlers[pcMain.ActivePage.PageIndex];
|
|
if CurrentHandler <> nil then
|
|
CurrentHandler.Activate;
|
|
UpdateCaption;
|
|
end;
|
|
end;
|
|
|
|
function TdxfmNavBarDesignWindow.GetNavBarDesigner: TAbstractcxNavBarDesigner;
|
|
begin
|
|
if NavBar <> nil then
|
|
Result := NavBar.Designer
|
|
else Result := nil;
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.SetNavBar(Value: TdxCustomNavBar);
|
|
begin
|
|
if FNavBar <> Value then
|
|
begin
|
|
FNavBar := Value;
|
|
if CurrentHandler <> nil then
|
|
CurrentHandler.UpdateContent;
|
|
UpdateCaption;
|
|
UpdateButtonsState;
|
|
end;
|
|
end;
|
|
|
|
function TdxfmNavBarDesignWindow.CanAdd: Boolean;
|
|
begin
|
|
if CurrentHandler <> nil then
|
|
Result := CurrentHandler.CanAdd
|
|
else Result := False;
|
|
end;
|
|
|
|
function TdxfmNavBarDesignWindow.CanCopy: Boolean;
|
|
begin
|
|
if CurrentHandler <> nil then
|
|
Result := CurrentHandler.CanCopy
|
|
else Result := False;
|
|
end;
|
|
|
|
function TdxfmNavBarDesignWindow.CanCut: Boolean;
|
|
begin
|
|
if CurrentHandler <> nil then
|
|
Result := CurrentHandler.CanCut
|
|
else Result := False;
|
|
end;
|
|
|
|
function TdxfmNavBarDesignWindow.CanDelete: Boolean;
|
|
begin
|
|
if CurrentHandler <> nil then
|
|
Result := CurrentHandler.CanDelete
|
|
else Result := False;
|
|
end;
|
|
|
|
function TdxfmNavBarDesignWindow.CanMoveDown: Boolean;
|
|
begin
|
|
if CurrentHandler <> nil then
|
|
Result := CurrentHandler.CanMoveDown
|
|
else Result := False;
|
|
end;
|
|
|
|
function TdxfmNavBarDesignWindow.CanMoveUp: Boolean;
|
|
begin
|
|
if CurrentHandler <> nil then
|
|
Result := CurrentHandler.CanMoveUp
|
|
else Result := False;
|
|
end;
|
|
|
|
function TdxfmNavBarDesignWindow.CanPaste: Boolean;
|
|
begin
|
|
if CurrentHandler <> nil then
|
|
Result := CurrentHandler.CanPaste
|
|
else Result := False;
|
|
end;
|
|
|
|
function TdxfmNavBarDesignWindow.CanSelectAll: Boolean;
|
|
begin
|
|
if CurrentHandler <> nil then
|
|
Result := CurrentHandler.CanSelectAll
|
|
else Result := False;
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.Copy;
|
|
begin
|
|
if CurrentHandler <> nil then
|
|
CurrentHandler.Copy;
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.Cut;
|
|
begin
|
|
if CurrentHandler <> nil then
|
|
CurrentHandler.Cut;
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.Delete;
|
|
begin
|
|
if CurrentHandler <> nil then
|
|
CurrentHandler.Delete;
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.HandleException;
|
|
begin
|
|
Abort;
|
|
end;
|
|
|
|
function TdxfmNavBarDesignWindow.GetRegistryPath: string;
|
|
begin
|
|
{$IFNDEF CLR}
|
|
Result := (BorlandIDEServices as IOTAServices).GetBaseRegistryKey + '\' +
|
|
sdxExpressNavBarDesignerLayoutRegPath;
|
|
{$ELSE}
|
|
Result := sdxExpressNavBarDesignerLayoutRegPath;
|
|
{$ENDIF}
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.Paste;
|
|
begin
|
|
if CurrentHandler <> nil then
|
|
CurrentHandler.Paste;
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.RestoreLayout;
|
|
begin
|
|
with TRegistry.Create do
|
|
try
|
|
try
|
|
if OpenKey(GetRegistryPath, False) then
|
|
begin
|
|
if ValueExists(sdxWidth) then
|
|
Width := ReadInteger(sdxWidth);
|
|
if ValueExists(sdxHeight) then
|
|
Height := ReadInteger(sdxHeight);
|
|
end;
|
|
except
|
|
HandleException;
|
|
end;
|
|
finally
|
|
Free;
|
|
end;
|
|
if CurrentHandler <> nil then
|
|
CurrentHandler.UpdateScrollBar;
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.Select(AComponent: TComponent; AddToSelection: Boolean);
|
|
var
|
|
Selections: IDesignerSelections;
|
|
begin
|
|
Selections := CreateSelectionList;
|
|
if AddToSelection then
|
|
Designer.GetSelections(Selections);
|
|
Selections.Add(dxNavBarDsgnUtils.MakeIComponent(AComponent));
|
|
Designer.SetSelections(Selections);
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.SelectAll;
|
|
begin
|
|
if CurrentHandler <> nil then
|
|
CurrentHandler.SelectAll;
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.SelectNavBar;
|
|
begin
|
|
if NavBar <> nil then
|
|
Select(NavBar, False);
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.StartWait;
|
|
begin
|
|
FSaveCursor := Screen.Cursor;
|
|
Screen.Cursor := crHourGlass;
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.StopWait;
|
|
begin
|
|
Screen.Cursor := FSaveCursor;
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.StoreLayout;
|
|
begin
|
|
with TRegistry.Create do
|
|
try
|
|
try
|
|
if OpenKey(GetRegistryPath, True) then
|
|
begin
|
|
WriteInteger(sdxWidth, Width);
|
|
WriteInteger(sdxHeight, Height);
|
|
end;
|
|
except
|
|
HandleException;
|
|
end;
|
|
finally
|
|
Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.UpdateButtonsState;
|
|
begin
|
|
btAdd.Enabled := CanAdd;
|
|
btDelete.Enabled := CanDelete;
|
|
btSelectAll.Enabled := CanSelectAll;
|
|
btMoveUp.Enabled := CanMoveUp;
|
|
btMoveDown.Enabled := CanMoveDown;
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.UpdateCaption;
|
|
var
|
|
APostfix: string;
|
|
begin
|
|
if (NavBar <> nil) and (NavBar.Owner <> nil) then
|
|
begin
|
|
if CurrentHandler <> nil then
|
|
APostfix := CurrentHandler.DesignerCaptionPostfix
|
|
else APostfix := sdxNavBarDesigner;
|
|
Caption := Format(sdxDesignerCaption, [NavBar.Owner.Name, NavBar.Name, APostfix]);
|
|
end;
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.UpdateItem(AItem: TComponent);
|
|
begin
|
|
if CurrentHandler <> nil then
|
|
CurrentHandler.UpdateItem(AItem);
|
|
UpdateButtonsState;
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.UpdateMenuState;
|
|
begin
|
|
miAdd.Enabled := CanAdd;
|
|
miCut.Enabled := CanCut;
|
|
miCopy.Enabled := CanCopy;
|
|
miPaste.Enabled := CanPaste;
|
|
miDelete.Enabled := CanDelete;
|
|
miSelectAll.Enabled := CanSelectAll;
|
|
miMoveUp.Enabled := CanMoveUp;
|
|
miMoveDown.Enabled := CanMoveDown;
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.UpdateSelections(const ASelections: IDesignerSelections);
|
|
begin
|
|
if (NavBar = nil) or (csDestroying in NavBar.ComponentState) or (ASelections = nil) then exit;
|
|
if CurrentHandler <> nil then
|
|
CurrentHandler.UpdateSelections(ASelections);
|
|
UpdateButtonsState;
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.ListBoxClick(Sender: TObject);
|
|
var
|
|
Selections: IDesignerSelections;
|
|
begin
|
|
Selections := CreateSelectionList;
|
|
if CurrentHandler <> nil then
|
|
CurrentHandler.GetSelections(Selections);
|
|
Designer.SetSelections(Selections);
|
|
end;
|
|
|
|
function TdxfmNavBarDesignWindow.GetHandler(Index: Integer): TdxNavBarDsgnWindowPageHandler;
|
|
begin
|
|
Result := TdxNavBarDsgnWindowPageHandler(FHandlers.Items[Index]);
|
|
end;
|
|
|
|
function TdxfmNavBarDesignWindow.GetHandlerCount: Integer;
|
|
begin
|
|
Result := FHandlers.Count;
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.InitializeHandlers;
|
|
begin
|
|
FHandlers.Add(TdxNavBarDsgnWindowGroupsHandler.Create(Self));
|
|
FHandlers.Add(TdxNavBarDsgnWindowItemsHandler.Create(Self));
|
|
FHandlers.Add(TdxNavBarDsgnWindowLinksHandler.Create(Self));
|
|
FHandlers.Add(TdxNavBarDsgnWindowViewsHandler.Create(Self));
|
|
FHandlers.Add(TdxNavBarDsgnWindowDefaultStylesHandler.Create(Self));
|
|
FHandlers.Add(TdxNavBarDsgnWindowCustomStylesHandler.Create(Self));
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.InitializeViewStyles;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
for I := 0 to dxNavBarViewsFactory.Count - 1 do
|
|
cbViewStyles.Items.Add(dxNavBarViewsFactory.Names[I]);
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.FinalizeHandlers;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
for I := 0 to FHandlers.Count - 1 do
|
|
TdxNavBarDsgnWindowPageHandler(FHandlers.Items[I]).Free;
|
|
FHandlers.Clear;
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.AddClick(Sender: TObject);
|
|
begin
|
|
if CurrentHandler <> nil then
|
|
CurrentHandler.Add;
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.ActionClick(Sender: TObject);
|
|
begin
|
|
EditAction(TEditAction(TComponent(Sender).Tag));
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.MoveUpClick(Sender: TObject);
|
|
begin
|
|
if CurrentHandler <> nil then
|
|
CurrentHandler.MoveSelection(-1);
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.MoveDownClick(Sender: TObject);
|
|
begin
|
|
if CurrentHandler <> nil then
|
|
CurrentHandler.MoveSelection(1);
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.tvLinkDesignerGroupsDragDrop(Sender,
|
|
Source: TObject; X, Y: Integer);
|
|
var
|
|
AGroup: TdxNavBarGroup;
|
|
AIndex: Integer;
|
|
begin
|
|
if CurrentHandler is TdxNavBarDsgnWindowLinksHandler then
|
|
with (CurrentHandler as TdxNavBarDsgnWindowLinksHandler) do
|
|
begin
|
|
SetTargetGroupNodeImage(1);
|
|
SetTargetLinkNodeImage(2);
|
|
if TargetLink <> nil then
|
|
begin
|
|
AIndex := TargetLink.Index;
|
|
AGroup := TargetLink.Group;
|
|
end
|
|
else
|
|
begin
|
|
AIndex := -1;
|
|
AGroup := TargetGroup;
|
|
end;
|
|
if AGroup <> nil then
|
|
begin
|
|
if SourceItem <> nil then
|
|
CreateLink(SourceItem, AGroup, AIndex)
|
|
else if SourceLink <> nil then
|
|
MoveLink(SourceLink, AGroup, AIndex);
|
|
end;
|
|
SourceItem := nil;
|
|
SourceLink := nil;
|
|
ClearTargets;
|
|
end;
|
|
UpdateButtonsState;
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.tvLinkDesignerGroupsDragOver(Sender,
|
|
Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
|
|
begin
|
|
if CurrentHandler is TdxNavBarDsgnWindowLinksHandler then
|
|
with (CurrentHandler as TdxNavBarDsgnWindowLinksHandler) do
|
|
begin
|
|
Accept := (SourceLink <> nil) or (SourceItem <> nil);
|
|
if Accept then
|
|
UpdateTargets(tvLinkDesignerGroups.GetNodeAt(X, Y));
|
|
Accept := Accept and ((TargetGroup <> nil) or (TargetLink <> nil));
|
|
end
|
|
else Accept := False;
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.lbxLinkDesignerItemsDragOver(Sender,
|
|
Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
|
|
begin
|
|
if CurrentHandler is TdxNavBarDsgnWindowLinksHandler then
|
|
with (CurrentHandler as TdxNavBarDsgnWindowLinksHandler) do
|
|
Accept := (SourceLink <> nil)
|
|
else Accept := False
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.lbxLinkDesignerItemsDragDrop(Sender,
|
|
Source: TObject; X, Y: Integer);
|
|
begin
|
|
if CurrentHandler is TdxNavBarDsgnWindowLinksHandler then
|
|
with (CurrentHandler as TdxNavBarDsgnWindowLinksHandler) do
|
|
begin
|
|
RemoveLink(SourceLink);
|
|
SourceLink := nil;
|
|
end;
|
|
UpdateButtonsState;
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.lbxLinkDesignerItemsStartDrag(
|
|
Sender: TObject; var DragObject: TDragObject);
|
|
begin
|
|
if CurrentHandler is TdxNavBarDsgnWindowLinksHandler then
|
|
with (CurrentHandler as TdxNavBarDsgnWindowLinksHandler) do
|
|
begin
|
|
SourceItem := GetItemByNode(lbxLinkDesignerItems.Selected);
|
|
if SourceItem = nil then CancelDrag;
|
|
end;
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.tvLinkDesignerGroupsStartDrag(
|
|
Sender: TObject; var DragObject: TDragObject);
|
|
begin
|
|
if CurrentHandler is TdxNavBarDsgnWindowLinksHandler then
|
|
with (CurrentHandler as TdxNavBarDsgnWindowLinksHandler) do
|
|
begin
|
|
SourceLink := GetLinkByNode(tvLinkDesignerGroups.Selected);
|
|
if SourceLink = nil then CancelDrag;
|
|
end;
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.tvLinkDesignerGroupsExit(
|
|
Sender: TObject);
|
|
begin
|
|
if CurrentHandler is TdxNavBarDsgnWindowLinksHandler then
|
|
with (CurrentHandler as TdxNavBarDsgnWindowLinksHandler) do ClearTargets;
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.pmMainPopup(Sender: TObject);
|
|
begin
|
|
UpdateMenuState;
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.tvLinkDesignerGroupsClick(
|
|
Sender: TObject);
|
|
begin
|
|
UpdateButtonsState;
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.lbxLinkDesignerItemsClick(
|
|
Sender: TObject);
|
|
begin
|
|
UpdateButtonsState;
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.tvLinkDesignerGroupsEndDrag(Sender,
|
|
Target: TObject; X, Y: Integer);
|
|
begin
|
|
if CurrentHandler is TdxNavBarDsgnWindowLinksHandler then
|
|
with (CurrentHandler as TdxNavBarDsgnWindowLinksHandler) do ClearTargets;
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.lbxLinkDesignerItemsEndDrag(Sender,
|
|
Target: TObject; X, Y: Integer);
|
|
begin
|
|
if CurrentHandler is TdxNavBarDsgnWindowLinksHandler then
|
|
with (CurrentHandler as TdxNavBarDsgnWindowLinksHandler) do ClearTargets;
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.nbMainLinkClick(Sender: TObject;
|
|
ALink: TdxNavBarItemLink);
|
|
begin
|
|
if ALink.Item.Index < pcMain.PageCount then
|
|
pcMain.ActivePage := pcMain.Pages[ALink.Item.Index];
|
|
ActiveDesignerPageChanged;
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.DefaultSettingsClick(Sender: TObject);
|
|
begin
|
|
NavBar.AssignDefaultStyles;
|
|
Designer.Modified;
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.cbViewStylesChange(Sender: TObject);
|
|
begin
|
|
nbPreview.View := (Sender as TComboBox).ItemIndex;
|
|
end;
|
|
|
|
procedure TdxfmNavBarDesignWindow.btnApplyClick(Sender: TObject);
|
|
begin
|
|
NavBar.View := nbPreview.View;
|
|
Designer.Modified;
|
|
end;
|
|
|
|
end.
|
|
|