dumb question about gadgets
John Morrison
jm at symbolic-simulation.com
Sun Nov 12 20:26:17 UTC 2017
Hi;
So I think I misrepresented this (both to you and myself).
Vintage commit abba473 respects the following, regardless of whether it is
The Right Thing for me to ask of McCLIM:
(with-output-as-gadget (stream :x 0) ....
And the gadgets come out stacked vertically
The next commit, e04adb3, AFAICT doesn't accept that:
While evaluating the form starting at line 28, column 0
of #P"/home/jm/tmp69/test-gadgets-v04.lisp":
debugger invoked on a SB-INT:SIMPLE-PROGRAM-ERROR in thread
#<THREAD "main thread" RUNNING {10029568C3}>:
keyword argument not a symbol:
#<CLOSURE (FLET CLIM-INTERNALS::GADGET-OUTPUT-RECORD-CONSTRUCTOR :IN
DISPLAY-GADGETS)
{155549A4D62B}>.
If I recall correctly, I did it because of this
<http://bauhh.dyndns.org:8000/clim-spec/30-5.html#_1866> bit of the CLIM
spec...
Current vintage seems to accept the request without complaining, but does
not honor it.
That took an embarrassingly long time to track down.
-jm
On Sun, Nov 12, 2017 at 3:13 PM, Daniel Kochmański <daniel at turtleware.eu>
wrote:
> The behavior seems to be there for a long time and is not a bug but
> deliberately coded. This is made for consistency with all macros which
> support :move-cursor key parameter (like `surrounding-output-with-
> border'):
>
> If the boolean *move-cursor* is true (the default), then the text cursor
> will be moved so that it immediately follows the lower right corner of the
> bordered output.
>
> So if wrapping things in `vertically' solves the issue we are all set.
>
> Best regards,
> Daniel
>
>
> On 11.11.2017 22:40, John Morrison wrote:
>
> Hey, thanks. I will get on the task of trying to find out exactly which
> commit changed the behavior I remember. This will, however, take me a bit
> to wrap my brain around checking out particular git commit versions, as I
> am pretty much a git lightweight.
>
> Thanks again!
>
> -jm
>
>
> On Sat, Nov 11, 2017 at 4:06 PM, Daniel Kochmański <daniel at turtleware.eu>
> wrote:
>
>> Alright. Fact that we start by diagonal lines looks like a bug (though
>> I'm not 100% sure) – could you please fill out the bug report? If you know
>> commit when it worked as you expected, that would be helpful too.
>>
>> As of your problem at hand – macro vertically (and all the others) isn't
>> limited only to layouts section, you may use it in display-gadget function
>> too. If you need something, what will compose list in such macro, it is a
>> matter of writing macro doing just that, like
>>
>> (defmacro vertically* (options body-list) `(vertically ,options
>> , at body-list))
>>
>> -- cut here --
>>
>> (in-package :clim-user)
>>
>> (define-application-frame test-gadgets ()
>> ()
>> (:panes
>> (output
>> :application
>> :display-time :command-loop
>> :display-function 'display-gadgets)
>> (outputs
>> :application
>> :display-time :command-loop
>> :display-function 'display-gadgets2))
>> (:layouts
>> (default (horizontally () output outputs))))
>>
>> (defmethod display-gadgets ((frame test-gadgets) stream)
>> (dolist (item '("one" "two" "three" "four"))
>> (with-output-as-gadget (stream)
>> (make-pane 'push-button
>> :label item
>> :activate-callback
>> (lambda (&rest args)
>> (declare (ignore args))
>> (notify-user *application-frame* "You clicked a
>> button"))))))
>>
>> (defun make-gadget (item)
>> (make-pane 'push-button
>> :label item
>> :activate-callback
>> (lambda (&rest args)
>> (declare (ignore args))
>> (notify-user *application-frame* "You clicked a button"))))
>>
>> (defmethod display-gadgets2 ((frame test-gadgets) stream)
>> (with-output-as-gadget (stream)
>> (vertically ()
>> (make-gadget "one")
>> (make-gadget "two")
>> (make-gadget "three"))))
>>
>> (run-frame-top-level (make-application-frame 'test-gadgets))
>>
>> -- cut here --
>>
>> hope this is helpful.
>>
>> Regards,
>>
>> Daniel
>>
>> On 11.11.2017 21:49, John Morrison wrote:
>>
>> ugh - should attach what I said I attached
>>
>> On Sat, Nov 11, 2017 at 3:48 PM, John Morrison <
>> jm at symbolic-simulation.com> wrote:
>>
>>> Hi Daniel (and Lucien, who replied privately):
>>>
>>> (1) thanks for the "not dumb" comment.
>>>
>>> Sorry additionally for not being clear. The app is intended for the
>>> buttons (will eventually be checkboxes, but buttons were simpler for
>>> purposes of isolating the behavior) to be dynamic (unknown at layout time
>>> as things to be checked will come and go during program execution).
>>>
>>> So while I did have some joy with making :list-panes with :items in the
>>> definition of the application frame (and it was prettier than what I sent),
>>> I had less joy changing those items programmatically.
>>>
>>> When I put a "terpri" in as in the slightly revised test program as the
>>> other alternative, I get a blank line between the gadgets, which (given I
>>> am going to have a lot of items) would cause the user excess scrolling due
>>> to the whitespace between boxes.
>>>
>>> -jm
>>>
>>>
>>>
>>>
>>> On Sat, Nov 11, 2017 at 3:24 PM, Daniel Kochmański <daniel at turtleware.eu
>>> > wrote:
>>>
>>>> Hello John,
>>>>
>>>> question is obviously not dumb. Some cognitive problem arises from the
>>>> disparity, that McCLIM provides both sheets and gadgets. If you want to lay
>>>> out buttons vertically, you may either put terpri after each make-pane, or
>>>> put each button in your layout (the latter is more elegant imho):
>>>>
>>>> -- cut --
>>>>
>>>> (in-package :clim-user)
>>>>
>>>> (defun make-gadget (item)
>>>> (make-pane 'push-button
>>>> :label item
>>>> :activate-callback
>>>> (lambda (&rest args)
>>>> (declare (ignore args))
>>>> (notify-user *application-frame* "You clicked a
>>>> button"))))
>>>>
>>>> (define-application-frame test-gadgets ()
>>>> ()
>>>> (:panes)
>>>> (:layouts
>>>> (default (vertically ()
>>>> (make-gadget "one")
>>>> (make-gadget "two")
>>>> (make-gadget "three")
>>>> (make-gadget "four")))))
>>>>
>>>>
>>>> (run-frame-top-level (make-application-frame 'test-gadgets))
>>>>
>>>> -- cut --
>>>>
>>>> Best regards,
>>>>
>>>> Daniel
>>>>
>>>>
>>>>
>>>> On 11.11.2017 21:07, John Morrison wrote:
>>>>
>>>>> Hi;
>>>>>
>>>>> In another app I am writing, I BELIEVE gadgets used to come out
>>>>> stacked vertically. After an upgrade (to current git), I think they come
>>>>> out "diagonally," in that the x & y of successive gadgets increase
>>>>> (presumbly by the dimensions of its preceding gadget). Please find
>>>>> attached the simplest test program I could cons up that displays the
>>>>> behavior, along with a screenshot that shows the behavior.
>>>>>
>>>>> What is the idiomatic/best way to get them to stack vertically? I
>>>>> messed about (again, mostly unsuccessfully, or I wouldn't be pestering you
>>>>> all) with various approaches, but every time I find myself with a complex
>>>>> solution, it turns out there is indeed a Better, Simpler Way.
>>>>>
>>>>> Thanks,
>>>>>
>>>>> -jm
>>>>>
>>>>>
>>>>
>>>
>>
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/mcclim-devel/attachments/20171112/68b565cd/attachment-0001.html>
More information about the mcclim-devel
mailing list