Ceylan::Controller Class Reference

Controller of the Model-View-Controller (MVC) design pattern. More...

#include <CeylanController.h>

Inheritance diagram for Ceylan::Controller:

Inheritance graph
[legend]
Collaboration diagram for Ceylan::Controller:

Collaboration graph
[legend]

List of all members.

Public Types

enum  TextOutputFormat { rawText, html }
 Defines what text output formats for TextDisplayable instances are available. More...

Public Member Functions

 Controller ()
 Constructs a controller not linked to any model.
 Controller (Model &model)
 Constructs a controller that will send events to the specified model.
virtual ~Controller () throw ()
 Basic virtual destructor.
virtual const std::string toString (Ceylan::VerbosityLevels level=Ceylan::high) const
 Returns a user-friendly description of the state of this object.
virtual const EventgetEventFor (const CallerEventListener &listener)=0
 Returns the event this source has to propagate to the specific listener caller, in order to summarize all past events to this specific listener.
virtual void add (EventListener &listener)
 Registers the specified listener to this source, so that forthcoming events will be sent to it as well.
virtual void remove (const EventListener &listener)
 Unregisters the specified listener from this source, no forthcoming event will be sent to the listener.
virtual void removeAllListeners ()
 Unsubscribes all registered listeners from this source, no forthcoming event will be sent.

Static Public Member Functions

static const std::string ToString (std::list< TextDisplayable * > displayables, Ceylan::VerbosityLevels level=Ceylan::high)
 Returns a user-friendly description of this list of pointers to text displayable instances.
static TextOutputFormat GetOutputFormat ()
 Returns the current overall text format to be used by TextDisplayable instances.
static void SetOutputFormat (TextOutputFormat newOutputFormat)
 Sets the current overall text format to be used by TextDisplayable instances.

Protected Member Functions

virtual void notifyAllListeners (const Event &newEvent)
 Notifies all currently registered listeners of a new event.
virtual bool isRegistered (const EventListener &listener)
 Tells whether specified listener is registered to this source.

Protected Attributes

std::list< EventListener * > _listeners
 The registered event listeners.

Static Protected Attributes

static TextOutputFormat _OutputFormat = rawText
 The text format to be used currently by TextDisplayable instances.

Private Member Functions

 Controller (const Controller &source)
 Copy constructor made private to ensure that it will never be called.
Controlleroperator= (const Controller &source)
 Assignment operator made private to ensure that it will never be called.


Detailed Description

Controller of the Model-View-Controller (MVC) design pattern.

The controller of an object sends events to its model, which in turn change its state.

Alternatively, since a Controller is a Callable Event Source, any listener can call the Controller getSourceEvent virtual method, so that this listener can drive the controller, and not the contrary.

Note:
Controller is mainly a source of events aimed at a model, it can however have multiple objects listening to its events.
Controllers are to receive notifications from one or more input devices. Controllers for the moment do not have to know their input devices.

Input devices and controller have separate life cycle, no one is owned by the other.

See also:
InputDevice
Note:
Controllers have to implement the getSourceEvent virtual method, since they must be able to be triggered, notably by Models.
See also:
also the generic alternative MVC framework, for more lightweight and flexible exchanges: Ceylan::BaseView, Ceylan::BaseModel and Ceylan::BaseController.

Definition at line 81 of file CeylanController.h.


Member Enumeration Documentation

Defines what text output formats for TextDisplayable instances are available.

Enumerator:
rawText 
html 

Definition at line 124 of file CeylanTextDisplayable.h.


Constructor & Destructor Documentation

Controller::Controller (  ) 

Constructs a controller not linked to any model.

Definition at line 52 of file CeylanController.cc.

Controller::Controller ( Model model  )  [explicit]

Constructs a controller that will send events to the specified model.

Definition at line 60 of file CeylanController.cc.

References Ceylan::EventListener::subscribeTo().

Controller::~Controller (  )  throw () [virtual]

Basic virtual destructor.

Definition at line 70 of file CeylanController.cc.

References toString().

Ceylan::Controller::Controller ( const Controller source  )  [private]

Copy constructor made private to ensure that it will never be called.

The compiler should complain whenever this undefined constructor is called, implicitly or not.


Member Function Documentation

void EventSource::add ( EventListener listener  )  [virtual, inherited]

Registers the specified listener to this source, so that forthcoming events will be sent to it as well.

Exceptions:
EventException if listener is already registered to the event source.

Definition at line 118 of file CeylanEventSource.cc.

References Ceylan::EventSource::_listeners, and Ceylan::EventListener::toString().

Referenced by Ceylan::EventListener::subscribeTo().

virtual const Event& Ceylan::CallableEventSource::getEventFor ( const CallerEventListener listener  )  [pure virtual, inherited]

Returns the event this source has to propagate to the specific listener caller, in order to summarize all past events to this specific listener.

Parameters:
listener the caller event listener for which the event is forged.
This method is mostly to be used by the caller listener itself on situations where the communication needs to be listener-driven.

More precisely, with basic event sources and listeners, the source triggers the notifications, and the listener has to adapt itself, by storing messages for later use or by acting immediately, accordingly. It is therefore source-driven.

On cases where the listener activation is not to be ruled by sources (ex: if listeners are specifically scheduled already, or if sources, from a listener point of view, would send unnecessary notifications as long as listener is not ready), caller listeners can be used.

They are in charge of driving the communication process: whenever they deem it useful, they ask their sources to return an event describing their current state.

This allows to propagate only fresh and required events for listeners, which is the appropriate way of handling events in all the cases where listeners drive the pace of the pair.

Returns:
an event that can be the latest sent event (if any), or an event especially created for this specific call of this specific listener. The purpose of this event is to make so that the listener is given the information it would have received if all the previous events had been sent to it. This returned event is 'const' so that the same event can be instanciated once and shown multiple times to the same ad/or to different listeners, if needed.
Note:
This listener-driven event propagation is especially useful for memory-less sources such as most controllers, according to the MVC framework: for models, the only interesting information is their current state, thus the propagated source event could be used to summarize to the model what is the current controller state, without having to take into account any past information.
Exceptions:
EventException if the caller event listener is not already registered to this source.
See also:
isRegistered the helper method to check whether specified listener is registered.

TextDisplayable::TextOutputFormat TextDisplayable::GetOutputFormat (  )  [static, inherited]

bool EventSource::isRegistered ( const EventListener listener  )  [protected, virtual, inherited]

Tells whether specified listener is registered to this source.

Definition at line 252 of file CeylanEventSource.cc.

References Ceylan::EventSource::_listeners, and generalUtils::false.

void EventSource::notifyAllListeners ( const Event newEvent  )  [protected, virtual, inherited]

Notifies all currently registered listeners of a new event.

Note:
This source takes ownership of this event.

Definition at line 270 of file CeylanEventSource.cc.

References Ceylan::EventSource::_listeners.

Referenced by Ceylan::Locatable::changed(), and Ceylan::Model::notifyAllViews().

Controller& Ceylan::Controller::operator= ( const Controller source  )  [private]

Assignment operator made private to ensure that it will never be called.

The compiler should complain whenever this undefined operator is called, implicitly or not.

void EventSource::remove ( const EventListener listener  )  [virtual, inherited]

Unregisters the specified listener from this source, no forthcoming event will be sent to the listener.

Exceptions:
EventException if listener was not already registered to the event source.
Note:
This method does nothing special with regard to the listener instance, it acts only on the source. The reason for that is that the unsubscriptions should be initiated on the listener side, not on the source one.
See also:
Ceylan::EventListener::unsubscribeFrom

Definition at line 142 of file CeylanEventSource.cc.

References Ceylan::EventSource::_listeners, generalUtils::false, Ceylan::EventListener::toString(), and generalUtils::true.

void EventSource::removeAllListeners (  )  [virtual, inherited]

Unsubscribes all registered listeners from this source, no forthcoming event will be sent.

This source will request each of its listeners to unsubscribe from it, then the source will forget them in turn.

The links will be removed, but no instance will be deleted by this call.

See also:
Ceylan::EventListener::unsubscribeFromAllSources

Definition at line 204 of file CeylanEventSource.cc.

References Ceylan::EventSource::_listeners.

Referenced by Ceylan::Model::removeAllViews(), and Ceylan::Locatable::~Locatable().

void TextDisplayable::SetOutputFormat ( TextOutputFormat  newOutputFormat  )  [static, inherited]

Sets the current overall text format to be used by TextDisplayable instances.

Parameters:
newOutputFormat the new output format.

Definition at line 72 of file CeylanTextDisplayable.cc.

References Ceylan::TextDisplayable::_OutputFormat.

Referenced by Ceylan::Log::LogHolder::LogHolder().

const std::string TextDisplayable::ToString ( std::list< TextDisplayable * >  displayables,
Ceylan::VerbosityLevels  level = Ceylan::high 
) [static, inherited]

Returns a user-friendly description of this list of pointers to text displayable instances.

Parameters:
displayables a list of pointers to TextDisplayable instances/
level the requested verbosity level.
Note:
Text output format is determined from overall settings.
See also:
toString, Ceylan::VerbosityLevels

Definition at line 45 of file CeylanTextDisplayable.cc.

References Ceylan::formatStringList().

const string Controller::toString ( Ceylan::VerbosityLevels  level = Ceylan::high  )  const [virtual]

Returns a user-friendly description of the state of this object.

Parameters:
level the requested verbosity level.
Note:
Text output format is determined from overall settings.
See also:
TextDisplayable

Reimplemented from Ceylan::CallableEventSource.

Definition at line 83 of file CeylanController.cc.

References Ceylan::EventSource::_listeners.

Referenced by Ceylan::InputDevice::setController(), Ceylan::InputDevice::toString(), and ~Controller().


Member Data Documentation

std::list<EventListener *> Ceylan::EventSource::_listeners [protected, inherited]

TextDisplayable::TextOutputFormat TextDisplayable::_OutputFormat = rawText [static, protected, inherited]

The text format to be used currently by TextDisplayable instances.

Note:
Defaults to raw text.

Definition at line 158 of file CeylanTextDisplayable.h.

Referenced by Ceylan::TextDisplayable::GetOutputFormat(), and Ceylan::TextDisplayable::SetOutputFormat().


The documentation for this class was generated from the following files:

Generated on Thu Jun 4 20:40:11 2009 for Ceylan by  doxygen 1.5.8