Cover V05, I04
Article

apr96.tar


Graphical User Interface Development Systems

Steve Baum

This is a brief (not meant to be all encompassing) list of packages that assist in developing interfaces, graphical and otherwise, to programs and other beasties. The list can be found at:http://www-ocean.tamu.edu/~baum/graphics-GUI.html. If you've got an old program or three and want to build a quick and easy visual interface to them, then try one of these packages. They can turn a command-line driven program into a magnificent point-and-click experience faster than you can say "Jack Robinson." The list is oriented toward those packages that will run on generic UNIX platforms, especially Linux. A longer and less detailed list of such things (including commercial offerings) can be found in the User Interface Software Tools list of Brad Myers at:

http://www.cs.cmu.edu/afs/cs.cmu.edu/ \
user/bam/www/toolnames.html

Another good resource is the WWW Virtual Library section on Visual Languages and Visual Programming.

http://cuiwww.unige.ch/eao/www/Visual/ Visual.Programming.biblio.html

All of these packages are freely available for non-commercial use. Some can even be used for commercial purposes, although you should be sure to find and read the usage limitations (if any) for each package. Enjoy.

Amulet

Amulet is a user interface development environment containing a comprehensive set of tools that make it significantly easier to design and implement highly interactive, graphical, direct manipulation user interfaces. These applications will run without modification on both UNIX and PC platforms. Presently, Amulet provides a low-level toolkit layer, an object-oriented, constraint-based graphical system that allows properties of graphical objects to be specified in a simple, declarative manner, and then maintained automatically by the system. A higher-level tool is in the works that will allow interfaces to be developed without programming.

Features of Amulet include a dynamic, prototype-instance object system that makes prototyping easier, constraints integrated with the object system, a machine-independent graphics system, and a high-level object-oriented output graphics model that handles automatic refresh of objects when they change. It also includes a high-level input model, which makes it easy to add behaviors to objects and supports undo and help for operations, and a set of flexible widgets including buttons, check boxes, radio buttons, menus, menu bars, scroll bars, scrolling windows, and text input fields.

The source code for UNIX or PC platforms is available as is a 200+-page user manual and tutorial in PostScript format. Amulet should compile and install on generic UNIX platforms using the gcc 2.7.0 along with libg++, and there is a separate makefile script for Linux platforms. It requires Visual C++ for installation on PC platforms. This is the successor to the Garnet project.

[http://www.cs.cmu.edu/afs/cs/project/amulet \
/www/amulet-home.html]

Cvo

C++ Visual Objects (Cvo) is a toolkit for building visual tools for the X Window system. It is written in C++ and visually resembles the Motif toolkit, but there are significant differences between Cvo and other toolkits. These differences include an object-oriented design, executables typically two to four times smaller than those compiled using other tookits, and less code to write per application. It also includes a smaller and more consistent set of interfaces and applications that are (due to the above reasons) inherently more maintainable. Cvo also takes advantage of the internationalization features inherent in X11R5 and later releases.

A rich set of visual objects Cvo provides, including standard items like buttons, text displays, input boxes, pop-up and pull-down menus, scrolling lists, and radio boxes. More specialized objects, such as a chart object that expands to support 3-D and pie charts and a canvas on which an application may paint, are also included. New complex objects can easily be constructed using existing objects as building blocks, owing to the object-oriented nature of the toolkit. Cvo also attempts to consolidate similar concepts within a single method (for example, "callback" functions are treated like any other "event"), which reduces not only the complexity of the system but also the amount of information an application writer needs to remember to use it.

Cvo was created as an internal Cray Research Inc. project but, for various reasons unrelated to its utility, was made freely available subject to a fairly permissive copyright notice. Extensive documention is included with the distribution, including a tutorial in PostScript and hypertext documentation of the visual objects in the toolkit. There are several makefiles for various architectures and Cvo can be built using GCC/G++, making it amenable to compilation and use on Linux platforms.

[ftp://ftp.x.org/contrib/libraries/]
[ftp.krystal.com/pub/]

DIRT

The Design In Real Time X user interface builder allows the interactive creation and rapid prototyping of X user interfaces using the X Toolkit and a number of other widget sets. User interfaces are created interactively via the direct manipulation of user interface objects, that is, widgets, such as push-buttons, menus, and scroll bars. The look and feel of each widget is controlled by attributes that can be modified interactively. Objects can be used as soon as they are created; Dirt generates the source code required for the designed user interface and separates the user interface definition from the application code.

The object classes available in Dirt are the Athena Widget Set, the standard set for the Xt Toolkit, and the UKC Widget Set, a smaller set of widgets that were created mainly for Dirt but can be used across a wide selection of user interfaces. A lot of these are extensions of the Athena Widget Set. The addition of new widget classes is a straightforward procedure.

This should compile on generic UNIX/X Window systems since the aforementioned widget sets are included in the standard X distribution. A 36-page PostScript user guide is available, as well as another, more technical, document describing the implementation of DIRT and how to add new objects to the system.

[ftp://ftp.ukc.ac.uk/pub/rlh/ \
src/X/dirt/]

Finesse

Finesse is a tool designed to generate and evaluate windows in shell scripts. This allows the easy conversion of the dialog portions of an existing script to a mouse-oriented Motif user interface. No knowledge of programming X Windows is needed, since the windows are generated by several easy-to-use commands called in the script. A graphical shell script user interface can thus be developed quickly and easily. Binaries of Finesse are available for DEC Alpha, HP9000, SGI Iris, IBM RS6000, SUN4, and Linux platforms, and documentation is available in both German and English.

[ftp://ftp.science-computing.uni-tuebingen.de/pub/finesse/]

Fresco

An object-oriented application programming interface (API) system for the development of window-based applications, Fresco is a design evolution of the Interviews toolkit. It covers the functionality of Xlib and Xt and adds structured graphics and application embedding, thus bringing together objects that have not traditionally been mixed. The most important advance in functionality is support for graphical embedding, wherein a single, simple model of graphical objects is provided that supports composition of both graphical objects as in a drawing editor) and application-level editors such as word processors or spreadsheets. It is also capable of interoperating with Xt/Motif widgets.

Fresco uses the standard CORBA (http://www.acl.lanl.gov/sunrise/DistComp/Objects/corba.html) distributed object model and provides a standardized, high-level notation called IDL for object definition. There is also support for Tcl/Tk-based scripting (http://www.smli.com/research/tcl/), multi-threading, resolution independence, and internationalization. It is currently undergoing a standardization process via the X Consortium (http://www.x.org/).

Fresco is under continual development and snapshots of the current full source distribution are available, as well as binaries for several platforms. The current snapshot (1/96) supports UNIX/X11 as well as Windows NT and Windows 95, with a Macintosh version in the works. Binaries are also available for several platforms and available at the home site, some created at the site (Sun SPARC and Windows NT and 95) and others contributed by third parties (DEC Alpha, HP, SGI, and Linux). Hypertext and PostScript versions of a tutorial are available.

[http://faslab.com/fresco/ \
HomePage.html]

Garnet

Garnet is a user interface development environment for Common Lisp and X11 or Macintosh. It helps you create graphical, user interfaces for applications. It includes a custom object-oriented programming system, widgets for multi-font, multi-line, mouse-driven text editing, automatic generation of PostScript, support for large-scale applications and data visualization, two complete widget sets, interactive design tools for creating an interface without writing code, an interactive tool for creating new widgets, and more. It will run on generic UNIX boxes with X11 and an implementation of Common Lisp for example, Allegro, AKCL, CLISP, etc. The source code can be obtained at the Garnet ftp site:

ftp://a.gp.cs.cmu.edu/usr/ \
garnet/garnet/

A successor to Garnet called Amulet (described above) is currently being developed.

[http://www.cs.cmu.edu/afs/cs.cmu.edu/ \
project/garnet/www/garnet-home.html]

GINA++

The Generic Interactive Application for C++ is an object-oriented application framework that facilitates the development of applications having a GUI. It is written in C++ and uses OSF/Motif and the X Window system for the interface parts. GINA++ comes as a set of C++ classes with a set of demo applications. The classes constitute an executable program that possesses the basic functionality and user interface components identical to all interactive graphical applications, but lacks any application-specific behavior. This package should compile using GCC/G++ (2.5.8 or later). Some demo applications do not compile with GCC, in particular, those that use template classes.

[ftp://ftp.gmd.de/gmd/ginaplus/]

GroupKit

GroupKit is a groupware toolkit for developing real-time conferencing applications. Applications such as drawing tools, editors, and meeting tools can be shared simultaneously among several users. The goal of this software is to make developing groupware applications only slightly more difficult than single-user applications. It has been used as a research tool for prototyping groupware systems and investigating multi-user architectures and interaction techniques, and also as a graduate level teaching tool.

A number of conference applications are included in the distribution, including a brainstorming tool, a file viewer, a fisheye, a group sketchpad, a group draw, a hypernode editor, a postit note editor, a simple sketchpad, a text chat and editor, and several simple games. Session managers, the programs used to create, locate, and join conferences, can also be constructed using GroupKit.

GroupKit should compile and install on generic UNIX/X11 workstations. It is based on the Tcl/Tk toolkit as well as an extension called Tcl-DP, a Tcl front-end to standard UNIX sockets. The source code is available and should install on the indicated platforms if these tools are first installed. The documentatation consists of a 50-page users' manual and several papers, all available in PostScript.

[http://www.cpsc.ucalgary.ca/projects/grouplab \
/projects/groupkit/groupkit.html]

MET++

MET++ is an object-oriented application framework that supports the development of multimedia applications by providing reusable objects for 2-D graphics, user interface components, 3-D graphics, audio, and music. It manages the standard behavior of a multimedia application, such as time synchronization and user interaction (e.g., file dialog, cut and paste, commands, etc.).

MET++ is an extension to the ET++ Application Framework, an object-oriented class library that integrates interface building blocks, basic data structures, input/output, printing, and high-level application framework components. It supports user-interaction features such as direct manipulation, multi-undoable commands, and a flexible mechanism to compose visual objects with declarative layout specification and automatic object positioning via components like pop-up and pull-down menus, buttons, scrollbars, all of which are included as predefined classes. All of the rich and varied functionality of ET++ is inherited by MET++ applications.

The MET++ extensions to ET++ include 3-D graphics routines realized with PEX, GL, and OpenGL adapters. This framework provides objects for camera, light sources, material definitions, primitive 3-D objects, polygons, and more, with 2-D and 3-D graphics integrated so they can be mixed in the same view. Building block classes for audio and music include intensity, pitch, tonalsystem, pitchscale, and more. Time synchronization is realized via temporal grouping elements such as loop, repeat, sequence, and synchronize. Import and exchange converters for many file formats are included, as is a hypertext/hypermedia link mechanism.

Both ET++ and MET++ are C++ class libraries that can be compiled with almost any AT&T-based C++ compiler or with GCC/C++. Although the ET++ library is highly portable among UNIX/X11 platforms, some of the advanced multimedia features of MET++ limit its portability to a subset of the platforms amenable to ET++. Documentation includes man pages and related papers, although I don't think that anything in the way of a tutorial exists as yet.

[http://www.ifi.unizh.ch/groups/mml/ \
projects/met++/met++.html]

Qt

An object-oriented framework for developing GUI applications, Qt consists of a rich C++ library (around 100 classes) and a meta- object system that extends C++ with new concepts called signals and slots, which define clean and natural object interfaces for creating independent objects. Qt is based on Xlib and supports such advanced features as drawing transformed graphics, including drawing rotated text and pixmaps. It is in beta form at present and a free version for Linux/X Windows platforms is available. Documentation thus far is all online at the Qt web site http://www.troll.no/.

[ftp://ftp.nvg.unit.no/pub/linux/qt/]

STk

Stk is a Scheme interpreter that can access the Tk graphical user interface part of the Tcl/Tk toolkit, i.e., Tk with Tcl replaced by Scheme. STk also provides an efficient CLOS-like object-oriented system called STklos, which provides multiple inheritance, generic functions, and multi-methods. This implementation was developed due to perceived limitations in Tcl, the details of which can be found at the Tcl/Tk home site.

STk runs on a variety of machines and systems, including Sun SPARC, DEC 5000 Ultrix and Alpha, SGI IRIX, IBM RS6000, HP 9000/735, Linux, and others. Porting it to other UNIX platforms is probably reasonably straightforward. Documentation consists of a users' manual and several papers.

[ftp://kaolin.unice.fr/html \
/STk.html]

Tcl/Tk

Tcl, the tool command language, is an embeddable scripting language, and Tk is a graphical user interface toolkit based on Tcl. Tk was designed for use with the X Window system (although ports to other window systems are purportedly available or will be) and provides a set of Tcl commands to create and manipulate widgets. Widget types include the standards such as buttons, scrollbars, menus, and text windows, as well as a general purpose drawing widget called a canvas that lets you create lighter weight items like lines, boxes, and bitmaps. Tk supports the X Window system hierarchy of windows, and widgets are under the control of a geometry manager that specifies their size and location on the screen.

Tcl/Tk has been ported to most (if not all) UNIX/X11 platforms and should readily install via the configure and make files included in the distribution. There are also a myriad of third-party Tcl/Tk extensions and applications available, (e.g., a programming environment for building graphical user interfaces with Tcl/Tk called XF).

[http://www.sunlabs.com:80/research/tcl/]

VXP

The Visual X Windows Programming interface is an environment in which to develop X Window programs interactively. The visual programming process begins with the design of the application interface, where the components (e.g., widgets) are instantiated. Next, the properties of these components are set, and the code necessary to handle the actions for certain events is written by the developer (in C). Finally, the application is built by the system, which automatically generates the remainder of the C code for the application. The programmer can also compile, execute, and debug the application from within the system. The goal of the project is to eventually support all Xt-derived widget sets, including OSF/Motif, OpenLook, MIT Athena, etc., but the present version supports only the first-named set. Thus far, only binary distributions are available for HP, SGI, DEC OSF, SUN OS5/4, IBM RS600 and AIX, NetBSD, SCO, Linux, UnixWare, BSD, and FreeBSD systems. Online and hardcopy version of a user's manual and a tutorial are available.

[http://www.shsu.edu/~stdyxc05/VXP/]

Wafe

The Widget [Athena] Front End is a package that implements a symbolic, string-based interface to the X toolkit, the Athena Widget set (or the 3-D version, Xaw3d), the OSF/Motif Widget set, and various complementary widget classes and extension packages. You can develop applications with high-level graphical user interfaces in Tcl using Wafe, or you can use it mostly as a graphical front-end that provides easy access to GUI programming for various programming languages. The components of Wafe are Tcl, Xt, widget sets, and extensions. The extensions include the Xpm library, a drag-and-drop library, additional converters, etc. As a graphical front-end, Wafe has been used with Perl, GAWK, Prolog, Tcl, C, and Ada, and there are implementations for embedding it (to create a bidirectional interface) in Perl and Python. The source code for Wafe is available along with binaries for AIX, ULTRIX, HP, Alpha, and Linux systems. These can be obtained along with some rudimentary documentation at the Wafe ftp site, ftp://ftp.wu- wien.ac.at/pub/src/X11/wafe/.

[http://www.wu-wien.ac.at/wafe/wafe.html]

WCL

The Widget Creation Library (with Motif and Athena resource interpreters) is a system for developing applications using Motif and Athena widgets. It features rapid prototyping, a blending of the prototyping, development, and delivery environments, minimum specifications to describe an interface, extensibility, widget set independence, and more. This is intended to be a very small library for programmers developing applications using the various widget sets based on the Xt intrinsics. The distribution contains the source code (written in C), documentation, and demos.

[ftp://ftp.wu-wien.ac.at/pub/src/X11/]

WINTERP

WINTERP is an interactive object-oriented user interface language for rapid prototyping, development, and delivery of extensible applications with Motif GUIs and Xtango graphics animation (http://www.cc.gatech.edu/gvu/softviz/algoanim/xtango.html). It uses a small, fast, object-oriented mini-Lisp interpreter based on XLISP-PLUS and has an object-oriented interface to the OSF/Motif widget class hierarchy. It also includes a combination of high-level object and functional interfaces to the Xtoolkit, Xlib, and underlying UNIX system libraries. The latest version features a 2.5D graphics and animation widget based on the Xtango graphics/animation package, which simplifies much of the drudgery involved in creating 2.5D graphics interfaces and enables simple game-style animation, employing multiple layers of arbitrarily shaped objects. The source code is available at the WINTERP ftp site, ftp://ftp.eit.com/pub/winterp/, and should compile and install on generic UNIX/X11 systems with the OSF/Motif library. Various types of documentation are available at the Web site.

[http://www.eit.com/software/winterp/]

wxWindows

wxWindows is a toolkit for platform-independent GUI programming in C++. It consists of several class libraries and tools, and its uses include development of applications for delivery on several platforms and single-platform development, e.g., a high-level wrapper around XView, Motif, or Windows. It was designed with portability and simplicity of programming as the primary goals, with some trade-offs in the area of completeness (for example, the interfaces may not be as polished as some). It is currently an active project, and the developers encourage suggestions and extensions from the users.

The features include wxBuilder, a Windows and Motif-hosted GUI builder for creating simple interfaces interactively and generating C++ code; a simple-to-use and object-oriented API; graphics calls including splines and polylines; toolbar classes; support for menu bars and status lines; a programmatic form facility for building form-like screens quickly; object-oriented interprocess communications (DDE subset) under UNIX and Windows 3.1; encapsulated PostScript generation under UNIX; a TeX2RTF utility for maintaining online and printed manuals, all source, and much more.

wxWindows will install on generic UNIX platforms with Xview 3.x or Motif 1.2.x and any one of several C++ compilers, including GCC/G++, and has been installed on Linux platforms. It can also be installed on PC platforms using most of the C++ compilers available. Compilation and installation instructions and hints are available at the site for platforms for which binaries aren't supplied. A reference manual is available in several forms, including PostScript.

[http://www.aiai.ed.ac.uk/~jacs/wxwin.html]

XF

An integrated programming environment that supports the development of graphical user interfaces with the Tcl/Tk toolkit (http://www.smli.com/research/tcl/), a shell-like interpreted command language (Tcl), and a Motif-like widget set (Tk). The design aims for XF are rapid construction of interactive user interfaces, immediate access to the resulting interface, high flexibility for later changes, support for group development, and support for standard interfaces. To implement a complete application, the user must have some reasonable facility with programing in Tcl.

XF should readily install on any UNIX/X11 platform on which Tcl/Tk has already been installed, and since the latter has been ported to nearly every platform in existence, this shouldn't be too much of a problem. A 120+-page combination tutorial and users' manual is available in PostScript format.

[ftp://ftp.aud.alcatel.com/tcl/code/]

XForms

A GUI toolkit based on Xlib for X Window systems, XForms features a rich set of objects (e.g., buttons, sliders, menus, etc.) integrated into an easy and efficient object/event callback execution model that allows fast and easy construction of X applications. The library is extensible and new objects can be easily created and added. It comes with fdesign, a GUI builder that allows a user to create XForms-based interfaces by directly manipulating and composing graphical objects supported by the system. Once the interface is created, XForms can generate C code that, when compiled and executed, implements exactly the same interface as was designed. It is available in binary format for Linux, Sun, SGI, DEC Alpha, HP, IBM RS6000, FreeBSD, NetBSD, BSDi, unixware, Solaris, SCO, DEC Ultrix, Cray, and Convex systems. A 200+-page tutorial and reference manual is also available.

[http://bragg.phys.uwm.edu/xforms]

XIT

The X User Interface Toolkit is an object-oriented user interface development environment for the X Window system based on Common Lisp, CLOS, CLX, and CLUE. It is a framework for Common Lisp/CLOS applications with GUIs for the X Window system. It contains user interface toolkits, including general building blocks and mechanisms for building arbitrary user interface elements and a set of predefined common elements (widgets), as well as high-level interactive tools for constructing, inspecting, and modifying user interfaces by means of direct manipulation. The system is stable although still under active development. An incomplete XIT manual in PostScript is available, as is the source code. It is known to run on the freely available Common Lisp implementation CLISP as well as on Allegro CL, a commercial implementation.

[ftp://ftp.informatik.uni-stuttgart.de/pub/xit/]

XPIP

XPIP is a tool that allows the quick construction of user interfaces (GUIs) in an X Window environment. It takes the form of a series of user-definable widgets that are employed for varying parameters, control flow, input/output, and other alterable processes. It is not as comprehensive as other packages, but provides a balance between ease of use and sophistication that makes it appealing to the more casual programmer.

It consists of an unalterable library of routines combined with a single user-modified buffer file that provides the system with access to application-specific routines. Each XPIP application is divided into a series of panels, each of which contains a set of widgets. Any number of panels may appear on screen at a given time, and the widgets in each are defined in separate configuration files that are read at run-time. Widget types include base, plate, button, slider, dial, arrow, scrollbar, label, data, view, slipper, and lists, the characteristics of which can be customized or left at the default values.

The source code is available and should install in environments with an ANSI C compiler and a color system running X Windows (R4 or higher). A 40+-page PostScript user's manual is also included in the package, which can be downloaded from the XPIP ftp site, ftp://cns-ftp.bu.edu/pub/xpip/.

[http://cns-web.bu.edu/pub/xpip/html/xpip.html]

xtpanel

xtpanel is a tool to build a visual program interface using a simple scripting language or from the command line. It provides a quick and easy way of producing a panel containing interactive objects such as buttons, sliders, and text fields. Objects can print, run system commands, or modify other panel objects. The result is an interactive X Window program using a scripting language that is easier to learn and use than conventional X programming. Xtpanel uses the X toolkit and the MIT Athena widget set. Documentation is via a man page and an online interactive tutorial. The source code is available and should install on generic UNIX/X Windows platforms.

[ftp://sepftp.stanford.edu/pub/Xtpanel/]

About the Author

S. Baum is presently attending graduate school at Texas A&M University. He's been fooling around with computers for years, but realized the one true way only after he obtained a Linux box about a year ago. Now he sits transfixed for countless hours programming and cruising the web for nifty software. He can be reached at baum@astra.tamu.edu.