<div dir="ltr">I like the idea of building the menu and its submenus. <br><div>I don't like pragmas that much... I think that having just a selector as the DynamicMenuBuilder does is enough. </div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, May 27, 2022 at 1:37 PM Hilaire Fernandes via Cuis-dev <<a href="mailto:cuis-dev@lists.cuis.st">cuis-dev@lists.cuis.st</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi Hernan, Luciano.<br>
<br>
Le 27/05/2022 à 16:52, Hernan Wilkinson via Cuis-dev a écrit :<br>
> Hi Luciano,<br>
>  adding options to menus based on packages is already solved. Look at <br>
> the class DynamicMenuBuilder.<br>
>  In fact, it is used to create the world menu beside other menues like <br>
> the editor menu.<br>
>  Hilaire, does the DynamicMenuBuilder satisfy your needs?<br>
Which needs? To define a completely different World Menu?<br>
<br>
In Cuis, AFAIK, the world menu hierarchy is both defined with a mix of <br>
data declaration (see #worldMenuOptions) and code to build the menu by <br>
invoking data declaration (see #openMenu), mostly to establish the <br>
informal parent-child menus relationship.<br>
<br>
A formal menu declaration decoupled of menu build up will make menu <br>
understanding and extension easier.<br>
<br>
I will use a builder instance passed along the methods defining the <br>
menus. The menu data and relationship will be defined in these methods, <br>
then the menu build up done by the builder object. Changing/subclassing <br>
the builder will make possible to have different way to represent menu.<br>
<br>
The methods used to defined the whole menu hierarchy will be identified <br>
with a dedicated pragma.<br>
<br>
This is more less as implemented in Pharo, it is pretty neat and make <br>
the menu hierarchy easy to understand, you just need to search the <br>
method with a given pragma. In Cuis you have to search for all the <br>
methods defining the menu and submenu (different method names)<br>
<br>
In DrGeo for example. The names of the method do not mater, only the pragma:<br>
<br>
Main menu, is a regular menu without parent:<br>
<br>
DrGeo>>worldMenu: aBuilder<br>
     <drgeoMenu><br>
     (aBuilder item: 'New' translated)<br>
         action: [ DrGeo newFullScreen ];<br>
         icon: (self iconNamed: #smallNewIcon);<br>
         order: 0.<br>
../..<br>
     (aBuilder item: #Tools translated)<br>
         icon:    (self iconNamed: #tools);<br>
         order: 5.<br>
<br>
And submenu are identified by parent argument:<br>
<br>
DrGeo>>toolsMenuOn: aBuilder<br>
     <drgeoMenu><br>
     (aBuilder item: #'System Browser' translated)<br>
         parent: #Tools translated;<br>
         action: [ Smalltalk tools browser openOnClass: DrGeoSketch ];<br>
         icon:    (self iconNamed: #smallObjects);<br>
         help:'A source code browser to view, edit and save Dr. Geo <br>
code. I open the browser on the DrGeoCanvas class you can study to <br>
design your own Smalltalk sketch.'    translated.<br>
     (aBuilder item: #'Workspace' translated)<br>
         parent: #Tools translated;<br>
         action: [Smalltalk tools openWorkspace bounds: RealEstateAgent <br>
leftMaximumUsableArea];<br>
         icon:    (self iconNamed: #workspace);<br>
         help: 'A window used as a scratchpad area where fragments of <br>
Pharo code can be entered, stored, edited, and evaluated.'    translated.<br>
<br>
I wonder if pragma parameter parent: will make the menu hierarchy more <br>
explicit and the method a bit less verbose.<br>
<br>
Then you can change your world menu with a simple WorldMorph <br>
desktopMenuPragma: #drgeoMenu<br>
<br>
Just some food for thought<br>
<br>
Hilaire<br>
<br>
><br>
> Cheers!<br>
> Hernan.<br>
<br>
-- <br>
GNU Dr. Geo<br>
<a href="http://drgeo.eu" rel="noreferrer" target="_blank">http://drgeo.eu</a><br>
<a href="http://blog.drgeo.eu" rel="noreferrer" target="_blank">http://blog.drgeo.eu</a><br>
<br>
-- <br>
Cuis-dev mailing list<br>
<a href="mailto:Cuis-dev@lists.cuis.st" target="_blank">Cuis-dev@lists.cuis.st</a><br>
<a href="https://lists.cuis.st/mailman/listinfo/cuis-dev" rel="noreferrer" target="_blank">https://lists.cuis.st/mailman/listinfo/cuis-dev</a><br>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><span style="font-size:xx-small;border-collapse:collapse"><div style="font-size:small"><a href="https://10pines.com/" style="font-family:Roboto,Helvetica,Arial,sans-serif;font-size:medium" target="_blank"><img width="108" src="https://10pines.github.io/email-signature/10pines-firma@2x.png" style="margin-bottom: 0.5em;"></a><span style="color:rgb(0,0,0);font-family:Roboto,Helvetica,Arial,sans-serif;font-size:medium"></span><h1 style="margin:0px;font-size:14px">Hernán Wilkinson</h1><h2 style="margin:0px 0px 1em;font-size:14px;color:rgb(100,100,100)">Software Developer & Coach</h2><p style="margin:0px;color:rgb(100,100,100);font-size:12px">Alem 896, Floor 6, Buenos Aires, Argentina</p><p style="margin:0px;color:rgb(100,100,100);font-size:12px">+54 11 6091 3125</p><p style="margin:0px;color:rgb(100,100,100);font-size:12px">@HernanWilkinson</p></div></span></div></div>