Wt::WObject Class Reference
[Signal/slot system]

A base class for objects that participate in the signal/slot system. More...

#include <Wt/WObject>

Inheritance diagram for Wt::WObject:

Inheritance graph
[legend]

List of all members.

Public Types

typedef void(WObject::* Method )()
 Typedef for a WObject method without arguments.

Public Member Functions

 WObject (WObject *parent=0)
 Create a WObject with parent object, parent.
virtual ~WObject ()
 Destroy the WObject.
const std::string id () const
 Returns the (unique) identifier for this object.
void resetLearnedSlots ()
 Reset learned stateless slot implementations.
template<class T>
void resetLearnedSlot (void(T::*method)())
 Reset a learned stateless slot implementation.
template<class T>
void implementStateless (void(T::*method)())
 Declare a slot to be stateless and learn client-side behaviour on first invocation.
template<class T>
void implementStateless (void(T::*method)(), void(T::*undoMethod)())
 Declare a slot to be stateless and learn client-side behaviour in advance.
template<class T>
void implementJavaScript (void(T::*method)(), const std::string &jsCode)
 Provide a JavaScript implementation for a method.
void addChild (WObject *child)
 Add a child object.
void removeChild (WObject *child)
 Remove a child object.
const std::vector< WObject * > & children () const
 Returns the children.
WObjectparent () const
 Returns the parent object.

Static Protected Member Functions

static WObjectsender ()
 Get the sender of the current slot call.


Detailed Description

A base class for objects that participate in the signal/slot system.

The main feature offered by WObject is a signal/slot system. Connections between signals and slots of WObject implement a type-safe event callback system. For example, one can simply connect() the WInteractWidget::clicked signal of a WPushButton to the WApplication::quit() method, to exit the application when the button is clicked.

WObjects can be organized in ownership object trees. When an object is created with another object as parent, it's ownership is transferred to the parent. If not deleted explicitly, the child object will be deleted together with the parent. Child objects may also be deleted manually, they will remove themselves from their parent in the process.

In conjunction with EventSignal, WObject facilitates learning of client-side event handling (in JavaScript) through invocation of the slot method. This is only possible when the slot behaviour is stateless, i.e. independent of any application state, and can be specified using the WObject::implementStateless() methods.

See also:
Signal, EventSignal

Constructor & Destructor Documentation

Wt::WObject::WObject ( WObject parent = 0  ) 

Create a WObject with parent object, parent.

If the optional parent is specified, the parent object will destroy all child objects. Set parent to 0 to create an object with no parent.

See also:
addChild()

Wt::WObject::~WObject (  )  [virtual]

Destroy the WObject.

This automatically deletes all child objects including connections from and to signals and slots of this WObject.


Member Function Documentation

const std::string Wt::WObject::id (  )  const [inline]

Returns the (unique) identifier for this object.

For WWidgets, this corresponds to the id of the DOM element that represents the widget. This is not entirely unique, since a composite widget shares the same Id as its implementation.

See also:
WWidget::jsRef()

void Wt::WObject::resetLearnedSlots (  ) 

Reset learned stateless slot implementations.

Clears the stateless implementation for all slots declared to be implemented with a stateless implementation.

See also:
resetLearnedSlot(), implementStateless()

template<class T>
void Wt::WObject::resetLearnedSlot ( void(T::*)()  method  )  [inline]

Reset a learned stateless slot implementation.

Clears the stateless implementation for the given slot that was declared to be implemented with a stateless implementation.

When something has changed that breaks the contract of a stateless slot to always have the same effect, you may call this method to force the application to discard the current implementation.

See also:
implementStateless()

template<class T>
void Wt::WObject::implementStateless ( void(T::*)()  method  )  [inline]

Declare a slot to be stateless and learn client-side behaviour on first invocation.

Indicate that the given slot is stateless, and meets the requirement that the slot's code does not depend on any state of the object, but performs the same visual effect regardless of any state, or at least until resetLearnedSlot() is called.

When this slot is connected to an EventSignal (such as those exposed by WInteractWidget and WFormWidget), the Wt library may decide to cache the visual effect of this slot in JavaScript code at client-side: this effect will be learned automatically at the first invocation. This has no consequences for the normal event handling, since the slot implementation is still executed in response to any event notification. Therefore, it is merely an optimization of the latency for the visual effect, but it does not change the behaviour of the application.

When for some reason the visual effect does change, one may use resetLearnedSlot() or resetLearnedSlots() to flush the existing cached visual effect, forcing the library to relearn it.

It is crucial that this function be applied first to a slot that is intended to be stateless before any EventSignal connects to that slot. Otherwise, the connecting EventSignal cannot find the stateless slot implementation for the intended slot, and the statement will have no effect for that connection.

See also:
resetLearnedSlot(), EventSignal

template<class T>
void Wt::WObject::implementStateless ( void(T::*)()  method,
void(T::*)()  undoMethod 
) [inline]

Declare a slot to be stateless and learn client-side behaviour in advance.

This method has the same effect as implementStateless(void (T::*method)()), but learns the visual effect of the slot before the first invocation of the event.

To learn the visual effect, the library will simulate the event and record the visual effect. To restore the application state, it will call the undoMethod which must restore the effect of method.

See also:
implementStateless(void (T::*method)())

template<class T>
void Wt::WObject::implementJavaScript ( void(T::*)()  method,
const std::string &  jsCode 
) [inline]

Provide a JavaScript implementation for a method.

This method sets the JavaScript implementation for a method. As a result, if JavaScript is available, the JavaScript version will be used on the client side and the visual effect of the C++ implementation will be ignored.

This is very similar to an auto-learned stateless slot, but here the learning is avoided by directly setting the JavaScript implementation.

The jsCode should be one or more valid JavaScript statements.

See also:
implementStateless(void (T::*method)())

void Wt::WObject::addChild ( WObject child  ) 

Add a child object.

Take responsibility of deleting the child object, together with this object.

See also:
removeChild()

void Wt::WObject::removeChild ( WObject child  ) 

Remove a child object.

The child must have been previously added.

See also:
addChild()

WObject * Wt::WObject::sender (  )  [static, protected]

Get the sender of the current slot call.

Use this function to know who emitted the signal that triggered this slot call. It may be 0 if the signal has now owner information, or if there is no signal triggering the current slot, but instead the slot method is called directly.


Generated on Mon Nov 3 15:01:01 2008 for Wt by doxygen 1.5.6