git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.DevExpressVCL@38 05c56307-c608-d34a-929d-697000501d7a
230 lines
8.0 KiB
ObjectPascal
230 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 dxPSPgsMnuBld;
|
|
|
|
interface
|
|
|
|
{$I cxVer.inc}
|
|
|
|
uses
|
|
Classes, cxClasses, dxPgsDlg, dxPSSngltn, dxBase;
|
|
|
|
type
|
|
TdxPSPageSetupMenuBuilderClass = class of TAbstractdxPSPageSetupMenuBuilder;
|
|
|
|
TAbstractdxPSPageSetupMenuBuilder = class
|
|
public
|
|
constructor Create; virtual;
|
|
procedure BuildPageSetupMenu(ARootItem: TObject; AData: Pointer;
|
|
AIncludeDefineItem: Boolean; AStyles: TStringList; ACurrentStyle: TBasedxPrintStyle;
|
|
AOnStyleClick, AOnDefineStylesClick: TNotifyEvent); virtual; abstract;
|
|
class function ExtractPrintStyleFromObj(Obj: TObject): TBasedxPrintStyle; virtual;
|
|
end;
|
|
|
|
TdxStandardPSPageSetupMenuBuilder = class(TAbstractdxPSPageSetupMenuBuilder)
|
|
public
|
|
procedure BuildPageSetupMenu(ARootItem: TObject; AData: Pointer;
|
|
AIncludeDefineItem: Boolean; AStyles: TStringList; ACurrentStyle: TBasedxPrintStyle;
|
|
AOnStyleClick, AOnDefineStylesClick: TNotifyEvent); override;
|
|
class function ExtractPrintStyleFromObj(Obj: TObject): TBasedxPrintStyle; override;
|
|
end;
|
|
|
|
TdxPSPageSetupMenuBuilderFactory = class(TBasedxPSSingleton)
|
|
private
|
|
FBuilders: TdxClassList;
|
|
function GetActiveBuilder: TdxPSPageSetupMenuBuilderClass;
|
|
function GetBuilder(Index: Integer): TdxPSPageSetupMenuBuilderClass;
|
|
function GetCount: Integer;
|
|
protected
|
|
procedure FinalizeInstance; override;
|
|
procedure InitializeInstance; override;
|
|
public
|
|
class function Instance: TdxPSPageSetupMenuBuilderFactory; reintroduce; overload;
|
|
procedure RegisterBuilder(ABuilder: TdxPSPageSetupMenuBuilderClass);
|
|
procedure UnregisterBuilder(ABuilder: TdxPSPageSetupMenuBuilderClass);
|
|
|
|
property ActiveBuilder: TdxPSPageSetupMenuBuilderClass read GetActiveBuilder;
|
|
property Builders[Index: Integer]: TdxPSPageSetupMenuBuilderClass read GetBuilder;
|
|
property Count: Integer read GetCount;
|
|
end;
|
|
|
|
function dxPSPageSetupMenuBuilderFactory: TdxPSPageSetupMenuBuilderFactory;
|
|
|
|
implementation
|
|
|
|
uses
|
|
Menus, SysUtils, dxPSUtl, dxPSRes;
|
|
|
|
function dxPSPageSetupMenuBuilderFactory: TdxPSPageSetupMenuBuilderFactory;
|
|
begin
|
|
Result := TdxPSPageSetupMenuBuilderFactory.Instance;
|
|
end;
|
|
|
|
{ TdxPSAutoHFTextMenuBuilderFactory }
|
|
|
|
class function TdxPSPageSetupMenuBuilderFactory.Instance: TdxPSPageSetupMenuBuilderFactory;
|
|
begin
|
|
Result := inherited Instance as TdxPSPageSetupMenuBuilderFactory;
|
|
end;
|
|
|
|
procedure TdxPSPageSetupMenuBuilderFactory.RegisterBuilder(ABuilder: TdxPSPageSetupMenuBuilderClass);
|
|
begin
|
|
if ABuilder <> nil then FBuilders.Add(ABuilder);
|
|
end;
|
|
|
|
procedure TdxPSPageSetupMenuBuilderFactory.UnregisterBuilder(ABuilder: TdxPSPageSetupMenuBuilderClass);
|
|
begin
|
|
FBuilders.Remove(ABuilder);
|
|
end;
|
|
|
|
procedure TdxPSPageSetupMenuBuilderFactory.FinalizeInstance;
|
|
begin
|
|
FreeAndNil(FBuilders);
|
|
inherited;
|
|
end;
|
|
|
|
procedure TdxPSPageSetupMenuBuilderFactory.InitializeInstance;
|
|
begin
|
|
inherited;
|
|
FBuilders := TdxClassList.Create;
|
|
end;
|
|
|
|
function TdxPSPageSetupMenuBuilderFactory.GetActiveBuilder: TdxPSPageSetupMenuBuilderClass;
|
|
begin
|
|
if Count <> 0 then
|
|
Result := Builders[Count - 1]
|
|
else
|
|
Result := TdxStandardPSPageSetupMenuBuilder;
|
|
end;
|
|
|
|
function TdxPSPageSetupMenuBuilderFactory.GetBuilder(Index: Integer): TdxPSPageSetupMenuBuilderClass;
|
|
begin
|
|
Result := TdxPSPageSetupMenuBuilderClass(FBuilders[Index]);
|
|
end;
|
|
|
|
function TdxPSPageSetupMenuBuilderFactory.GetCount: Integer;
|
|
begin
|
|
Result := FBuilders.Count;
|
|
end;
|
|
|
|
{ TAbstractdxPSPageSetupMenuBuilder }
|
|
|
|
constructor TAbstractdxPSPageSetupMenuBuilder.Create;
|
|
begin
|
|
inherited Create;
|
|
end;
|
|
|
|
class function TAbstractdxPSPageSetupMenuBuilder.ExtractPrintStyleFromObj(Obj: TObject): TBasedxPrintStyle;
|
|
begin
|
|
Result := nil;
|
|
end;
|
|
|
|
{ TStandarddxPageSetupMenuBuilder }
|
|
|
|
class function TdxStandardPSPageSetupMenuBuilder.ExtractPrintStyleFromObj(Obj: TObject): TBasedxPrintStyle;
|
|
begin
|
|
Result := TBasedxPrintStyle(TTagToObj(TMenuItem(Obj).Tag));
|
|
end;
|
|
|
|
procedure TdxStandardPSPageSetupMenuBuilder.BuildPageSetupMenu(ARootItem: TObject;
|
|
AData: Pointer; AIncludeDefineItem: Boolean;
|
|
AStyles: TStringList; ACurrentStyle: TBasedxPrintStyle;
|
|
AOnStyleClick, AOnDefineStylesClick: TNotifyEvent);
|
|
|
|
procedure AddMenuItem(AParent: TMenuItem; AStyle: TBasedxPrintStyle);
|
|
var
|
|
MenuItem: TMenuItem;
|
|
begin
|
|
MenuItem := TMenuItem.Create(AParent);
|
|
with MenuItem do
|
|
begin
|
|
Caption := AStyle.StyleCaption;
|
|
GroupIndex := 1;
|
|
Hint := AStyle.Description;
|
|
RadioItem := True;
|
|
Tag := MakeTTag(AStyle);
|
|
OnClick := AOnStyleClick;
|
|
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 AStyles.Count - 1 do
|
|
AddMenuItem(MenuItem, TBasedxPrintStyle(AStyles.Objects[I]));
|
|
if AStyles.Count > 0 then
|
|
MenuItem[ACurrentStyle.Index].Checked := True;
|
|
|
|
if AIncludeDefineItem then
|
|
begin
|
|
if MenuItem.Count > 0 then
|
|
MenuItem.Add(NewLine);
|
|
|
|
MI := TMenuItem.Create(MenuItem);
|
|
MI.Caption := cxGetResourceString(@sdxDefinePrintStylesMenuItem);
|
|
MI.Checked := False;
|
|
MI.Tag := MakeTTag(-1);
|
|
MI.OnClick := AOnDefineStylesClick;
|
|
MenuItem.Add(MI);
|
|
end;
|
|
end;
|
|
|
|
initialization
|
|
dxPSPageSetupMenuBuilderFactory.RegisterBuilder(TdxStandardPSPageSetupMenuBuilder);
|
|
|
|
end.
|
|
|