對外掛程式的檢視畫面和編輯器來說,實作與現有工作台動作語意相似的動作是非常普通的, 如剪貼簿的剪下/複製/貼上、重新整理檢視畫面或內容。如果每一個檢視畫面或編輯器必須定義專屬的動作給這些作業並併入至功能表中, 檢視畫面和編輯器的蹦現功能表會變的十分雜亂。
要解決這個問題,工作台定義可由任何檢視畫面或編輯器所處理的重新目標化(也稱為廣域)動作。當檢視畫面或編輯器在作用中時,當使用者從工作台功能表或工具列中選取動作時會執行處理程式。這讓檢視畫面和編輯器共用工作台功能表空間中語意相似的動作。
IWorkbenchActionConstants 記錄了工作台所有的動作以及表示重新目標化動作為廣域的。例如,以下是內容動作的定義。
public static final String PROPERTIES = "properties"; // Global action.
下列表格彙總了利用檢視畫面和編輯器所實作的通用重新目標化動作:
檔案功能表 | 編輯功能表 | 導覽功能表 | 「專案」功能表 | |
檢視畫面 | 移動 重新命名 重新整理 內容 |
進入 移至資源 與編輯器同步 上一步 下一步 向上 下一個 上一個 |
開啟 關閉 建置 重新建置 |
|
編輯器 | 回復 列印 |
尋找 | ||
檢視畫面和編輯器 | 剪下 複製 貼上 刪除 全選 復原 重做 |
使用 RetargetAction 建立重新目標化的動作。下列片段是從 WorkbenchActionBuilder 中擷取的。
propertiesAction = createGlobalAction(IWorkbenchActionConstants.PROPERTIES, "file", false);
createGlobalAction 方法為我們顯示實際上如何製作 RetargetAction。
private RetargetAction createGlobalAction(String id, String actionDefPrefix, boolean labelRetarget) { RetargetAction action; if (labelRetarget) { action = new LabelRetargetAction(id, WorkbenchMessages.getString("Workbench." + id)); } else { action = new RetargetAction(id, WorkbenchMessages.getString("Workbench." + id)); } ... return action; }
建立重新目標化動作時,工作台指派 ID 給動作和預設標籤。請注意,重新目標化的動作有兩個樣式。RetargetAction 只讓檢視畫面或編輯器重新實作動作。LabelRetargetAction 也容許檢視畫面和編輯器重設動作標籤。 這對使功能表標籤更特定有用,例如重新標示復原動作為復原鍵入。
現在我們知道工作台如何定義重新目標化動作。接下來讓我們看一下,檢視畫面或編輯器如何 提供實作給重新目標化的動作。利用設定廣域動作處理程式以完成此項工作。