[comp.lang.lisp.x] Object Oriented, X, Graphics

cerbone@curie.orst.EDU (cerbone giuseppe) (10/23/90)

I am looking for an implementation of a "base" set of classes to handle,
in an Object Oriented fashion, a graphical interface for Lisp under X11R4.

If you are familiar with it, I am looking for a set of classes that will have
the same functionalites that InterView provides for C++.

Any suggestions or references are appreciated. Please, e-mail and I shall 
summarize.

Thanks

-- Giuseppe

Giuseppe CERBONE                | Internet: cerbone@cs.orst.edu
OREGON STATE UNIVERSITY         | CSNET : cerbone%cs.orst.edu@relay.cs.net
Computer Science Department     | UUCP  : {hp-pcd, tektronix}!orstcs!cerbone
Corvallis, OR 97331 (USA)       | ------------------------------------------
Phone (503) 737 - 5568 (office) ; (503) 753 - 7720 (home)

mayer@hplabsz.HPL.HP.COM (Niels Mayer) (10/23/90)

> I am looking for an implementation of a "base" set of classes to handle,
> in an Object Oriented fashion, a graphical interface for Lisp under X11R4.
> 
> If you are familiar with it, I am looking for a set of classes that will have
> the same functionalites that InterView provides for C++.

The closest thing matching your description is GARNET from Carnegie
Mellon University... it provides its own set of UI interaction
classes, and its own object system supporting UI construction from the
base classes. GARNET is free but requires a licence, and it requires a
big lisp system. See the message appended at the end of this posting for
details.

Since you posted this to comp.lang.lisp.x, you may be interested in
WINTERP, which is based on xlisp. It is similar to InterViews insamuch
as it provides a set of widget classes defined by OSF/Motif UI toolkit
and provides OO access to these widgets.  The widgets are similar to
InterViews interactors, however they are far less general &
generalizable. To compensate for that, there exist a large number of
different classes whose instances provide frequently needed UI
interaction objects -- e.g. text editors, labels, toggle buttons, push
buttons, browsers, etc and simple constraint-based layout manager
objects allowing for the creation of UI panels, dialogue boxes, and
menus. If you are satisfied with reusing highly flexible-but-standard
UI objects rather than custom-making your own UI interactors each
time, then Motif will be good enough. If you will be needing special
UI objects (e.g. for building graph-editors & drawing programs), then
InterViews is the way to go. That's not to say that special UI objects
cannot be built in Motif -- they can, but using C + the X toolkit is
not as clean as using C++. 

WINTERP version 1.01 is available free by anon. ftp from expo.lcs.mit.edu.
version 1.02 available real soon now, as will be the Motif 1.1 version.
Here's more info:

==============================================================================

WINTERP: An object-oriented rapid prototyping, development and delivery
environment for building user-customizable applications with the OSF/Motif
UI Toolkit.

------------------------------------------------------------------------------

WINTERP is a Widget INTERPreter, an application development environment
enabling rapid prototyping of graphical user-interfaces (GUI) through the
interactive programmatic manipulation of user interface objects and their
attached actions. The interpreter, based on David Betz's XLISP, provides an
interface to the X11 toolkit Intrinsics (Xtk), the OSF/Motif widget set,
primitives for collecting data from UN*X processes, and facilities for
interacting with other UN*X processes. WINTERP thus supports rapid
prototyping of GUI-based applications by allowing the user to interactively
change both the UI appearance and application functionality. These features
make WINTERP a good tool for learning and experimenting with the
capabilities of the OSF/Motif UI toolkit, allowing UI designers to more
easily play "what if" games with different interface styles.

WINTERP is also an excellent platform for delivering extensible or
customizable applications. By embedding a small, efficient language
interpreter with UI primitives within the delivered application, users and
system integrators can tailor the static and dynamic layout of the UI,
UI-to-application dialogue, and application functionality. WINTERP's use of
a real programming language for customization allows WINTERP-based
applications to be much more flexible than applications using customization
schemes provided by the X resource database or OSF/Motif's UIL (user
interface language).

An environment similar to WINTERP's already exists in the Gnu-Emacs text
editor -- WINTERP was strongly influenced by Gnu-Emacs' successful design.
In Gnu-Emacs, a mini-Lisp interpreter is used to extend the editor to
provide text-browser style interfaces to a number of UN*X applications
(e.g. e-mail user agents, directory browsers, debuggers, etc). Whereas
Emacs-Lisp enables the creation of new applications by tying together
C-implemented primitives operating on text-buffer UI objects, WINTERP-Lisp
ties together operations on graphical UI objects implemented by the Motif
widgets. Both achieve a high degree of customizability that is common for
systems implemented in Lisp, while still attaining the speed of execution
and (relatively) small size associated with C-implemented applications.

Other features:
	* WINTERP is free software -- available via anonymous ftp from
	  expo.lcs.mit.edu:contrib/winterp/winterp-1.01.tar.Z
	* Portable -- runs without porting on many Unix systems.	
	* Interface to gnuemacs' lisp-mode allows code to be developed
	  and tested without leaving the editor;
	* Built-in RPC mechanism for inter-application communications;
	* XLISP provides a simple Smalltalk-like object system.
	* OSF/Motif widgets are real XLISP objects -- widgets can be
	  specialized via subclassing, methods added or altered, etc.
	* Automatic storage management of Motif/Xt/X data.
	* Contains facilities for "direct manipulation" of UI components;

You may obtain the current source, documentation, and examples via
anonymous ftp from host expo.lcs.mit.edu: in directory contrib/winterp you
will find the compress(1)'d tar(1) file winterp.tar.Z. If you do not have
Internet access you may request the source code to be mailed to you by
sending a message to winterp-source%hplnpm@hplabs.hp.com or
hplabs!hplnpm!winterp-source.

There is also a mailing list for WINTERP-related announcements and
discussions. To get added to the list, send mail to
winterp-request%hplnpm@hplabs.hp.com or hplabs!hplnpm!winterp-request.

-------------------------------------------------------------------------------
	    Niels Mayer -- hplabs!mayer -- mayer@hplabs.hp.com
		  Human-Computer Interaction Department
		       Hewlett-Packard Laboratories
			      Palo Alto, CA.
				   *
==============================================================================
==============================================================================
Newsgroups: comp.windows.x,comp.lang.lisp,comp.graphics,comp.cog-eng
Subject: Lisp, X Toolkit Available for free
Keywords: Lisp, X, Toolkit, Garnet, User Interface
Message-ID: <8543@pt.cs.cmu.edu>
Date: 22 Mar 90 15:40:52 GMT
Organization: Carnegie-Mellon University, CS/RI
Lines: 87
Xref: hplabsz comp.windows.x:19723 comp.lang.lisp:2811 comp.graphics:10296 comp.cog-eng:1547
Posted: Thu Mar 22 07:40:52 1990

This message contains the announcement of the Garnet toolkit, which was
first distributed last December, as well as the announcement of a meeting
on Garnet at the SIGCHI Conference in Seattle.

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
                 Announcing the Availability of Garnet:
     Generating an Amalgam of Realtime, Novel Editors and Toolkits

The Garnet research project in the School of Computer Science at Carnegie
Mellon University is happy to announce the release of our toolkit for
general use.  The Garnet Toolkit helps to implement highly-interactive,
graphical, direct manipulation programs for X/11 in CommonLisp.  These
programs typically have a number of graphical objects (up to about 2500) on
the screen that can be manipulated by the mouse and keyboard.  Typical
applications of the Garnet toolkit include: drawing programs such as
Macintosh MacDraw, iconic file manipulation programs such as the Macintosh
Finder, box and arrow diagram editors such as graphs and PERT charts,
graphical programming languages, board game user interfaces, simulation and
process monitoring programs, user interface construction tools, some forms
of CAD/CAM programs, etc.  The Garnet Toolkit does not help with text
editing (except for small labels or property-sheet fields).

Important features of the toolkit include:
* Coverage of the entire user interface, including the contents of the
  applications' windows.

* Look-and-feel independent, while still providing a high-level of support.
  A set of "widgets" is provided for those who do not wish to define a
  look-and-feel.

* An object-oriented architecture using a prototype-instance model.

* Constraints integrated with the object system, so that any slot (instance
  variable) of any object can be declared as a "formula" which will be
  re-evaluated whenever there is a change in any other objects it references.

* Automatic graphic object updating.  Graphical objects are retained and
  remember their position on the screen.  Whenever any property changes,
  they erase and redraw themselves, along with any other damaged objects.

* Separation of input handling from graphics programming, through the use
  of "interactor" objects, which encapsulate interactive behaviors.

* Hiding all of X/11.  The programmer using the Garnet Toolkit never makes
  Xlib (CLX) calls or receives Xlib events.

In the future, high level tools including a sophisticated Interface Builder,
called Lapidary, will be released.  Garnet is implemented on top of the CLX
interface to X/11, and will work for any CommonLisp.  So far, we have it
working on Allegro, Lucid, and CMU CommonLisps on various hardware.
There is very little implementation-specific code, so porting to other 
platforms should be simple.  Garnet does NOT use CLOS or any existing 
X toolkit (such as Xtk or Motif).  The toolkit comes with debugging tools,
complete reference manuals, and a tutorial.

Garnet is being developed under a grant from DARPA.  Papers about Garnet have
appeared at OOPSLA (1988), SIGCHI (1989 & 1990), UIST (1989), and the
X Conference (1990).

Garnet source and binaries are available for free, but you need to have a
license from CMU.  Already, over 20 sites are licensed and over 100 have
expressed interest.  Send requests (including a full work or university
physical mail address) for additional information or a license to:

	Brad A. Myers
	School of Computer Science
	Carnegie Mellon University
	Pittsburgh, PA  15213-3890
	(412) 268-5150
	brad.myers@cs.cmu.edu