dumb question about gadgets
John Morrison
jm at symbolic-simulation.com
Sat Nov 11 21:40:33 UTC 2017
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/20171111/ade6703e/attachment.html>
More information about the mcclim-devel
mailing list