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, alarms,
predefined 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 enhancements.
The HMI 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 Public Properties 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 code.
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.
The "X" 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
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.
The Edit 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
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 object.
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
The Silent mode may also be activated via the SilentSDTraversing option in the glg_config file.
The Truncate 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 transformation's Factor 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
movement along the path, with 0 corresponding to the beginning of the
path and 1 to the path's end.
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
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
provided with the release.
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
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
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
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
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.
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.