活動是環繞著某項核心工作種類的邏輯功能分組。 比方說,開發 Java 軟體就是一項通常由平台使用者來執行的活動, JDT 定義了許多只在執行這項活動時才使用的 UI 構成要素(視圖、編輯器、視景、喜好設定等)。 在檢視定義活動的機制之前,我們要先查看它們是如何協助「掃除 UI 的雜亂」。
使用者直接面對活動的概念,不過,對於新使用者而言,這可能不太明顯。 當在平台中啟用某項活動時,會顯示這個活動的相關 UI 構成要素。 當在平台中停用某項活動時,便不會顯示它的 UI 構成要素。 使用者可以依照需要,利用工作台 > 功能喜好設定頁面來啟用和停用活動。 (在使用者介面中,活動稱為「功能」,不過,我們在 API 中使用活動這個專有名詞)。
特定使用者作業會成為啟用某項活動的觸發點。 比方說,建立新 Java 專案可能會觸發啟用 Java 開發活動。 在這個方式下,使用者會見到他們所需要的新功能,並逐漸瞭解他們能夠使用的活動及這些活動如何影響 UI。 當使用者最初啟動平台時,最好儘可能停用夠多的活動,使應用程式儘可能簡單。 歡迎使用頁面中的選擇有助於判斷應該啟用哪些活動。
我們已看到(在視景中)如何利用視景將不同的視圖佈置及動作集組織到作業中。 我們為什麼需要活動? 視景和活動會定義類似的工作種類,主要差異在於它們與外掛程式的 UI 構成要素的關聯方式。UI 構成要素是在構成要素的延伸定義中與視景關聯。 也就是說,外掛程式負責判斷它的視圖和動作集屬於哪些視景。 外掛程式也可以自由定義它們自己的視景。 即使視景不在作用中,使用者也可以利用顯示視圖之類的指令來存取視景的相關視圖和動作。
活動是較高層次的組織。 個別 UI 構成要素並不知道活動,也不在它們的延伸定義中參照活動。 相反地,依照預期,活動應該配置在如平台整合/配置或產品安裝等較高的層次上。 個別外掛程式通常並不定義新的活動,除非這個外掛程式是系統整合者所定義的系統層次外掛程式。 在典型的實務中,系統整合者會決定如何將功能分組到活動中,以及預設啟用哪些活動。 活動是利用活動型樣連結,也就是外掛程式針對 UI 構成要素的 ID 來比對的型樣,來關聯於 UI 構成要素。 範例有助於示範這些概念。
活動是利用 org.eclipse.ui.activities 延伸點來定義的。 我們來看看 Eclipse SDK 外掛程式如何定義兩個活動的簡單版 - 一個是開發 Java 軟體的活動,一個是開發外掛程式的活動:
<extension point="org.eclipse.ui.activities"> <activity name="Java Activity" description="Developing Java Software" id="org.eclipse.javaDevelopment"> </activity> <activity name="Plug-in Activity" description="Developing Eclipse Plug-ins" id="org.eclipse.plugInDevelopment"> </activity> ...
活動被指派了名稱和說明,每當使用者啟用和停用活動時都會見到這個名稱和說明,當顯示活動的相關資訊時,也會見到它們。 活動 ID 則是在定義型樣連結或活動之間的其他關係時使用。 比方說,我們可以決定某個活動需要另一個活動。
<activityRequirementBinding activityId="org.eclipse.plugInDevelopment" requiredActivityId="org.eclipse.javaDevelopment"> </activityRequirementBinding>
需求連結指出只有在啟用 Java 開發活動時,才能啟用外掛程式開發活動。 相關的活動也可以連結至使用者操作活動時所見到的種類。
<category name="Development" description="Software Development" id="org.eclipse.categories.developmentCategory"> </category> <categoryActivityBinding activityId="org.eclipse.javaDevelopment" categoryId="org.eclipse.categories.developmentCategory"> </categoryActivityBinding> <categoryActivityBinding activityId="org.eclipse.plugInDevelopment" categoryId="org.eclipse.categories.developmentCategory"> </categoryActivityBinding>
種類將相關的開發活動分成一組。 當使用者手動配置活動時,會見到這個種類。
活動是利用型樣比對來關聯於 UI 構成要素。 活動型樣連結中所用的型樣比對遵循 java.util.regex 套件中所說明的正規表示式的規則。 工作台所用的型樣由兩個部分組成。 第一部分使用提供 UI 延伸規格之外掛程式的 ID 。 第二部分是定義構成要素時,外掛程式本身所用的 ID(可能包括也可能不包括在 ID 中的外掛程式 ID)。 所用的格式如下:
plug-in-identifier + "/" + local-identifier比方說,下列活動型樣連結指出,任何 JDT 外掛程式 ID (org.eclipse.jdt.*) 中的 UI 構成要素都會關聯於 Java 開發活動, 不論它的區域 ID (.*) 為何。
<activityPatternBinding activityId="org.eclipse.javaDevelopment" pattern="org\.eclipse\.jdt\..*/.*"> </activityPatternBinding>下個連結比較明確。 它指出在 JDT 核心 (org.eclipse.jdt.core) 中所定義名稱為 javanature 的構成要素關聯於 Java 開發活動。
<activityPatternBinding activityId="org.eclipse.javaDevelopment" pattern="org\.eclipse\.jdt\.core/javanature"> </activityPatternBinding>如您所見,活動型樣連結可用來將大的構成要素群組關聯於某項特殊活動,或將非常明確的構成要素關聯於某項活動。 以下是受到活動影響的構成要素:
工作台所用的慣例(外掛程式 ID + 區域 ID)允許簡單連結到不必然遵循「以外掛程式的 ID 作為其 UI 構成要素 ID 字首」的命名方式之外掛程式。 直接與活動 API 交談的外掛程式可以自由利用它們自己的格式,來識別構成要素及進行這些名稱的型樣比對。
活動是利用 UI 構成要素所用的相同型樣比對架構來關聯於說明構成要素。 ID(區域 ID)的第二部分指示目錄 (TOC) 檔的名稱。 比方說,下列活動型樣連結會將 JDT 外掛程式 (org.eclipse.jdt.*) 所提供的所有 TOC 檔關聯於 Java 開發活動:
<activityPatternBinding activityId="org.eclipse.javaDevelopment" pattern="org\.eclipse\.jdt\..*/.*"> </activityPatternBinding>當停用 Java 開發活動時,JDT 外掛程式所提供的說明書籍,或任何子書籍(所連結的 TOC,或 JDT 書籍所連結者), 即使是不同的外掛程式所提供,也不會出現在說明 UI 中。 這些書籍所定義的主題也不會顯示在搜尋結果中。 當 JDT TOC 未顯示成主要 TOC,而是從呈現為書籍子樹的其他 TOC 來加以鏈結時,停用 JDT 活動會有隱藏子樹的作用。 在 UI 中,含括它們的書籍會顯示成定義較少主題。
當使用更明確的連結時,有可能從提供多個 TOC 給說明系統的外掛程式中,將選定的 TOC 關聯於活動。 比方說,下列活動型樣連結會將「範例」 TOC 關聯於 Java 開發範例活動。
<activityPatternBinding activityId="org.eclipse.javaDevelopmentExamples" pattern="org\.eclipse\.jdt\.doc\.isv\.topics_Samples.xml"> </activityPatternBinding>當使用這類型樣連結時,停用 Java 開發範例活動會隱藏「JDT 外掛程式開發人員手冊」一書中的「範例」區段。
工作台活動支援包括一個 API,可用來處理所定義的活動及變更其啟用狀態。 大部分外掛程式都不需要涉及這個 API,不過,當實作允許使用者使用活動的函數,或實作啟用特定活動的觸發點時,這個 API 是有用的。 依照假設,任何通過 API 來操作活動的外掛程式都明白特定產品的活動配置方式。 比方說,工作台本身會利用 API 來觸發啟用 Java 開發之類的活動。 我們要看看工作台如何利用一般活動 API 來實作觸發程式。
工作台中所有活動的中心是 IWorkbenchActivitySupport。 這個活動支援與 IActivityManager 前後搭配運作。 外掛程式可以從工作台取得活動支援實例,也可以從其中取得活動管理程式。
IWorkbenchActivitySupport workbenchActivitySupport = PlatformUI.getWorkbench().getActivitySupport(); IActivityManager activityManager = workbenchActivitySupport.getActivityManager();下列片段會啟用 Java 開發活動(如果還沒有啟用的話)。 它展示了簡化版的觸發器。
... //使用者執行了與 Java 相關的某個動作。啟用Java 活動。 Set enabledActivityIds = new HashSet(activityManager.getEnabledActivityIds()); if (enabledIds.add("org.eclipse.javaDevelopment")) workbenchActivitySupport.setEnabledActivityIds(enabledActivityIds);
IActivityManager 也會定義通訊協定,用來取得所有已定義的活動和種類 ID,以及取得特定 ID 的相關 IActivity 或 ICategory。 這些物件可用來遍訪 API 中的活動或種類的定義,如取得型樣連結或需求連結。 您可以在活動管理程式或活動和種類的本身,登錄接聽器來偵測特定活動的定義變更或活動管理程式本身的變更。 請參閱套件 org.eclipse.ui.activities,以取得詳細資訊。