Coin Logo Coin3D is Free Software,
published under the BSD 3-clause license.
SoEventCallback Class Reference

The SoEventCallback class provides functionality for catching events. More...

#include <Inventor/nodes/SoEventCallback.h>

Inheritance diagram for SoEventCallback:
SoNode SoFieldContainer SoBase

Public Member Functions

virtual SoType getTypeId (void) const
 Returns the type identification of an object derived from a class inheriting SoBase. This is used for runtime type checking and "downward" casting. More...
 SoEventCallback (void)
void setPath (SoPath *path)
const SoPathgetPath (void)
void addEventCallback (SoType eventtype, SoEventCallbackCB *f, void *userdata=NULL)
void removeEventCallback (SoType eventtype, SoEventCallbackCB *f, void *userdata=NULL)
SoHandleEventActiongetAction (void) const
const SoEventgetEvent (void) const
const SoPickedPointgetPickedPoint (void) const
void setHandled (void)
SbBool isHandled (void) const
void grabEvents (void)
void releaseEvents (void)
- Public Member Functions inherited from SoNode
void setOverride (const SbBool state)
SbBool isOverride (void) const
void setNodeType (const NodeType type)
NodeType getNodeType (void) const
virtual SoNodecopy (SbBool copyconnections=FALSE) const
virtual SbBool affectsState (void) const
virtual void doAction (SoAction *action)
virtual void GLRender (SoGLRenderAction *action)
virtual void GLRenderBelowPath (SoGLRenderAction *action)
virtual void GLRenderInPath (SoGLRenderAction *action)
virtual void GLRenderOffPath (SoGLRenderAction *action)
virtual void callback (SoCallbackAction *action)
virtual void getBoundingBox (SoGetBoundingBoxAction *action)
virtual void getMatrix (SoGetMatrixAction *action)
virtual void pick (SoPickAction *action)
virtual void rayPick (SoRayPickAction *action)
virtual void search (SoSearchAction *action)
virtual void write (SoWriteAction *action)
virtual void audioRender (SoAudioRenderAction *action)
virtual void getPrimitiveCount (SoGetPrimitiveCountAction *action)
virtual void grabEventsSetup (void)
virtual void grabEventsCleanup (void)
virtual void startNotify (void)
virtual void notify (SoNotList *l)
SbUniqueId getNodeId (void) const
virtual SoChildListgetChildren (void) const
virtual void writeInstance (SoOutput *out)
virtual SoNodeaddToCopyDict (void) const
virtual void copyContents (const SoFieldContainer *from, SbBool copyconnections)
virtual SoFieldContainercopyThroughConnection (void) const
- Public Member Functions inherited from SoFieldContainer
void setToDefaults (void)
SbBool hasDefaultValues (void) const
SbBool fieldsAreEqual (const SoFieldContainer *container) const
void copyFieldValues (const SoFieldContainer *container, SbBool copyconnections=FALSE)
SbBool set (const char *const fielddata)
void get (SbString &fielddata)
virtual int getFields (SoFieldList &l) const
virtual int getAllFields (SoFieldList &l) const
virtual SoFieldgetField (const SbName &name) const
virtual SoFieldgetEventIn (const SbName &name) const
virtual SoFieldgetEventOut (const SbName &name) const
SbBool getFieldName (const SoField *const field, SbName &name) const
SbBool enableNotify (const SbBool flag)
SbBool isNotifyEnabled (void) const
SbBool set (const char *fielddata, SoInput *input)
void get (SbString &fielddata, SoOutput *out)
virtual SbBool validateNewFieldValue (SoField *field, void *newval)
virtual void addWriteReference (SoOutput *out, SbBool isfromfield=FALSE)
SbBool getIsBuiltIn (void) const
virtual void getFieldsMemorySize (size_t &managed, size_t &unmanaged) const
void setUserData (void *userdata) const
void * getUserData (void) const
- Public Member Functions inherited from SoBase
void ref (void) const
void unref (void) const
void unrefNoDelete (void) const
int32_t getRefCount (void) const
void touch (void)
SbBool isOfType (SoType type) const
 Returns TRUE if the type of this object is either of the same type or inherited from type. More...
virtual SbName getName (void) const
virtual void setName (const SbName &newname)
void addAuditor (void *const auditor, const SoNotRec::Type type)
void removeAuditor (void *const auditor, const SoNotRec::Type type)
const SoAuditorListgetAuditors (void) const
SbBool shouldWrite (void)
void assertAlive (void) const

Static Public Member Functions

static SoType getClassTypeId (void)
static void initClass (void)
- Static Public Member Functions inherited from SoNode
static uint32_t getCompatibilityTypes (const SoType &nodetype)
static SoType getClassTypeId (void)
static SoNodegetByName (const SbName &name)
static int getByName (const SbName &name, SoNodeList &l)
static void initClass (void)
static void initClasses (void)
static SbUniqueId getNextNodeId (void)
static int getActionMethodIndex (const SoType type)
static void getBoundingBoxS (SoAction *action, SoNode *node)
static void GLRenderS (SoAction *action, SoNode *node)
static void callbackS (SoAction *action, SoNode *node)
static void getMatrixS (SoAction *action, SoNode *node)
static void handleEventS (SoAction *action, SoNode *node)
static void pickS (SoAction *action, SoNode *node)
static void rayPickS (SoAction *action, SoNode *node)
static void searchS (SoAction *action, SoNode *node)
static void writeS (SoAction *action, SoNode *node)
static void audioRenderS (SoAction *action, SoNode *node)
static void getPrimitiveCountS (SoAction *action, SoNode *node)
- Static Public Member Functions inherited from SoFieldContainer
static void initClass (void)
static SoType getClassTypeId (void)
static void cleanupClass (void)
static void initCopyDict (void)
static void addCopy (const SoFieldContainer *orig, const SoFieldContainer *copy)
static SoFieldContainercheckCopy (const SoFieldContainer *orig)
static SoFieldContainerfindCopy (const SoFieldContainer *orig, const SbBool copyconnections)
static void copyDone (void)
- Static Public Member Functions inherited from SoBase
static void initClass (void)
 Sets up initialization for data common to all instances of this class, like submitting necessary information to the Coin type system.
static SoType getClassTypeId (void)
 This static method returns the SoType object associated with objects of this class.
static void addName (SoBase *const base, const char *const name)
static void removeName (SoBase *const base, const char *const name)
static void incrementCurrentWriteCounter (void)
static void decrementCurrentWriteCounter (void)
static SoBasegetNamedBase (const SbName &name, SoType type)
static int getNamedBases (const SbName &name, SoBaseList &baselist, SoType type)
static SbBool read (SoInput *input, SoBase *&base, SoType expectedtype)
static void setInstancePrefix (const SbString &c)
static void setTraceRefs (SbBool trace)
static SbBool getTraceRefs (void)
static SbBool connectRoute (SoInput *input, const SbName &fromnodename, const SbName &fromfieldname, const SbName &tonodename, const SbName &tofieldname)
static SbBool readRoute (SoInput *input)

Protected Member Functions

virtual const SoFieldDatagetFieldData (void) const
virtual ~SoEventCallback ()
virtual void handleEvent (SoHandleEventAction *action)
- Protected Member Functions inherited from SoNode
 SoNode (void)
virtual ~SoNode ()
virtual SbBool readInstance (SoInput *in, unsigned short flags)
- Protected Member Functions inherited from SoFieldContainer
 SoFieldContainer (void)
virtual ~SoFieldContainer ()
- Protected Member Functions inherited from SoBase
 SoBase (void)
virtual ~SoBase ()
virtual void destroy (void)
SbBool hasMultipleWriteRefs (void) const
SbBool writeHeader (SoOutput *out, SbBool isgroup, SbBool isengine) const
void writeFooter (SoOutput *out) const
virtual const char * getFileFormatName (void) const
virtual SoNotRec createNotRec (void)

Static Protected Member Functions

static const SoFieldData ** getFieldDataPtr (void)
- Static Protected Member Functions inherited from SoNode
static const SoFieldData ** getFieldDataPtr (void)
static void setNextActionMethodIndex (int index)
static int getNextActionMethodIndex (void)
static void incNextActionMethodIndex (void)
static void setCompatibilityTypes (const SoType &nodetype, const uint32_t bitmask)
- Static Protected Member Functions inherited from SoBase
static uint32_t getCurrentWriteCounter (void)
static void staticDataLock (void)
static void staticDataUnlock (void)

Additional Inherited Members

- Public Types inherited from SoNode
enum  NodeType {
  INVENTOR = 0x0000, VRML1 = 0x0001, VRML2 = 0x0002, INVENTOR_1 = 0x0004,
  INVENTOR_2_0 = 0x0008, INVENTOR_2_1 = 0x0010, INVENTOR_2_5 = 0x0020, INVENTOR_2_6 = 0x0040,
  COIN_1_0 = 0x0080, COIN_2_0 = 0x0100, EXTENSION = 0x0200, COIN_2_2 = 0x0400,
  COIN_2_3 = 0x0800, COIN_2_4 = 0x1000, INVENTOR_5_0 = 0x2000, COIN_2_5 = 0x4000,
  COIN_3_0 = 0x8000, INVENTOR_6_0 = 0x10000, COIN_4_0 = 0x20000
- Protected Types inherited from SoBase
enum  BaseFlags { IS_ENGINE = 0x01, IS_GROUP = 0x02 }
- Protected Attributes inherited from SoNode
SbUniqueId uniqueId
- Protected Attributes inherited from SoFieldContainer
SbBool isBuiltIn
- Static Protected Attributes inherited from SoNode
static SbUniqueId nextUniqueId = 1
static int nextActionMethodIndex = 0

Detailed Description

The SoEventCallback class provides functionality for catching events.

Use SoEventCallback nodes in the scene graph for catching user interaction events with the scene graph's render canvas.

This is how event handling works in Coin: when the user interacts with the render canvas, for instance by using the mouse pointer or by hitting the keyboard, the GUI interface toolkit (i.e. SoQt, SoWin, SoXt, Sc21 ...) will catch the event and translate it from a window system specific event to a generic Coin event. (For the types of generic Coin events, see the classes derived from SoEvent.) This event will then be wrapped inside a SoHandleEventAction and applied to the scene graph. All this happens within the So[Qt|Xt|Win|...] toolkit.

The SoHandleEventAction then traverses the scene graph, delivering the event to any node type which "is interested" in it. The SoEventCallback node type catches the action and forwards the event to a callback function set up by the application programmer.

Be careful about which position in the scene graph you insert SoEventCallback nodes if you are also using any of the built-in Coin library elements which are interested in user interaction events (like for instance the dragger and manipulator classes and the SoSelection nodes). These Coin elements might catch the event for themselves, short-circuiting the SoHandleEventAction traversal so the event will never reach the SoEventCallback node(s) you insert.


EventCallback {

Constructor & Destructor Documentation

◆ SoEventCallback()

SoEventCallback::SoEventCallback ( void  )


◆ ~SoEventCallback()

SoEventCallback::~SoEventCallback ( )


Member Function Documentation

◆ getTypeId()

SoType SoEventCallback::getTypeId ( void  ) const

Returns the type identification of an object derived from a class inheriting SoBase. This is used for runtime type checking and "downward" casting.

Usage example:

void foo(SoNode * node)
if (node->getTypeId() == SoFile::getClassTypeId()) {
SoFile * filenode = (SoFile *)node; // safe downward cast, knows the type

For application programmers wanting to extend the library with new nodes, engines, nodekits, draggers or others: this method needs to be overridden in all subclasses. This is typically done as part of setting up the full type system for extension classes, which is usually accomplished by using the predefined macros available through for instance Inventor/nodes/SoSubNode.h (SO_NODE_INIT_CLASS and SO_NODE_CONSTRUCTOR for node classes), Inventor/engines/SoSubEngine.h (for engine classes) and so on.

For more information on writing Coin extensions, see the class documentation of the top level superclasses for the various class groups.

Implements SoBase.

◆ getFieldData()

const SoFieldData * SoEventCallback::getFieldData ( void  ) const

Returns a pointer to the class-wide field data storage object for this instance. If no fields are present, returns NULL.

Reimplemented from SoFieldContainer.

◆ setPath()

void SoEventCallback::setPath ( SoPath pathptr)

Sets the path that must be picked before the registered callbacks are invoked. If NULL, callbacks will be invoked for every event that matches the callback event type.

See also

◆ getPath()

const SoPath * SoEventCallback::getPath ( void  )

Returns the path that must be picked before callbacks are invoked.

See also

◆ addEventCallback()

void SoEventCallback::addEventCallback ( SoType  eventtype,
SoEventCallbackCB f,
void *  userdata = NULL 

Set up a callback function f which will be invoked for the given eventtype. userdata will be given as the first argument to the function.

◆ removeEventCallback()

void SoEventCallback::removeEventCallback ( SoType  eventtype,
SoEventCallbackCB f,
void *  userdata = NULL 

Unregister the given callback function f.

◆ getAction()

SoHandleEventAction * SoEventCallback::getAction ( void  ) const

Returns the SoHandleEventAction instance currently traversing the scene graph with the SoEvent-derived event object.

◆ getEvent()

const SoEvent * SoEventCallback::getEvent ( void  ) const

Returns a pointer to the event object which is currently being sent through the scene graph.

If your application code handles the event, you probably want to call SoEventCallback::setHandled() to notify the SoHandleEventAction that it should stop traversing the scene graph with the event.

◆ getPickedPoint()

const SoPickedPoint * SoEventCallback::getPickedPoint ( void  ) const

Returns the picked point for the current handle event traversal.

This is obviously only related to events which can be considered "pick-style" events, like mouse button presses.

◆ setHandled()

void SoEventCallback::setHandled ( void  )

Use this method from a callback function to notify the node that the event has been handled.

The rest of the callbacks registered with the node will still be called, but further SoEventCallback nodes in the scene will not be notified about the event, neither will any other Coin elements in the scene graph (like for instance SoDragger objects, SoSelection nodes or manipulators).

Since callbacks registered within the same SoEventCallback node will still be invoked after the event has been handled, it is likely that you should use SoEventCallback::isHandled() to check for this condition from your callback functions.

◆ isHandled()

SbBool SoEventCallback::isHandled ( void  ) const

Check whether or not the event from the SoHandleEventAction has been handled.

◆ grabEvents()

void SoEventCallback::grabEvents ( void  )

Set up the node so all future events (until releaseEvents() is called) in Coin will be directly forwarded to this node.

◆ releaseEvents()

void SoEventCallback::releaseEvents ( void  )

Do not grab event handling any more.

See also

◆ handleEvent()

void SoEventCallback::handleEvent ( SoHandleEventAction action)

Invokes the registered callback functions.

Reimplemented from SoNode.

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