Xm++/CommonInteract    Another User Interface Development System
-------------------

If you would like to implement X-Toolkit applications with C++ in a style
like this...

// mini sample application /////////////////////////////////////

class Test : public XmWindow {
	void cmd(char*);
	void quit(void*);
public:
    Test() : XmWindow("Xm++ Test Window") {}

	void initialize();
};

void Test::initialize() {
    XmDropdownMenu* menu = createDropdownMenu();

    menu->addLabel("&File");
    menu->addItems( Entry("Menu Item &One", CB(Test::cmd)), 
                    Entry("Menu Item &Two", CB(Test::cmd)),
                    NULLENTRY);
    menu->addSeparator();
    menu->addItem(	Entry("E&xit", CB(Test::quit)));

    addSubpane(Edit, "myEdit");
    edit("myEdit")->setText("Hello World.");
}

void Test::cmd(char* n) {
	edit("myEdit")->setText(n);
}

void Test::quit(void*) {
	exit(0);
}

void XmApp::initialize() {
    (new Test)->initialize();
}

///////////////////////////////////////////////////////////////

...then continue reading (contents of the current release's README):

Xm++ is a user interface framework for the C++ language built upon X11
and the X-Toolkit. It is designed to be a simple and intuitive programming
interface to access the functionality of commonly used widgets.
Xm++ was initially created for the Motif widget set, now support for the
Athena widgets was added. Applications created with Xm++ run in both
environments without changes, although many nice features are only
available when using Motif.
In some situations Xm++ extends the underlying toolkit (i.e. providing
a ComboBox borrowed from MS-Windows), but never tries to replace it -
data of user interface objects is left to the widgets and only duplicated
in rare cases.

Xm++ has nothing common with Motif++ besides the general idea to
encapsulate Motif widgets in C++ objects and the '++' in it's name. Many
ideas for the Xm++ architecture came from Digitalk's Smalltalk version,
which provides an easy to use framework for Windows/PM/Mac applications
(in the very first time of development I used the Windows dialog editor and
a simple parser to create similar Smalltalk and Xm++ dialogs :-).

Top level objects in Xm++:
* 'Windows', 'SystemDialogs' and 'ToolBoxes' which use the automatic layout
  feature of various composite widgets in Motif and Xaw
* 'UserDialogs' which can be individually laid out with a user interface
  builder (a first version of such a dialog editor is included in this
  distribution)

Controls (children of top level objects):
'staticText', 'staticImage', 'pushButton', 'checkBox', 'radioButton',
'edit', 'listBox', 'comboBox', 'groupBox', 'paneArea', 'drawing', 'toolBar'

The staticImage and all the button classes can display b/w (X-bitmap
format) or color (GIF format) pictures as an alternative to a label text.

Event handling is done by a simple but powerful mechanism which redirects
Xt callbacks to member functions of Xm++ objects.


CommonInteract(II) is built upon the Xm++ drawing class and provides
components for building direct manipulative applications. Is is a very
simplified implementation of some features from the CommonInteract system
(research project of our institute in 1991), an approach to define a
software achitecture for implementing direct manipulative applications
with multiple interaction media (i.e. sound, alternative input devices).
If you are interrested, look into the June 1993 issue of the JOOP (SIGS
Publications - Journal of Object Oriented Programming) - there should be
our paper about CommonInteract (but be aware, that it is our 'state of
the art' from 1991).
CommonInteract(II) is still undocumented and is included because it was
used to implement the dialog editor. It currently supports only drawing
primitives (lines, rectangles, circles...), but we plan to extend it to
support bitmaps and some controls also.
Known problem: the Xm++ drawing class has no redrawing strategy (always
redraws the whole window, even after minimal changes like selecting an
object), this looks very ugly on slow displays and should be fixed.


About this first release:

Xm++ is still incomplete and has a lot of bugs but we are using it here
for smaller applications which are running without problems. So I think
I can call it a 'beta release' which can be used to develop applications
for any non-critical purposes.
CommonInteract may be called a 'pre alpha release'. It's development will
be continued this year because we plan to use it for another research
project here. Besides incompleteness and the redrawing problem it seems
to be stable and can be used for experimental applications.

Platforms: this release was compiled and tested on:
  HP9000/720 running HP-UX 8.07
  SUN SPARC running SunOS Release 4.1.1
  PC-AT386 running Linux v0.99pl6

Caution: although the whole stuff was initially developed using an AT&T
standard C++ compiler - this release is tested only with GNU g++ 2.3.3 or
above (the next release will be tested with both compilers).

Where to get it:
================

I have uploaded it on: export.lcs.mit.edu as: /contrib/Xm++.0.5.tar.Z

(send a mail, if you cannot find it there, e-mail addr. below)

Where to find more information:
===============================

the .../doc directory contains
   INSTALL - how to build the libraries and examples
   README.GNU - problems and limitations when using gnu g++ (read!!)
   usersGuide.txt - a tutorial how to use Xm++
   reference.txt - a first try of a Xm++ class reference manual

the README files in the .../samples gives a brief description of
each of the seven samples.


Xm++/CommonInteract is free software for any non-profit purposes,
see the file .../lib/COPYRIGHT for details.

Send any comments, bug reports and donations :-) to the Author:

    Bernhard Strassl
    Vienna User Interface Group
	Institute for Applied Computer Science and Information Systems
    University of Vienna
    Lenaugasse 2/8, A-1080 Wien, Austria