dexed/src/ce_options.pas

73 lines
1.5 KiB
Plaintext

unit ce_options;
{$I ce_defines.inc}
interface
uses
classes, sysutils, ce_common, ce_writableComponent, ce_observer;
type
TCEOptions = class(TWritableComponent)
private
fSubjPersObservers: TCECustomSubject;
protected
procedure defineProperties(Filer: TFiler); override;
procedure beforeLoad; override;
procedure beforeSave; override;
procedure afterLoad; override;
public
constructor create(aOwner: TComponent); override;
destructor destroy; override;
end;
implementation
uses
ce_interfaces;
constructor TCEOptions.create(aOwner: TComponent);
begin
inherited;
fSubjPersObservers := TCESessionOptionsSubject.create;
//
EntitiesConnector.addSubject(fSubjPersObservers);
end;
destructor TCEOptions.destroy;
begin
EntitiesConnector.removeSubject(fSubjPersObservers);
EntitiesConnector.endUpdate;
//
fSubjPersObservers.Free;
inherited;
end;
procedure TCEOptions.defineProperties(Filer: TFiler);
begin
subjSesOptsDeclareProperties(TCESessionOptionsSubject(fSubjPersObservers), Filer);
end;
procedure TCEOptions.beforeLoad;
begin
// ensure that the observers will be know:
// during the app init a bulk update operation is happening,
// cf. ce_observer.pas, initialization section.
if EntitiesConnector.isUpdating then
EntitiesConnector.forceUpdate;
inherited;
end;
procedure TCEOptions.beforeSave;
begin
subjSesOptsBeforeSave(TCESessionOptionsSubject(fSubjPersObservers));
end;
procedure TCEOptions.afterLoad;
begin
subjSesOptsAfterLoad(TCESessionOptionsSubject(fSubjPersObservers));
end;
end.