[Pharo-project] Menu creation and invocation

Henrik Johansen henrik.s.johansen at veloxit.no
Fri Feb 18 11:41:06 CET 2011

On Feb 18, 2011, at 11:31 48AM, Fernando Olivero wrote:

> On Fri, Feb 18, 2011 at 10:40 AM, Henrik Johansen
> <henrik.s.johansen at veloxit.no> wrote:
>> On Feb 17, 2011, at 9:51 47PM, Alain Plantec wrote:
>>> he he he.
>>> thanks Fernando.
>>> and really really happy that you find it useful.
>>> but is see maybe an issue here. It concerns the pragma keyword.
>>> It is currently a global keyword.
>>> Maybe one should also allow a way to specify where the pragma are to be collected.
>>> maybe something like:
>>> MyMorph>>menuBuilder
>>>       ^ (PragmaMenuBuilder localPragmaKeyword: 'tileMenu' model: self )
>>> notice the #localPragmaKeyword:model selector instead of #pragmaKeyword:model.
>>> it would constraint the builder to only search pragma locally.
>>> does it make sense to you ?
>>> Cheers
>>> Alain
>> Yes, searching the class only would be a good idea, I'd almost consider making it the default and rename #pragmaKeyword: to #globalPragmaKeyword:.
>> It's faster, and in most cases it does what you need, also in the case where you want  extensibility (through extension methods, only risk is clashing names)
>> Cheers,
>> Henry
> Hi, since i'm new to pragmas  could you please explain me the
> diference between global and local searches.
> I dont understand to whom the local and global context applies to,
> when using #localPragmaKeyword:model: as oposed to
> #pragmaKeyword:model:.
> Fernando

If I understood him correctly, essentially, you limit the scope of a menu symbol.

When using globalPragmaKeyword: (pragmaKeyword: today) it will search for  methods containing the pragma in the  entire system, which means you can have multiple classes defining menu entries in the same (global) menu.
When using pragmaKeyword: (or what Alain calls localPragmaKeyword: ), only the hierarchy of the class in in which the method defining the PragmaMenuBuilder would be searched.
Thus, you could have two different morph classes both defining <menu: #rightClickMenu> entries, and have their menu builders only pick up those defined for that class.


More information about the Pharo-project mailing list