dumb question about gadgets

John Morrison jm at symbolic-simulation.com
Sun Nov 12 20:53:20 UTC 2017


Hi Daniel;

Thanks!  Holy cow, but that was fast.  And sorry that took so long for me
to track down...

-jm


On Sun, Nov 12, 2017 at 3:44 PM, Daniel Kochmański <daniel at turtleware.eu>
wrote:

> OK, thank you. That was a missing piece I needed. Fix was pushed to master
> branch a second ago.
>
> Best regards,
>
> Daniel
>
> On 12.11.2017 21:26, John Morrison wrote:
>
> 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-borde
>> r'):
>>
>> 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/32738f1b/attachment-0001.html>


More information about the mcclim-devel mailing list