2013-01-21 36 views
1

對於我的Eclipse rcp應用程序,我想使用活動來顯示和隱藏某些視圖。我閱讀了關於活動的Eclipse文檔,並試圖根據文檔中的'使用基於表達式的活動'片段獲得一個工作示例。Eclipse:Howto將活動綁定到視圖

在第一步驟i中創建一個新的觀點,在我的透視類添加佔位符爲它:

layout.addPlaceholder(View1.ID, IPageLayout.RIGHT, 0.5f, layout.getEditorArea()); 

然後我加入我的活性與表達和結合「啓用時」:

<extension point="org.eclipse.ui.activities"> 
    <activity id="org.project.activities.activity1" name="myActivity"> 
     <enabledWhen> 
      <with variable="org.project.activities.sessionState"> 
       <equals value="loggedIn"></equals> 
      </with> 
     </enabledWhen> 
    </activity> 
</extension> 
<activityPatternBinding 
    activityId="org.project.activities.activity1" 
    pattern="org.project.activities/org.project.activities.View1"> 
</activityPatternBinding> 

在最後一步我將自己的源提供者:

public class ActivitiySourceProvider extends AbstractSourceProvider { 
    public static final String SESSION_STATE = "org.project.activities.sessionState"; 
    private static final String LOGGED_OUT = "loggedOut"; 
    private static final String LOGGED_IN = "loggedIn"; 
    private static final String[] SOURCE_NAMES = new String[] { SESSION_STATE }; 
    private boolean loggedIn = false; 

    @Override 
    public Map<String, String> getCurrentState() { 
     Map<String, String> map = new HashMap<String, String>(1); 
     String value = loggedIn ? LOGGED_IN : LOGGED_OUT; 
     map.put(SESSION_STATE, value); 
     return map; 
    } 

    @Override 
    public String[] getProvidedSourceNames() { 
     return SOURCE_NAMES; 
    } 

    public void setLoggedIn() { 
     loggedIn = !loggedIn; 
     String value = loggedIn ? LOGGED_IN : LOGGED_OUT; 
     fireSourceChanged(ISources.WORKBENCH, SESSION_STATE, value); 
    } 
} 

當我開始測試應用程序時,我的視圖'View1'被隱藏,當我切換我的變量時,視圖仍然隱藏。要切換我的變量,我使用了一個句柄,並且我沒有收到任何異常。我也嘗試在應用程序啓動時將我的變量設置爲'loggedOut',但我也沒有工作。

我從文檔中遺漏了什麼嗎?

回答

0

您是否註冊了ActivitySourceProvider作爲源擴展點org.eclipse.ui.services的擴展程序的源提供程序?否則,它不會用於表達式評估。

+0

是的,我做了,我用一個_'enabledWhen'_表達式爲一個處理程序測試了源代碼提供程序,它工作正常。 –

+0

我想到的另一件事是你的'activityPatternBinding'沒有參數'isEqualityPattern'。如果未設置,則默認爲false,表示該模式已編譯爲正則表達式。您可能希望進行直接比較,即「isEqualityPattern」應該爲「true」。 –

+0

你好,我試過'isEqualityPattern = true',但我也沒有工作。 –