2013-11-02 22 views
0

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

我检查动作是否可以在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); 
    } 

} 

回答

1

setActivePart应该叫。您可以在其中设置动作启用。通过测试当前选择

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

集启用:

可以使用在plugin.xml<enablement>元件,例如指定操作的初始启用。

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

+0

这是真的,但它不会影响第一次调用动作。直到我点击链接的菜单后,该操作才会生效 - setActivePart在第一次没有被调用。因此我不能在MyAction对象中进行第一次验证和设置启用。 – Zacateras

+0

添加元素的详细信息 –