On Saturday, April 30, 2005, at 03:48 PM, Paul Werkowski wrote:
| | 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.
Seems like COM-DESCRIBE is in McCLIM but not Lispworks CLIM.
Now you mention it the spec, from what I can remember, is very quiet about what commands are available in any given CLIM implementation. This probably means that for truly portable code, it's not possible to rely on any commands existing and all should therefore be defined in the application itself.
That seems like it could be quite a chore...
I defined that, and worked around the CLIMI internal stuff using CLIM MAP-OVER-x functions. Having done that and a bit more hacking (below) your code worked, meaning that command "Show Sheet Hierarchy" displayed a tree of sheet objects that were mouse sensitive for COM-DESCRIBE.
This is good news, I think. Or maybe not. Hrmmm.
Some other things:
(find-pane-named *application-frame* 'app) returned a SPACING-PANE. I had to use GET-FRAME-PANE instead.
From the spec: " get-frame-pane frame pane-name [Generic function] Returns the named CLIM stream pane in the frame frame whose name is pane-name .
find-pane-named frame pane-name [Generic function] Returns the pane in the frame frame whose name is pane-name . This can return any type of pane, not just CLIM stream panes. "
I had assumed (presumably incorrectly for Lispworks CLIM, at least) that a pane defined as being :interactor or :application would be, well, an interactor or an application pane (which are stream panes). I hadn't realized this might not be portable, but have changed the code accordingly.
Sometimes SHEET-CHILDREN popped a NO-APPLICABLE-METHOD for objects for which SHEETP returned T. The only way I could find to proceed was to define dummy methods for classes WIN32-LIB-CLIM::WIN32- TOP-LEVEL-MENU WIN32-LIB-CLIM::WIN32-SCROLLBAR-PANE WIN32-LIB-CLIM:: WIN32-POINTER-DOCUMENTATION-PANE
Obviously these won't be a problem in McCLIM but it does indicate probing too low into the implementation might be problematic.
Ouch... I could check for the method existing on the object, but I suspect this is a specification violation on the part of Lispworks... the spec is very clear that "All sheet objects must implement or inherit methods for each of these generic functions" (section 7.2.1) immediately above the description of SHEET-CHILDREN.
This is all very interesting to me, thank you for taking the time to investigate it.
-Duncan
Paul