<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">Le 21/07/2022 à 13:31, Gerald Klix via
      Cuis-dev a écrit :<br>
    </div>
    <blockquote type="cite"
      cite="mid:b889c1bc-a696-073c-2ebf-70d51a687214@klix.ch">Let me
      point out that Haver already has an
      <br>
      ActionBuilder package that provides some means
      <br>
      to define menus and LayoutMorphs with
      <br>
      buttons -- sort of a toolbar -- in one place.
      <br>
    </blockquote>
    <p><font size="4">Thanks for the code example, Gerald, it is
        helpful.</font></p>
    <p><font size="4">As a matter of comparison, here is how you will
        define a menu and sub menu spread in several image, possible
        from different package. <br>
      </font></p>
    <p><font size="4">The menu is identified by #exampleMenu used as a
        pragma tagging the relevant methods. Below this #exampleMenu
        definition is distributed in four methods.<br>
      </font></p>
    <p><font size="4" face="monospace"><b>example1_1: menuBuilder</b><br>
            <exampleMenu><br>
            menuBuilder newEntry: #entry1 ::<br>
                label: 'Menu entry 1';<br>
                icon: #worldIcon;<br>
                order: 500.<br>
            menuBuilder newEntry: #entry2 ::<br>
                label: 'Menu entry 2';<br>
                help: 'I can have help too';<br>
                order: 100<br>
      </font></p>
    <p><font size="4" face="monospace"><b> example1_2: menuBuilder</b><br>
            <exampleMenu><br>
            menuBuilder newEntry: #entry3 in: #entry1 ::<br>
                label: 'Menu entry 3';<br>
                order: 1.</font></p>
    <p><font size="4"><font face="monospace"><b>example1_3: menuBuilder</b><br>
              <exampleMenu><br>
              menuBuilder newEntry: #entry4 ::<br>
                  label: 'Menu entry 4';<br>
                  order: 1.<br>
              menuBuilder newEntry: #'Just a drop place' in: #entry1</font></font></p>
    <p><font size="4"><font face="monospace"><b>example1_4: menuBuilder</b><br>
              <exampleMenu><br>
              menuBuilder newEntry: #entry5 in: #'Just a drop place'::<br>
                  label: 'Menu entry 5'<br>
        </font><br>
      </font></p>
    <p><font size="4">To get the menu, you just ask for the
        #exampleMenu:</font></p>
    <p><font size="4">(<font face="monospace">MenuBuilder on:
          #exampleMenu) menu popUpInWorld</font><br>
      </font></p>
    <img moz-do-not-send="false"
      src="cid:part1.8JO7E9gs.fiMHeU3H@free.fr" alt="Built menus"
      width="444" height="118">
    <p><font size="4"><br>
      </font></p>
    <p>The menu entries are ordered as specified in the methods. A third
      party package can decide in one of its methods to add menu entries
      in different location of an existing menu hierarchy. To add
      entries in another menu, it should be done in another method with
      the add-hoc pragma.</p>
    <p>Now, if it please you, you can replace menu by command. In the
      implementation of MenuRecord I used a MenuItem instance variable
      as a drop place to put attributes, to avoid adding a third class
      Command or attributes to MenuRecord<br>
    </p>
    <p>It is completely neutral, so we can have:<br>
    </p>
    <p>MenuBuilder -> CommandBuilder</p>
    <p>MenuRecord -> CommandRecord</p>
    <p>And invoked as:</p>
    <p><font size="4" face="monospace">(CommandBuilder on:
        #exampleCommand) getMenu popUpInWorld</font></p>
    <p><font size="4">one may extend it to respond to:<br>
      </font></p>
    <p><font size="4" face="monospace">(CommandBuilder on:
        #exampleCommand) getCircularMorph openInWorld</font></p>
    <p><br>
      <font size="4" face="monospace"><font size="4" face="monospace">(CommandBuilder
          on: #exampleCommand) getToolbar</font></font></p>
    <p><font size="4" face="monospace"><font size="4" face="monospace"><br>
        </font></font></p>
    <p><font size="4" face="monospace"><font size="4" face="monospace">Ideas
          borrowed from Pharo, implemented differently and likely less
          capable but easier to understand for me.<br>
        </font></font></p>
    <p>Hilaire<br>
    </p>
    <pre class="moz-signature" cols="72">-- 
GNU Dr. Geo
<a class="moz-txt-link-freetext" href="http://drgeo.eu">http://drgeo.eu</a>
<a class="moz-txt-link-freetext" href="http://blog.drgeo.eu">http://blog.drgeo.eu</a></pre>
  </body>
</html>