[ Home Page ] [ Eiffel Archive ] [ Eiffel Classes and Clusters]

Arc de Triomphe clipart (2486 bytes)

EiffelFox - Eiffel GUI wrapper for the Fox C++ GUI library

Written by Darren Hiebert

EiffelFox-0_6_1_tar.gz (440,544 bytes) - the EiffelFox source code
EiffelFox-0_6_1.zip (739,671 bytes) - the EiffelFox source code
http://darren.hiebert.com/EiffelFox/index.html (EiffelFox home page)
http://darren.hiebert.com/index.html (Darren Hiebert's home page)
http://www.cfdrc.com/FOX/fox.html (Fox GUI library home page)



EiffelFox is an Eiffel language wrapper for the FOX C++ GUI. The FOX GUI is a powerful, advanced GUI library which is completely portable from Unix to MSWindows without changes to, or conditional compilation of, the application source code. Eiffel has long suffered from the lack of availability of a GUI library which is not only portable, but offers the full power of what developers have come to expect from an advanced GUI library. Shortly after beginning a position as lead developer of a defense-related simulation project, I discovered Eiffel and selected it for use in our project. I quickly became aware of the lack of strong GUI support. After I began to look into GUI libraries available in the open source world, I discovered FOX, a new GUI library in beta release. Because of the pressing need for a powerful GUI in my project, I undertook the task of developing an Eiffel wrapper for FOX on my own time so that I could make it available to the Eiffel community at large and, by eliminating this shortcoming, help to promote Eiffel, which greatly deserves recognition as a language for serious software development. EiffelFox is already being used in a serious application and is, therefore, ready for serious application development.


EiffelFox is presently supported only on version 4.3 or later of the ISE compiler, supporting the optional use of the new agent mechanism for nice direct call-backs. The ISE 4.2 compiler had a code generation bug for C++ externals and so cannot be easily used (If you are stuck with 4.2, I have a shell script available which can be called from your finish_freezing script to correct the generated source code).

Because the Halstenbach compiler (iss-base) also supports ISE-style C++ external features, I will soon begin the process of officially supporting EiffelFox on this compiler as soon as I acquire the compiler.

A SmallEiffel port is underway. Currently, SmallEiffel-0.77beta4 will compile EiffelFox, but there are still problems with its code generation for C++ externals.

FOX is supported on both Unix and Win32. EiffelFox should be able to work on both platforms, as well. I am mostly a Unix guy, so I have not actually built up EiffelFox on Win32 yet. Ed Falis undertook the task of porting EiffelFox to MicroSoft Visual C and his changes have been incorporated into the release.

Unix Installation

You must obtain and build the FOX library separately before building EiffelFox. Any particular beta release of EiffelFox relies upon the interface of a particular release of FOX. The EiffelFox web site, http://darren.hiebert.com/EiffelFox, will contain a link to the version of FOX to which it is tied. The FOX web site is http://www.cfdrc.com/FOX/fox.html.

EiffelFox comes in two pieces: The Eiffel classes and a C++ wrapper library containing CECIL code which provides the glue between the Eiffel objects and FOX C++ objects. When you run ./configure in the installation directory, a makefile will be generated that is customized for your environment. Also, appropriate ACE files will be created in the example and precomp directories for building those.

It is assumed that you have extracted the archive in the directory where your ACE files will be pointing to use the EiffelFox clusters. In the top-level directory of the distribution, execute "./configure", followed by "make". This will compile the C++ library which serves as the interface between FOX and EiffelFox. There are potentially two versions of the library which will be built, libefx.a and libefxgl.a, a version without OpenGL/Mesa support and one with.

You can also execute "make precompile", which will build a precompiled library in the "precomp" directory.

When you are finished building the libraries, you can execute "make mostlyclean", which will remove all of the intermediate generated files, but leave the *.a archives and precompiled libraries.

Win32 Installation

If you are trying to build EiffelFox under MicroSoft Windows, you will find project and workspace files for Developers' Studio in Clib. For further details, see the separate document ReadMe-Win32.txt included in the distribution.


Extensive documentation for FOX has not yet been written. Thus, it is still necessary to consult the FOX C++ source code to answer certain questions, primarily with regards to which messages are forwarded on to targets, a key feature which make FOX so powerful, generally requiring far less code to accomplish an interface. A document, FoxMessages.ps, that has a fairly complete description of which messages are forwarded on by which widgets is included in the doc directory.

The documentation which comes in the doc directory of the FOX distribution should be read in preparation for using EiffelFox. Although the documentation is targeted at using the C++ library directory, much of it is still valid for EiffelFox, as well.

See the HTML file doc/diagrams/index.html for a set of EiffelCase diagrams of the EiffelFox classes, which shows the inheritance hierarchy.

Lastly, see the tutorial application include in the examples directory, which helps to understand how the layout managers and widget display options work.

Documentation should improve rapidly in the next couple of months as FOX nears its 1.0 release.


See the "examples" directory for sample applications.


Note that the widget and message data inheritance hierarchies are fairly deep. Therefore, it is essential to look at the flat-short forms of the classes when you are trying to see what they really provide.


EiffelFox should be considered to be late beta software. Because FOX is still in late beta, any interface changes made to FOX will necessarily be reflected in future releases of EiffelFox, thus necessitating changes to application code. Also, there are still likely to be some changes to feature names and some adjustments to how certain things are done. No doubt, there are bugs waiting to be discovered, but most are likely to be caught by assertion violations.

Thank you for trying out EiffelFox. All feedback is appreciated.

Darren Hiebert

[ Home Page ] [ Eiffel Archive ] [ Eiffel Classes and Clusters]