mirror of https://gitlab.com/basile.b/dexed.git
SingleService
- ICELogMessagerSubject converted to service; was an anti-pattern - SingleService for the procinput widget - Utility to get the service interfaces from the EntityConnector
This commit is contained in:
parent
5aa4068990
commit
f263fbdf54
|
@ -5,16 +5,17 @@ unit ce_interfaces;
|
||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, actnList, menus,
|
Classes, SysUtils, actnList, menus, process,
|
||||||
ce_synmemo, ce_project, ce_observer;
|
ce_synmemo, ce_project, ce_observer;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
|
|
||||||
(**
|
(**
|
||||||
* An implementer can save and load some stuffs on application start/quit
|
* An implementer can save and load some stuffs on application start/quit
|
||||||
*)
|
*)
|
||||||
ICESessionOptionsObserver = interface
|
ICESessionOptionsObserver = interface
|
||||||
['ICEWidgetPersist']
|
['ICESessionOptionsObserver']
|
||||||
// persistent things are about to be saved.
|
// persistent things are about to be saved.
|
||||||
procedure sesoptBeforeSave;
|
procedure sesoptBeforeSave;
|
||||||
// persistent things can be declared to aFiler.
|
// persistent things can be declared to aFiler.
|
||||||
|
@ -147,24 +148,28 @@ type
|
||||||
TCEAppMessageCtxt = (amcAll, amcEdit, amcProj, amcApp, amcMisc);
|
TCEAppMessageCtxt = (amcAll, amcEdit, amcProj, amcApp, amcMisc);
|
||||||
|
|
||||||
(**
|
(**
|
||||||
* An implementer gets some log messages.
|
* Single service given by the messages widget.
|
||||||
* AData: either an editor or a project, according to aCtxt.
|
* Client can retrieve the service instance in the EntityConnector.
|
||||||
*)
|
*)
|
||||||
ICELogMessageObserver = interface
|
ICEMessagesDisplay = interface(ICESingleService)
|
||||||
['ICEMessage']
|
// display a message
|
||||||
// a TCELogMessageSubject sends a message based on a string.
|
procedure message(const aValue: string; aData: Pointer; aCtxt: TCEAppMessageCtxt; aKind: TCEAppMessageKind);
|
||||||
procedure lmFromString(const aValue: string; aData: Pointer; aCtxt: TCEAppMessageCtxt; aKind: TCEAppMessageKind);
|
// clear the messages related to the context aCtxt.
|
||||||
// a TCELogMessageSubject sends a clearing request based on a context.
|
procedure clearByContext(aCtxt: TCEAppMessageCtxt);
|
||||||
procedure lmClearByContext(aCtxt: TCEAppMessageCtxt);
|
// clear the messages related to the data aData.
|
||||||
// a TCELogMessageSubject sends a clearing request based on a data.
|
procedure clearByData(aData: Pointer);
|
||||||
procedure lmClearByData(aData: Pointer);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
(**
|
(**
|
||||||
* An implementer sends some log messages.
|
* Single service given by the process-input widget.
|
||||||
|
* Client can retrieve the service instance in the EntityConnector.
|
||||||
*)
|
*)
|
||||||
TCELogMessageSubject = class(TCECustomSubject)
|
ICEProcInputHandler = interface(ICESingleService)
|
||||||
protected
|
// add an entry to the list of process which can receive an user input
|
||||||
function acceptObserver(aObject: TObject): boolean; override;
|
procedure addProcess(aProcess: TProcess);
|
||||||
|
// remove an entry
|
||||||
|
procedure removeProcess(aProcess: TProcess);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
@ -198,13 +203,17 @@ type
|
||||||
procedure subjSesOptsDeclareProperties(aSubject: TCESessionOptionsSubject; aFiler: TFiler);{$IFDEF RELEASE}inline;{$ENDIF}
|
procedure subjSesOptsDeclareProperties(aSubject: TCESessionOptionsSubject; aFiler: TFiler);{$IFDEF RELEASE}inline;{$ENDIF}
|
||||||
procedure subjSesOptsAfterLoad(aSubject: TCESessionOptionsSubject); {$IFDEF RELEASE}inline;{$ENDIF}
|
procedure subjSesOptsAfterLoad(aSubject: TCESessionOptionsSubject); {$IFDEF RELEASE}inline;{$ENDIF}
|
||||||
|
|
||||||
(**
|
|
||||||
* TCELogMessageSubject primitives.
|
{
|
||||||
*)
|
Services assignements:
|
||||||
procedure subjLmFromString(aSubject: TCELogMessageSubject; const aValue: string;
|
|
||||||
aData: Pointer; aCtxt: TCEAppMessageCtxt; aKind: TCEAppMessageKind); {$IFDEF RELEASE}inline;{$ENDIF}
|
lazily get the interface of a service when needed or for a ponctual usage
|
||||||
procedure subjLmClearByContext(aSubject: TCELogMessageSubject; aCtxt: TCEAppMessageCtxt); {$IFDEF RELEASE}inline;{$ENDIF}
|
}
|
||||||
procedure subjLmClearByData(aSubject: TCELogMessageSubject; aData: Pointer); {$IFDEF RELEASE}inline;{$ENDIF}
|
|
||||||
|
function getMessageDisplay(var obj: ICEMessagesDisplay): ICEMessagesDisplay; overload;
|
||||||
|
function getMessageDisplay: ICEMessagesDisplay;overload;
|
||||||
|
function getprocInputHandler(var obj: ICEProcInputHandler): ICEProcInputHandler;overload;
|
||||||
|
function getprocInputHandler: ICEProcInputHandler;overload;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
|
@ -339,38 +348,29 @@ begin
|
||||||
end;
|
end;
|
||||||
{$ENDREGION}
|
{$ENDREGION}
|
||||||
|
|
||||||
{$REGION TCELogMessageSubject --------------------------------------------------}
|
|
||||||
function TCELogMessageSubject.acceptObserver(aObject: TObject): boolean;
|
function getMessageDisplay(var obj: ICEMessagesDisplay): ICEMessagesDisplay;
|
||||||
begin
|
begin
|
||||||
exit(aObject is ICELogMessageObserver);
|
if obj = nil then
|
||||||
|
obj := EntitiesConnector.getSingleService('ICEMessagesDisplay') as ICEMessagesDisplay;
|
||||||
|
exit(obj);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure subjLmFromString(aSubject: TCELogMessageSubject; const aValue: string;
|
function getMessageDisplay: ICEMessagesDisplay;
|
||||||
aData: Pointer; aCtxt: TCEAppMessageCtxt; aKind: TCEAppMessageKind);
|
|
||||||
var
|
|
||||||
i: Integer;
|
|
||||||
begin
|
begin
|
||||||
with aSubject do for i:= 0 to fObservers.Count-1 do
|
exit(EntitiesConnector.getSingleService('ICEMessagesDisplay') as ICEMessagesDisplay);
|
||||||
(fObservers.Items[i] as ICELogMessageObserver).lmFromString(aValue, aData, aCtxt, aKind);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure subjLmClearByContext(aSubject: TCELogMessageSubject; aCtxt: TCEAppMessageCtxt);
|
function getprocInputHandler(var obj: ICEProcInputHandler): ICEProcInputHandler;
|
||||||
var
|
|
||||||
i: Integer;
|
|
||||||
begin
|
begin
|
||||||
with aSubject do for i:= 0 to fObservers.Count-1 do
|
if obj = nil then
|
||||||
(fObservers.Items[i] as ICELogMessageObserver).lmClearByContext(aCtxt);
|
obj := EntitiesConnector.getSingleService('ICEProcInputHandler') as ICEProcInputHandler;
|
||||||
|
exit(obj);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function getprocInputHandler: ICEProcInputHandler;
|
||||||
procedure subjLmClearByData(aSubject: TCELogMessageSubject; aData: Pointer);
|
|
||||||
var
|
|
||||||
i: Integer;
|
|
||||||
begin
|
begin
|
||||||
with aSubject do for i:= 0 to fObservers.Count-1 do
|
exit(EntitiesConnector.getSingleService('ICEProcInputHandler') as ICEProcInputHandler);
|
||||||
(fObservers.Items[i] as ICELogMessageObserver).lmClearByData(aData);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
{$ENDREGION}
|
|
||||||
end.
|
end.
|
||||||
|
|
Loading…
Reference in New Issue