mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-05 08:04:24 +02:00
211 lines
5.1 KiB
ObjectPascal
211 lines
5.1 KiB
ObjectPascal
unit CodyOpts;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, FileProcs, LazMethodList, LazConfigStorage, BaseIDEIntf;
|
|
|
|
const
|
|
CodyConfigVersion = 1;
|
|
var
|
|
CodyMiscOptionID: integer = 1000;
|
|
type
|
|
|
|
{ TCodyMiscOptions }
|
|
|
|
TCodyMiscOptions = class(TPersistent)
|
|
private
|
|
FChangeStep: integer;
|
|
FPreferImplementationUsesSection: boolean;
|
|
FUDLoadDelayInS: integer;
|
|
FUDSaveIntervalInS: integer;
|
|
fLastSavedChangeStep: integer;
|
|
fApplyHandlers: TMethodList;
|
|
function GetModified: boolean;
|
|
procedure SetModified(AValue: boolean);
|
|
procedure SetUDLoadDelayInS(AValue: integer);
|
|
procedure SetUDSaveIntervalInS(AValue: integer);
|
|
public
|
|
// unit / identifier dictionary
|
|
property UDLoadDelayInS: integer read FUDLoadDelayInS write SetUDLoadDelayInS;
|
|
property UDSaveIntervalInS: integer read FUDSaveIntervalInS write SetUDSaveIntervalInS;
|
|
property PreferImplementationUsesSection: boolean
|
|
read FPreferImplementationUsesSection write FPreferImplementationUsesSection;
|
|
procedure Assign(Source: TPersistent); override;
|
|
constructor Create;
|
|
destructor Destroy; override;
|
|
function Equals(Obj: TObject): boolean; override;
|
|
procedure SaveSafe;
|
|
procedure LoadSafe;
|
|
procedure SaveToFile(Filename: string);
|
|
procedure LoadFromFile(Filename: string);
|
|
procedure Clear;
|
|
procedure Apply;
|
|
procedure AddHandlerApply(const OnApplyEvent: TNotifyEvent; AsLast: boolean = false);
|
|
procedure RemoveHandlerApply(const OnApplyEvent: TNotifyEvent);
|
|
property ChangeStep: integer read FChangeStep;
|
|
procedure IncreaseChangeStep;
|
|
property Modified: boolean read GetModified write SetModified;
|
|
end;
|
|
|
|
var
|
|
CodyOptions: TCodyMiscOptions = nil;
|
|
|
|
implementation
|
|
|
|
{ TCodyMiscOptions }
|
|
|
|
procedure TCodyMiscOptions.SetModified(AValue: boolean);
|
|
begin
|
|
if AValue then
|
|
IncreaseChangeStep
|
|
else
|
|
fLastSavedChangeStep:=FChangeStep;
|
|
end;
|
|
|
|
function TCodyMiscOptions.GetModified: boolean;
|
|
begin
|
|
Result:=fLastSavedChangeStep<>FChangeStep;
|
|
end;
|
|
|
|
procedure TCodyMiscOptions.SetUDLoadDelayInS(AValue: integer);
|
|
begin
|
|
if FUDLoadDelayInS=AValue then Exit;
|
|
FUDLoadDelayInS:=AValue;
|
|
IncreaseChangeStep;
|
|
end;
|
|
|
|
procedure TCodyMiscOptions.SetUDSaveIntervalInS(AValue: integer);
|
|
begin
|
|
if FUDSaveIntervalInS=AValue then Exit;
|
|
FUDSaveIntervalInS:=AValue;
|
|
IncreaseChangeStep;
|
|
end;
|
|
|
|
constructor TCodyMiscOptions.Create;
|
|
begin
|
|
inherited Create;
|
|
FChangeStep:=CTInvalidChangeStamp;
|
|
fApplyHandlers:=TMethodList.Create;
|
|
end;
|
|
|
|
destructor TCodyMiscOptions.Destroy;
|
|
begin
|
|
FreeAndNil(fApplyHandlers);
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TCodyMiscOptions.Assign(Source: TPersistent);
|
|
var
|
|
aSource: TCodyMiscOptions;
|
|
begin
|
|
if Source is TCodyMiscOptions then
|
|
begin
|
|
aSource:=TCodyMiscOptions(Source);
|
|
UDSaveIntervalInS:=aSource.UDSaveIntervalInS;
|
|
UDLoadDelayInS:=aSource.UDLoadDelayInS;
|
|
end else
|
|
inherited Assign(Source);
|
|
end;
|
|
|
|
function TCodyMiscOptions.Equals(Obj: TObject): boolean;
|
|
var
|
|
Src: TCodyMiscOptions;
|
|
begin
|
|
Result:=false;
|
|
if not (Obj is TCodyMiscOptions) then exit;
|
|
Src:=TCodyMiscOptions(Obj);
|
|
if (UDLoadDelayInS<>Src.UDLoadDelayInS)
|
|
or (UDSaveIntervalInS<>Src.UDSaveIntervalInS)
|
|
then exit;
|
|
Result:=true;
|
|
end;
|
|
|
|
procedure TCodyMiscOptions.SaveSafe;
|
|
begin
|
|
try
|
|
SaveToFile('codyoptions.xml');
|
|
except
|
|
on E: Exception do
|
|
debugln(['TCodyMiscOptions.SaveSafe ',E.Message]);
|
|
end;
|
|
Modified:=false;
|
|
end;
|
|
|
|
procedure TCodyMiscOptions.LoadSafe;
|
|
begin
|
|
try
|
|
LoadFromFile('codyoptions.xml');
|
|
except
|
|
on E: Exception do
|
|
debugln(['TCodyMiscOptions.LoadSafe ',E.Message]);
|
|
end;
|
|
Modified:=false;
|
|
end;
|
|
|
|
procedure TCodyMiscOptions.SaveToFile(Filename: string);
|
|
var
|
|
Cfg: TConfigStorage;
|
|
begin
|
|
Cfg:=GetIDEConfigStorage(Filename,false);
|
|
try
|
|
Cfg.SetDeleteValue('UnitDictionary/LoadDelay',UDLoadDelayInS,10);
|
|
Cfg.SetDeleteValue('UnitDictionary/SaveInterval',UDSaveIntervalInS,600);
|
|
Cfg.SetDeleteValue('Uses/PreferImplementationSection',PreferImplementationUsesSection,false);
|
|
finally
|
|
Cfg.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TCodyMiscOptions.LoadFromFile(Filename: string);
|
|
var
|
|
Cfg: TConfigStorage;
|
|
begin
|
|
Clear;
|
|
Cfg:=GetIDEConfigStorage(Filename,true);
|
|
try
|
|
UDLoadDelayInS:=Cfg.GetValue('UnitDictionary/LoadDelay',10);
|
|
UDSaveIntervalInS:=Cfg.GetValue('UnitDictionary/SaveInterval',600);
|
|
PreferImplementationUsesSection:=Cfg.GetValue('Uses/PreferImplementationSection',false);
|
|
//debugln(['TCodyMiscOptions.LoadFromFile UDSaveIntervalInS=',UDSaveIntervalInS,' LoadDelay=',UDLoadDelayInS]);
|
|
finally
|
|
Cfg.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TCodyMiscOptions.Clear;
|
|
begin
|
|
UDLoadDelayInS:=10;
|
|
UDSaveIntervalInS:=600;
|
|
end;
|
|
|
|
procedure TCodyMiscOptions.Apply;
|
|
begin
|
|
fApplyHandlers.CallNotifyEvents(Self);
|
|
end;
|
|
|
|
procedure TCodyMiscOptions.AddHandlerApply(const OnApplyEvent: TNotifyEvent;
|
|
AsLast: boolean);
|
|
begin
|
|
fApplyHandlers.Add(TMethod(OnApplyEvent),AsLast);
|
|
end;
|
|
|
|
procedure TCodyMiscOptions.RemoveHandlerApply(const OnApplyEvent: TNotifyEvent
|
|
);
|
|
begin
|
|
fApplyHandlers.Remove(TMethod(OnApplyEvent));
|
|
end;
|
|
|
|
procedure TCodyMiscOptions.IncreaseChangeStep;
|
|
begin
|
|
CTIncreaseChangeStamp(FChangeStep);
|
|
end;
|
|
|
|
finalization
|
|
FreeAndNil(CodyOptions);
|
|
|
|
end.
|
|
|