Welcome to FOX
Author: Jeroen van der Zijp
Description: FOX Main Page
Keywords: FOX, GUI, Toolkit, C++ Class Library

Welcome To FOX!

our motto:

Write Once, Compile Anywhere!

Last update: 6/6/2001

What Is FOX?

FOX is a C++ based Toolkit for developing Graphical User Interfaces easily and effectively. It offers a wide, and growing, collection of Controls, and provides state of the art facilities such as drag and drop, selection, as well as OpenGL widgets for 3D graphical manipulation. FOX also implements icons, images, and user-convenience features such as status line help, and tooltips. Tooltips may even be used for 3D objects!

Considerable importance has been placed on making FOX one of the fastest toolkits around, and to minimize memory use:- FOX uses a number of techniques to speed up drawing and spatial layout of the GUI. Memory is conserved by allowing programmers to create and destroy GUI elements on the fly.

Even though FOX offers a large collection of Controls already, FOX leverages C++ to allow programmers to easily build additional Controls and GUI elements, simply by taking existing controls, and creating a derived class which simply adds or redefines the desired behavior.

One of the prime design goals of FOX is the ease of programming; thus, most controls can be created using a single line of C++ code; most parameters have sensible default values, so that they may be omitted, and layout managers ensure that designers of GUI's do not have to worry about precise alignments.

Another nice feature of FOX which significantly reduces the number of lines of code which have to be written is FOX's ability to have widgets connect to each other, and passing certain commands between them; for example, a menu entry Hide Toolbar can be directly connected to the Toolbar, and cause it to hide.

Finally, FOX makes it easy to maintain the state of the GUI in an application by having the GUI elements automatically updating themselves by interrogating the application's state. This feature eliminates the large amount of effort that may go into sensitizing, graying out, checking/unchecking etc. depending on the application state.

Where to get it?

You can FTP the complete FOX toolkit from one of the sites below:

Main Site via FTP: | ftp://ftp.fox-toolkit.org/pub
Main Site via HTTP: | http://www.fox-toolkit.org/ftp/
North America: | ftp://ftp.cfdrc.com/pub/FOX/
Germany: | ftp://SunSITE.Informatik.RWTH-Aachen.DE/pub/Linux/fox

The most recently released version can be downloaded from by clicking on: fox-latest.tar.gz (Unix), or fox-latest.zip (Windows). The current development snapshot is obtained from: fox-snapshot.tar.gz (Unix) or fox-snapshot.zip (Windows). This is the bleeding edge development version which represents a recent snapshot of the CVS tree; caveat emptor!

Mailing Lists

We now have two mailing lists:

Announce List | The announce list is a low-traffic list on which new releases of various software based on FOX will be announced, including new releases of the library itself. Discussions on various topics however should preferably take place in the users list, to prevent swamping people's mailboxes. To subscribe, send a mail to foxgui-announce-request@lists.sourceforge.net with the word `subscribe` in the message body, or fill out a web-based subscription form.
Users List | The users list is intended for discussion on various FOX topics between developers and/or users of the FOX library or applications based on it. If you have questions, feel free to post your questions here, as many people [including myself] are only too happy to answer them. To subscribe, send a mail to foxgui-users-request@lists.sourceforge.net with the word `subscribe` in the message body, or fill out a web-based subscription form.

We recommend at least subscribing to the announce list to stay abreast of new releases of the library and applications.

The announce list is being archived by GeoCrawler, and the discussion list is there also. This facility was provided automatically be switching over to Source Forge. The old FOX mailing list has been archived at: http://www.egroups.com/list/fox-users/ and at eScribe. This has been set up by Thomas Jordan.

FOX project pages are provided at the FOX Source Forge web site.

Reporting Bugs.

We are tracking bugs in the FOX library in a Bugs Database. While most little things are fixed as soon as they're reported on the mailing list, the Bugs Database is nice to keep some problems which are more involved on the table. So please report your bugs here!

Thanks to Daniel Gehriger, the contents of the old FOX bugs tracking system has been moved into the new Bugs Database.
Everyone please report bugs to this new list instead of the old one, and please consult the existing reports prior to filing your bug.

Solutions to any of the bugs in the list are of course received with gratitude.

FOX-Based Projects and Screen Shots

Below follows a list of FOX projects currently being undertaken by various people and organizations. The list is necessarily incomplete, and if I have left your project out please let me know and I'll add it.

- FXPy is the Python language binding to FOX. It is being developed by Lyle Johnson, who is also responsible to a large degree for the Windows 95/98/NT port of FOX. FXPy is being regularly updated to incorporate the latest features in the FOX toolkit.
- FXRuby is the Ruby language binding to FOX. This is also being developed by Lyle Johnson.
- Martin Welch is working on a very nice Dialog Editor for FOX. Here is a screen shot of his GUI builder running under Windows 2000; and another screenshot of the program running under Linux.
- The Bayonne Project is in the process of developing telephony services, for LINUX. The project is being developed by David Sugar, who is also involved in the Common C++ Class Library which, incidentally, might be of interest for FOX programmers.
- This picture shows FOX being used in a PC board design application. It highlights the use of the FXTreeList widget (on the left), the FXShutter widget (on the right) and the OpenGL FXGLViewer widgets, as well as the Multiple Document Interface Widgets (center).
- CFD Research Corp. (CFDRC) offers a number of software packages for Computational Fluid Dynamics, Micro-Electro-Mechanical Systems [MEMS], Semi Conductor Processing, Bio-Medical applications, and other engineering applications.
- Magic Light is a FOX-based GUI for a ray-tracing program being developed by Mikael Aronsson.
- Another FOX application being developed by Davin S. Hills is a RedHat Package (RPM) viewer and manipulation program; download it from his site.
  Check out the May 2000 issue of Linux Journal sporting an article Cooking with Linux: Rapid Program-Delivery Morsels, RPM by Marcel Gagne which features his FOX-based RPM package builder!
- EiffelFox is an Eiffel Language binding for the FOX Library has been developed by Darren Hiebert, who is also responsible for the Exuberant CTags package.
- Jim Bag is in the process of developing a FOX-based IDE [Integrated Development Environment]. This project includes a new syntax-coloring editor widget. Find out more at his site.
- Another ongoing project is FOX Pilot. FOX Pilot is a FOX-based Interactive GUI Builder and its being developed by celer@scrypt.net.
- Maxim Baranov has developed a File Manager using FOX called XWinCommander. Check this out on his XWinCommander web page.
- The FOX Text Editor is a nice little program for viewing files; it comes standard with the FOX distribution.
- LinkCAD is a commercial format-conversion application for various CAD formats, written using FOX.
- A suite of FOX Desktop applets is being developed by Josua Groeger. The first applets being undertaken are Control Panels to set various desktop-wide resources for FOX-based applications.

Did you write a cool FOX application? If so, please mail me and I'll gladly link to your site from the FOX pages.

Support for OpenGL and Mesa.

The FOX Library provides convenient Widgets for OpenGL and Mesa, The FXGLCanvas Widget provides a very basic 3D drawable, while the FXGLViewer provides a 3D viewer complete with essential camera operations such as rotation, zooming, etc.

The FOX FXGLVisual class takes care of all the grunt work of setting up a visual / pixel format capable of OpenGL rendering with various depths and color buffers.

Here's an example of the FOX OpenGL Widget being used for a 3D visualization in a Turbo Machinery Application:

Visualization of the NASA 1.15 Pressure Ratio Fan

FOX may be compiled with either the MESA Graphics Library, or with Native OpenGL support. Currently, FOX is oblivious to which of the two libraries the application links to, but there is still a configure-option for Mesa v.s. OpenGL for the purpose of linking the test programs. See INSTALL for details.

FOX is Platform Independence!

The Windows NT port of FOX is making very rapid progress. Before sending me any nasty comments, please read this more detailed explanation of the reasons. Other platforms such as LINUX GGI may be in our future as well.

For example, here is the FOX textedit sample application running under Windows NT. And here is the same application running on a Silicon Graphics Octane system.

Table of Contents.

Foreword | What FOX is, why it was written, and what are its main features.
Introduction | A quick introduction to programming with FOX, and an overview of the concepts used in FOX development.
Targets and Messages | How FOX notifies applications about the users actions, mouse clicks and state changes through messages sent to a target.
Updating Control State | FOX automatically updates the application's controls through the use of messages send during the GUI Update Phase. This section explains how to use this feature and
Timers, Chores, Signals, and Inputs | Timer, Chore, and Signal messages allow FOX applications to react to other events which are not generated by the end user. Internet sockets, pipes, and other synchronization objects can be watched by means of the Input callback messages, and provide ways for FOX programs to receive inputs from a variety of sources
The FXApp Class | The application object is responsible for managing windows, events, and other common facilities.
The FXWindow Class | The basic FXWindow class, which is the basis of all FOX controls is explained in more detail.
Layout Managers | The FOX Layout Managers provide a convenient way of arranging your GUI Widgets without the need for explicit specification of coordinates and dimensions.
Keyboard Focus | How the keyboard focus is moved around from one widget to another, and what is the effect of this.
Icons and Images | Enrich your applications with icons. With FOX's built-in icon and image classes, this becomes very easy.
Fonts | The Font object provides easy and platform-independent methods for speciying fonts.
Data Targets | The FOX Data Targets allow you to directly connect variables in your application code to FOX GUI Controls. Using the declarative programming style made possible by the Data Targets, simple tasks such as entry and display of choices, numbers, and strings can be accomplished with a minimum amount of programming.
Help and Tool Tips | Status line help and Tooltips are a nice way of allowing users to learn about a program without consulting oracles to devine the meaning of an icon-button.
The FOX Registry | The FOX Registry database provides a facility to manage persistent settings for configuration information in your program.
Drag and Drop | Drag and drop are part and parcel of any modern GUI driven application. FOX provides a number of convenient hooks to allow you to move data between different Widgets, and even between different applications running on different hosts.
Using the OpenGL Viewer | FOX provides a convenient way to start with 3D OpenGL programming. The GLCanvas widget provides a basic 3D drawing surface. The GLViewer widget provides a complete camera model and interactive manipulation capability, including 3D picking, dragging, and Tooltips.
Serialization of Objects | FOX provides serialization of both data and objects in a machine-independent, portable manner, by means of its built-in Stream classes.
Writing Your Own Widgets | FOX is designed to make it easy to build new widgets. As FOX is completely implemented in C++, you can use common C++ derivation to create new Widgets from existing ones.
Class Index | This UNOFFICIAL FOX Documentation is provided by Lyle Johnson; future official FOX documentation may look differently.
Windows Notes | This section contains some notes for building FOX applications under Microsoft Windows.
FAQ | Frequently Asked Questions List.

Sponsor.

The FOX project owes a debt of gratitude to CFD Research Corp., which has allowed me to develop this library under the GNU Library Public License, supplied web-hosting and moreover has allowed substantial contributions made by other CFDRC employees to be incorporated into the library. Please take a minute to visit the CFD Research web page.

Copyright © 1997,2001 Jeroen van der Zijp, All Rights Reserved.