220 lines
8.0 KiB
ObjectPascal
220 lines
8.0 KiB
ObjectPascal
{*******************************************************************}
|
|
{ }
|
|
{ Developer Express Visual Component Library }
|
|
{ ExpressPrinting System(tm) COMPONENT SUITE }
|
|
{ }
|
|
{ Copyright (C) 1998-2009 Developer Express Inc. }
|
|
{ ALL RIGHTS RESERVED }
|
|
{ }
|
|
{ The entire coVisntents 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 EXPRESSPRINTINGSYSTEM 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 dxPSAutoHFTextMnuBld;
|
|
|
|
interface
|
|
|
|
{$I cxVer.inc}
|
|
|
|
uses
|
|
Classes, cxClasses, dxBase, dxPSSngltn, dxPgsDlg;
|
|
|
|
type
|
|
TAbstractdxPSAutoHFTextMenuBuilder = class
|
|
public
|
|
constructor Create; virtual;
|
|
procedure BuildAutoHFTextEntriesMenu(ARootItem: TObject; AData: Pointer;
|
|
AIncludeSetupAutoHFTextEntriesItem: Boolean; AAutoHFTextEntries: TStrings;
|
|
AOnHFTextEntriesClick, AOnSetupHFTextEntriesClick: TNotifyEvent); virtual; abstract;
|
|
class function ExtractAutoHFTextEntryIndexFromObj(Obj: TObject): Integer; virtual;
|
|
end;
|
|
|
|
TdxPSAutoHFTextMenuBuilderClass = class of TAbstractdxPSAutoHFTextMenuBuilder;
|
|
|
|
TdxStandardPSAutoHFTextMenuBuilder = class(TAbstractdxPSAutoHFTextMenuBuilder)
|
|
public
|
|
procedure BuildAutoHFTextEntriesMenu(ARootItem: TObject; AData: Pointer;
|
|
AIncludeSetupAutoHFTextEntriesItem: Boolean; AAutoHFTextEntries: TStrings;
|
|
AOnHFTextEntriesClick, AOnSetupHFTextEntriesClick: TNotifyEvent); override;
|
|
class function ExtractAutoHFTextEntryIndexFromObj(Obj: TObject): Integer; override;
|
|
end;
|
|
|
|
TdxPSAutoHFTextMenuBuilderFactory = class(TBasedxPSSingleton)
|
|
private
|
|
FBuilders: TdxClassList;
|
|
function GetActiveBuilder: TdxPSAutoHFTextMenuBuilderClass;
|
|
function GetBuilder(Index: Integer): TdxPSAutoHFTextMenuBuilderClass;
|
|
function GetCount: Integer;
|
|
protected
|
|
procedure FinalizeInstance; override;
|
|
procedure InitializeInstance; override;
|
|
public
|
|
class function Instance: TdxPSAutoHFTextMenuBuilderFactory; reintroduce; overload;
|
|
procedure RegisterBuilder(ABuilder: TdxPSAutoHFTextMenuBuilderClass);
|
|
procedure UnregisterBuilder(ABuilder: TdxPSAutoHFTextMenuBuilderClass);
|
|
|
|
property ActiveBuilder: TdxPSAutoHFTextMenuBuilderClass read GetActiveBuilder;
|
|
property Builders[Index: Integer]: TdxPSAutoHFTextMenuBuilderClass read GetBuilder;
|
|
property Count: Integer read GetCount;
|
|
end;
|
|
|
|
function dxPSAutoHFTextMenuBuilderFactory: TdxPSAutoHFTextMenuBuilderFactory;
|
|
|
|
implementation
|
|
|
|
uses
|
|
Menus, SysUtils, dxPSUtl, dxPSRes;
|
|
|
|
function dxPSAutoHFTextMenuBuilderFactory: TdxPSAutoHFTextMenuBuilderFactory;
|
|
begin
|
|
Result := TdxPSAutoHFTextMenuBuilderFactory.Instance;
|
|
end;
|
|
|
|
{ TdxPSAutoHFTextMenuBuilderFactory }
|
|
|
|
class function TdxPSAutoHFTextMenuBuilderFactory.Instance: TdxPSAutoHFTextMenuBuilderFactory;
|
|
begin
|
|
Result := inherited Instance as TdxPSAutoHFTextMenuBuilderFactory;
|
|
end;
|
|
|
|
procedure TdxPSAutoHFTextMenuBuilderFactory.RegisterBuilder(ABuilder: TdxPSAutoHFTextMenuBuilderClass);
|
|
begin
|
|
if ABuilder <> nil then FBuilders.Add(ABuilder);
|
|
end;
|
|
|
|
procedure TdxPSAutoHFTextMenuBuilderFactory.UnregisterBuilder(ABuilder: TdxPSAutoHFTextMenuBuilderClass);
|
|
begin
|
|
FBuilders.Remove(ABuilder);
|
|
end;
|
|
|
|
procedure TdxPSAutoHFTextMenuBuilderFactory.FinalizeInstance;
|
|
begin
|
|
FreeAndNil(FBuilders);
|
|
inherited;
|
|
end;
|
|
|
|
procedure TdxPSAutoHFTextMenuBuilderFactory.InitializeInstance;
|
|
begin
|
|
inherited;
|
|
FBuilders := TdxClassList.Create;
|
|
end;
|
|
|
|
function TdxPSAutoHFTextMenuBuilderFactory.GetActiveBuilder: TdxPSAutoHFTextMenuBuilderClass;
|
|
begin
|
|
if Count <> 0 then
|
|
Result := TdxPSAutoHFTextMenuBuilderClass(Builders[Count - 1])
|
|
else
|
|
Result := TdxStandardPSAutoHFTextMenuBuilder;
|
|
end;
|
|
|
|
function TdxPSAutoHFTextMenuBuilderFactory.GetBuilder(Index: Integer): TdxPSAutoHFTextMenuBuilderClass;
|
|
begin
|
|
Result := TdxPSAutoHFTextMenuBuilderClass(FBuilders[Index]);
|
|
end;
|
|
|
|
function TdxPSAutoHFTextMenuBuilderFactory.GetCount: Integer;
|
|
begin
|
|
Result := FBuilders.Count;
|
|
end;
|
|
|
|
{ TAbstractdxPSAutoHFTextMenuBuilder }
|
|
|
|
constructor TAbstractdxPSAutoHFTextMenuBuilder.Create;
|
|
begin
|
|
inherited Create;
|
|
end;
|
|
|
|
class function TAbstractdxPSAutoHFTextMenuBuilder.ExtractAutoHFTextEntryIndexFromObj(Obj: TObject): Integer;
|
|
begin
|
|
Result := 0;
|
|
end;
|
|
|
|
{ TdxStandardPSAutoHFTextMenuBuilder }
|
|
|
|
procedure TdxStandardPSAutoHFTextMenuBuilder.BuildAutoHFTextEntriesMenu(ARootItem: TObject;
|
|
AData: Pointer; AIncludeSetupAutoHFTextEntriesItem: Boolean;
|
|
AAutoHFTextEntries: TStrings; AOnHFTextEntriesClick, AOnSetupHFTextEntriesClick: TNotifyEvent);
|
|
|
|
procedure AddMenuItem(AParent: TMenuItem; AIndex: Integer);
|
|
var
|
|
MenuItem: TMenuItem;
|
|
begin
|
|
MenuItem := TMenuItem.Create(AParent);
|
|
with MenuItem do
|
|
begin
|
|
Caption := AAutoHFTextEntries[AIndex];
|
|
Tag := MakeTTag(AIndex);
|
|
OnClick := AOnHFTextEntriesClick;
|
|
end;
|
|
AParent.Add(MenuItem);
|
|
end;
|
|
|
|
procedure ClearMenuItems(AMenuItem: TMenuItem);
|
|
var
|
|
CurItem: TMenuItem;
|
|
begin
|
|
with AMenuItem do
|
|
while Count > 0 do
|
|
begin
|
|
CurItem := Items[Count - 1];
|
|
Remove(CurItem);
|
|
CurItem.Free;
|
|
end;
|
|
end;
|
|
|
|
var
|
|
MenuItem: TMenuItem;
|
|
I: Integer;
|
|
MI: TMenuItem;
|
|
begin
|
|
if not (ARootItem is TMenuItem) then Exit;
|
|
MenuItem := TMenuItem(ARootItem);
|
|
ClearMenuItems(MenuItem);
|
|
|
|
for I := 0 to AAutoHFTextEntries.Count - 1 do
|
|
AddMenuItem(MenuItem, I);
|
|
|
|
if AIncludeSetupAutoHFTextEntriesItem then
|
|
begin
|
|
if MenuItem.Count > 0 then MenuItem.Add(NewLine);
|
|
|
|
MI := TMenuItem.Create(MenuItem);
|
|
MI.Caption := cxGetResourceString(@sdxMenuInsertEditAutoTextEntries);
|
|
MI.OnClick := AOnSetupHFTextEntriesClick;
|
|
MenuItem.Add(MI);
|
|
end;
|
|
end;
|
|
|
|
class function TdxStandardPSAutoHFTextMenuBuilder.ExtractAutoHFTextEntryIndexFromObj(Obj: TObject): Integer;
|
|
begin
|
|
Result := TTagToInt(TMenuItem(Obj).Tag);
|
|
end;
|
|
|
|
initialization
|
|
dxPSAutoHFTextMenuBuilderFactory.RegisterBuilder(TdxStandardPSAutoHFTextMenuBuilder);
|
|
|
|
end.
|