2012-01-31 87 views
3

我有兩個單獨的視圖,都顯示多個值列表。兩種觀點都是同時開放的。Eclipse RCP命令框架:我迷路了

我有一個通用命令AddNewItemInList,我想添加到兩個視圖的工具欄。該命令應該將新項目添加到當前具有焦點的列表中。如果用戶尚未選擇列表,則應禁用該命令。

我目前使用以下命令來執行該命令。

public class MyViewPart extends ViewPart { 
    [...] 
    public Object getAdapter(Class clazz) { 
     if(clazz.equals(List.class)) 
      return getListInFocus(); // can be null if no list in focus 
     return null; 
    } 
} 

public class AddNewItemInList extends AbstractHandler { 
    @Override 
    public Object execute(ExecutionEvent event) throws ExecutionException { 
     MyList list = HandlerUtil.getActivePart(event).getAdapter(MyList.class); 
     list.add(new Item()); 
     return null; 
    } 
} 

到目前爲止好,但我不知道如何啓用或禁用相應的處理程序。我已閱讀了關於Eclipse Core Commands框架。我很迷茫。

回答的問題: 我如何創建一個表達式,確定視圖的getAdapter()方法沒有返回null? - >回答如下

如何獲得配置了此命令的視圖(而不是當前活動的視圖)? - >我可以添加viewId爲命令參數

剩下的問題: 我應該配置兩個單獨的處理程序實例在我的plugin.xml(每個視圖)? - > enabledWhen條件只能使用當前的評估上下文。看來我不能使用該命令提供的任何參數。這意味着根據完整工作臺的狀態,可以啓用或禁用處理程序。

+1

re:實際上,它是啓用或不是整個工作臺的命令,因爲在3.x中只有全局應用程序狀態。它是在3.x中設計的,我們試圖在4.x中修復它,因爲啓用是相對於上下文而不是該命令的全局狀態。 – 2012-02-06 18:33:51

回答

1

如何創建表達式以查看視圖的getAdapter()方法是否不返回null?

您可以使用custom property testers。它需要很多樣板,看起來很醜,但它很有用。

編輯:其實,it's a lot simpler

<with variable="activePart"> 
    <adapt type="com.foo.MyList"/> 
</with> 
+0

酷!這實際上有效,但有一個簡單的問題:處理程序的enabledWhen屬性應用於命令和兩個視圖。如果我選擇view1並且view1適用於MyList,那麼也會啓用view2中的按鈕。 – parasietje 2012-02-01 10:49:36

1

自定義屬性測試有一些問題,但他們真難看。他們答應做一些improvements in version 4.0。你可以嘗試自己實現類似的東西。

相關問題