2013-11-02 62 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

添加元素的詳細信息 –