Main Page | Modules | Namespace List | Class Hierarchy | Class List | Namespace Members | Class Members | Related Pages

openvrml::exposedfield< FieldValue > Class Template Reference

Inheritance diagram for openvrml::exposedfield< FieldValue >:

Inheritance graph
[legend]
List of all members.

Detailed Description

template<typename FieldValue>
class openvrml::exposedfield< FieldValue >

Class template to simplify implementation of exposedFields.

exposedfield conveniently implements an event_listener and an event_emitter. Trivial exposedFields can be implemented simply by instantiating this template with a FieldValue. For the purposes of OpenVRML, a trivial exposedField is one that has no side-effects. That is, it simply receives an event, updates an internal value, and fires an eventOut. Nontrivial exposedFields (i.e., those with side-effects) can generally be implemented by inheriting an instance of this class template and overriding exposedfield<FieldValue>::event_side_effect.


Public Member Functions

 exposedfield (openvrml::node &node, const typename FieldValue::value_type &value=typename FieldValue::value_type())
 Construct.
virtual ~exposedfield () throw ()
 Destroy.

Private Member Functions

virtual void do_process_event (const FieldValue &value, double timestamp) throw (std::bad_alloc)
 Process an event.
virtual void event_side_effect (const FieldValue &value, double timestamp) throw (std::bad_alloc)
 Called by exposedfield<FieldValue>::do_process_event.

Constructor & Destructor Documentation

template<typename FieldValue>
openvrml::exposedfield< FieldValue >::exposedfield openvrml::node node,
const typename FieldValue::value_type &  value = typename FieldValue::value_type()
[inline]
 

Construct.

Parameters:
node a reference to the node to which the exposedField belongs.
value default value.

template<typename FieldValue>
openvrml::exposedfield< FieldValue >::~exposedfield  )  throw () [inline, virtual]
 

Destroy.


Member Function Documentation

template<typename FieldValue>
void openvrml::exposedfield< FieldValue >::do_process_event const FieldValue &  value,
double  timestamp
throw (std::bad_alloc) [inline, private, virtual]
 

Process an event.

This function performs the following steps:

  1. set the exposedField value.
  2. call exposedfield<FieldValue>::event_side_effect.
  3. set the modified flag.
  4. emit the event.

Warning:
This function should not be overridden by subclasses. Subclasses should override exposedfield<FieldValue>::event_side_effect instead.
Parameters:
value new value.
timestamp the current time.
Exceptions:
std::bad_alloc if memory allocation fails.

Implements openvrml::field_value_listener< FieldValue >.

template<typename FieldValue>
void openvrml::exposedfield< FieldValue >::event_side_effect const FieldValue &  value,
double  timestamp
throw (std::bad_alloc) [inline, private, virtual]
 

Called by exposedfield<FieldValue>::do_process_event.

Subclasses should override this method to implement event handling functionality specific to a particular exposedField. The default implementation of this function does nothing.

Parameters:
value new value.
timestamp the current time.
Exceptions:
std::bad_alloc if memory allocation fails.

Reimplemented in openvrml::vrml97_node::group_node::children_exposedfield, openvrml::vrml97_node::background_node::back_url_exposedfield, openvrml::vrml97_node::background_node::bottom_url_exposedfield, openvrml::vrml97_node::background_node::front_url_exposedfield, openvrml::vrml97_node::background_node::left_url_exposedfield, openvrml::vrml97_node::background_node::right_url_exposedfield, openvrml::vrml97_node::background_node::top_url_exposedfield, openvrml::vrml97_node::text_node::string_exposedfield, openvrml::vrml97_node::transform_node::center_exposedfield, openvrml::vrml97_node::transform_node::scale_orientation_exposedfield, openvrml::vrml97_node::transform_node::translation_exposedfield, openvrml::vrml97_node::viewpoint_node::orientation_exposedfield, and openvrml::vrml97_node::viewpoint_node::position_exposedfield.