[mcclim-devel] patches to guided-tour subsection "A Simple drawing application"

Again, mostly just tweaking grammar and spelling. There are two points below (marked with my initials), however, that seem like they could use some further clarification. I was concerned that I didn't understand McCLIM well enough to provide the clarification. If anyone out there can provide the clarification, but doesn't want to dicker with the text, drop me a line, or find me on #lisp, and I'll write the text. As usual, if I don't hear a squawk in a couple of days, I'll commit the change. best, R P.S. are these patch files really helpful for the text? In particular, is it useful to have my notes on places where we need clarification from their contexts untimely ripp'd? If I provide a comment saying that a paragraph could use amplification, and you see that in a patch file w/o context, is that at all useful to anyone? Index: guided-tour.tex =================================================================== RCS file: /project/mcclim/cvsroot/mcclim/Doc/Guided-Tour/guided-tour.tex,v retrieving revision 1.3 diff -c -r1.3 guided-tour.tex *** guided-tour.tex 16 Mar 2006 15:50:20 -0000 1.3 --- guided-tour.tex 19 Mar 2006 15:56:21 -0000 *************** *** 991,997 **** \subsection{A simple drawing application} ! We move on to a simple drawing application that draws lines and inserts text interactively. Our simple drawing program defines commands for various drawing operations and binds specific input events to these commands. --- 991,997 ---- \subsection{A simple drawing application} ! We move on to a simple application that draws lines and inserts text interactively. Our simple drawing program defines commands for various drawing operations and binds specific input events to these commands. *************** *** 1005,1010 **** --- 1005,1015 ---- multiple layouts with this option. We define two simple layouts, \code{default-layout} and \code{alternative}. + % I was confused by the discussion of layouts here. Looking at Figure + % 4, I do not see an alternative layout, and the default-default in + % the listing looks odd to me. Is this the remainder of a discussion + % that was deleted or an extension yet to be written? [2006/03/19:rpg] + \begin{figure*}[t] \lstset{style=framestyle} \lstinputlisting{draw-frame-commands} *************** *** 1048,1055 **** static user interfaces use this mixin. Note that \mcclim{} is sensitive to the order of the superclasses.\footnote{All stream classes like \class{standard-extended-input-stream} must be listed before ! \class{basic-pane}. Otherwise, there are no stream handling facilities ! available.} For \class{draw-pane}, the \method{handle-repaint} method shown in \figurename~\ref{fig-draw-handlerepaint} is straightforward. It --- 1053,1070 ---- static user interfaces use this mixin. Note that \mcclim{} is sensitive to the order of the superclasses.\footnote{All stream classes like \class{standard-extended-input-stream} must be listed before ! \class{basic-pane}. Otherwise, no stream handling facilities ! will be available.} ! ! % The above footnote refers to what looks like a very big potential ! % ``gotcha'' for the beginning McCLIM programmer. Suggestion: promote ! % this out of the footnote into body text as a main body paragraph ! % here. That paragraph should explain (1) why is it that putting ! % basic-pane before standard-extended-input-stream will cause stream ! % handling facilities to be crushed and (2) what exactly are the ! % implications of not having stream handling facilities. The phrase ! % ``stream handling'' hasn't been defined, and it's not obvious what ! % these facilities are. [2006/03/19:rpg] For \class{draw-pane}, the \method{handle-repaint} method shown in \figurename~\ref{fig-draw-handlerepaint} is straightforward. It *************** *** 1085,1125 **** conveniently. The interactor pane can be used to invoke one of three commands, either by typing the complete command including all its parameters or by typing only the command name, then a dialog queries ! the user for the missing command argument. Clicking on the menu bar ! entries is also possible. Also in this case, the user is queried for ! the missing arguments. But drawing by typing coordinates is not convenient. Therefore, we attach these commands to other user interactions. Figure ! \ref{fig-draw-interfacing} defines input methods for pointer button ! presses as well as key presses on the draw pane. Both handlers invoke ! the respective tracking function that uses \macro{tracking-pointer} to bypass the regular input distribution channels and to dispatch events to user defined handlers. ! ! For \class{pointer-button-press-event}, the input loop manages a ! ``rubber-banding'' line. The \keyword{:pointer-motion} is invoked whenever the mouse pointer is moved by the user. The code attached to ! \keyword{:pointer-motion} clears line already drawn and draws a new line with the new pointer position. It can easily undraw the old line by the using the special ink \constant{+flipping-ink+}. When the user confirms the line by releasing the pointer button, a command to the application is synthesized via \method{execute-frame-command} supplying all required parameters. ! Similarly, we provide such an input facility for text input. Whenever the user hits a key in the draw-pane, the respective \method{handle-event} calls \method{track-text-drawing} which attaches ! the character entered to the mouse pointer. Similarly to the ! rubber-banding line, the user can move the around this character while he is free to append additional string characters by additional key presses. He can confirm the text position with a mouse click causing a ! command to be dispatched to the application frame adding the text to the application frame permanently. As each of these methods invoke \code{execute-frame-command} passing ! in a special command invocation form, this naturally leads to code ! separation of how a command is invoked (menu-bar click, click on draw-pane or typing in the interactor pane) and the code for command execution (code bodies of \method{define-command}). --- 1100,1160 ---- conveniently. The interactor pane can be used to invoke one of three commands, either by typing the complete command including all its parameters or by typing only the command name, then a dialog queries ! the user for the missing command argument(s). Clicking on the menu bar ! entries is another way to invoke commands. When commands are invoked ! through the menu bar, the user will be queried for the missing ! argument(s) in the same way as if a command had been typed into the ! interactor pane. ! % also possible. Also in this case, the user is queried for ! % the missing arguments. But drawing by typing coordinates is not convenient. Therefore, we attach these commands to other user interactions. Figure ! \ref{fig-draw-interfacing} defines input methods (methods for ! \code{handle-event}) for pointer button ! presses as well as key presses on the draw pane. ! Each handler invokes a tracking function (\code{track-line-drawing} and ! \code{track-text-drawing}) that uses \macro{tracking-pointer} to bypass the regular input distribution channels and to dispatch events to user defined handlers. ! % old text: [2006/03/19:rpg] ! % Both handlers invoke ! % the respective tracking function that uses \macro{tracking-pointer} to ! % bypass the regular input distribution channels and to dispatch events ! % to user defined handlers. ! ! For \class{pointer-button-press-event}, which is used to draw lines, ! the input loop manages a ! ``rubber-banding'' line. % ! % what is pointer-motion here? Is it an event? And it's not really ! % the event that's invoked, to be absolutely clear. The event is ! % signaled, and the tracking-pointer macro provides a handler for that ! % event. So it is the code associated with :pointer-motion that is ! % invoked... I wasn't confident enough in my understanding of the ! % precise organization of the (Mc)CLIM architecture to venture a ! % rewrite, but there should be a clarification here. [2006/03/19:rpg] ! The \keyword{:pointer-motion} is invoked whenever the mouse pointer is moved by the user. The code attached to ! \keyword{:pointer-motion} clears the previously-drawn line and draws a new line with the new pointer position. It can easily undraw the old line by the using the special ink \constant{+flipping-ink+}. When the user confirms the line by releasing the pointer button, a command to the application is synthesized via \method{execute-frame-command} supplying all required parameters. ! We provide a similar input facility for text input. Whenever the user hits a key in the draw-pane, the respective \method{handle-event} calls \method{track-text-drawing} which attaches ! the character entered to the mouse pointer. As with the ! rubber-banding line, the user can move the displayed string around while he is free to append additional string characters by additional key presses. He can confirm the text position with a mouse click causing a ! command to be dispatched to the application frame that will add the text to the application frame permanently. As each of these methods invoke \code{execute-frame-command} passing ! in a special command invocation form, this naturally leads to a ! separation between the code that specifies how a command is invoked (menu-bar click, click on draw-pane or typing in the interactor pane) and the code for command execution (code bodies of \method{define-command}).
participants (1)
-
rpgoldman@real-time.com