0

我正在开发一个简单的 Eclipse 插件。我添加了一个弹出窗口作为扩展,并为其分配了一个 Action 类。一切正常,除了在打开弹出窗口时第一次禁用该操作。

我检查是否可以在 selectionChanged 方法中执行该操作。但是在 MyAction 对象被构造之前不能被调用。它仅在单击菜单按钮后执行(如果未满足先决条件,则应禁用它)。

如何处理这样的问题?在打开弹窗之前如何构造 MyAction?

我在我的项目(plugin.xml,MyAction.java)中附加了一个基本代码示例:

<plugin>
   <extension
         point="org.eclipse.ui.popupMenus">
      <objectContribution
            id="action.contribution1"
            objectClass="myobject">
         <menu
            id="action.menu1"
            label="Menu"
            path="additions">
         </menu>
         <actionm
               class="action.popup.actions.MyAction"
               enablesFor="1"
               id="action.newAction"
               label="Play"
               menubarPath="action.menu1">
         </action>
      </objectContribution>
   </extension>
</plugin>
public class MyAction implements IObjectActionDelegate {
    public MyAction() {
        super();
    }

    public void setActivePart(IAction action, IWorkbenchPart targetPart) {}

    public void run(IAction action) {
        //some logic
    }

    @Override
    public void selectionChanged(IAction action, ISelection selection) {
        boolean enabled = false;

        //some logic concerning enabled variable

        action.setEnabled(enabled);
    }

}
4

1 回答 1

1

setActivePart应该在菜单显示之前调用。您可以在其中设置操作启用。

<enablement>您可以使用 中的元素指定操作的初始启用plugin.xml,例如:

<action
     class="action.popup.actions.MyAction"
     enablesFor="1"
     id="action.newAction"
     label="Play"
     menubarPath="action.menu1">
   <enablement>
       <with variable="selection">
           ... tests
       </with>
    </enablement>
</action>

通过测试当前选择设置启用。

注意:扩展点org.eclipse.ui.popupMenus现在已弃用,您应该寻找移动到org.eclipse.ui.menus扩展点。

于 2013-11-02T21:30:37.100 回答