March 29, 2024

Press Release May 13, 2011

Dynamic Windows Interface Builder
Initial Design Specification
By: Brian Smith

Purpose: A graphical tool for creating user interfaces in cross platform applications and managing associated resources.

There will be three main components:

Creator - Graphical tools for actually designing the user interface.
Manager - Graphical tools for managing the generated interface bundles and resources (images).
Loader - Shared library for loading the generated interfaces in the application.

The Creator will have a toolbar with available controls/widgets/windows, a tree view showing the hierarchy for the currently edited window and a property inspector/editor for the currently selected control. Finally when the interface is designed it will output the window specification in XML.

The Manager will automate generation of platform specific make files, resource files, images, icons and anything else required on that platform (manifests on Windows, definition files on OS/2, configure scripts on Unix, Application bundles on Mac). Possibly also launching the build system to generate the application.

The Loader is a shared library that will link with the application and programmatically load the XML files generated by the Creator, this is the most simple but arguably most important component. It will use the Dynamic Windows API calls to create the windows and controls based on the XML specification and save the window handles as data on the top-level window finally returning the toplevel window handle to the application.

Future Development:

In a later iteration I intend to have more code generation functionality to aid in creation of signal handlers with their appropriate prototypes and casting automatically.

Third party software:

I have decided to use libxml2 to generate and load the XML. The reason for this choice is it is stable software written in C under a liberal MIT license. Additionally it is included on MacOS X, almost any Linux and any Unix with Gnome by default. It will likely only need to be included or statically linked on Windows and OS/2.