[mcclim-cvs] CVS mcclim/Doc

rstrandh rstrandh at common-lisp.net
Mon Oct 30 08:21:01 UTC 2006


Update of /project/mcclim/cvsroot/mcclim/Doc
In directory clnet:/tmp/cvs-serv27169

Modified Files:
	manual.tex 
Log Message:
Section on how CLIM is different from traditional GUI toolkits.


--- /project/mcclim/cvsroot/mcclim/Doc/manual.tex	2006/10/30 06:26:53	1.32
+++ /project/mcclim/cvsroot/mcclim/Doc/manual.tex	2006/10/30 08:21:01	1.33
@@ -95,6 +95,78 @@
 and not well described.  It will be noted here when they are partially
 implemented in McCLIM or not implemented at all.
 
+\section{How CLIM is different}
+
+Many new users of CLIM have a hard time trying to understand how it
+works and how to use it.  A large part of the problem is that many
+such users are used to more traditional GUI toolkits, and they try to
+fit CLIM into their mental model of how GUI toolkits should work. 
+
+But CLIM is much more than just a GUI toolkit, as suggested by its
+name, it is an \emph{interface manager}, i.e. it is a complete
+mediator between application ``business logic'' and the way the user
+interacts with objects of the application.  In fact, CLIM doesn't have
+to be used with graphics output at all, as it contains a large
+collection of functionality to manage text. 
+
+Traditional GUI toolkits have an \emph{event loop}.  Events are
+delivered to GUI elements called \emph{gadgets} (or \emph{widgets}),
+and the programmer attaches \emph{event handlers} to those gadgets in
+order to invoke the functionality of the application logic.  While
+this way of structuring code is sometimes presented as a virtue
+(``Event-driven programming''), it has an unfortunate side effect,
+namely that event handlers are executed in a null context, so that it
+becomes hard to even remember two consecutive events.  The effect of
+event-driven programming is that applications written that way have
+very rudimentary interaction policies.
+
+At the lowest level, CLIM also has an event loop, but most application
+programmers never have any reason to program at that level with CLIM.
+Instead, CLIM has a \emph{command loop} at a much higher level than
+the event loop.  At each iteration of the command loop:
+
+\begin{itemize}
+\item A command is acquired.  You might satisfy this demand by
+  clicking on a menu item, by typing the name of a command, by hitting
+  some kind of keystroke, by pressing a button, or by pressing some
+  visible object with a command associated with it;
+\item Arguments that are required by the command are acquired.  Each 
+    argument is often associated with a \emph{presentation type}, and
+    visible objects of the right presentation type can be clicked on
+    to satisfy this demand.  You can also type a textual
+    representation of the argument, using completion, or you can use a
+    context menu;
+\item The command is called on the arguments, usually resulting in
+    some significant modification of the data structure representing
+    your application logic;
+\item A \emph{display routine} is called to update the views of the
+  application logic.  The display routine may use features such as
+  incremental redisplay. 
+\end{itemize}
+
+Instead of attaching event handlers to gadgets, writing a CLIM
+application therefore consists of:
+
+\begin{itemize}
+\item writing CLIM commands that modify the application data
+  structures independently of how those commands are invoked, and
+  which may take application objects as arguments;
+\item writing display routines that turn the application data
+  structures (and possibly some "view" object) into a collection of
+  visible representations (having presentation types) of application
+  objects;
+\item writing completion routines that allow you to type in
+  application objects (of a certain presentation type) using
+  completions;
+\item independently deciding how commands are to be invoked (menus,
+  buttons, presentations, textual commands, etc).
+\end{itemize}
+
+By using CLIM as a mediator of command invocation and argument
+acquisition, you can obtain some very modular code.  Application logic
+is completely separate from interaction policies, and the two can
+evolve separately and independently. 
+
 \part{Getting Started}
 
 \chapter{CLIM Demos and Applications}




More information about the Mcclim-cvs mailing list