環境定義可用來影響在任何給定的時候,使用者能夠執行哪些指令。 相較於活動,環境定義比較動態。 活動代表使用者在大部分時間都能夠使用的一組廣泛的功能,環境定義則說明在特定時間點上的使用者焦點。 比方說,使用者在編輯文字時所能使用的指令,可能會不同於使用者在套件瀏覽器中編輯 Java 文字或瀏覽套件時所能使用的指令。
環境定義宣告在 org.eclipse.ui.contexts 延伸點中。 請考量下列為了編輯文字而定義的環境定義:
<extension point="org.eclipse.ui.contexts"> <context name="%context.editingText.name" description="%context.editingText.description" id="org.eclipse.ui.textEditorScope" parentId="org.eclipse.ui.contexts.window"> </context>環境定義被指派了將環境定義的相關資訊提供給使用者時所用的名稱和說明。 將指令之類的 UI 構成要素連結至特定環境定義時,會使用環境定義的 ID。
環境定義本身具有階層性質。 當某個環境定義在作用中,在這個環境定義中所能使用的指令,同樣也能在其母項環境定義中使用。 當定義從非常一般的情況到較特定的環境定義之環境定義層次時,這很有用。 在上述環境定義中,請注意,環境定義中指派了母項的 ID:
<context name="%context.editingText.name" description="%context.editingText.description" id="org.eclipse.ui.textEditorScope" parentId="org.eclipse.ui.contexts.window"> </context>母項環境定義用來定義在視窗內運作較一般的環境定義。 它的母項則會定義在視窗或對話框內運作的更一般的環境定義。
<context name="%context.window.name" description="%context.window.description" id="org.eclipse.ui.contexts.window" parentId="org.eclipse.ui.contexts.dialogAndWindow"> </context> <context name="%context.dialogAndWindow.name" description="%context.dialogAndWindow.description" id="org.eclipse.ui.contexts.dialogAndWindow"> </context>
目前為止,我們所執行的所有動作就是定義環境定義的階層。 當在另一個 UI 構成要素的說明中參照環境定義時,環境定義便有用了。 環境定義最常見的用途是在按鍵連結中。 當環境定義關聯於某個按鍵連結時,使用者必須在這個環境定義中,按鍵連結才會有作用。 比方說,下列標記會將根對話框和視窗環境定義指定為按鍵連結的環境定義:
<extension point="org.eclipse.ui.bindings"> <key sequence="M1+X" contextId="org.eclipse.ui.contexts.dialogAndWindow" commandId="org.eclipse.ui.edit.cut" schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"/> </extension>
工作台環境定義支援包括一個 API,可用來運作所定義的環境定義和定義特定環境定義的啟用準則。 大部分外掛程式都不需要涉及這個 API,不過,當定義特殊的視圖或編輯器,且這些視圖或編輯器定義了新環境定義時,它就有用。
IContextService 是在工作台中使用環境定義的起點。 外掛程式可以從工作台中取得廣域環境定義支援實例。
IContextService contextService = (IContextService)PlatformUI.getWorkbench() .getService(IContextService.class);
IContextService、IHandlerService 和 IBindingService 之類的服務都可以利用 IServiceLocator 來擷取。 IWorkbench、IWorkbenchWindow 和 IWorkbenchSite 都是 IServiceLocator。
IContextService 會定義取得所有已定義或啟用之環境定義 ID,以及取得特定 ID 之相關環境定義的通訊協定。 這些物件可用來遍訪 API 中環境定義之定義,如取得 ID、名稱,或母項環境定義的 ID。 您可以在環境定義管理程式或環境定義的本身,登錄接聽器來偵測特定環境定義的定義變更或環境定義管理程式本身的變更。 請參閱 org.eclipse.core.commands.contexts 套件,以取得詳細資訊。
環境定義能夠以程式化的方式來啟用:
IContextActivation activation = contextService.activateContext("org.eclipse.ui.textEditorScope");
IContextActivation 是一個記號,可用來停用作用中的環境定義。 您應該確定只啟動了所定義的環境定義。
如果在您的組件(視圖或編輯器)內啟動了更明確的環境定義,您可以利用組件網站服務定位器來啟動您的環境定義。 在組件啟動或停用時,組件的 IContextService 負責啟動和停用環境定義。 當刪除組件時,它也會刪除環境定義。