With UI standing for user interface, then by definition, ML::AbstractUI is a UI-concept independent UI-API in Standard ML currently with crossplatform classical windowing system implementations for 'WindowsNT/95/98', 'Linux/X-Windows' and other Unixes. (yes, that's a long definition... :). It is all distributed under the GNU Library General Public Licence (LGPL), which (in short) allows you to build commercial applications with it, as long as you distribute all the sourcecode and copyrightnotices for ML::AbstractUI in unmodified form along with your software.
There is also a GUI builder, called The Construct, available for
ML::AbstractUI on this homepage.
Requirements
To use ML::AbstractUI you will need either the SML/NJ compiler with 'eXene' and 'CML' if you are using some kind of Unix with X-Windows or the commercial MLWorks compiler if you are using 'MS-Windows'.
As for the SML/NJ compiler, I recommend using the SML/NJ version 110.0.6. I know that version 110.0.3 has memory leaks. It would easiest for you to compile ML::AbstractUI if you also have the compiler manager CM for SML/NJ. John Reppy of the 'SML/NJ team' also made a small enhancement to 'eXene' due to an error in my X-server (and possibly also other X-servers). This change has already been released in 'eXene' for SML/NJ version 110.0.6. It is line 111 in the file eXene/lib/window/keymap.sml in the 'eXene' source code which should be expanded to:
(* NOTE: some X servers generate bogus keycodes on occasion *) fun lookupKC (KM(minKC, a)) (XTy.KEYCODE kc) = (Array.sub(a, kc - minKC) handle Subscript => [])
You can download the source code which is ready for compilation with SML/NJ here: MLAbstractUI19990927SMLNJsrc.tar. And a version prepared for MLWorks here: MLAbstractUI19990927MLWsrc.tar.
It is packed with tar, so to unpack you do something like 'tar -xvf file'.
Compiling a demo
To compile with the SML/NJ version, go to the directory 'HardcoreProcessing/MLAbstractUIDemos/srcSML/demoname' in the distribution, start the compiler with 'CM' and 'CML' and call the usual 'CM.make();'. Then call the 'doIt ()' method in the main structure of the demo to start it.
With MLWorks you load the project file for the desired demo in the directory
'HardcoreProcessing/MLAbstractUIDemos/srcSML/demoname'
in the distribution. Then hit 'project->compile target sources'
in the menu, wait for a couple of hours, hit 'project->load targets'
and wait for a couple of hours again. Then call the 'doIt ()' method in the main
structure of the demo to start it.
Documentation
There is a presentation document about
AbstractUI::ML and The Construct Basics which should give a good overview.
There is also an online version of the ML::AbstractUI documentation here.
The ML::AbstractUI API in IDL
I have written a document outlining how the API for ML::AbstractUI
might be implemented in IDL:
ML::AbstractUI in IDL.