CLIMCLIM is an acronym for Common Lisp Interface Manager.
CLIM is a framework for designing portable but also platform-specific interfaces. While the concepts underlying CLIM are user interface paradigm independent, current implementations lean towards WIMPs, but still support CLIs. It is very notable for being an extreme application of object-oriented thought to user interface design, in that all of the abstractions have classes, and all of the core functionality is implemented by CLOS methods.
The architecture provides several useful abstractions for dealing with these issues:
- A specific drawing target or context, such as the Macintosh medium, a terminal medium, or the X medium, etc. It gives programmers access to these unportable objects, but also to a portable layer of abstraction called a "sheet", which is a cartesian plane in the truest sense. It then provides the code to render a sheet using a medium. This allows developers to design portable interfaces, yet provide platform-specific extensions to this interface.
It's not hard to imagine a (conceptually) simple extension to CLIM which, instead of 2D sheets, provides 3D worlds, or even 4D temporal worlds.
- Tying in with media and sheets are gadgets, which are ways to substitute platform-specific implementations and looks for controls and decorations. This concept was developed before the Macintosh, Windows, and other systems became a hegemony, and the designers allowed for anything to be a gadget for a specific part of an application's interface and appearance. So, it's not just a pre-defined widget set, although there are parts of the specification which give the very common examples needed.
- Regions and Designs
- CLIM takes a very abstract point of view about general drawing, using regions as geometric figures for clipping and bounding, and designs as possibly arbitrary kinds of graphics. The important part is that the common things like solid colors and transparencies, can be composed with any other design or region, either statically or dynamically.
- Output Records
- These are objects representing the graphics and other elements which are output to whatever medium is the target. They are fed into what are essentially recursive streams; that is, some output records are containers that can be set as a target for feeding sub-elements in as a stream. The order of the stream is back-to-front: later elements in front. The point of this abstraction is mainly for some laziness in redrawing (the records can be partially and fully replayed and re-ordered) and also to construct the system of dividing up the user's screen into definable regions.
- Input Records
- These are records of input, considered as events or collections of events, which can also be replayed and are stored.
- Perhaps the most powerful concept is the presentation, which depends on the preceding concepts. Presentations are basically a way to structure concepts and use them as objects right on the display screen, without any application support except for constructing them. In short, presentations are class mixins for output records (which could be the echo of an input as well), which have methods for changing their display format, a default click action, other actions available in a menu, and are extensible for other purposes.
The most visible difference about presentations is that they know their type, and will respond to mouse-over's by highlighting themselves dynamically based on the context that the user is in.
- This is totally disjoint from the previous concepts in other user interface architectures. In CLIM, commands are both within graphical menus and on command-lines pervasively. Furthermore, the command-line can actually parse the input for acceptance as a new presentation, and commands themselves parse into presentations once recognized. Commands also involve the notion of a dialog with options, which can be either embedded on the command-line (pseudo-graphically) or in a separate dialog window. Commands furthermore have a notion of what types of arguments they can accept, so being in a position to type a command argument also puts the user in a context where presentations of that type will be highlighted on mouse-over, and used in that argument position when clicked upon. Commands once executed also have a "replay" default action for their presentation.
As a whole, CLIM is unique because it provides means for instant accessibility to the meaning of a thing represented, a verb-object and object-verb integrated grammar, and a general object-based approach to abstraction. A particular feature of it is that "applications" in CLIM can amount to just a domain-specific vocabulary: a new set of nouns and verbs which can act on them, possibly with some representational translations. Once installed, this new application's features are instantly available as possible within any CLIM context.