Welcome To FOX!

our motto:

Write Once, Compile Anywhere!

Last update: 10/25/99
 
 

Web Pages Hosted by: CFD Research Corp.

Please visit CFDRC at http://www.cfdrc.com










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 GUI toolkit from one of the sites below:

Germany:              ftp://SunSITE.Informatik.RWTH-Aachen.DE/pub/Linux/fox
Switzerland:          ftp://imssun1.epfl.ch/pub
North America:    ftp://ftp.cfdrc.com/pub/FOX
Fallback Site:         ftp://cyberia.cfdrc.com/pub
The absolute latest version can be downloaded from here:
fox.tar.gz.
This is the so-called bleeding edge, version which represents the latest drop from the development version. It is updated several times a week. The documentation is included in the tar file of the distribution.

Mailing List.

To stay informed, we now have a mailing list for FOX.  To subscribe, send mail to fox-users-request@cfdrc.com with the word subscribe in the message body. Messages to the list can be sent to fox-users@cfdrc.com.  FOX announcements will be made through this list also.

The FOX mailing list is being archived at: http://www.egroups.com/list/fox-users/ and at eScribe. Thanks to Thomas Jordan for setting this up.

Reporting Bugs.

In the unlikely event that you find a bug in the FOX library or want to file a request for new features, we have a tracking system in place. Our thanks to Daniel Gehriger for maintaining the FOX bugs database.
 
 

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.

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



Hardware Accelerated OpenGL under LINUX.

As of June 4, 1999, FOX 3D Widgets may be hardware-accelerated under LINUX if you have the  RIVA TNT or RIVA TNT2. video card!

Here are some details:

When using the MESA Graphics Library , the FOX FXGLViewer  and FXGLCanvas widgets take advantage of the ``Swap Hack'' feature, which is a Mesa-specific extension to OpenGL which can dramatically improve performance when performing client-side rendering.

However, to get FOX to work properly using RIVA TNT/TNT2 with hardware acceleration, you need to make sure FOX is being compiled without taking advantage of the ``Swap Hack,'' i.e. you need to compile the FOX library without HAVE_MESA.

This is done by giving the command line:

    ./configure --with-opengl=opengl

This will cause FOX to be compiled without taking advantage of Mesa-specific features, and to link to libGL and libGLU instead of libMesaGL and libMesaGLU. You simply need to make sure these libraries can be found in the expected places [you could symlink libGL and libGLU to be symlinks to libMesaGL and libMesaGLU, or use LD_LIBRARY_PATH to allow the system to find the libraries].

After that, make sure your X Server is started with 15 or 16 bits color depth.  To check things out, start your FOX application with tracelevel set to 101, so you can see which visuals are examined and which visual is selected [I count 16 different visuals, with various combinations of double-, and Z-buffering].
 

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.
 
What FOX is, why it was written, and what are its main features.
A quick introduction to programming with FOX, and an overview of the concepts used in FOX development.
How FOX notifies applications about the users actions, mouse clicks and state changes through messages sent to a target.
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 and Chores
How to use the  FOX timer facility to perform some task at an appointed time, and how to use chores to execute background tasks during idle processing.
The FXWindow Class
The basic FXWindow class, which is the basis of all FOX controls is explained in more detail.
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.
Enrich your applications with icons. With FOX's built-in icon and image classes, this becomes very easy. 
The Font object provides easy and platform-independent methods for speciying fonts. 
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 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.
FOX provides serialization of both data and objects in a machine-independent, portable manner, by means of its built-in Stream classes. 
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.
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 © 1998 Jeroen van der Zijp, all rights reserved.