anchor.diff:      procedure menuUpdate(item: TMenuItem);
     end;
     (**
  -   * An implementer agregates its observers menus.
  +   * An implementer collects and updates its observers menus.
      *)
     TCEMainMenuSubject = class(TCECustomSubject)
  +  protected
  +    function acceptObserver(aObject: TObject): boolean; override;
  +  end;
  +
  +
  +
  +  (**
  +   * An implementer declares some actions which have their own main menu entry and
  +   * whose shortcuts are automatically handled
  +   *)
  +  ICEActionProvider = interface
  +  ['ICEActionProvider']
  +    // the action handler will clear the references to the actions collected previously and start collecting if result.
  +    function actHandlerWantRecollect: boolean;
  +    // the action handler starts to collect the actions if result.
  +    function actHandlerWantFirst: boolean;
  +    // the handler continue collecting action if result.
  +    function actHandlerWantNext(out category: string; out action: TCustomAction): boolean;
  +    // the handler update the state of a particular action.
  +    procedure actHandleUpdater(action: TCustomAction);
  +  end;
  +  (**
  +   * An implementer handles its observers actions.
  +   *)
  +  TCEActionProviderSubject = class(TCECustomSubject)
     protected
       function acceptObserver(aObject: TObject): boolean; override;
     end;
  
positive.code: begin
    exit(aObject is ICEEditableOptions);
  end;
  {$ENDREGION}
  
  {$REGION ICESingleService getters ----------------------------------------------}
  
negative.code:   protected
      function acceptObserver(aObject: TObject): boolean; override;
    end;
  
  
  
    // the option editor uses this value as a hint to cast and display an option container.
  