[mcclim-devel] Command translator question

Duncan Rose duncan at robotcat.demon.co.uk
Sat Apr 30 16:31:45 UTC 2005


On Saturday, April 30, 2005, at 02:02 PM, Paul Werkowski wrote:

>
> ----- Original Message -----
> From: "Duncan Rose" <duncan at robotcat.demon.co.uk>
> To: <mcclim-devel at common-lisp.net>
> Sent: Saturday, April 30, 2005 4:54 AM
> Subject: [mcclim-devel] Command translator question
>
>
> |
> | I'm trying to define a presentation command translator which will
> | invoke 'describe presentation' on specific types. Unfortunately it
> | doesn't work (or at least, works in a way that I'm not expecting so 
> if
> | it's working it's not doing what I want ;-)
> |
> | Looking at the translators defined in the Listener and in
> | builtin-commands.lisp hasn't helped. Here's the translator:
> |
> | (define-presentation-to-command-translator port-select-to-command  ;
> | name
> |    (t                     ; from-type
> |     com-describe          ; command-name - maybe
> | com-describe-presentation?
> |     global-command-table  ; command table containing command
> |     :gesture :select      ; activate on :select (left-button click)
> |     ;; :tester ...
> |     :documentation
> |     "Invoke the 'describe presentation' command on the selected
> | presentation"
> |     :pointer-documentation ((object stream) (format stream "Describe 
> ~A"
> | object))
> |     :menu t               ; command should appear in popped-up menus
> |     ;; :priority ...
> |     :echo nil)            ; don't echo the command when it is invoked
> |    ;; arglist must be a subset (using string-equal) of:
> |    ;;    (object presentation context-type frame event window x y)
> |    (object)
> |    ;; body of translator; returns a list of the arguments to the 
> command
> |    ;; named by command-name.
> |    (list object))
> |
> | In case I was providing the wrong 'from-type' I changed it to T (all
> | types, I hope). I've written this using the Beagle back end but it
> | doesn't work for me when run under CLX either...
> |
> | Any suggestions would be appreciated, I'm obviously missing 
> something...
>
> Well, you have not defined COM-DESCRIBE in the attached glimpse.lisp.
> I have never tried using the global command table in translators so I 
> can't
> say
> for sure that it should work. I have always used the frame command 
> table for
> translators.
>

This might be a safer way of doing it but I know there's a com-describe 
in the global command table and I'd like to use it; however, if that's 
not portable it might be better if I didn't.

I'm thinking at the moment it might be necessary for the command table 
for glimpse (defaults to 'glimpse' I believe) to :inherit-from the 
global command table maybe. There's a note for 
'define-presetation-translator' that the translator will only be 
applicable when the command table provided as an argument in the call 
is one of the command tables from which the application frame's command 
table inherits. I don't know if this is a restriction for 
'define-presentation-to-command-translator' but I'm going to 
investigate this some more.

> Just a nit, but I don't ever recall seeing the idiom (setf  x (push 
> thing
> x)) used
> elsewhere, just (push thing x) will do.
>

When I originally wrote the code I was using LIST I think, and the 
setf's just got left in.

> Another nit, you should avoid using unxported CLIMI features.
> MAP-OVER-PORTS instead of  CLIMI::*ALL-PORTS*
> MAP-OVER-GRAFTS instead of CLIMI::PORT-GRAFTS
> would make it possible for me to try this code in a "classic CLIM".
>

I'll change the code to be more compliant, thanks for pointing that out.

Originally the code was only intended to illustrate that application 
frames all generated a 'raised pane' that contains a 'menu pane' even 
if the application itself didn't use the menus. I then realized I could 
expand it somewhat to show me what was going on in the Beagle back end 
(with mirror regions and transformations etc.) a bit more easily than 
poking with the Listener; so it's currently very much a work in 
progress.

-Duncan


> Paul
>
>
>




More information about the mcclim-devel mailing list