Metatronic Remote GUI Display System
VOSGUI and Metatronic are analogous to A3DL and the CrystalSpace A3DL plugin but work with GUI objects rather than 3D graphics. GUI elements such as buttons, listboxes, menus, checkboxes and layout groups are described using Vobjects, and the Metatronic client uses those Vobjects to lay out and display the GUI to the user.
VOSGUI becomes especially powerful when used to provide a GUI to another VOS-based application: GUI components can be wired directly to Vobjects used by the application, and a change made by the user in the Metatronic client immediately and automatically affects the target Vobject. This collaboration is made possible in part by a standard system of property datatype information (which, incidentially, is mostly compatible with XML datatypes). The client-side display will change dynamically if any of the Vobjects describing it change. Widget layout is mostly automatic, based on simple hints from the application. GUI objects can be repeated in the Vobject structure, or you may choose to use a strict hierarchy.
The Metatronic library uses wxWindows to render widgets, making it easily portable to Windows, Linux (with GTK), Mac OSX, and other platforms, while utilizing each platform's natural look and feel. More info about wxWindows can be found at http://www.wxwindows.org
Here's how Vobjects using the VOSGUI metaobject types are turned into concrete GUI widgets by Metatronic and wxWidgets:
|
All objects are grouped in layout containers. The client will automatically lay out widgets based on the container groups and some padding and alignment parameters. Containers may also have borders and titles. |
|
![]() |
Pushbuttons send a simple "pushed" message back to their Vobject. |
|
A label contains the value of a property as static text which the user cannot change (though an input control could target the label's value property). Bitmap images and simple HTML is also supported. |
|
![]() |
An input field targets a property Vobject. When a user enters new text in the input field, the value of the property is changed. A property listener can be used to detect when the text changes. The input field can be single-line or multi-line. |
|
A boolean select - a checkbox - targets a particular property, and sets it to "true" or "false" when a user changes its state. A property listener can be used to detect a change in state. |
|
Numeric inputs are specialized for numbers, displayed either as a "spin control" (for integers) with up/down increments plus an input field, or as a slider (for integers or floating-point numbers). |
|
|
A value selection widget provides a way to select one of a set of values to store in a target property, using a popup menu. A property listener can be used to detect the selection. Choices in the pop up menu are read from a list of property objects; the list may be changed at any time. |
|
|
A color input is specialized for a color, using the platform-standard color selection dialog. Like the normal and numeric inputs, the value of a property is set when a new color is selected. |
|
|
A file input is specialized for setting a property value from the contents of a local file. |
|
|
Menus are simply special containers. Button and boolean select (checkbox) objects within menu container objects are simply placed in a menu, rather than in the window. (So the same button object can be displayed both in the window and also in the menus.) |
|
![]() |
A list selection widget provides a way to select one or more objects from a list. The objects in the list represent Vobjects of any kind: when an object is selected from the "choices" group, a reference to it is placed into the corresponding position in a "selected" group. Vobject listeners can be used to detect selections and deselections, or the "selected" group can be used as a whole. |
|
The tree selection works similarly to the list selection. A tree selection presents a Vobject subtree, allowing the user to select objects, as well as expand and collapse branches. |
|
|
A notebook contains a set of container widgets, and a row of "tabs" to select one to view. |
GUI Status
This project is very much still a work in progress; development has stalled, and we need your help to move it forward!
The VOSGUI abstract Metaobject interface is stable, but no stable client-side implementation exists yet.
The abstract interface includes buttons, inputs, labels, notebooks, selections, and menus. Some more widgets will need to be made in the future, and new features to the existing widgets will be needed (e.g. selection list and tree columns, ways to combine widgets, etc.)
A client-side implementation using wxWidgets was originally developed but is no longer maintained. All of the abstract widgets are implemented, but the display is not stable or reliable, since some threading and event processing issues with wxWidgets are yet to be resolved. Features such as dragging and dropping objects and property would be nice, plus new controls. A VOSGUI/Metatronic based editing tool for Vobjects was also planned, but is not currently in active development.
More help is needed to make VOSGUI/Metatronic complete and usable. If you are interested, please let us know. Especially needed are programmers familiar with wxWidgets or who want to learn more about it.


