Componentes.Terceros.DevExp.../official/x.30/ExpressNavBar/Sources/dxNavBarViewsFact.pas
2007-12-16 17:06:54 +00:00

200 lines
6.4 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 dxNavBarViewsFact;
{$I cxVer.inc}
interface
uses
Classes, Contnrs, dxNavBar;
type
TdxNavBarViewsFactory = class
private
FViews: TObjectList;
function GetCount: Integer;
function GetNames(ID: Integer): string;
function GetPainterClass(ID: Integer): TdxNavBarPainterClass;
protected
procedure Clear;
function IndexOfID(const ID: Integer): Integer;
public
constructor Create;
destructor Destroy; override;
procedure RegisterView(AID: Integer; AName: string; APainterClass: TdxNavBarPainterClass);
procedure UnRegisterView(AID: Integer);
function IndexOfName(const Name: string): Integer;
property Count: Integer read GetCount;
property Names[ID: Integer]: string read GetNames;
property PainterClasses[ID: Integer]: TdxNavBarPainterClass read GetPainterClass;
end;
function dxNavBarViewsFactory: TdxNavBarViewsFactory;
procedure RegisterView(AID: Integer; AName: string; APainterClass: TdxNavBarPainterClass);
procedure UnRegisterView(AID: Integer);
implementation
uses
SysUtils, cxClasses, dxNavBarConsts;
type
TdxNavBarPainterFactItem = class
ID: Integer;
Name: string;
PainterClass: TdxNavBarPainterClass;
end;
var
FdxNavBarViewsFactIsFinalized: Boolean;
FNavBarViewsFactory: TdxNavBarViewsFactory;
function dxNavBarViewsFactory: TdxNavBarViewsFactory;
begin
if (FNavBarViewsFactory = nil) and not FdxNavBarViewsFactIsFinalized then
FNavBarViewsFactory := TdxNavBarViewsFactory.Create;
Result := FNavBarViewsFactory;
end;
procedure RegisterView(AID: Integer; AName: string; APainterClass: TdxNavBarPainterClass);
begin
if dxNavBarViewsFactory <> nil then
dxNavBarViewsFactory.RegisterView(AID, AName, APainterClass);
end;
procedure UnRegisterView(AID: Integer);
begin
if dxNavBarViewsFactory <> nil then
dxNavBarViewsFactory.UnRegisterView(AID);
end;
{ TdxNavBarViewsFactory }
constructor TdxNavBarViewsFactory.Create;
begin
inherited Create;
FViews := TObjectList.Create;
end;
destructor TdxNavBarViewsFactory.Destroy;
begin
FreeAndNil(FViews);
inherited Destroy;
end;
function TdxNavBarViewsFactory.GetCount: Integer;
begin
Result := FViews.Count;
end;
function TdxNavBarViewsFactory.GetNames(ID: Integer): string;
begin
if IndexOfID(ID) < 0 then
raise Exception.CreateFmt(cxGetResourceString(@sdxCannotFindView), [ID]);
Result := TdxNavBarPainterFactItem(FViews.Items[IndexOfID(ID)]).Name
end;
function TdxNavBarViewsFactory.GetPainterClass(ID: Integer): TdxNavBarPainterClass;
begin
if IndexOfID(ID) < 0 then
raise Exception.CreateFmt(cxGetResourceString(@sdxCannotFindView), [ID]);
Result := TdxNavBarPainterFactItem(FViews.Items[IndexOfID(ID)]).PainterClass
end;
procedure TdxNavBarViewsFactory.Clear;
begin
FViews.Clear;
end;
function TdxNavBarViewsFactory.IndexOfID(const ID: Integer): Integer;
var
I: Integer;
begin
Result := -1;
for I := 0 to FViews.Count - 1 do
if TdxNavBarPainterFactItem(FViews.Items[I]).ID = ID then
begin
Result := I;
break;
end;
end;
procedure TdxNavBarViewsFactory.RegisterView(AID: Integer; AName: string; APainterClass: TdxNavBarPainterClass);
var
Item: TdxNavBarPainterFactItem;
begin
if IndexOfID(AID) <> -1 then
raise Exception.CreateFmt(cxGetResourceString(@sdxViewAlreadyExists), [AID]);
Item := TdxNavBarPainterFactItem.Create;
RegisterClasses([APainterClass]);
with Item do
begin
ID := AID;
Name := AName;
PainterClass := APainterClass
end;
FViews.Add(Item);
end;
procedure TdxNavBarViewsFactory.UnRegisterView(AID: Integer);
begin
if IndexOfID(AID) <> -1 then
FViews.Delete(IndexOfID(AID));
end;
function TdxNavBarViewsFactory.IndexOfName(const Name: string): Integer;
var
I: Integer;
begin
Result := -1;
for I := 0 to Count - 1 do
if Names[I] = Name then
begin
Result := I;
break;
end;
end;
initialization
finalization
FdxNavBarViewsFactIsFinalized := True;
FreeAndNil(FNavBarViewsFactory);
end.