[Mono-list] How to select a GUI implementation?
16 May 2003 13:21:08 -0400
You could take a look at what Type Reflector does. It supports both
Gtk# and SWF front-ends, as well as a console front end. Type Reflector
is in the type-reflector CVS module and the mono-tools CVS module.
It's approach is a bit of a hack, but I've found it to work well.
Type Reflector has two levels of support: compile-time and run-time. By
default, all front-ends are built. If this fails (due to missing
assemblies, e.g. Gtk# isn't installed), it'll fall-back and attempt to
rebuild with a different set of front-ends. The problem with this
approach is it could result in a combinatoric explosion of build
choices, but with only 2 "optional" front-ends (SWF & Gtk#) this isn't
The next level is run-time selection. Type Reflector uses an
application configuration file (type-reflector.exe.config) which has an
<appSettings/> tag, which contains a "displayer-order" key. This key
contains an ordering (space-delimited) of the front-ends to try to use.
An environment variable could be used instead. At runtime, each entry
is instantiated; the first displayer that instantiates is the one that
is used. This permits all GUI front-ends to fail, resulting in console
Thus, the default GUI is the first entry in the "displayer-order" key.
The user can modify this by editing the .config file (non-ideal, though
the App could include functionality to edit the .config file or use an
IsolatedStorage file for per-user settings).
On Fri, 2003-05-16 at 11:35, J. Perkins wrote:
> Alexandre has been hard at work building a quite nice back-end system
> for SWF and System.Drawing. He can support multiple native GUI libraries
> including Wine and Gtk. The last piece of the puzzle is choose which
> implementation to use at runtime. There's two pieces to consider here.
> First, which implementation should be used as the default on a given
> system, and second how can the user change the default if they don't
> like it?
> For the first, could we add a new switch to configure that adds a symbol
> to the builds of SWF and SD? Like USE_WINE or USE_GTK or similar. I
> tried looking at the build scripts myself, but being a Windows/IDE guy I
> couldn't make sense of them. Once this is in place, the package
> maintainers could choose the appropriate implementation for their target
> For the second, we thought we would check an environment variable, maybe
> "MONO_GUI". If it was set (MONO_GUI=gtk for instance) we would override
> the default implementation in favor of Gtk.
> How does this sound to everyone? I don't know if Alexandre knows how to
> make the changes to configure so we might need some help there. The
> environment variable we could go ahead and add now. Then we'd need to
> package maintainers to choose the right implementation when they do
> their release builds.
> Mono-list maillist - Monofirstname.lastname@example.org