<div dir="ltr">Hi;<div><br></div><div>So I think I misrepresented this (both to you and myself). </div><div><br></div><div>Vintage commit abba473 respects the following, regardless of whether it is The Right Thing for me to ask of McCLIM:</div><div><div><br></div><div> (with-output-as-gadget (stream :x 0) ....</div></div><div><br></div><div>And the gadgets come out stacked vertically</div><div><br></div><div>The next commit, e04adb3, AFAICT doesn't accept that:</div><div><br></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><span style="font-family:monospace"><span style="color:rgb(0,0,0)">While evaluating the form starting at line 28, column 0<br>
</span></span><span style="font-family:monospace"> of #P"/home/jm/tmp69/test-gadgets-v04.lisp":<br>
</span><span style="font-family:monospace"><br></span><span style="font-family:monospace">debugger invoked on a SB-INT:SIMPLE-PROGRAM-ERROR in thread<br>
</span><span style="font-family:monospace">#<THREAD "main thread" RUNNING {10029568C3}>:<br>
</span><span style="font-family:monospace"> keyword argument not a symbol:<br>
</span><span style="font-family:monospace"> #<CLOSURE (FLET CLIM-INTERNALS::GADGET-OUTPUT-RECORD-CONSTRUCTOR :IN DISPLAY-GADGETS)<br>
</span><span style="font-family:monospace"> {155549A4D62B}>.<br>
</span><span style="font-family:monospace"><br></span></blockquote>
<font face="arial, helvetica, sans-serif">If I recall correctly, I did it because of <a href="http://bauhh.dyndns.org:8000/clim-spec/30-5.html#_1866" style="">this</a> bit of the CLIM spec...</font><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">Current vintage seems to accept the request without complaining, but does not honor it.</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">That took an embarrassingly long time to track down.</font></div><div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace">-jm</span></div><div><span style="font-family:monospace"><br></span></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Nov 12, 2017 at 3:13 PM, Daniel Kochmański <span dir="ltr"><<a href="mailto:daniel@turtleware.eu" target="_blank">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">
<div text="#000000" bgcolor="#FFFFFF">
<p>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-<wbr>border'):</p>
<blockquote>
<p>If the boolean <i>move-cursor</i> is <span class="m_4133417934581058318term">true</span>
(the default), then the text cursor will be moved so that it
immediately follows the lower right corner of the bordered
output. </p>
</blockquote>
So if wrapping things in `vertically' solves the issue we are all
set.<br>
<br>
Best regards,<br>
Daniel<div><div class="h5"><br>
<br>
<div class="m_4133417934581058318moz-cite-prefix">On 11.11.2017 22:40, John Morrison
wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">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.
<div><br>
</div>
<div>Thanks again!</div>
<div><br>
</div>
<div>-jm</div>
<div><br>
</div>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">On Sat, Nov 11, 2017 at 4:06 PM, Daniel
Kochmański <span dir="ltr"><<a href="mailto:daniel@turtleware.eu" target="_blank">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">
<div 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)<span><br>
<br>
(define-application-frame test-gadgets ()<br>
()<br>
(:panes<br>
</span> (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)<span><br>
(make-pane 'push-button<br>
:label item<br>
:activate-callback<br>
(lambda (&rest args)<br>
(declare (ignore args))<br>
</span> (notify-user
*application-frame* "You clicked a button"))))))<span><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>
</span> (defmethod display-gadgets2 ((frame
test-gadgets) stream)<br>
(with-output-as-gadget (stream)<span><br>
(vertically ()<br>
(make-gadget "one")<br>
(make-gadget "two")<br>
</span> (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>
<div>
<div class="m_4133417934581058318h5"> <br>
<div class="m_4133417934581058318m_-3300027386482786851moz-cite-prefix">On
11.11.2017 21:49, John Morrison wrote:<br>
</div>
<blockquote type="cite">
<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">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="m_4133417934581058318m_-3300027386482786851HOEnZb"><font color="#888888">
<div><br>
</div>
<div>-jm</div>
<div><br>
</div>
<div><br>
</div>
<div><br>
</div>
</font></span></div>
<div class="m_4133417934581058318m_-3300027386482786851HOEnZb">
<div class="m_4133417934581058318m_-3300027386482786851h5">
<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">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_4133417934581058318m_-3300027386482786851m_7477811832927283636HOEnZb">
<div class="m_4133417934581058318m_-3300027386482786851m_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>
</div>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</blockquote>
<br>
</div></div></div>
</blockquote></div><br></div>