Home | Download | Screen shots | Discussion | Documentation
--- | --- | --- | --- | ---

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 >:

[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.