Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Eclipse Projects » Eclipse Platform » Actions and command handlers
Actions and command handlers [message #333384] Mon, 08 December 2008 15:18 Go to next message
Dirk Wenke is currently offline Dirk WenkeFriend
Messages: 11
Registered: July 2009
Junior Member
Hi,

I encoutered a problem while working with actions and commands/handlers
associated with it in Eclipse 3.4.
In my application I have a TreeViewer with a context menu. Depending on
the selected object in the tree, I have different "new" actions to
create a new element of the given type.
I tried now to add the key accelerator "CTRL+N" to all these new actions
(at any time, only one action can be associated with this key binding),
by defining a command with a keybinding:

<extension
point="org.eclipse.ui.commands">
<command
categoryId="myCategory"
description="Create new element"
id="first.test.newCommand"
name="Create element">
</command>
</extension>
<extension
point="org.eclipse.ui.bindings">
<key
commandId="first.test.newCommand"
contextId="contextOfMyView"
schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
sequence="CTRL+N">
</key>
</extension>

and the following handlers:

<extension
point="org.eclipse.ui.handlers">
<handler
class="NewElementAHandler"
commandId="first.test.newCommand">
<activeWhen>
<iterate>
<instanceof value="ElementA">
</instanceof>
</iterate>
</activeWhen>
</handler>

<handler
class="NewElementBHandler"
commandId="first.test.newCommand">
<activeWhen>
<iterate>
<instanceof value="ElementB">
</instanceof>
</iterate>
</activeWhen>
</handler>
</extension>

The actions in the context menu are objectContributions:

<extension
point="org.eclipse.ui.popupMenus">
<objectContribution
objectClass="ElementA"
id="ElementA_Actions">
<action
enablesFor="1"
label="New Element A"
class="NewElementAAction"
menubarPath="navigator.new"
definitionId="first.test.newCommand"
</action>
</objectContribution>
<objectContribution
objectClass="ElementB"
id="ElementB_Actions">
<action
enablesFor="1"
label="New Element B"
class="NewElementBAction"
menubarPath="navigator.new"
definitionId="first.test.newCommand"
</action>
</objectContribution>
</extension>

So far, everything works fine. If an element of type ElementA is
selected, the accelerator key invokes NewElementAHandler and the same
for elements of type ElementB. But in the logfile I find many log
entries that inform about conflicting handlers.
It seems to me, that eclipse itself generates Handlers to wrap actions
with a given definitionId. And these generated handlers seem to cause
these conflicts.
Is there any way to solve this problem?

Dirk
Re: Actions and command handlers [message #333388 is a reply to message #333384] Mon, 08 December 2008 17:47 Go to previous messageGo to next message
Paul Webster is currently offline Paul WebsterFriend
Messages: 6859
Registered: July 2009
Location: Ottawa
Senior Member

Dirk Wenke wrote:
> Hi,
>
> I encoutered a problem while working with actions and commands/handlers
> associated with it in Eclipse 3.4.
> In my application I have a TreeViewer with a context menu. Depending on
> the selected object in the tree, I have different "new" actions to
> create a new element of the given type.
> I tried now to add the key accelerator "CTRL+N" to all these new actions
> (at any time, only one action can be associated with this key binding),
> by defining a command with a keybinding:
>
> <extension
> point="org.eclipse.ui.commands">
> <command
> categoryId="myCategory"
> description="Create new element"
> id="first.test.newCommand"
> name="Create element">
> </command>
> </extension>
> <extension
> point="org.eclipse.ui.bindings">
> <key
> commandId="first.test.newCommand"
> contextId="contextOfMyView"
> schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
> sequence="CTRL+N">
> </key>
> </extension>
>
> and the following handlers:
>
> <extension
> point="org.eclipse.ui.handlers">
> <handler
> class="NewElementAHandler"
> commandId="first.test.newCommand">
> <activeWhen>
> <iterate>
> <instanceof value="ElementA">
> </instanceof>
> </iterate>
> </activeWhen>
> </handler>
>
> <handler
> class="NewElementBHandler"
> commandId="first.test.newCommand">
> <activeWhen>
> <iterate>
> <instanceof value="ElementB">
> </instanceof>
> </iterate>
> </activeWhen>
> </handler>
> </extension>
>
> The actions in the context menu are objectContributions:
>
> <extension
> point="org.eclipse.ui.popupMenus">
> <objectContribution
> objectClass="ElementA"
> id="ElementA_Actions">
> <action
> enablesFor="1"
> label="New Element A"
> class="NewElementAAction"
> menubarPath="navigator.new"
> definitionId="first.test.newCommand"
> </action>
> </objectContribution>
> <objectContribution
> objectClass="ElementB"
> id="ElementB_Actions">
> <action
> enablesFor="1"
> label="New Element B"
> class="NewElementBAction"
> menubarPath="navigator.new"
> definitionId="first.test.newCommand"
> </action>
> </objectContribution>
> </extension>
>
> So far, everything works fine. If an element of type ElementA is
> selected, the accelerator key invokes NewElementAHandler and the same
> for elements of type ElementB. But in the logfile I find many log
> entries that inform about conflicting handlers.
> It seems to me, that eclipse itself generates Handlers to wrap actions
> with a given definitionId. And these generated handlers seem to cause
> these conflicts.
> Is there any way to solve this problem?

Don't mix commands and actions. If you have already created commands
and handlers, simply use org.eclipse.ui.menus to place your command in
the appropriate popup menu.

Then executing the menu item will execute the command, which will point
to the appropriate handler.

PW

--
Paul Webster
http://wiki.eclipse.org/Platform_Command_Framework
http://wiki.eclipse.org/Command_Core_Expressions
http://wiki.eclipse.org/Menu_Contributions
http://wiki.eclipse.org/Menus_Extension_Mapping
http://help.eclipse.org/ganymede/index.jsp?topic=/org.eclips e.platform.doc.isv/guide/workbench.htm


Re: Actions and command handlers [message #333461 is a reply to message #333388] Fri, 12 December 2008 08:40 Go to previous messageGo to next message
Dirk Wenke is currently offline Dirk WenkeFriend
Messages: 11
Registered: July 2009
Junior Member
Thanks Paul,

that did the trick! But there is now one problem left.
Using the org.eclipse.ui.menus extension point I succeded to contribute
elements to the popupmenu which are directly linked to my commands.
But I have problems contributing to submenus of the contextmenu.

<extension
point="org.eclipse.ui.menus">
<menuContribution
locationURI="popup:my.view?after=startGroup">
<menu
id="refactor.submenu"
label="Refactor">
</menu>
</menuContribution>
</extension>

If I define popup elements directly as command subelements of the menu
definition, they are shown in the submenu.
But I do not succeed to contribute from other plugins into that submenu.
Maybe I am using the wrong locationURI?
I tried

locationURI="popup:my.view?after=refactor.submenu"

I even tried the definition of a separator in the submenu and then used
the identifier of the separator in the locationURI

locationURI="popup:my.view?after=refactor.mySeparator"

Any ideas?

Dirk



> Dirk Wenke wrote:
>> Hi,
>>
>> I encoutered a problem while working with actions and
>> commands/handlers associated with it in Eclipse 3.4.
>> In my application I have a TreeViewer with a context menu. Depending
>> on the selected object in the tree, I have different "new" actions to
>> create a new element of the given type.
>> I tried now to add the key accelerator "CTRL+N" to all these new
>> actions (at any time, only one action can be associated with this key
>> binding), by defining a command with a keybinding:
>>
>> <extension
>> point="org.eclipse.ui.commands">
>> <command
>> categoryId="myCategory"
>> description="Create new element"
>> id="first.test.newCommand"
>> name="Create element">
>> </command>
>> </extension>
>> <extension
>> point="org.eclipse.ui.bindings">
>> <key
>> commandId="first.test.newCommand"
>> contextId="contextOfMyView"
>> schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
>> sequence="CTRL+N">
>> </key>
>> </extension>
>>
>> and the following handlers:
>>
>> <extension
>> point="org.eclipse.ui.handlers">
>> <handler
>> class="NewElementAHandler"
>> commandId="first.test.newCommand">
>> <activeWhen>
>> <iterate>
>> <instanceof value="ElementA">
>> </instanceof>
>> </iterate>
>> </activeWhen>
>> </handler>
>>
>> <handler
>> class="NewElementBHandler"
>> commandId="first.test.newCommand">
>> <activeWhen>
>> <iterate>
>> <instanceof value="ElementB">
>> </instanceof>
>> </iterate>
>> </activeWhen>
>> </handler>
>> </extension>
>>
>> The actions in the context menu are objectContributions:
>>
>> <extension
>> point="org.eclipse.ui.popupMenus">
>> <objectContribution
>> objectClass="ElementA"
>> id="ElementA_Actions">
>> <action
>> enablesFor="1"
>> label="New Element A"
>> class="NewElementAAction"
>> menubarPath="navigator.new"
>> definitionId="first.test.newCommand"
>> </action>
>> </objectContribution>
>> <objectContribution
>> objectClass="ElementB"
>> id="ElementB_Actions">
>> <action
>> enablesFor="1"
>> label="New Element B"
>> class="NewElementBAction"
>> menubarPath="navigator.new"
>> definitionId="first.test.newCommand"
>> </action>
>> </objectContribution>
>> </extension>
>>
>> So far, everything works fine. If an element of type ElementA is
>> selected, the accelerator key invokes NewElementAHandler and the same
>> for elements of type ElementB. But in the logfile I find many log
>> entries that inform about conflicting handlers.
>> It seems to me, that eclipse itself generates Handlers to wrap actions
>> with a given definitionId. And these generated handlers seem to cause
>> these conflicts.
>> Is there any way to solve this problem?
>
> Don't mix commands and actions. If you have already created commands
> and handlers, simply use org.eclipse.ui.menus to place your command in
> the appropriate popup menu.
>
> Then executing the menu item will execute the command, which will point
> to the appropriate handler.
>
> PW
>
Re: Actions and command handlers [message #333498 is a reply to message #333461] Mon, 15 December 2008 19:24 Go to previous message
Paul Webster is currently offline Paul WebsterFriend
Messages: 6859
Registered: July 2009
Location: Ottawa
Senior Member

Dirk Wenke wrote:
> Thanks Paul,
>
> that did the trick! But there is now one problem left.
> Using the org.eclipse.ui.menus extension point I succeded to contribute
> elements to the popupmenu which are directly linked to my commands.
> But I have problems contributing to submenus of the contextmenu.
>
> <extension
> point="org.eclipse.ui.menus">
> <menuContribution
> locationURI="popup:my.view?after=startGroup">
> <menu
> id="refactor.submenu"
> label="Refactor">
> </menu>
> </menuContribution>
> </extension>
>
> If I define popup elements directly as command subelements of the menu
> definition, they are shown in the submenu.
> But I do not succeed to contribute from other plugins into that submenu.
> Maybe I am using the wrong locationURI?
> I tried
>
> locationURI="popup:my.view?after=refactor.submenu"

So this should be locationURI="popup:refactor.submenu?after=additions"

PW


--
Paul Webster
http://wiki.eclipse.org/Platform_Command_Framework
http://wiki.eclipse.org/Command_Core_Expressions
http://wiki.eclipse.org/Menu_Contributions
http://wiki.eclipse.org/Menus_Extension_Mapping
http://help.eclipse.org/ganymede/index.jsp?topic=/org.eclips e.platform.doc.isv/guide/workbench.htm


Previous Topic:building update site
Next Topic:rcp and plugin startup code
Goto Forum:
  


Current Time: Fri Apr 19 01:15:08 GMT 2024

Powered by FUDForum. Page generated in 0.01968 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top