git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.DevExpressVCL@55 05c56307-c608-d34a-929d-697000501d7a
687 lines
21 KiB
ObjectPascal
687 lines
21 KiB
ObjectPascal
{*******************************************************************}
|
|
{ }
|
|
{ Developer Express Visual Component Library }
|
|
{ ExpressPrinting System COMPONENT SUITE }
|
|
{ }
|
|
{ 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 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 dxPSEngn;
|
|
|
|
interface
|
|
|
|
{$I cxVer.inc}
|
|
|
|
uses
|
|
dxPSESys, Classes, Graphics, SysUtils, dxPSGlbl, dxPSSngltn, cxLookAndFeels,
|
|
IniFiles;
|
|
|
|
type
|
|
TdxPSStorageType = (dxstNone, dxstRegistry, dxstIniFile);
|
|
|
|
{ TdxPSOptionsStoring }
|
|
|
|
TdxPSOptionsStoring = class(TPersistent)
|
|
private
|
|
FIniFileName: string;
|
|
FOnChanged: TNotifyEvent;
|
|
FRegistryPath: string;
|
|
FSaveFormsPosition: Boolean;
|
|
FStorageType: TdxPSStorageType;
|
|
procedure SetIniFileName(const AValue: string);
|
|
procedure SetRegistryPath(const AValue: string);
|
|
procedure SetSaveFormsPosition(AValue: Boolean);
|
|
procedure SetStorageType(AValue: TdxPSStorageType);
|
|
protected
|
|
function CanStoreToIniFile: Boolean;
|
|
function CanStoreToRegistry: Boolean;
|
|
procedure Changed; virtual;
|
|
//
|
|
property OnChanged: TNotifyEvent read FOnChanged write FOnChanged;
|
|
public
|
|
constructor Create; virtual;
|
|
procedure Assign(Source: TPersistent); override;
|
|
published
|
|
property IniFileName: string read FIniFileName write SetIniFileName;
|
|
property RegistryPath: string read FRegistryPath write SetRegistryPath;
|
|
property SaveFormsPosition: Boolean read FSaveFormsPosition write SetSaveFormsPosition default True;
|
|
property StorageType: TdxPSStorageType read FStorageType write SetStorageType default dxstNone;
|
|
end;
|
|
|
|
{ TdxPSEngine }
|
|
|
|
TdxPSEngine = class(TBasedxPSSingleton)
|
|
private
|
|
FDesignTimeRegistryPath: string;
|
|
FDialogsLookAndFeel: TcxLookAndFeel;
|
|
FHelpFile: string;
|
|
function GetAppName: string;
|
|
function GetIsNativeStyle: Boolean;
|
|
function GetIsSkinsStyle: Boolean;
|
|
function GetIsStandardStyle: Boolean;
|
|
function GetPreviewDialogStyle: TdxPSPreviewDialogStyle;
|
|
function GetRealRegistryPath: string;
|
|
function GetRegistryPath: string;
|
|
function GetSaveFormsPosition: Boolean;
|
|
function GetThemesEnabled: Boolean;
|
|
procedure SetDialogsLookAndFeel(AValue: TcxLookAndFeel);
|
|
procedure SetPreviewDialogStyle(const AValue: TdxPSPreviewDialogStyle);
|
|
procedure SetRegistryPath(const AValue: string);
|
|
procedure SetSaveFormsPosition(AValue: Boolean);
|
|
protected
|
|
procedure FinalizeInstance; override;
|
|
procedure InitializeInstance; override;
|
|
public
|
|
class function Instance: TdxPSEngine; reintroduce; overload;
|
|
|
|
property AppName: string read GetAppName;
|
|
property DesignTimeRegistryPath: string read FDesignTimeRegistryPath;
|
|
property DialogsLookAndFeel: TcxLookAndFeel read FDialogsLookAndFeel write SetDialogsLookAndFeel;
|
|
property HelpFile: string read FHelpFile write FHelpFile;
|
|
property IsNativeStyle: Boolean read GetIsNativeStyle;
|
|
property IsSkinsStyle: Boolean read GetIsSkinsStyle;
|
|
property IsStandardStyle: Boolean read GetIsStandardStyle;
|
|
property PreviewDialogStyle: TdxPSPreviewDialogStyle read GetPreviewDialogStyle write SetPreviewDialogStyle;
|
|
property RealRegistryPath: string read GetRealRegistryPath;
|
|
property RegistryPath: string read GetRegistryPath write SetRegistryPath;
|
|
property SaveFormsPosition: Boolean read GetSaveFormsPosition write SetSaveFormsPosition;
|
|
property ThemesEnabled: Boolean read GetThemesEnabled;
|
|
end;
|
|
|
|
{ TdxPSEngineController }
|
|
|
|
TdxPSEngineController = class(TComponent, IdxSkinSupport)
|
|
private
|
|
FDialogsLookAndFeel: TcxLookAndFeel;
|
|
FHelpFile: string;
|
|
FOptionsStoring: TdxPSOptionsStoring;
|
|
FPreviewDialogStyle: TdxPSPreviewDialogStyle;
|
|
function GetActive: Boolean;
|
|
function GetPreviewDialogStyle: TdxPSPreviewDialogStyle;
|
|
function IsDesigning: Boolean;
|
|
procedure SetActive(AValue: Boolean);
|
|
procedure SetDialogsLookAndFeel(Value: TcxLookAndFeel);
|
|
procedure SetHelpFile(const Value: string);
|
|
procedure SetOptionsStoring(AValue: TdxPSOptionsStoring);
|
|
procedure SetPreviewDialogStyle(const AValue: TdxPSPreviewDialogStyle);
|
|
protected
|
|
procedure DefineProperties(Filer: TFiler); override;
|
|
procedure Loaded; override;
|
|
procedure LookAndFeelChanged(Sender: TcxLookAndFeel; AChangedValues: TcxLookAndFeelValues);
|
|
procedure StoringOptionsChanged(Sender: TObject);
|
|
procedure UpdateEngineParams;
|
|
//
|
|
procedure ReadLookAndFeelProperty(Reader: TReader);
|
|
procedure ReadRegistryPath(Reader: TReader);
|
|
procedure ReadSaveFormsPosition(Reader: TReader);
|
|
procedure ReadUseNativeLookAndFeelProperty(Reader: TReader);
|
|
public
|
|
constructor Create(AOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
procedure Activate;
|
|
published
|
|
property Active: Boolean read GetActive write SetActive default False;
|
|
property DialogsLookAndFeel: TcxLookAndFeel read FDialogsLookAndFeel write SetDialogsLookAndFeel;
|
|
property HelpFile: string read FHelpFile write SetHelpFile;
|
|
property OptionsStoring: TdxPSOptionsStoring read FOptionsStoring write SetOptionsStoring;
|
|
property PreviewDialogStyle: TdxPSPreviewDialogStyle read GetPreviewDialogStyle write SetPreviewDialogStyle;
|
|
end;
|
|
|
|
{ TdxPSStoringManager }
|
|
|
|
TdxPSStoringManager = class(TObject)
|
|
private
|
|
FIniFile: TCustomIniFile;
|
|
FLockCount: Integer;
|
|
FOptionsStoring: TdxPSOptionsStoring;
|
|
procedure SetOptionsStoring(AValue: TdxPSOptionsStoring);
|
|
protected
|
|
function CreateIniFile: TCustomIniFile;
|
|
function GetRealIniFileName: string;
|
|
public
|
|
constructor Create; virtual;
|
|
destructor Destroy; override;
|
|
function BeginStoring(var AIniFile: TCustomIniFile): Boolean;
|
|
procedure EndStoring(var AIniFile: TCustomIniFile);
|
|
//
|
|
property OptionsStoring: TdxPSOptionsStoring read FOptionsStoring write SetOptionsStoring;
|
|
end;
|
|
|
|
function dxPSStoringManager: TdxPSStoringManager;
|
|
function dxPSEngine: TdxPSEngine;
|
|
implementation
|
|
|
|
uses
|
|
Forms, {$IFDEF DELPHI7} Themes, {$ENDIF} dxPSRes, dxPSUtl, dxPSCore, Registry;
|
|
|
|
type
|
|
|
|
{ TdxPSEngineControllerList }
|
|
|
|
TdxPSEngineControllerList = class(TObject)
|
|
private
|
|
FItems: TList;
|
|
function GetActiveController: TdxPSEngineController;
|
|
function GetCount: Integer;
|
|
function GetItem(Index: Integer): TdxPSEngineController;
|
|
procedure SetActiveController(Value: TdxPSEngineController);
|
|
protected
|
|
procedure ActiveControllerChanged;
|
|
public
|
|
destructor Destroy; override;
|
|
|
|
function IndexOf(Value: TdxPSEngineController): Integer;
|
|
procedure Add(Value: TdxPSEngineController);
|
|
procedure Remove(Value: TdxPSEngineController);
|
|
|
|
property ActiveController: TdxPSEngineController read GetActiveController write SetActiveController;
|
|
property Count: Integer read GetCount;
|
|
property Items[Index: Integer]: TdxPSEngineController read GetItem; default;
|
|
end;
|
|
|
|
var
|
|
FEngineControllerList: TdxPSEngineControllerList = nil;
|
|
FConfigManager: TdxPSStoringManager = nil;
|
|
|
|
function dxPSStoringManager: TdxPSStoringManager;
|
|
begin
|
|
if FConfigManager = nil then
|
|
FConfigManager := TdxPSStoringManager.Create;
|
|
Result := FConfigManager;
|
|
end;
|
|
|
|
function dxPSEngine: TdxPSEngine;
|
|
begin
|
|
Result := TdxPSEngine.Instance;
|
|
end;
|
|
|
|
function dxPSEngineControllerList: TdxPSEngineControllerList;
|
|
begin
|
|
if FEngineControllerList = nil then
|
|
FEngineControllerList := TdxPSEngineControllerList.Create;
|
|
Result := FEngineControllerList;
|
|
end;
|
|
|
|
{ TdxPSEngine }
|
|
|
|
class function TdxPSEngine.Instance: TdxPSEngine;
|
|
begin
|
|
Result := inherited Instance as TdxPSEngine;
|
|
end;
|
|
|
|
procedure TdxPSEngine.InitializeInstance;
|
|
begin
|
|
inherited InitializeInstance;
|
|
FDialogsLookAndFeel := TcxLookAndFeel.Create(nil);
|
|
FDialogsLookAndFeel.MasterLookAndFeel := RootLookAndFeel;
|
|
FDesignTimeRegistryPath := dxPSGlbl.sdxPSRegPathDesignTime;
|
|
end;
|
|
|
|
procedure TdxPSEngine.FinalizeInstance;
|
|
begin
|
|
FreeAndNil(FDialogsLookAndFeel);
|
|
inherited FinalizeInstance;
|
|
end;
|
|
|
|
function TdxPSEngine.GetIsNativeStyle: Boolean;
|
|
begin
|
|
Result := DialogsLookAndFeel.NativeStyle;
|
|
end;
|
|
|
|
function TdxPSEngine.GetIsSkinsStyle: Boolean;
|
|
begin
|
|
Result := Assigned(DialogsLookAndFeel.SkinPainter);
|
|
end;
|
|
|
|
function TdxPSEngine.GetIsStandardStyle: Boolean;
|
|
begin
|
|
Result := DialogsLookAndFeel.Kind = lfStandard;
|
|
end;
|
|
|
|
function TdxPSEngine.GetAppName: string;
|
|
begin
|
|
Result := ChangeFileExt(ExtractFileName(Application.ExeName), '');
|
|
end;
|
|
|
|
function TdxPSEngine.GetPreviewDialogStyle: TdxPSPreviewDialogStyle;
|
|
begin
|
|
Result := dxPSPreviewDialogManager.CurrentPreviewDialogStyle;
|
|
end;
|
|
|
|
function TdxPSEngine.GetRealRegistryPath: string;
|
|
begin
|
|
if IsDesignTime then
|
|
Result := DesignTimeRegistryPath
|
|
else
|
|
Result := RegistryPath;
|
|
end;
|
|
|
|
function TdxPSEngine.GetRegistryPath: string;
|
|
begin
|
|
Result := dxPSStoringManager.OptionsStoring.RegistryPath;
|
|
end;
|
|
|
|
function TdxPSEngine.GetSaveFormsPosition: Boolean;
|
|
begin
|
|
Result := dxPSStoringManager.OptionsStoring.SaveFormsPosition;
|
|
end;
|
|
|
|
function TdxPSEngine.GetThemesEnabled: Boolean;
|
|
begin
|
|
{$IFDEF DELPHI7}
|
|
Result := ThemeServices.ThemesEnabled;
|
|
{$ELSE}
|
|
Result := False;
|
|
{$ENDIF}
|
|
end;
|
|
|
|
procedure TdxPSEngine.SetDialogsLookAndFeel(AValue: TcxLookAndFeel);
|
|
begin
|
|
FDialogsLookAndFeel.Assign(AValue);
|
|
end;
|
|
|
|
procedure TdxPSEngine.SetPreviewDialogStyle(const AValue: TdxPSPreviewDialogStyle);
|
|
begin
|
|
dxPSPreviewDialogManager.CurrentPreviewDialogStyle := AValue;
|
|
end;
|
|
|
|
procedure TdxPSEngine.SetRegistryPath(const AValue: string);
|
|
begin
|
|
dxPSStoringManager.OptionsStoring.RegistryPath := AValue;
|
|
end;
|
|
|
|
procedure TdxPSEngine.SetSaveFormsPosition(AValue: Boolean);
|
|
begin
|
|
dxPSStoringManager.OptionsStoring.SaveFormsPosition := AValue;
|
|
end;
|
|
|
|
{ TdxPSEngineControllerList }
|
|
|
|
destructor TdxPSEngineControllerList.Destroy;
|
|
begin
|
|
FreeAndNil(FItems);
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TdxPSEngineControllerList.ActiveControllerChanged;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
for I := 0 to Count - 1 do
|
|
Items[I].UpdateEngineParams;
|
|
end;
|
|
|
|
procedure TdxPSEngineControllerList.Add(Value: TdxPSEngineController);
|
|
begin
|
|
if FItems = nil then
|
|
FItems := TList.Create;
|
|
FItems.Add(Value);
|
|
ActiveControllerChanged;
|
|
end;
|
|
|
|
function TdxPSEngineControllerList.IndexOf(Value: TdxPSEngineController): Integer;
|
|
begin
|
|
if FItems = nil then
|
|
Result := -1
|
|
else
|
|
Result := FItems.IndexOf(Value);
|
|
end;
|
|
|
|
procedure TdxPSEngineControllerList.Remove(Value: TdxPSEngineController);
|
|
begin
|
|
if IndexOf(Value) > -1 then
|
|
begin
|
|
FItems.Remove(Value);
|
|
if Count = 0 then
|
|
FreeAndNil(FItems);
|
|
ActiveControllerChanged;
|
|
end;
|
|
end;
|
|
|
|
function TdxPSEngineControllerList.GetActiveController: TdxPSEngineController;
|
|
begin
|
|
if FItems = nil then
|
|
Result := nil
|
|
else
|
|
Result := Items[Count - 1];
|
|
end;
|
|
|
|
function TdxPSEngineControllerList.GetCount: Integer;
|
|
begin
|
|
if FItems = nil then
|
|
Result := 0
|
|
else
|
|
Result := FItems.Count;
|
|
end;
|
|
|
|
function TdxPSEngineControllerList.GetItem(Index: Integer): TdxPSEngineController;
|
|
begin
|
|
Result := TdxPSEngineController(FItems.Items[Index]);
|
|
end;
|
|
|
|
procedure TdxPSEngineControllerList.SetActiveController(Value: TdxPSEngineController);
|
|
begin
|
|
if (ActiveController <> Value) and (IndexOf(Value) > -1) then
|
|
begin
|
|
FItems.Remove(Value);
|
|
FItems.Add(Value);
|
|
ActiveControllerChanged;
|
|
end;
|
|
end;
|
|
|
|
{ TdxPSEngineController }
|
|
|
|
constructor TdxPSEngineController.Create(AOwner: TComponent);
|
|
begin
|
|
inherited Create(AOwner);
|
|
FOptionsStoring := TdxPSOptionsStoring.Create;
|
|
FOptionsStoring.OnChanged := StoringOptionsChanged;
|
|
FDialogsLookAndFeel := TcxLookAndFeel.Create(Self);
|
|
FDialogsLookAndFeel.MasterLookAndFeel := RootLookAndFeel;
|
|
FDialogsLookAndFeel.OnChanged := LookAndFeelChanged;
|
|
dxPSEngineControllerList.Add(Self);
|
|
end;
|
|
|
|
destructor TdxPSEngineController.Destroy;
|
|
begin
|
|
dxPSEngineControllerList.Remove(Self);
|
|
FreeAndNil(FDialogsLookAndFeel);
|
|
FreeAndNil(FOptionsStoring);
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TdxPSEngineController.Activate;
|
|
begin
|
|
dxPSEngineControllerList.ActiveController := Self;
|
|
end;
|
|
|
|
procedure TdxPSEngineController.DefineProperties(Filer: TFiler);
|
|
begin
|
|
inherited DefineProperties(Filer);
|
|
Filer.DefineProperty('RegistryPath', ReadRegistryPath, nil, False);
|
|
Filer.DefineProperty('LookAndFeel', ReadLookAndFeelProperty, nil, False);
|
|
Filer.DefineProperty('SaveFormsPosition', ReadSaveFormsPosition, nil, False);
|
|
Filer.DefineProperty('UseNativeLookAndFeel', ReadUseNativeLookAndFeelProperty, nil, False);
|
|
end;
|
|
|
|
procedure TdxPSEngineController.Loaded;
|
|
begin
|
|
inherited Loaded;
|
|
if not IsDesigning then
|
|
UpdateEngineParams;
|
|
end;
|
|
|
|
procedure TdxPSEngineController.LookAndFeelChanged(
|
|
Sender: TcxLookAndFeel; AChangedValues: TcxLookAndFeelValues);
|
|
begin
|
|
UpdateEngineParams;
|
|
end;
|
|
|
|
function TdxPSEngineController.IsDesigning: Boolean;
|
|
begin
|
|
Result := csDesigning in ComponentState;
|
|
end;
|
|
|
|
procedure TdxPSEngineController.ReadLookAndFeelProperty(Reader: TReader);
|
|
var
|
|
AIdentStr: string;
|
|
begin
|
|
AIdentStr := Reader.ReadIdent;
|
|
DialogsLookAndFeel.AssignedValues := [];
|
|
if AIdentStr = 'pslfFlat' then
|
|
DialogsLookAndFeel.Kind := lfFlat;
|
|
if AIdentStr = 'pslfOffice11' then
|
|
DialogsLookAndFeel.Kind := lfOffice11;
|
|
if AIdentStr = 'pslfStandard' then
|
|
DialogsLookAndFeel.Kind := lfStandard;
|
|
if AIdentStr = 'pslfWinXP' then
|
|
DialogsLookAndFeel.NativeStyle := True;
|
|
end;
|
|
|
|
procedure TdxPSEngineController.ReadRegistryPath(Reader: TReader);
|
|
begin
|
|
OptionsStoring.RegistryPath := Reader.ReadString;
|
|
if OptionsStoring.RegistryPath <> '' then
|
|
OptionsStoring.StorageType := dxstRegistry;
|
|
end;
|
|
|
|
procedure TdxPSEngineController.ReadSaveFormsPosition(Reader: TReader);
|
|
begin
|
|
OptionsStoring.SaveFormsPosition := Reader.ReadBoolean;
|
|
end;
|
|
|
|
procedure TdxPSEngineController.ReadUseNativeLookAndFeelProperty(Reader: TReader);
|
|
begin
|
|
Reader.ReadBoolean;
|
|
end;
|
|
|
|
procedure TdxPSEngineController.StoringOptionsChanged(Sender: TObject);
|
|
begin
|
|
UpdateEngineParams;
|
|
end;
|
|
|
|
procedure TdxPSEngineController.UpdateEngineParams;
|
|
begin
|
|
if Active then
|
|
begin
|
|
dxPSEngine.HelpFile := HelpFile;
|
|
dxPSEngine.DialogsLookAndFeel := DialogsLookAndFeel;
|
|
dxPSPreviewDialogManager.CurrentPreviewDialogStyle := FPreviewDialogStyle;
|
|
dxPSStoringManager.OptionsStoring.Assign(OptionsStoring);
|
|
end;
|
|
end;
|
|
|
|
function TdxPSEngineController.GetActive: Boolean;
|
|
begin
|
|
Result := dxPSEngineControllerList.ActiveController = Self;
|
|
end;
|
|
|
|
function TdxPSEngineController.GetPreviewDialogStyle: TdxPSPreviewDialogStyle;
|
|
begin
|
|
if Active then
|
|
FPreviewDialogStyle := dxPSEngine.PreviewDialogStyle;
|
|
Result := FPreviewDialogStyle;
|
|
end;
|
|
|
|
procedure TdxPSEngineController.SetActive(AValue: Boolean);
|
|
begin
|
|
if AValue then
|
|
Activate;
|
|
end;
|
|
|
|
procedure TdxPSEngineController.SetPreviewDialogStyle(const AValue: TdxPSPreviewDialogStyle);
|
|
begin
|
|
FPreviewDialogStyle := AValue;
|
|
if Active then
|
|
dxPSEngine.PreviewDialogStyle := FPreviewDialogStyle;
|
|
end;
|
|
|
|
procedure TdxPSEngineController.SetHelpFile(const Value: string);
|
|
begin
|
|
FHelpFile := Value;
|
|
UpdateEngineParams;
|
|
end;
|
|
|
|
procedure TdxPSEngineController.SetDialogsLookAndFeel(Value: TcxLookAndFeel);
|
|
begin
|
|
FDialogsLookAndFeel.Assign(Value);
|
|
end;
|
|
|
|
procedure TdxPSEngineController.SetOptionsStoring(AValue: TdxPSOptionsStoring);
|
|
begin
|
|
FOptionsStoring.Assign(AValue);
|
|
end;
|
|
|
|
{ TdxPSStoringManager }
|
|
|
|
constructor TdxPSStoringManager.Create;
|
|
begin
|
|
inherited Create;
|
|
FOptionsStoring := TdxPSOptionsStoring.Create;
|
|
end;
|
|
|
|
destructor TdxPSStoringManager.Destroy;
|
|
begin
|
|
FreeAndNil(FOptionsStoring);
|
|
FreeAndNil(FIniFile);
|
|
inherited Destroy;
|
|
end;
|
|
|
|
function TdxPSStoringManager.BeginStoring(var AIniFile: TCustomIniFile): Boolean;
|
|
begin
|
|
if FLockCount = 0 then
|
|
FIniFile := CreateIniFile;
|
|
Result := Assigned(FIniFile);
|
|
if Result then
|
|
begin
|
|
AIniFile := FIniFile;
|
|
Inc(FLockCount);
|
|
end;
|
|
end;
|
|
|
|
function TdxPSStoringManager.CreateIniFile: TCustomIniFile;
|
|
begin
|
|
if OptionsStoring.CanStoreToRegistry then
|
|
Result := TRegistryIniFile.Create(OptionsStoring.RegistryPath)
|
|
else
|
|
if OptionsStoring.CanStoreToIniFile then
|
|
Result := TMemIniFile.Create(GetRealIniFileName)
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
procedure TdxPSStoringManager.EndStoring(var AIniFile: TCustomIniFile);
|
|
begin
|
|
if AIniFile = FIniFile then
|
|
begin
|
|
Dec(FLockCount);
|
|
if FLockCount = 0 then
|
|
begin
|
|
FIniFile.UpdateFile;
|
|
FreeAndNil(FIniFile);
|
|
AIniFile := nil;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
function TdxPSStoringManager.GetRealIniFileName: string;
|
|
begin
|
|
Result := OptionsStoring.IniFileName;
|
|
if Pos(':', Result) <= 0 then
|
|
Result := ExtractFilePath(Application.ExeName) + Result;
|
|
end;
|
|
|
|
procedure TdxPSStoringManager.SetOptionsStoring(AValue: TdxPSOptionsStoring);
|
|
begin
|
|
FOptionsStoring.Assign(AValue);
|
|
end;
|
|
|
|
{ TdxPSOptionsStoring }
|
|
|
|
constructor TdxPSOptionsStoring.Create;
|
|
begin
|
|
inherited Create;
|
|
FSaveFormsPosition := True;
|
|
end;
|
|
|
|
procedure TdxPSOptionsStoring.Assign(Source: TPersistent);
|
|
begin
|
|
if Source is TdxPSOptionsStoring then
|
|
begin
|
|
FIniFileName := TdxPSOptionsStoring(Source).IniFileName;
|
|
FStorageType := TdxPSOptionsStoring(Source).FStorageType;
|
|
FRegistryPath := TdxPSOptionsStoring(Source).RegistryPath;
|
|
FSaveFormsPosition := TdxPSOptionsStoring(Source).FSaveFormsPosition;
|
|
Changed;
|
|
end;
|
|
end;
|
|
|
|
function TdxPSOptionsStoring.CanStoreToIniFile: Boolean;
|
|
begin
|
|
Result := (StorageType = dxstIniFile) and (IniFileName <> '');
|
|
end;
|
|
|
|
function TdxPSOptionsStoring.CanStoreToRegistry: Boolean;
|
|
begin
|
|
Result := (StorageType = dxstRegistry) and (RegistryPath <> '');
|
|
end;
|
|
|
|
procedure TdxPSOptionsStoring.Changed;
|
|
begin
|
|
if Assigned(OnChanged) then OnChanged(Self);
|
|
end;
|
|
|
|
procedure TdxPSOptionsStoring.SetIniFileName(const AValue: string);
|
|
begin
|
|
if AValue <> FIniFileName then
|
|
begin
|
|
FIniFileName := AValue;
|
|
if AValue <> '' then
|
|
FStorageType := dxstIniFile;
|
|
Changed;
|
|
end;
|
|
end;
|
|
|
|
procedure TdxPSOptionsStoring.SetRegistryPath(const AValue: string);
|
|
begin
|
|
if AValue <> FRegistryPath then
|
|
begin
|
|
FRegistryPath := AValue;
|
|
if AValue <> '' then
|
|
FStorageType := dxstRegistry;
|
|
Changed;
|
|
end;
|
|
end;
|
|
|
|
procedure TdxPSOptionsStoring.SetSaveFormsPosition(AValue: Boolean);
|
|
begin
|
|
if AValue <> FSaveFormsPosition then
|
|
begin
|
|
FSaveFormsPosition := AValue;
|
|
Changed;
|
|
end;
|
|
end;
|
|
|
|
procedure TdxPSOptionsStoring.SetStorageType(AValue: TdxPSStorageType);
|
|
begin
|
|
if AValue <> FStorageType then
|
|
begin
|
|
FStorageType := AValue;
|
|
Changed;
|
|
end;
|
|
end;
|
|
|
|
initialization
|
|
|
|
finalization
|
|
FreeAndNil(FEngineControllerList);
|
|
FreeAndNil(FConfigManager);
|
|
end.
|