dumb question about gadgets
Daniel Kochmański
daniel at turtleware.eu
Sat Nov 11 21:06:09 UTC 2017
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 <mailto: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 <mailto: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/fc3da0fe/attachment-0001.html>
More information about the mcclim-devel
mailing list