The new 3.1 release of the GLG Toolkit introduces
a number of new features, including a new HMI Configurator product, OEM extensions for adding
custom functionality to the GLG editors, new Run mode controls,
dynamics options for common dynamic actions, persistency support
used for configuring multi-line graphs, an ability to define
custom dynamics options and components with exported public
properties, as well as many other features and interface
Configurator is a simplified HMI editor intended for
use by the end-users. While the GLG Graphics Builder may be used
by an application developer or systems integrator for creating
elaborate visual components with complex dynamics, the goal of
the HMI Configurator is to provide an end-user with an easy-to-use editor to
compose custom displays using a library of pre-built components
with a minimal learning curve. It can also be used to edit
application drawings created in the GLG Graphics Builder.
With the HMI Configurator, an operator can create and configure HMI displays by dragging and dropping pre-built components from the provided component libraries, as well as draw any graphical primitive such as a polygon, arc or text object. An operator can edit the visual appearance of objects in a drawing, browse and select data tags, as well as prototype the resulting HMI and animate it with live real-time data.
The HMI Configurator supports configurable menus and icons; it may be extended via custom DLLs to add custom dialogs with application-specific editing actions and integrate custom data browsing capabilities. The Configurator may be configured to limit editing of visual components to the component's properties exposed by the application designer, use a custom color palette and custom dynamics supplied by the OEM vendor.
The HMI Configurator may be incorporated into an application to provide the end-user with an ability to create and edit HMI displays.
Choices of simplified dynamics for the most
common dynamic actions, such as Blinking, Color Threshold and
many others, were added to the Builder. Each of the predefined
dynamics uses several stock transformations wired together to
perform a predefined action. Predefined dynamics allow the user
to utilize complex dynamic actions without a need to assemble
them from scratch. Predefined dynamics use the newly introduced
feature to present the user with only the properties that are
essential for the selected dynamics type. The choices of the
available predefined dynamics may be configured and new
predefined dynamics types may be added using the Enterprise
version of the Graphics Builder.
The Show Predefined Dynamics First option of the Options, Dynamics Options menu controls the order in which the predefined and stock dynamics options are displayed. It may also be configured via the glg_config file.
The Full Display of Predefined Dynamics option of the menu may be used to toggle the display of the predefined dynamics between the simplified view that shows only the exported public properties, and the complete view that shows the stock transformations used to implement the dynamic action.
Alarms may be added to any data attribute to
notify the application about an out-of-range value. Several
types of alarms are provided, including Range alarms with the High and Low parameters and a Change alarm which notifies
an application about any change of the attribute's value. An
application is notified about alarm conditions via alarm
messages received by an alarm listener added in the application
The alarms are accessed via the Attribute or Resource Object dialog, as well as the fast access alarm buttons on the right side of an attribute row in the Properties dialog.
An Alarm Browser provided in the Builder allows the user to display alarms defined for the selected object or for the whole drawing.
A concept of public properties was introduced to
allow system integrators create components with predefined
functionality and simplified list of properties, public
properties, visible to the end user. The public properties are
implemented via export tags. An export tag is a new type of tag which can be
added to any object attribute to mark it as an exported public
property. Export tags functionality is available in the OEM mode
of the Enterprise Edition of the Builder.
A list of an object's public properties can be viewed in the Public Properties dialog. In the HMI Configurator, the Public Properties dialog is automatically displayed for objects and components that have public properties defined, while the conventional Properties dialog is displayed for the rest of the objects and graphical primitives.
The Palettes, HMI Editor Widget Samples menu option of the Graphics Builder displays a palette with samples of custom components with public properties. The Object, Public Properties menu option can be used to display public properties of the selected component.
The export tags may also used to implement custom predefined dynamic actions, as described in the Simplified Choices of Predefined Dynamic Actions section above. An application can use the GlgQueryTags method to obtain a list of all public properties exported via export tags.
The Builder's interface was changed to make
resource and tag browsing more convenient. In the new interface,
the Resource and Tag Browsers stay open when
the user selects new object, showing the object's resources or
tags. This allows the user to browse resources and tags of
different objects, clicking on an object to see its resources or
tags. If no object is selected, the resources or tags of the
whole drawing will be shown.
The new browsing interface eliminated the need for two Resource buttons, one for the selected object and one for all resources of the drawing. In the new release, a single resource button serves both cases based on the object selection. The new browsing interface is also used by an alarm browser.
mark used in the Properties
dialog to indicate a presence of attribute dynamics is now a
button that brings editing dialog for the dynamics. The button
is displayed on the right side of the attribute row if the
attribute has dynamics attached.
If the attribute has tags or alarms, the "T" and "A" buttons will also be displayed to indicate a presence of a tag or alarm, and may be used as shortcuts for accessing the tag and alarm directly.
Dynamics dialog is now modal: when it is open, the Attribute Dialog is
disabled and dimmed to better indicate the current editing
focus. The caption of the Edit
Dynamics dialog shows the type of the attribute
dynamics as well as the nesting level of the transformation, to
facilitate editing of multi-level attribute transformations.
If dynamics attached to an attribute, such as List or Format, overrides the value of the attribute, the value of the attribute is disabled for editing in all dialogs to indicate the presence of the overriding attribute dynamics, and the current transformed value is displayed in the Properties dialog.
The attributes with the overriding attributes dynamics are also automatically skipped when objects are edited with the Edit Toolbox to preserve dynamically assigned values.
All these new options can be disabled via the glg_config file.
When an object with a rotate, scale or other
dynamics is moved, it may be desirable to move the center of the
rotation or scaling together with the object. This is the case
when the object needs to rotate around its center. The Sticky Mode option may now
be used to move the center and other control points of the
object's dynamics together with the object.
If the object has rotation dynamics that rotate the object around its center, the Sticky Mode setting will keep the rotation center in the center of the object when the object is moved or resized. The Sticky Mode is set on per object basis and is a default for the newly created objects in the new version. This may be changed via the glg_config file.
The Builder's default for displaying control points of the selected object has changed to display both the control points of the object as well as the control points of any geometrical dynamics attached to the object. This is controlled by the Options, Selection Options, Control Points Display menu and may also be configured via the glg_config file.
This option may be used to disable all
geometrical dynamics attached to the object when the object is
selected to simplify editing the object's geometry. When the
dynamics are temporarily disabled for editing, the object may be
edited in its original, untransformed state. For example, a
needle of a dial with rotation dynamics may be edited in its
original, not rotated position, which makes it easier to resize
its length and width.
The option is controlled by the corresponding entry in the Options, Selection Options menu, as well as the options in the glg_config file.
Icons and images with transparent background are
now supported via the new TransparentColor
attribute of the image object. The attribute specifies the color
of the image to be rendered as transparent. The transparent
color is specified by an RGB value. While the image object
automatically detects transparent color of transparent GIF
images, a different transparent color may also be specified.
Transparent image background is supported across all platforms, including Windows and X Windows, C/C++, ActiveX and Java, and both OpenGL and GDI drivers. The PostScript level 3 (default) is used to support transparent image background in the PostScript output.
The image transparency is also supported in the OpenGL driver by setting the image object's Visibility attribute to a fractional value.
In addition to the GLG Standard API and Extended
API libraries, the GLG
Intermediate API has been added to the release.
The Intermediate API is a royalty-free library that includes all of the functionality of the Extended API for object access and manipulation, except the dynamic object creation.
It includes methods for coordinate conversion and advanced object selection, traversing objects in the drawing, accessing elements of container objects, querying resources and public properties of an object or of the whole drawing, constraining, positioning objects and performing object layout, and many other methods.
The Intermediate API does not include the methods for creating, copying, adding and deleting objects from the drawing.
The new version uses a new Run Mode screen which
displays its own toolbar with the Run Mode controls. The
controls allow the user to change the update speed, as well as
pause and resume the animation. The toolbar also contains fields
that display performance related information, such as number of
updates, elapsed time, updates per second and seconds per update
The toolbar's Update Rate Control changes the animation's update rate in increments, from the slowest (one update every 2 seconds) to the fastest, which updates as fast as possible, taking over all available CPU resources. The speed control makes it easier to test performance and CPU load at various update speeds.
In the new release, the UTF8Encoding flag has been added as a property
of every S (string) data object. Previously, the encoding of the
text string was determined by the UTF-8 flag of the font used to render the text
In the new version, the string's UTF8Encoding flag defines the encoding in which the string is stored and may be set regardless of the font used to render the string in the drawing. If the string and font encoding do not match, an encoding conversion will be automatically performed. If a string transformation mixes UTF8 and non-UTF8 strings, all necessary encoding conversions will be performed automatically as well.
If the string's UTF8Encoding flag is changed in the Builder, the string is automatically re-encoded from the UTF-8 to the system locale encoding, or vice versa. Since the string's UTF8Encoding flag does not depend on the font, it greatly simplifies creating and editing UTF8-encoded strings.
On Windows, the UTF8 strings may be rendered using UNICODE fonts, such as Arial Unicode MS. In the X Windows environment, the UTF-8 locale is also supported. In both environments, multi-byte locales are supported, and the settings of the Toolkit's default font table are adjusted according to the detected system locale. Refer to the Internationalization and Localization Support chapter of the GLG User's Guide and Builder Reference Manual for more information.
New API methods for loading drawings saved in an encoding different from the current locale were added to the Java version of the Toolkit. The new load methods have an additional charset_name parameter which specifies the charset to use for decoding the strings when the drawing is loaded. The GlgDefaultCharset global configuration parameter and CharsetName bean parameter were also added to provide an application with a way to set a default charset for decoding strings when loading drawings.
A new persistent mode allows the user to
configure line instances of multi-line graphs in the Builder and
store the settings with the drawing. This also makes it possible
to assign individual data tags to each line's Entry Point in the Builder,
while previously it had to be done in the application code.
The new mode is implemented via the new Persistent attribute of the series object. The attribute may have the VOLATILE and PERSISTENT values.
In the new version the color RGB values can be
entered in either the 0-1 (default) or 0-255 range familiar to
the Windows users. The color entry and display mode is
controlled by the options in the glg_config file. The 255 Color option controls
color display and entry in the GLG Builder. Internally, as well
as at the run time, the color RGBs still use values in the 0-1
In addition to the rainbow color palette, a custom color palette can be used for color selection. The palettes can be switched by Ctrl-clicking on the color palette. The custom color palette displayed by default is just a sample; a different custom color palette with an application-specific colors can be supplied.
The mouse can be dragged over the color palette for a quicker color selection.
The mouse position control was added to the Status panel in the lower
right corner of the Builder. The control displays the mouse
position in both the screen and world coordinates, and may be
used as a ruler.
The new Silent
(Auto-Save) option in the Options, Subdrawing Traversal menu provides a
simplified subdrawing editing mode. In this mode, the subdrawing
is automatically loaded when the user traverses Down into the subdrawing,
and the changes are automatically saved when the Up button is pressed to
return to the main drawing. If the Verbose mode is used, the user is prompted to
confirm every action, which may be confusing for the beginner
The Silent mode may also be activated via the SilentSDTraversing option in the glg_config file.
option was added to the Range
transformation to truncate out of range values to fit in the
range. The gauge controls were changed to use Truncate=YES setting to
make sure the needle does not go beyond the minimum and maximum
dial angles. Graphs use Truncate=NO
setting by default.
The new RangeCheck transformation may be used to change the state of an object when a value goes out of range. The transformation compares the value to High/Low and HighHigh/LowLow ranges and generates the output value that reflects the result of the comparison.
Support for the EnforceRange option was added to numerical text input objects with the GlgNText handler. If it is set, the out of range value will be truncated to fit in the range.
A new Discrete
parameter of the path transformation may be used to move an
object to the discrete positions corresponding to the control
points of the path. When Discrete
is set to YES, the
parameter is used as an index of the path's control point at
which to position the object. When it is set to NO, the Factor controls the
object's continuous movement along the path, with 0
corresponding to the beginning of the path and 1 to the path's
Several new editor customization features were
added to better support system integrators that need to
customize the editor's appearance as well as extend the editor
by adding custom data connectivity and application-specific
dialogs. The editor customization is accomplished via the custom plugins implemented
as DLL on Windows and shared libraries in the
The new editor customization features described below are supported on all platforms for all editions of the GLG Graphics Builder as well as the new GLG HMI Configurator product.
Predefined choices of custom dynamic actions may
be added to both the Builder and HMI Configurator by editing the
custom dynamics template drawing (custom_xform_templates.g) provided with the
A custom color palette with a predefined color scheme may be defined by editing the custom_color_palette.g template drawing provided with the release.
An OEM vendor can supply palettes of pre-built custom components with predefined functionality and simplified editing properties for use with either the Graphics Builder or HMI Configurator. The public properties are defined using the OEM mode of the Enterprise Edition of the Graphics Builder.
Refer to the OEM Customization chapter of the GLG User's Guide and Builder Reference Manual for more information on using these features.
There are three OEM
editor extensions supported via the plugin DLLs:
- Custom Data Browser DLL may be used for connecting to custom data and browsing available tags
- Editor Option DLL may be used to add or delete editor icons and add custom dialogs to the editor
- Run Mode DLL is used by the Run mode to animate the drawing with real data and handle user interaction. It may be used to implement a complete application and embed it inside the Graphics Builder or HMI Configurator.
A custom Data
Browser DLL may be provided to connect to proprietary
data sources, such as a process database, to browse available
tags in the GLG editor. The DLL supports hierarchical browsing
which allows connecting to different controllers and tag groups.
The Browse button in the Data Tag dialog opens a Data Browser that will use the supplied custom data DLL for selecting data tags. When a tag selection is made, the selected tag is inserted into the TagSource field of the data tag. The DLL is also used by the Data Browser widget available at the application runtime.
A sample of a Custom Data Browser DLL is provided in the editor_extensions/data_browser_example directory together with a run script.
A custom Editor
Options DLL may be provided for adding custom icons,
menu options and dialogs with application-specific logic to the
GLG editors. The DLL module may also be used to verify the
drawing against a set of custom rules before saving it into a
file, as well as remove unwanted editor icons and menu options.
The DLL has access to both the GLG Standard and Extended API methods to implement custom functionality. The API methods may be used to access properties of the selected object as well as other objects in the drawing.
A sample of a Custom Editor Options DLL is provided in the editor_extensions/custom_option_example directory together with a run script. The sample adds a custom toolbar icon, a few menu options, a custom dialog and implements custom actions for the added items.
A custom Run
Mode DLL may be used to animate the drawing with real
data in the Run mode of the GLG editor, as well as handle user
interaction, object selection and custom run-time dialogs with
an application-specific logic.
The module has access to a complete GLG API, both the Standard and Extended, making it possible to implement a complete application integrated with the GLG Graphics Builder or HMI Configurator. The application will function in the editor's Run mode, while the Edit mode may be used for editing the application's drawing.
For even further customization, the -run command-line option or the StartRun configuration file variable can be used to start the GLG editor in the Run mode. The -run-window command-line option or the RunWindow configuration file variable can be used to start the Run mode in a separate window, hiding the GLG editor's menus and toolbars. The Custom Editor Options DLL described above may be used to add custom menu options to the Run mode.
Since the module uses the GLG API supplied by the GLG editor's executable, it may use both the GLG Standard and the Extended API with no additional GLG libraries required. When the module is used with the GLG Graphics Builder or HMI Configurator, the editors provide the module with the Run-Time license for the Extended API.
A sample of a Custom Run Mode DLL is provided in the editor_extensions/custom_proto_example directory together with a run script. The sample animates tags and resources defined in the drawing, displays a custom run-mode dialog and shows an example of handling user interaction.
A new alarm level indicator, round button and
flip switch were added to the Controls widget set.
A flow line template with an OpenGLMode parameter was added to the special widgets. The template can be used for both the OpenGL and GDI versions of the driver by setting the OpenGLMode parameter.
A FillDirection parameter was added to all valve widgets in the Process Control widget set to control each valve's fill direction.
The -sleep option was removed from all widget's animation commands to use the new integrated speed controls in the Run mode. Animation commands were added to the controls; the Run mode animation may be paused to test user input.
Added the GlgGISGetDataset
method to query a dataset object used by the GIS Object. The
dataset object is used to dynamically change the attributes of
the GIS layers displayed in the GIS Object as shown in the
AirTraffic demo (the Toggle
Layer Color toolbar icon).
Added an overflow detection for unreasonably huge zoom factors to improve real-time response. If the condition is detected, an error message is generated without increasing the map generation time.
Added configuration file parameters to control
various aspects of the Builder's behavior and default settings
of various options.
Added version number support for environment variables and configuration files, making it more convenient to use multiple versions of the Toolkit on the same computer.
Changed Undo handling to make it a global action that does not require closing the currently open modal dialogs. More descriptive labels are now used to describe Undo actions for attributes and resources.
Added an ability to add, edit and delete dynamics of default attributes via resources, as well as to constrain and unconstrain them.
Enabled the use of value spinners for entering values of attributes and resources of D (double) type which were not covered previously.
Provided more descriptive captions for the dynamics, custom properties and other dialogs and added tooltips to all dialog elements.
Grouped Option menu choices using submenus.
Added support for browsing global configuration resources in the Builder's resource browser using the $config resource name.
Added -glg-editor-layout and other command line options to control editor dimensions, color palette, etc. Use -help option to print all available options to the terminal (or to the glg_error.log file on Windows).
Changed Snap To default to 20; disabled grid display in the Run mode.
Restored the original values (color, etc.) after deleting an attribute's list transformation.
Added button repeat to value and object rotation spinners on Windows, as well as to the directional buttons for the control point movement. Changed the buttons' type to ActOnPress to support button repeat.
Used pixel size for palette size and positioning, instead of making it relative to the Builder size, to better handle the case when the Builder is maximized. Made dialogs use pixel size as well, added the DialogScaleFactor configuration file variable that may be used to adjust (increase or decrease) the size of all dialogs according to the user preferences.
Added the GlgSetEditMode
method to the Extended API to disable input objects for editing.
Added the SetTraceViewport
method to the GLG ActiveX Control on Windows; the method allows
tracing events for a particular viewport (and its children)
instead of the whole drawing.
Added the GlgTranslatePointOrigin method to the Extended and Intermediate APIs to translate screen coordinates of the pointer from one viewport to another.
Added a new LoadObject method for loading objects and drawings from a stream to the Java API.
Added support for the tooltip dynamics. A transformation may now be attached to the tooltip string to change it based on the state of the controlling parameter. Disabled an object tooltip if the tooltip string is NULL or an empty string.
Enabled multi-line tooltips based on HTML tags in the Java version of the Toolkit by using the Swing label to display the tooltip. Added GlgSwingTooltip global configuration resource to control the use of the Swing label. The resource may be set to 1 to use multi-line tooltips with HTML tags, or set to 0 to handle tooltips with dynamic transformations.
Added an automatic conversion of the "\" separator to "/" on Linux/Unix and Java, as well as a conversion of "/" to "\" for the file browser on Windows to simplify the cross-platform deployment of the GLG drawings.
Added the HEADER mark to the export file for strings and tags to avoid problems with the BOM (Byte Order Mark) added at the beginning of the file by Notepad on Windows.
Added support for setting the selected item in the menu with a radio style by setting the SelectedIndex resource of the GlgMenu interaction handler. Added InitSelectedIndex parameter to the GlgNOption interaction handler to define the item to be selected on the initial appearance.
Added RepeatStart and RepeatEnd button messages. When a spinner's value is adjusted using a button with a button repeat, the messages enable the application to handle only the final value change after the button is released.
Added Start/Stop/Reset messages to the GlgClock interaction handler to enable the application to start, stop or restart the timer programmatically.
Added the -font_size_change option to the gconvert drawing conversion utility. The option may be used to adjust the size of all text objects in the drawing. The new -set_utf8 and -reset_utf8 options may be used to set or reset the UTF8Encoding flag of all string attributes in a drawing.
Added -white_background and -black_background command line options to the DXF converter to set white or black background (default: gray). Improved handling of the DXF's auto color (#7), which is set to be the inverse of the background color.
Changed error message dialogs on Windows to use timers to avoid threading problems. Added the GlgSyncError global configuration variable to aid debugging.
Increased performance of the gradient rendering
and filled dynamics in OpenGL by clipping the slow buffer
clearing operations. For a scrolling bar graph, it increased the
performance by a factor of 4.
Improved performance of the OpenGL rendering of scaled images.
WinPrint and SavePostscript actions to
include images of native widgets.
Stored subdrawing filename as a recent drawing to avoid overwriting the drawing with the content of the subdrawing file on Save or Save All operations.
Enabled line graphs with 1 point.
Fixed reordering of children viewports in Java.
Fixed persistency of global configuration settings when using the GLG wrapper widget in X Windows. The settings are now preserved even if they are set before the widget is created.
Fixed PostScript printing of end caps of closed polygons and rectangles.
Improved handling of the MouseOver Highlight for invisible objects coinciding with visible objects, as well as for objects invisible due to their parents' Visibility set to OFF.
Enhanced handling of MouseOverState so that it can be used for making viewports visible on the MouseOver event.
Fixed erasing of a viewport when the visibility of its composite parent (such as a group) changes.
Fixed the problem of interfering between the GlgButton's tooltip and MouseOverState: previously, activation of the button's tooltip erased the button's MouseOver Highlight.
Improved mapping of fonts with the size=8 on Windows.
Fixed initial appearance of integrated native scrollbars with lesstif in X Windows environment: added a workaround for the lesstif's bug.
Made it possible to access named resources of a resource which itself was accessed via the default attribute name, such as Polygon1/FillColor/ColorIndex.
Changed viewport's hierarchy setup to reorder scrollbars to the front. This ensures that the scrollbars always appear on top of all children viewports.
Fixed the history object not to advance when the TagName or TagSource of a tag attached the history's EntryPoint changes.
Fixed error messages in a Font Browser in some X configurations related to using 0 in unused size fields. Improved handling fonts with the size field set to 0.
Fixed a problem of wrong viewport size in a widget after a hierarchy reset.
Fixed clipping problems when saving image and full image. Fixed rendering of text and images in children viewports when saving image using the OpenGL driver.
Improved pixel mapping fixed mapping of text objects and images in the OpenGL driver.
Fixed Print Configuration, Page Layout option for non-resizable drawings.
Added an overflow detection and correction when loading double values (Nan, 1.#QNAN, -1.#IND) for the Extended and ASCII save formats.
Fixed round line caps for open polygons with
coinciding end points and even line width.
Fixed rendering of objects with GradientColor being the same as FillColor.
Fixed drawing of viewports with cyclical linear gradient background.
Fixed propagation of the LineWidth and EdgeColor viewport attribute changes.