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

openvrml::script_node Class Reference

Inheritance diagram for openvrml::script_node:

Inheritance graph
[legend]
List of all members.

Detailed Description

Represents a VRML Script node.


Public Types

typedef std::map< std::string,
field_value_ptr
field_value_map_t
 A std::map that keys field values on their field name.
typedef boost::shared_ptr<
eventout
eventout_ptr
 Reference-counted smart pointer to an eventout.
typedef std::map< std::string,
eventout_ptr
eventout_map_t
 Map of eventout instances.

Public Member Functions

 script_node (script_node_class &class_, const boost::shared_ptr< openvrml::scope > &scope, const node_interface_set &interfaces, const initial_value_map &initial_values) throw (unsupported_interface, std::bad_cast, std::bad_alloc, std::invalid_argument)
 Construct.
virtual ~script_node () throw ()
 Destroy.
void update (double current_time)
 Update the script_node for the current time.
const field_value_map_tfield_value_map () const throw ()
 field value map.
const eventout_map_teventout_map () const throw ()
 eventOut map.

Private Types

typedef script_event_listener<
sfbool
sfbool_listener
 sfbool event listener.
typedef script_event_listener<
sfcolor
sfcolor_listener
 sfcolor event listener.
typedef script_event_listener<
sffloat
sffloat_listener
 sffloat event listener.
typedef script_event_listener<
sfimage
sfimage_listener
 sfimage event listener.
typedef script_event_listener<
sfint32
sfint32_listener
 sfint32 event listener.
typedef script_event_listener<
sfnode
sfnode_listener
 sfnode event listener.
typedef script_event_listener<
sfrotation
sfrotation_listener
 sfrotation event listener.
typedef script_event_listener<
sfstring
sfstring_listener
 sfstring event listener.
typedef script_event_listener<
sftime
sftime_listener
 sftime event listener.
typedef script_event_listener<
sfvec2f
sfvec2f_listener
 sfvec2f event listener.
typedef script_event_listener<
sfvec3f
sfvec3f_listener
 sfvec3f event listener.
typedef script_event_listener<
mfcolor
mfcolor_listener
 mfcolor event listener.
typedef script_event_listener<
mffloat
mffloat_listener
 mffloat event listener.
typedef script_event_listener<
mfint32
mfint32_listener
 mfint32 event listener.
typedef script_event_listener<
mfnode
mfnode_listener
 mfnode event listener.
typedef script_event_listener<
mfrotation
mfrotation_listener
 mfrotation event listener.
typedef script_event_listener<
mfstring
mfstring_listener
 mfstring event listener.
typedef script_event_listener<
mftime
mftime_listener
 mftime event listener.
typedef script_event_listener<
mfvec2f
mfvec2f_listener
 mfvec2f event listener.
typedef script_event_listener<
mfvec3f
mfvec3f_listener
 mfvec3f event listener.
typedef boost::shared_ptr<
openvrml::event_listener
event_listener_ptr
 Reference-counted smart pointer to an event_listener.
typedef std::map< std::string,
event_listener_ptr
event_listener_map_t
 Map of event listeners.

Private Member Functions

scriptcreate_script ()
 Create a script object.
void assign_with_self_ref_check (const sfnode &, sfnode &) const throw ()
 Special assignment function to take into account the fact that Script nodes can be self referential.
void assign_with_self_ref_check (const mfnode &, mfnode &) const throw ()
 Special assignment function to take into account the fact that Script nodes can be self referential.
virtual script_nodeto_script () throw ()
 Return a pointer to this script_node.
virtual void do_initialize (double timestamp) throw (std::bad_alloc)
 Initialize.
virtual const field_valuedo_field (const std::string &id) const throw (unsupported_interface)
 Get the value of a field.
virtual openvrml::event_listenerdo_event_listener (const std::string &id) throw (unsupported_interface)
 Get an event listener.
virtual openvrml::event_emitterdo_event_emitter (const std::string &id) throw (unsupported_interface)
 Get an event emitter.
virtual void do_shutdown (double timestamp) throw ()
 Called by node::shutdown.
virtual void do_render_child (viewer &v, rendering_context context)
 render_child implementation.

Static Private Member Functions

static const boost::shared_ptr<
openvrml::event_listener
create_listener (field_value::type_id type, const std::string &id, script_node &node) throw (std::bad_alloc)
 Create a Script node event listener.

Private Attributes

script_node_type type
 Type object for the script_node instance.
sfbool direct_output
 directOutput field.
sfbool must_evaluate
 mustEvaluate field.
set_url_listener_t set_url_listener
 set_url eventIn handler.
mfstring url_
 url exposedField.
mfstring_emitter url_changed_emitter
 url_changed eventOut emitter.
field_value_map_t field_value_map_
 Maps user-defined field names to their values.
event_listener_map_t event_listener_map
 Map of event listeners.
eventout_map_t eventout_map_
 Map of eventout instances.
scriptscript_
 A pointer to a script object.
int events_received
 A count of the number of events received since script_node::update was called.

Friends

class script
 Abstract base class for script runtimes.

Classes

class  eventout
 An event_emitter along with the emitted value. More...
class  script_event_listener
 Event listener. More...
class  script_node_type
 Type objects for script_nodes. More...
class  set_url_listener_t
 set_url event listener. More...

Member Typedef Documentation

openvrml::script_node::field_value_map_t
 

A std::map that keys field values on their field name.

openvrml::script_node::eventout_ptr
 

Reference-counted smart pointer to an eventout.

openvrml::script_node::eventout_map_t
 

Map of eventout instances.

openvrml::script_node::sfbool_listener [private]
 

sfbool event listener.

For internal use only.

openvrml::script_node::sfcolor_listener [private]
 

sfcolor event listener.

For internal use only.

openvrml::script_node::sffloat_listener [private]
 

sffloat event listener.

For internal use only.

openvrml::script_node::sfimage_listener [private]
 

sfimage event listener.

For internal use only.

openvrml::script_node::sfint32_listener [private]
 

sfint32 event listener.

For internal use only.

openvrml::script_node::sfnode_listener [private]
 

sfnode event listener.

For internal use only.

openvrml::script_node::sfrotation_listener [private]
 

sfrotation event listener.

For internal use only.

openvrml::script_node::sfstring_listener [private]
 

sfstring event listener.

For internal use only.

openvrml::script_node::sftime_listener [private]
 

sftime event listener.

For internal use only.

openvrml::script_node::sfvec2f_listener [private]
 

sfvec2f event listener.

For internal use only.

openvrml::script_node::sfvec3f_listener [private]
 

sfvec3f event listener.

For internal use only.

openvrml::script_node::mfcolor_listener [private]
 

mfcolor event listener.

For internal use only.

openvrml::script_node::mffloat_listener [private]
 

mffloat event listener.

For internal use only.

openvrml::script_node::mfint32_listener [private]
 

mfint32 event listener.

For internal use only.

openvrml::script_node::mfnode_listener [private]
 

mfnode event listener.

For internal use only.

openvrml::script_node::mfrotation_listener [private]
 

mfrotation event listener.

For internal use only.

openvrml::script_node::mfstring_listener [private]
 

mfstring event listener.

For internal use only.

openvrml::script_node::mftime_listener [private]
 

mftime event listener.

For internal use only.

openvrml::script_node::mfvec2f_listener [private]
 

mfvec2f event listener.

For internal use only.

openvrml::script_node::mfvec3f_listener [private]
 

mfvec3f event listener.

For internal use only.

openvrml::script_node::event_listener_ptr [private]
 

Reference-counted smart pointer to an event_listener.

For internal use only.

openvrml::script_node::event_listener_map_t [private]
 

Map of event listeners.

For internal use only.


Constructor & Destructor Documentation

openvrml::script_node::script_node script_node_class class_,
const boost::shared_ptr< openvrml::scope > &  scope,
const node_interface_set interfaces,
const initial_value_map initial_values
throw (unsupported_interface, std::bad_cast, std::bad_alloc, std::invalid_argument)
 

Construct.

Unlike other concrete node types, which are always instantiated via node_type::create_node, the script_node constructor is called directly when creating a new script_node from scratch. However, a script_node can be duplicated (or "cloned") by calling node_type::create_node on script_node::type of a script_node instance. This provides a consistent interface for cloning any node, regardless of its type. OpenVRML uses this internally when instantiating PROTOs.

Parameters:
class_ the script_node_class. Typically there is one script_node_class per browser instance.
scope the scope to which the node should belong.
interfaces a node_interface_set containing specifications of user-defined fields, eventIns, and eventOuts particular to the script_node instance.
initial_values a map of initial values for fields of the script_node.
Exceptions:
unsupported_interface if initial_values specifies a field that is not supported by the script_node.
std::bad_cast if initial_values includes a field value that is the wrong type for the specified field.
std::bad_alloc if memory allocation fails.
std::invalid_argument if:
  • interfaces includes an exposedField specification.
  • interfaces includes an interface specification that duplicates an existing Script node interface.
  • initial_values is missing an initial value for a user-defined field in interfaces.

openvrml::script_node::~script_node  )  throw () [virtual]
 

Destroy.


Member Function Documentation

const boost::shared_ptr< event_listener > openvrml::script_node::create_listener field_value::type_id  type,
const std::string &  id,
script_node node
throw (std::bad_alloc) [static, private]
 

Create a Script node event listener.

For internal use only.

Parameters:
type the type of listener to create.
id eventIn identifier.
node the containing script_node.
Returns:
a Script node event listener.
Exceptions:
std::bad_alloc if memory allocation fails.

void openvrml::script_node::update double  current_time  ) 
 

Update the script_node for the current time.

Parameters:
current_time the current time.

const script_node::field_value_map_t & openvrml::script_node::field_value_map  )  const throw () [inline]
 

field value map.

Returns:
the field value map.

const script_node::eventout_map_t & openvrml::script_node::eventout_map  )  const throw () [inline]
 

eventOut map.

Returns:
the eventOut map.

script * openvrml::script_node::create_script  )  [private]
 

Create a script object.

For internal use only.

Returns:
a new script object.

void openvrml::script_node::assign_with_self_ref_check const sfnode inval,
sfnode retval
const throw () [private]
 

Special assignment function to take into account the fact that Script nodes can be self referential.

For internal use only.

"Undo" the refcounting appropriately: decrement the refcount on any self-references we acquire ownership of, and increment the refcount on any self-references for which ownership is relinquished.

Parameters:
inval input sfnode.
Return values:
retval output sfnode.

void openvrml::script_node::assign_with_self_ref_check const mfnode inval,
mfnode retval
const throw () [private]
 

Special assignment function to take into account the fact that Script nodes can be self referential.

For internal use only.

"Undo" the refcounting appropriately: decrement the refcount on any self-references we acquire ownership of, and increment the refcount on any self-references for which ownership is relinquished.

Parameters:
inval input mfnode.
Return values:
retval output mfnode.

script_node * openvrml::script_node::to_script  )  throw () [private, virtual]
 

Return a pointer to this script_node.

For internal use only.

Returns:
a pointer to this script_node.

Reimplemented from openvrml::node.

void openvrml::script_node::do_initialize double  timestamp  )  throw (std::bad_alloc) [private, virtual]
 

Initialize.

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

Reimplemented from openvrml::node.

const field_value & openvrml::script_node::do_field const std::string &  id  )  const throw (unsupported_interface) [private, virtual]
 

Get the value of a field.

Parameters:
id the name of the field to get.
Returns:
the value for field id.
Exceptions:
unsupported_interface if the node has no field id.

Implements openvrml::node.

event_listener & openvrml::script_node::do_event_listener const std::string &  id  )  throw (unsupported_interface) [private, virtual]
 

Get an event listener.

This method is called by node::event_listener. Subclasses must implement this method.

Parameters:
id eventIn identifier.
Returns:
the event listener.
Exceptions:
unsupported_interface if the node has no eventIn id.

Implements openvrml::node.

event_emitter & openvrml::script_node::do_event_emitter const std::string &  id  )  throw (unsupported_interface) [private, virtual]
 

Get an event emitter.

This method is called by node::event_emitter.

Parameters:
id eventOut identifier.
Returns:
the event emitter.
Exceptions:
unsupported_interface if the node has no eventOut id.

Implements openvrml::node.

void openvrml::script_node::do_shutdown double  timestamp  )  throw () [private, virtual]
 

Called by node::shutdown.

Parameters:
timestamp the current time.

Reimplemented from openvrml::node.

void openvrml::script_node::do_render_child viewer v,
rendering_context  context
[private, virtual]
 

render_child implementation.

Parameters:
v viewer implementation responsible for actually doing the drawing.
context generic context argument; holds things like the accumulated modelview transform.

Reimplemented from openvrml::child_node.


Friends And Related Function Documentation

class openvrml::script_node::script [friend]
 

Abstract base class for script runtimes.


Member Data Documentation

script_node::script_node_type openvrml::script_node::type [private]
 

Type object for the script_node instance.

For internal use only.

Script node node_types are significantly different from other node_types. While most node_types are shared by the node instances they spawn, the script_node_type is unique to a script_node instance, and it shares the script_node's lifetime. This reflects the fact that Script nodes in VRML get their functionality by the addition of fields, eventIns, and eventOuts on a per-instance basis.

For script_node instances, node::node_type is an alias for the script_node_type object.

sfbool openvrml::script_node::direct_output [private]
 

directOutput field.

For internal use only.

sfbool openvrml::script_node::must_evaluate [private]
 

mustEvaluate field.

For internal use only.

script_node::set_url_listener_t openvrml::script_node::set_url_listener [private]
 

set_url eventIn handler.

For internal use only.

mfstring openvrml::script_node::url_ [private]
 

url exposedField.

For internal use only.

mfstring_emitter openvrml::script_node::url_changed_emitter [private]
 

url_changed eventOut emitter.

For internal use only.

script_node::field_value_map_t openvrml::script_node::field_value_map_ [private]
 

Maps user-defined field names to their values.

For internal use only.

script_node::event_listener_map_t openvrml::script_node::event_listener_map [private]
 

Map of event listeners.

For internal use only.

script_node::eventout_map_t openvrml::script_node::eventout_map_ [private]
 

Map of eventout instances.

For internal use only.

script * openvrml::script_node::script_ [private]
 

A pointer to a script object.

For internal use only.

int openvrml::script_node::events_received [private]
 

A count of the number of events received since script_node::update was called.

For internal use only.