<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<p>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.</p>
<p>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</p>
<p>(defmacro vertically* (options body-list) `(vertically ,options
,@body-list))</p>
<p>-- cut here --</p>
<p>(in-package :clim-user)<br>
<br>
(define-application-frame test-gadgets ()<br>
()<br>
(:panes<br>
(output<br>
:application<br>
:display-time :command-loop<br>
:display-function 'display-gadgets)<br>
(outputs<br>
:application<br>
:display-time :command-loop<br>
:display-function 'display-gadgets2))<br>
(:layouts<br>
(default (horizontally () output outputs))))<br>
<br>
(defmethod display-gadgets ((frame test-gadgets) stream)<br>
(dolist (item '("one" "two" "three" "four"))<br>
(with-output-as-gadget (stream)<br>
(make-pane 'push-button<br>
:label item<br>
:activate-callback<br>
(lambda (&rest args)<br>
(declare (ignore args))<br>
(notify-user *application-frame* "You clicked a
button"))))))<br>
<br>
(defun make-gadget (item)<br>
(make-pane 'push-button<br>
:label item<br>
:activate-callback<br>
(lambda (&rest args)<br>
(declare (ignore args))<br>
(notify-user *application-frame* "You clicked a
button"))))<br>
<br>
(defmethod display-gadgets2 ((frame test-gadgets) stream)<br>
(with-output-as-gadget (stream)<br>
(vertically ()<br>
(make-gadget "one")<br>
(make-gadget "two")<br>
(make-gadget "three"))))<br>
<br>
(run-frame-top-level (make-application-frame 'test-gadgets))<br>
</p>
<p>-- cut here --</p>
<p>hope this is helpful.<br>
</p>
<p>Regards,</p>
<p>Daniel<br>
</p>
<br>
<div class="moz-cite-prefix">On 11.11.2017 21:49, John Morrison
wrote:<br>
</div>
<blockquote type="cite"
cite="mid:CAOQgGjQJTSO7xHO1mGA4qL3fT=CF13gkBM1WqYd33Pcgh5yPqQ@mail.gmail.com">
<div dir="ltr">ugh - should attach what I said I attached</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">On Sat, Nov 11, 2017 at 3:48 PM, John
Morrison <span dir="ltr"><<a
href="mailto:jm@symbolic-simulation.com" target="_blank"
moz-do-not-send="true">jm@symbolic-simulation.com</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">Hi Daniel (and Lucien, who replied
privately):
<div><br>
</div>
<div>(1) thanks for the "not dumb" comment.</div>
<div><br>
</div>
<div>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).</div>
<div><br>
</div>
<div>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.</div>
<div><br>
</div>
<div>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.</div>
<span class="HOEnZb"><font color="#888888">
<div><br>
</div>
<div>-jm</div>
<div><br>
</div>
<div><br>
</div>
<div><br>
</div>
</font></span></div>
<div class="HOEnZb">
<div class="h5">
<div class="gmail_extra"><br>
<div class="gmail_quote">On Sat, Nov 11, 2017 at 3:24
PM, Daniel Kochmański <span dir="ltr"><<a
href="mailto:daniel@turtleware.eu"
target="_blank" moz-do-not-send="true">daniel@turtleware.eu</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex">Hello
John,<br>
<br>
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):<br>
<br>
-- cut --<br>
<br>
(in-package :clim-user)<br>
<br>
(defun make-gadget (item)<br>
(make-pane 'push-button<br>
:label item<br>
:activate-callback<br>
(lambda (&rest args)<br>
(declare (ignore args))<br>
(notify-user *application-frame*
"You clicked a button"))))<br>
<br>
(define-application-frame test-gadgets ()<br>
()<br>
(:panes)<br>
(:layouts<br>
(default (vertically ()<br>
(make-gadget "one")<br>
(make-gadget "two")<br>
(make-gadget "three")<br>
(make-gadget "four")))))<br>
<br>
<br>
(run-frame-top-level (make-application-frame
'test-gadgets))<br>
<br>
-- cut --<br>
<br>
Best regards,<br>
<br>
Daniel
<div class="m_7477811832927283636HOEnZb">
<div class="m_7477811832927283636h5"><br>
<br>
<br>
On 11.11.2017 21:07, John Morrison wrote:<br>
<blockquote class="gmail_quote"
style="margin:0 0 0 .8ex;border-left:1px
#ccc solid;padding-left:1ex">
Hi;<br>
<br>
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.<br>
<br>
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.<br>
<br>
Thanks,<br>
<br>
-jm<br>
<br>
</blockquote>
<br>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</blockquote>
<br>
</body>
</html>