Spec menu extensibility (epicea)

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

Spec menu extensibility (epicea)

Stephane Ducasse-3
Hi guys

I would like to know if there is a pattern to build extensible menu in Spec.
For example, I extending Epicea to support pillar fileout so that I
can turn a coding section into a pillar steps of action.

I wanted to extend the epicea browser to get my menu in:
But the code is like that:

EPLogBrowserModel >> addMenuItemsForSelectedItemsIn: aMenu

  aMenu addGroup: [ :aGroup |
    self menuActionsForSelectedItems do: [ :oldStyleMenuItemArray |
         aGroup addItem: [ :anItem |
            anItem
               name: oldStyleMenuItemArray first;
               description: oldStyleMenuItemArray third;
               icon: (self iconNamed: oldStyleMenuItemArray fourth);
               action: [ self perform: oldStyleMenuItemArray second ] ] ] ].

  aMenu addGroup: [ :aGroup |
     aGroup addItem: [ :anItem |
            anItem
              name: 'Filters';
              icon: (self iconNamed: #smallFindIcon);
              subMenu: self filtersSubMenu ] ].

  aMenu addGroup: [ :aGroup |
        aGroup addItem: [ :anItem |
            anItem
             name: 'File Out';
             description: 'Write selected entries to an Ombu file';
             icon: (self iconNamed: #smallSaveAsIcon);
             action: [ self fileOutSelection ] ] ].


EPLogBrowserModel >> menuMorphForSelectedItems

         | aMenu |
         aMenu := MenuModel new.
         showEntryItemMenu ifTrue: [ self
addMenuItemsForSelectedItemsIn: aMenu ].
         ^ aMenu buildWithSpecAsPopup


So I would like to improve Epicea but I face the problem of the limits
of Spec (presumably).
I'm thinking to add a <specMenu: 10> pragma to handle this case.
Any thought.

Stef

Reply | Threaded
Open this post in threaded view
|

Re: Spec menu extensibility (epicea)

Peter Uhnak
Hi Stef,

I faced similar issue and then I've found out that PragmaMenuBuilder is compatible with Spec.

Something like...

builder := PragmaMenuBuilder pragmaKeyword: 'myPragma' model: self.
menu := MenuModel new.
menu fromSpec: builder menuSpec.

Peter


On Sat, Aug 05, 2017 at 06:26:45PM +0200, Stephane Ducasse wrote:

> Hi guys
>
> I would like to know if there is a pattern to build extensible menu in Spec.
> For example, I extending Epicea to support pillar fileout so that I
> can turn a coding section into a pillar steps of action.
>
> I wanted to extend the epicea browser to get my menu in:
> But the code is like that:
>
> EPLogBrowserModel >> addMenuItemsForSelectedItemsIn: aMenu
>
>   aMenu addGroup: [ :aGroup |
>     self menuActionsForSelectedItems do: [ :oldStyleMenuItemArray |
>          aGroup addItem: [ :anItem |
>             anItem
>                name: oldStyleMenuItemArray first;
>                description: oldStyleMenuItemArray third;
>                icon: (self iconNamed: oldStyleMenuItemArray fourth);
>                action: [ self perform: oldStyleMenuItemArray second ] ] ] ].
>
>   aMenu addGroup: [ :aGroup |
>      aGroup addItem: [ :anItem |
>             anItem
>               name: 'Filters';
>               icon: (self iconNamed: #smallFindIcon);
>               subMenu: self filtersSubMenu ] ].
>
>   aMenu addGroup: [ :aGroup |
>         aGroup addItem: [ :anItem |
>             anItem
>              name: 'File Out';
>              description: 'Write selected entries to an Ombu file';
>              icon: (self iconNamed: #smallSaveAsIcon);
>              action: [ self fileOutSelection ] ] ].
>
>
> EPLogBrowserModel >> menuMorphForSelectedItems
>
>          | aMenu |
>          aMenu := MenuModel new.
>          showEntryItemMenu ifTrue: [ self
> addMenuItemsForSelectedItemsIn: aMenu ].
>          ^ aMenu buildWithSpecAsPopup
>
>
> So I would like to improve Epicea but I face the problem of the limits
> of Spec (presumably).
> I'm thinking to add a <specMenu: 10> pragma to handle this case.
> Any thought.
>
> Stef
>

Reply | Threaded
Open this post in threaded view
|

Re: Spec menu extensibility (epicea)

Stephane Ducasse-3
Hi Peter

Yes I was thinking about it.
Now from your experience what kind of pragma should we provide?

<group: 'name' order: 10>

Not sure that we need the argument to the group.

<menusForGroup: 'name'>

<menuForGroup: 'name' order: 10>

Stef




On Sun, Aug 6, 2017 at 12:09 AM, Peter Uhnak <[hidden email]> wrote:

> Hi Stef,
>
> I faced similar issue and then I've found out that PragmaMenuBuilder is compatible with Spec.
>
> Something like...
>
> builder := PragmaMenuBuilder pragmaKeyword: 'myPragma' model: self.
> menu := MenuModel new.
> menu fromSpec: builder menuSpec.
>
> Peter
>
>
> On Sat, Aug 05, 2017 at 06:26:45PM +0200, Stephane Ducasse wrote:
>> Hi guys
>>
>> I would like to know if there is a pattern to build extensible menu in Spec.
>> For example, I extending Epicea to support pillar fileout so that I
>> can turn a coding section into a pillar steps of action.
>>
>> I wanted to extend the epicea browser to get my menu in:
>> But the code is like that:
>>
>> EPLogBrowserModel >> addMenuItemsForSelectedItemsIn: aMenu
>>
>>   aMenu addGroup: [ :aGroup |
>>     self menuActionsForSelectedItems do: [ :oldStyleMenuItemArray |
>>          aGroup addItem: [ :anItem |
>>             anItem
>>                name: oldStyleMenuItemArray first;
>>                description: oldStyleMenuItemArray third;
>>                icon: (self iconNamed: oldStyleMenuItemArray fourth);
>>                action: [ self perform: oldStyleMenuItemArray second ] ] ] ].
>>
>>   aMenu addGroup: [ :aGroup |
>>      aGroup addItem: [ :anItem |
>>             anItem
>>               name: 'Filters';
>>               icon: (self iconNamed: #smallFindIcon);
>>               subMenu: self filtersSubMenu ] ].
>>
>>   aMenu addGroup: [ :aGroup |
>>         aGroup addItem: [ :anItem |
>>             anItem
>>              name: 'File Out';
>>              description: 'Write selected entries to an Ombu file';
>>              icon: (self iconNamed: #smallSaveAsIcon);
>>              action: [ self fileOutSelection ] ] ].
>>
>>
>> EPLogBrowserModel >> menuMorphForSelectedItems
>>
>>          | aMenu |
>>          aMenu := MenuModel new.
>>          showEntryItemMenu ifTrue: [ self
>> addMenuItemsForSelectedItemsIn: aMenu ].
>>          ^ aMenu buildWithSpecAsPopup
>>
>>
>> So I would like to improve Epicea but I face the problem of the limits
>> of Spec (presumably).
>> I'm thinking to add a <specMenu: 10> pragma to handle this case.
>> Any thought.
>>
>> Stef
>>
>

Reply | Threaded
Open this post in threaded view
|

Re: Spec menu extensibility (epicea)

Peter Uhnak
Hi Stef,

I use both a variant with an argument and without, however I have slightly modified PragmaMenuBuilder to support this.

e.g. I have

<opEditorToolbarMenu> which always adds entries to a particular menu.
<opEditorToolbarMenu: #OPUmlClassEditorPlugin> which adds entries only when some particular context is active (here it would mean that the items are added only when ClassEditor plugin is active)

(The second case can be done with a local if condition, but I found this to be more practical.)

I don't see a benefit in having 'order' as part of the pragma, because you can specify the order for the menu items themselves.

What I am still wondering is whether it is better to have a different pragma for each menu, or have the menu name as an argument. The same goes for differentiating pragmas between different tools.

e.g.

<opEditorToolBarMenu: #OPUmlClassEditorPlugin> vs <menu: #EditorToolbar tool: #OP context: #OPUmlClassEditorPlugin>

the latter seems like it's adding more complexity.

Peter


On Wed, Aug 09, 2017 at 09:58:54PM +0200, Stephane Ducasse wrote:

> Hi Peter
>
> Yes I was thinking about it.
> Now from your experience what kind of pragma should we provide?
>
> <group: 'name' order: 10>
>
> Not sure that we need the argument to the group.
>
> <menusForGroup: 'name'>
>
> <menuForGroup: 'name' order: 10>
>
> Stef
>
>
>
>
> On Sun, Aug 6, 2017 at 12:09 AM, Peter Uhnak <[hidden email]> wrote:
> > Hi Stef,
> >
> > I faced similar issue and then I've found out that PragmaMenuBuilder is compatible with Spec.
> >
> > Something like...
> >
> > builder := PragmaMenuBuilder pragmaKeyword: 'myPragma' model: self.
> > menu := MenuModel new.
> > menu fromSpec: builder menuSpec.
> >
> > Peter
> >
> >
> > On Sat, Aug 05, 2017 at 06:26:45PM +0200, Stephane Ducasse wrote:
> >> Hi guys
> >>
> >> I would like to know if there is a pattern to build extensible menu in Spec.
> >> For example, I extending Epicea to support pillar fileout so that I
> >> can turn a coding section into a pillar steps of action.
> >>
> >> I wanted to extend the epicea browser to get my menu in:
> >> But the code is like that:
> >>
> >> EPLogBrowserModel >> addMenuItemsForSelectedItemsIn: aMenu
> >>
> >>   aMenu addGroup: [ :aGroup |
> >>     self menuActionsForSelectedItems do: [ :oldStyleMenuItemArray |
> >>          aGroup addItem: [ :anItem |
> >>             anItem
> >>                name: oldStyleMenuItemArray first;
> >>                description: oldStyleMenuItemArray third;
> >>                icon: (self iconNamed: oldStyleMenuItemArray fourth);
> >>                action: [ self perform: oldStyleMenuItemArray second ] ] ] ].
> >>
> >>   aMenu addGroup: [ :aGroup |
> >>      aGroup addItem: [ :anItem |
> >>             anItem
> >>               name: 'Filters';
> >>               icon: (self iconNamed: #smallFindIcon);
> >>               subMenu: self filtersSubMenu ] ].
> >>
> >>   aMenu addGroup: [ :aGroup |
> >>         aGroup addItem: [ :anItem |
> >>             anItem
> >>              name: 'File Out';
> >>              description: 'Write selected entries to an Ombu file';
> >>              icon: (self iconNamed: #smallSaveAsIcon);
> >>              action: [ self fileOutSelection ] ] ].
> >>
> >>
> >> EPLogBrowserModel >> menuMorphForSelectedItems
> >>
> >>          | aMenu |
> >>          aMenu := MenuModel new.
> >>          showEntryItemMenu ifTrue: [ self
> >> addMenuItemsForSelectedItemsIn: aMenu ].
> >>          ^ aMenu buildWithSpecAsPopup
> >>
> >>
> >> So I would like to improve Epicea but I face the problem of the limits
> >> of Spec (presumably).
> >> I'm thinking to add a <specMenu: 10> pragma to handle this case.
> >> Any thought.
> >>
> >> Stef
> >>
> >
>

Reply | Threaded
Open this post in threaded view
|

Re: Spec menu extensibility (epicea)

Stephane Ducasse-3
Since we can get the method and from the method the class I would not
put the context:.


On Thu, Aug 10, 2017 at 9:48 AM, Peter Uhnak <[hidden email]> wrote:

> Hi Stef,
>
> I use both a variant with an argument and without, however I have slightly modified PragmaMenuBuilder to support this.
>
> e.g. I have
>
> <opEditorToolbarMenu> which always adds entries to a particular menu.
> <opEditorToolbarMenu: #OPUmlClassEditorPlugin> which adds entries only when some particular context is active (here it would mean that the items are added only when ClassEditor plugin is active)
>
> (The second case can be done with a local if condition, but I found this to be more practical.)
>
> I don't see a benefit in having 'order' as part of the pragma, because you can specify the order for the menu items themselves.
>
> What I am still wondering is whether it is better to have a different pragma for each menu, or have the menu name as an argument. The same goes for differentiating pragmas between different tools.
>
> e.g.
>
> <opEditorToolBarMenu: #OPUmlClassEditorPlugin> vs <menu: #EditorToolbar tool: #OP context: #OPUmlClassEditorPlugin>
>
> the latter seems like it's adding more complexity.
>
> Peter
>
>
> On Wed, Aug 09, 2017 at 09:58:54PM +0200, Stephane Ducasse wrote:
>> Hi Peter
>>
>> Yes I was thinking about it.
>> Now from your experience what kind of pragma should we provide?
>>
>> <group: 'name' order: 10>
>>
>> Not sure that we need the argument to the group.
>>
>> <menusForGroup: 'name'>
>>
>> <menuForGroup: 'name' order: 10>
>>
>> Stef
>>
>>
>>
>>
>> On Sun, Aug 6, 2017 at 12:09 AM, Peter Uhnak <[hidden email]> wrote:
>> > Hi Stef,
>> >
>> > I faced similar issue and then I've found out that PragmaMenuBuilder is compatible with Spec.
>> >
>> > Something like...
>> >
>> > builder := PragmaMenuBuilder pragmaKeyword: 'myPragma' model: self.
>> > menu := MenuModel new.
>> > menu fromSpec: builder menuSpec.
>> >
>> > Peter
>> >
>> >
>> > On Sat, Aug 05, 2017 at 06:26:45PM +0200, Stephane Ducasse wrote:
>> >> Hi guys
>> >>
>> >> I would like to know if there is a pattern to build extensible menu in Spec.
>> >> For example, I extending Epicea to support pillar fileout so that I
>> >> can turn a coding section into a pillar steps of action.
>> >>
>> >> I wanted to extend the epicea browser to get my menu in:
>> >> But the code is like that:
>> >>
>> >> EPLogBrowserModel >> addMenuItemsForSelectedItemsIn: aMenu
>> >>
>> >>   aMenu addGroup: [ :aGroup |
>> >>     self menuActionsForSelectedItems do: [ :oldStyleMenuItemArray |
>> >>          aGroup addItem: [ :anItem |
>> >>             anItem
>> >>                name: oldStyleMenuItemArray first;
>> >>                description: oldStyleMenuItemArray third;
>> >>                icon: (self iconNamed: oldStyleMenuItemArray fourth);
>> >>                action: [ self perform: oldStyleMenuItemArray second ] ] ] ].
>> >>
>> >>   aMenu addGroup: [ :aGroup |
>> >>      aGroup addItem: [ :anItem |
>> >>             anItem
>> >>               name: 'Filters';
>> >>               icon: (self iconNamed: #smallFindIcon);
>> >>               subMenu: self filtersSubMenu ] ].
>> >>
>> >>   aMenu addGroup: [ :aGroup |
>> >>         aGroup addItem: [ :anItem |
>> >>             anItem
>> >>              name: 'File Out';
>> >>              description: 'Write selected entries to an Ombu file';
>> >>              icon: (self iconNamed: #smallSaveAsIcon);
>> >>              action: [ self fileOutSelection ] ] ].
>> >>
>> >>
>> >> EPLogBrowserModel >> menuMorphForSelectedItems
>> >>
>> >>          | aMenu |
>> >>          aMenu := MenuModel new.
>> >>          showEntryItemMenu ifTrue: [ self
>> >> addMenuItemsForSelectedItemsIn: aMenu ].
>> >>          ^ aMenu buildWithSpecAsPopup
>> >>
>> >>
>> >> So I would like to improve Epicea but I face the problem of the limits
>> >> of Spec (presumably).
>> >> I'm thinking to add a <specMenu: 10> pragma to handle this case.
>> >> Any thought.
>> >>
>> >> Stef
>> >>
>> >
>>
>

Reply | Threaded
Open this post in threaded view
|

Re: Spec menu extensibility (epicea)

Eliot Miranda-2
In reply to this post by Peter Uhnak
Hi Peter,

On Thu, Aug 10, 2017 at 12:48 AM, Peter Uhnak <[hidden email]> wrote:
Hi Stef,

I use both a variant with an argument and without, however I have slightly modified PragmaMenuBuilder to support this.

e.g. I have

<opEditorToolbarMenu> which always adds entries to a particular menu.
<opEditorToolbarMenu: #OPUmlClassEditorPlugin> which adds entries only when some particular context is active (here it would mean that the items are added only when ClassEditor plugin is active)

(The second case can be done with a local if condition, but I found this to be more practical.)

I don't see a benefit in having 'order' as part of the pragma, because you can specify the order for the menu items themselves.

What I am still wondering is whether it is better to have a different pragma for each menu, or have the menu name as an argument. The same goes for differentiating pragmas between different tools.

e.g.

<opEditorToolBarMenu: #OPUmlClassEditorPlugin> vs <menu: #EditorToolbar tool: #OP context: #OPUmlClassEditorPlugin>

I very strongly recommend the latter.  Why?  If designed appropriately the second form is used as a selector in *building* the menu.  So the idea is to have the menu builder perform the pragma to add that item to it.  Then there are many menu items in the system that use the same pragma and one can see both senders of the pragma (which are examples of menu extensions) /and/ the implementor(s) (which is an example of how to actually extend a menu).

With the former one has to have somewhere that relates a specific menu to the pragma that extends only that menu, a way of extracting that information form that pragma, and finally a way of extending the menu.  With the latter there needs be only one version of the code that collects the pragmas for any menu and extends that menu.  It becomes a standard library feature.



the latter seems like it's adding more complexity.

But when used in a real system it actually reduces complexity, and provides examples to the user of how to define menu extensions and to implementors of how to extend menus.  VisualWorks works like this and has since 1998 when Steve Dahl and I designed the pragma system for just this case.

We /did/ add a grouping facility based on floating point numbers, a hack, but a reasonable one.  If you look at, say, the standard programming text menu, which at its simplest might be

    again
    undo
    -----------
    cut
    copy
    paste
    -----------
    do it
    print it
    debug it
    -----------
    accept
    cancel
    -----------
    format
    spawn
    explain

the grouping of related items is quite important in the menu being easy to navigate.  But if we want to extend it we wan to be able to add groups to it.  In VW we number the groups in the base menu in tens, so again/undo is 10.0, cut/copy/paste is 20.0, etc.  Then anyone can define a new group relative to the base groups by providing a group number such as 35.0 to add between do it/print it/debug it and accept/cancel




Peter


On Wed, Aug 09, 2017 at 09:58:54PM +0200, Stephane Ducasse wrote:
> Hi Peter
>
> Yes I was thinking about it.
> Now from your experience what kind of pragma should we provide?
>
> <group: 'name' order: 10>
>
> Not sure that we need the argument to the group.
>
> <menusForGroup: 'name'>
>
> <menuForGroup: 'name' order: 10>
>
> Stef
>
>
>
>
> On Sun, Aug 6, 2017 at 12:09 AM, Peter Uhnak <[hidden email]> wrote:
> > Hi Stef,
> >
> > I faced similar issue and then I've found out that PragmaMenuBuilder is compatible with Spec.
> >
> > Something like...
> >
> > builder := PragmaMenuBuilder pragmaKeyword: 'myPragma' model: self.
> > menu := MenuModel new.
> > menu fromSpec: builder menuSpec.
> >
> > Peter
> >
> >
> > On Sat, Aug 05, 2017 at 06:26:45PM +0200, Stephane Ducasse wrote:
> >> Hi guys
> >>
> >> I would like to know if there is a pattern to build extensible menu in Spec.
> >> For example, I extending Epicea to support pillar fileout so that I
> >> can turn a coding section into a pillar steps of action.
> >>
> >> I wanted to extend the epicea browser to get my menu in:
> >> But the code is like that:
> >>
> >> EPLogBrowserModel >> addMenuItemsForSelectedItemsIn: aMenu
> >>
> >>   aMenu addGroup: [ :aGroup |
> >>     self menuActionsForSelectedItems do: [ :oldStyleMenuItemArray |
> >>          aGroup addItem: [ :anItem |
> >>             anItem
> >>                name: oldStyleMenuItemArray first;
> >>                description: oldStyleMenuItemArray third;
> >>                icon: (self iconNamed: oldStyleMenuItemArray fourth);
> >>                action: [ self perform: oldStyleMenuItemArray second ] ] ] ].
> >>
> >>   aMenu addGroup: [ :aGroup |
> >>      aGroup addItem: [ :anItem |
> >>             anItem
> >>               name: 'Filters';
> >>               icon: (self iconNamed: #smallFindIcon);
> >>               subMenu: self filtersSubMenu ] ].
> >>
> >>   aMenu addGroup: [ :aGroup |
> >>         aGroup addItem: [ :anItem |
> >>             anItem
> >>              name: 'File Out';
> >>              description: 'Write selected entries to an Ombu file';
> >>              icon: (self iconNamed: #smallSaveAsIcon);
> >>              action: [ self fileOutSelection ] ] ].
> >>
> >>
> >> EPLogBrowserModel >> menuMorphForSelectedItems
> >>
> >>          | aMenu |
> >>          aMenu := MenuModel new.
> >>          showEntryItemMenu ifTrue: [ self
> >> addMenuItemsForSelectedItemsIn: aMenu ].
> >>          ^ aMenu buildWithSpecAsPopup
> >>
> >>
> >> So I would like to improve Epicea but I face the problem of the limits
> >> of Spec (presumably).
> >> I'm thinking to add a <specMenu: 10> pragma to handle this case.
> >> Any thought.
> >>
> >> Stef
> >>
> >
>




--
_,,,^..^,,,_
best, Eliot
Reply | Threaded
Open this post in threaded view
|

Re: Spec menu extensibility (epicea)

Stephane Ducasse-3
Tx eliot for sharing your experience with us.
I will keep that in mind (I decided that I should not start something
new before finishing something)
So frustrating to have many not finished items.

Stef

On Thu, Aug 10, 2017 at 7:39 PM, Eliot Miranda <[hidden email]> wrote:

> Hi Peter,
>
> On Thu, Aug 10, 2017 at 12:48 AM, Peter Uhnak <[hidden email]> wrote:
>>
>> Hi Stef,
>>
>> I use both a variant with an argument and without, however I have slightly
>> modified PragmaMenuBuilder to support this.
>>
>> e.g. I have
>>
>> <opEditorToolbarMenu> which always adds entries to a particular menu.
>> <opEditorToolbarMenu: #OPUmlClassEditorPlugin> which adds entries only
>> when some particular context is active (here it would mean that the items
>> are added only when ClassEditor plugin is active)
>>
>> (The second case can be done with a local if condition, but I found this
>> to be more practical.)
>>
>> I don't see a benefit in having 'order' as part of the pragma, because you
>> can specify the order for the menu items themselves.
>>
>> What I am still wondering is whether it is better to have a different
>> pragma for each menu, or have the menu name as an argument. The same goes
>> for differentiating pragmas between different tools.
>>
>> e.g.
>>
>> <opEditorToolBarMenu: #OPUmlClassEditorPlugin> vs <menu: #EditorToolbar
>> tool: #OP context: #OPUmlClassEditorPlugin>
>
>
> I very strongly recommend the latter.  Why?  If designed appropriately the
> second form is used as a selector in *building* the menu.  So the idea is to
> have the menu builder perform the pragma to add that item to it.  Then there
> are many menu items in the system that use the same pragma and one can see
> both senders of the pragma (which are examples of menu extensions) /and/ the
> implementor(s) (which is an example of how to actually extend a menu).
>
> With the former one has to have somewhere that relates a specific menu to
> the pragma that extends only that menu, a way of extracting that information
> form that pragma, and finally a way of extending the menu.  With the latter
> there needs be only one version of the code that collects the pragmas for
> any menu and extends that menu.  It becomes a standard library feature.
>
>
>>
>> the latter seems like it's adding more complexity.
>
>
> But when used in a real system it actually reduces complexity, and provides
> examples to the user of how to define menu extensions and to implementors of
> how to extend menus.  VisualWorks works like this and has since 1998 when
> Steve Dahl and I designed the pragma system for just this case.
>
> We /did/ add a grouping facility based on floating point numbers, a hack,
> but a reasonable one.  If you look at, say, the standard programming text
> menu, which at its simplest might be
>
>     again
>     undo
>     -----------
>     cut
>     copy
>     paste
>     -----------
>     do it
>     print it
>     debug it
>     -----------
>     accept
>     cancel
>     -----------
>     format
>     spawn
>     explain
>
> the grouping of related items is quite important in the menu being easy to
> navigate.  But if we want to extend it we wan to be able to add groups to
> it.  In VW we number the groups in the base menu in tens, so again/undo is
> 10.0, cut/copy/paste is 20.0, etc.  Then anyone can define a new group
> relative to the base groups by providing a group number such as 35.0 to add
> between do it/print it/debug it and accept/cancel
>
>
>
>>
>> Peter
>>
>>
>> On Wed, Aug 09, 2017 at 09:58:54PM +0200, Stephane Ducasse wrote:
>> > Hi Peter
>> >
>> > Yes I was thinking about it.
>> > Now from your experience what kind of pragma should we provide?
>> >
>> > <group: 'name' order: 10>
>> >
>> > Not sure that we need the argument to the group.
>> >
>> > <menusForGroup: 'name'>
>> >
>> > <menuForGroup: 'name' order: 10>
>> >
>> > Stef
>> >
>> >
>> >
>> >
>> > On Sun, Aug 6, 2017 at 12:09 AM, Peter Uhnak <[hidden email]> wrote:
>> > > Hi Stef,
>> > >
>> > > I faced similar issue and then I've found out that PragmaMenuBuilder
>> > > is compatible with Spec.
>> > >
>> > > Something like...
>> > >
>> > > builder := PragmaMenuBuilder pragmaKeyword: 'myPragma' model: self.
>> > > menu := MenuModel new.
>> > > menu fromSpec: builder menuSpec.
>> > >
>> > > Peter
>> > >
>> > >
>> > > On Sat, Aug 05, 2017 at 06:26:45PM +0200, Stephane Ducasse wrote:
>> > >> Hi guys
>> > >>
>> > >> I would like to know if there is a pattern to build extensible menu
>> > >> in Spec.
>> > >> For example, I extending Epicea to support pillar fileout so that I
>> > >> can turn a coding section into a pillar steps of action.
>> > >>
>> > >> I wanted to extend the epicea browser to get my menu in:
>> > >> But the code is like that:
>> > >>
>> > >> EPLogBrowserModel >> addMenuItemsForSelectedItemsIn: aMenu
>> > >>
>> > >>   aMenu addGroup: [ :aGroup |
>> > >>     self menuActionsForSelectedItems do: [ :oldStyleMenuItemArray |
>> > >>          aGroup addItem: [ :anItem |
>> > >>             anItem
>> > >>                name: oldStyleMenuItemArray first;
>> > >>                description: oldStyleMenuItemArray third;
>> > >>                icon: (self iconNamed: oldStyleMenuItemArray fourth);
>> > >>                action: [ self perform: oldStyleMenuItemArray second ]
>> > >> ] ] ].
>> > >>
>> > >>   aMenu addGroup: [ :aGroup |
>> > >>      aGroup addItem: [ :anItem |
>> > >>             anItem
>> > >>               name: 'Filters';
>> > >>               icon: (self iconNamed: #smallFindIcon);
>> > >>               subMenu: self filtersSubMenu ] ].
>> > >>
>> > >>   aMenu addGroup: [ :aGroup |
>> > >>         aGroup addItem: [ :anItem |
>> > >>             anItem
>> > >>              name: 'File Out';
>> > >>              description: 'Write selected entries to an Ombu file';
>> > >>              icon: (self iconNamed: #smallSaveAsIcon);
>> > >>              action: [ self fileOutSelection ] ] ].
>> > >>
>> > >>
>> > >> EPLogBrowserModel >> menuMorphForSelectedItems
>> > >>
>> > >>          | aMenu |
>> > >>          aMenu := MenuModel new.
>> > >>          showEntryItemMenu ifTrue: [ self
>> > >> addMenuItemsForSelectedItemsIn: aMenu ].
>> > >>          ^ aMenu buildWithSpecAsPopup
>> > >>
>> > >>
>> > >> So I would like to improve Epicea but I face the problem of the
>> > >> limits
>> > >> of Spec (presumably).
>> > >> I'm thinking to add a <specMenu: 10> pragma to handle this case.
>> > >> Any thought.
>> > >>
>> > >> Stef
>> > >>
>> > >
>> >
>>
>
>
>
> --
> _,,,^..^,,,_
> best, Eliot