SoWx  0.1.0
Coin3D GUI toolkit binding
Loading...
Searching...
No Matches
SoWx Class Reference

The SoWx class takes care of Wx initialization and event dispatching. More...

#include <Inventor/Wx/SoWx.h>

Public Types

enum  ABIType { DLL , LIB , UNKNOWN }
 
typedef void FatalErrorCB(const SbString errmsg, SoWx::FatalErrors errcode, void *userdata)
 
enum  FatalErrors { UNSPECIFIED_ERROR = 0 , NO_OPENGL_CANVAS , INTERNAL_ASSERT }
 

Static Public Member Functions

static void createSimpleErrorDialog (wxWindow *widget, const char *title, const char *string1, const char *string2=NULL)
 
static void done (void)
 
static void exitMainLoop (void)
 
static ABIType getABIType (void)
 
static wxWindow * getShellWidget (const wxWindow *w)
 
static wxWindow * getTopLevelWidget (void)
 
static void getVersionInfo (int *major=NULL, int *minor=NULL, int *micro=NULL)
 
static const char * getVersionString (void)
 
static const char * getVersionToolkitString (void)
 
static SbVec2s getWidgetSize (const wxWindow *widget)
 
static void hide (wxWindow *const widget)
 
static wxWindow * init (const char *appname, const char *classname="SoWx")
 
static wxWindow * init (int &argc, char **argv, const char *appname, const char *classname="SoWx")
 
static void init (wxWindow *toplevelwidget)
 
static SbBool isCompatible (unsigned int major, unsigned int minor)
 
static SbBool isDebugLibrary (void)
 
static void lockGL (void)
 
static void mainLoop (void)
 mainLoop is required only if an external app is not available (embedded in already existing window).
 
static FatalErrorCBsetFatalErrorHandler (SoWx::FatalErrorCB *cb, void *userdata)
 
static void setWidgetSize (wxWindow *const widget, const SbVec2s size)
 
static void show (wxWindow *const widget)
 
static void unlockGL (void)
 

Detailed Description

The SoWx class takes care of Wx initialization and event dispatching.

This is the "application-wide" class with solely static methods handling initialization and event processing tasks. You must use this class in any application built on top of the SoWx library.

Typical usage is as follows (complete application code):

#include <Inventor/Wx/SoWx.h>
#include <Inventor/Wx/viewers/SoWxExaminerViewer.h>
#include <Inventor/nodes/SoBaseColor.h>
#include <Inventor/nodes/SoCone.h>
#include <Inventor/nodes/SoSeparator.h>
int
main(int argc, char ** argv)
{
// Initialize SoWx and Inventor API libraries. This returns a main
// window to use.
wxWindow* mainwin = SoWx::init(argc, argv, argv[0]);
// Make a dead simple scene graph, only containing a single
// yellow cone under the scene graph root.
SoSeparator * root = new SoSeparator;
root->ref();
SoBaseColor * col = new SoBaseColor;
col->rgb = SbColor(1, 1, 0);
root->addChild(col);
root->addChild(new SoCone);
// Use one of the convenient viewer classes.
SoWxExaminerViewer * eviewer = new SoWxExaminerViewer(mainwin);
eviewer->setSceneGraph(root);
eviewer->show();
// Pop up the main window.
SoWx::show(mainwin);
// Loop until exit.
// Clean up resources.
delete eviewer;
root->unref();
return 0;
}
virtual void show(void)
Definition SoWxComponent.cpp:183
The SoWxExaminerViewer class is a 3D-model examination viewer.
Definition SoWxExaminerViewer.h:50
virtual void setSceneGraph(SoNode *root)
Definition SoWxViewer.cpp:2841
static void done(void)
Definition SoWx.cpp:156
static wxWindow * init(const char *appname, const char *classname="SoWx")
Definition SoWxCommon.cpp:173
static void mainLoop(void)
mainLoop is required only if an external app is not available (embedded in already existing window).
Definition SoWx.cpp:145

And voila:

See also
SoWxComponent

Member Typedef Documentation

◆ FatalErrorCB

void SoWx::FatalErrorCB

An application function callback for handling fatal errors should be of this type.

The first argument is an error message in English describing the details of the error. The second argument is an error code used so the application can identify specific conditions. The third argument is the userdata pointer passed in to SoWx::setFatalErrorHandler().

Member Enumeration Documentation

◆ ABIType

Numerical identifiers to identify how the library was built.

Enumerator
DLL 

The SoWx library was built as a dynamic link library (aka "shared library").

LIB 

The SoWx library was built as a static library.

UNKNOWN 

The SoWx introspection mechanisms cannot decide how the library was built.

◆ FatalErrors

Numerical identifiers for classifying the different kinds of possible fatal errors.

Enumerator
UNSPECIFIED_ERROR 

Signifies that we were not able to specify in any greater detail the error condition that came up.

NO_OPENGL_CANVAS 

Could not construct any valid OpenGL canvas. Something is very wrong on the client system.

INTERNAL_ASSERT 

An internal error condition that should never happen was detected. The most likely cause of this are programming errors within the SoWx library itself.

Member Function Documentation

◆ createSimpleErrorDialog()

void SoWx::createSimpleErrorDialog ( wxWindow * widget,
const char * title,
const char * string1,
const char * string2 = NULL )
static

This is a convenient way for the application programmer to throw up an obtrusive application-global error dialog.

If widget is NULL, the dialog will be modal for the whole application (all windows will be blocked for input). If not, only the window for the given widget will be blocked.

title is the title of the dialog box. string1 and string2 contains the text which will be shown in the dialog box.

There will only be a single "OK" button for the user to press and continue with the application.

◆ done()

void SoWx::done ( void )
static

Cleans up all static data allocated by the SoWx library on initialization.

This functions calls SoDB::finish() which means that no Coin classes should be used after it has been called.

It should never be invoked more than once, and that is just before application exit, as it deallocates static data allocated as "one-off" operations in SoWx::init().

NOTE: done() is not present in the original API for SGI's InventorXt library.

◆ exitMainLoop()

void SoWx::exitMainLoop ( void )
static

This function will make the main event loop finish looping.

NOTE: exitMainLoop() is not present in the original API for SGI's InventorXt library.

◆ getABIType()

SoWx::ABIType SoWx::getABIType ( void )
static

Returns an indication on how the library was compiled: as a dynamic library, or as a static library.

This method was not part of the original SGI InventorXt library, but is an extension specific to the Coin project.

◆ getTopLevelWidget()

wxWindow * SoWx::getTopLevelWidget ( void )
static

Returns the wxWindow* which is the main widget for the application. When this widget gets closed, SoWx::mainLoop() will return (unless the close event is caught by the user).

See also
getShellWidget()

◆ getVersionInfo()

void SoWx::getVersionInfo ( int * major = NULL,
int * minor = NULL,
int * micro = NULL )
static

This method will fill in the integers pointed to by the arguments with the corresponding part of the version release number of the SoWx library.

A NULL pointer will make that part of the version number be ignored.

This method is not part of the original InventorXt API from SGI.

◆ getVersionString()

const char * SoWx::getVersionString ( void )
static

This method returns a string containing the version id of the library.

This method is not part of the original InventorXt API from SGI.

◆ getVersionToolkitString()

const char * SoWx::getVersionToolkitString ( void )
static

This method returns a string containing the version id of the Wx toolkit the SoWx library is linked against.

This method is not part of the original InventorXt API from SGI.

◆ init() [1/3]

wxWindow * SoWx::init ( const char * appname,
const char * classname = "SoWx" )
static

This function initializes the SoWx library, as well as the Inventor API. The latter is done by calling SoDB::init(), SoNodeKit::init() and SoInteraction::init().

The returned wxWindow* is a top level shell widget for the application, which can be used as a shell for the main component.

This method is provided for easier porting / compatibility with the original SGI Inventor InventorXt library. It just adds dummy argc and argv arguments and calls the SoWx::init() method below.

◆ init() [2/3]

wxWindow * SoWx::init ( int & argc,
char ** argv,
const char * appname,
const char * classname = "SoWx" )
static

This function initializes the SoWx library, as well as the Inventor API. The latter is done by calling SoDB::init(), SoNodeKit::init() and SoInteraction::init().

Creates an application framework and constructs and returns a main widget for you.

The returned wxWindow* is a top level shell widget for the application, which can be used as a shell for the main component.

◆ init() [3/3]

void SoWx::init ( wxWindow * toplevelwidget)
static

This function initializes the SoWx library, as well as the Inventor API. The latter is done by calling SoDB::init(), SoNodeKit::init() and SoInteraction::init().

Assumes you are creating your own application framework and main widget. toplevelwidget should be your application's main widget.

◆ isCompatible()

SbBool SoWx::isCompatible ( unsigned int major,
unsigned int minor )
static

Returns TRUE if this version of the SoWx library has an Application Binary Interface compatible with the given version.

This method was not part of the original SGI InventorXt library, but is an extension specific to the Coin project.

◆ isDebugLibrary()

SbBool SoWx::isDebugLibrary ( void )
static

Returns TRUE if this binary version of the SoWx library was compiled with debug settings on.

This method was not part of the original SGI InventorXt library, but is an extension specific to the Coin project.

◆ lockGL()

void SoWx::lockGL ( void )
static

This method locks other threads out from a code section until the caller thread invokes SoWx::unlockGL().

It is meant to protect several threads invoking OpenGL calls in parallel, in case the underlying OpenGL implementation is not multi-thread safe.

For convenience, the function can be invoked through the SOWX_ENTER_GL_SECTION().

This method is not part of the original InventorXt API from SGI.

◆ mainLoop()

void SoWx::mainLoop ( void )
static

mainLoop is required only if an external app is not available (embedded in already existing window).

This is the event dispatch loop.

It doesn't return until application exit is somehow forced, either programmatically from the relevant API-call of the native toolkit, or when the user closes the application's main widget.

After the main loop has finished execution, call SoWx::done() to clean up static data.

◆ setFatalErrorHandler()

SoWx::FatalErrorCB * SoWx::setFatalErrorHandler ( SoWx::FatalErrorCB * cb,
void * userdata )
static

Set up a callback to be invoked in the case of unexpected fatal error conditions within the SoWx library.

Almost any error condition within the library is handled in a robust way through return values indicating errors for the offending calls, but there are a few cases that are impossible to handle without seriously crippling the functionality.

(One example is if we fail to find any way of making a valid OpenGL canvas. This is an indication that something is seriously wrong on the end-user's system, and the SoWx library will not work properly.)

In the case of a fatal error, it is expected that the given application callback function communicates the problem to the end-user and then either exits the application or at least refrains from using any part of the SoWx library.

If no callback is explicitly set up by the application, the SoWx library will display an error message to the end-user and then exit the application.

When setting a callback, this method returns a pointer to the previous callback function, or NULL if none.

(This is an extension versus the original SGI InventorXt library API.)

On a related note, be aware that the end-user will still be notified about non-fatal errors and warning messages through a dialog box. If you want to handle these yourself, or if you don't want your end-user to see any of these non-critical messages, you will also need to install an error handler callback function on the Coin library itself:

SoDebugError::setHandlerCallback(myErrorHandlerCB, myCBUserData);

(Please also see the documentation of SoDebugError::setHandlerCallback().)

◆ unlockGL()

void SoWx::unlockGL ( void )
static

See documentation for SoWx::lockGL().

For convenience, the function can be invoked through the SOWX_LEAVE_GL_SECTION().

This method is not part of the original InventorXt API from SGI.


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