<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>