updated interfaces and observers

This commit is contained in:
Basile Burg 2014-11-30 04:07:08 +01:00
parent e0c3d9495f
commit f6b2c02031
2 changed files with 19 additions and 4 deletions

View File

@ -100,10 +100,10 @@ type
*) *)
ICEMainMenuProvider = interface ICEMainMenuProvider = interface
['ICEMainMenuProvider'] ['ICEMainMenuProvider']
// item must contain the full items tree to be added // item is a new mainMenu entry. item must be filled with the sub-items to be added.
procedure menuDeclare(out item: TMenuItem); procedure menuDeclare(item: TMenuItem);
// the implementer can update the actions used in the menu declared previously. // item is the mainMenu entry declared previously. the sub items can be updated, deleted.
procedure menuActionsUpdate; procedure menuUpdate(item: TMenuItem);
end; end;
(** (**
* An implementer agregates its observers menus. * An implementer agregates its observers menus.

View File

@ -52,6 +52,8 @@ type
fObservers: TObjectList; fObservers: TObjectList;
// test for a specific interface when adding an observer. // test for a specific interface when adding an observer.
function acceptObserver(aObject: TObject): boolean; virtual; function acceptObserver(aObject: TObject): boolean; virtual;
function getObserversCount: Integer;
function getObserver(index: Integer): TObject;
public public
constructor create; virtual; constructor create; virtual;
destructor destroy; override; destructor destroy; override;
@ -59,6 +61,9 @@ type
procedure addObserver(anObserver: TObject); procedure addObserver(anObserver: TObject);
procedure removeObserver(anObserver: TObject); procedure removeObserver(anObserver: TObject);
procedure updateObservers; virtual; procedure updateObservers; virtual;
//
property observersCount: Integer read getObserversCount;
property observers[index: Integer]: TObject read getObserver;
end; end;
var var
@ -164,6 +169,16 @@ begin
exit(false); exit(false);
end; end;
function TCECustomSubject.getObserversCount: Integer;
begin
exit(fObservers.Count);
end;
function TCECustomSubject.getObserver(index: Integer): TObject;
begin
exit(fObservers.Items[index]);
end;
procedure TCECustomSubject.addObserver(anObserver: TObject); procedure TCECustomSubject.addObserver(anObserver: TObject);
begin begin
if not acceptObserver(anObserver) then if not acceptObserver(anObserver) then