環境定義

環境定義可用來影響在任何給定的時候,使用者能夠執行哪些指令。 相較於活動,環境定義比較動態。 活動代表使用者在大部分時間都能夠使用的一組廣泛的功能,環境定義則說明在特定時間點上的使用者焦點。 比方說,使用者在編輯文字時所能使用的指令,可能會不同於使用者在套件瀏覽器中編輯 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 構成要素的說明中參照環境定義時,環境定義便有用了。 環境定義最常見的用途是在按鍵連結中。 當環境定義關聯於某個按鍵連結時,使用者必須在這個環境定義中,按鍵連結才會有作用。 比方說,下列標記會將根對話框和視窗環境定義指定為按鍵連結的環境定義:

<keyBinding
	commandId="org.eclipse.ui.edit.cut"
	contextId="org.eclipse.ui.contexts.dialogAndWindow"
	keySequence="M1+X"
	keyConfigurationId="org.eclipse.ui.defaultAcceleratorConfiguration">
</keyBinding>

使用環境定義 API

工作台環境定義支援包括一個 API,可用來運作所定義的環境定義和定義特定環境定義的啟用準則。 大部分外掛程式都不需要涉及這個 API,不過,當定義特殊的視圖或編輯器,且這些視圖或編輯器定義了新環境定義時,它就有用。

在工作台中使用環境定義的起點是 IWorkbenchContextSupport。 外掛程式可以從工作台中取得環境定義支援實例。

IWorkbenchContextSupport workbenchContextSupport = PlatformUI.getWorkbench().getContextSupport();
工作台環境定義支援 API 可用來新增或移除說明特定環境定義之啟用準則的 EnabledSubmission。 準則包括作用中的組件或作用中的 Shell 之類的資訊。 工作台支援也提供了 IContextManager 的存取功能。
IContextManager contextManager = workbenchContextSupport.getContextManager();

IContextManager 定義的通訊協定可用來取得所有已定義或已啟用的環境定義 ID,或取得特定 ID 的相關 IContext。 這些物件可用來遍訪 API 中環境定義之定義,如取得 ID、名稱,或母項環境定義的 ID。 您可以在環境定義管理程式或環境定義的本身,登錄接聽器來偵測特定環境定義的定義變更或環境定義管理程式本身的變更。 請參閱套件 org.eclipse.ui.contexts,以取得詳細資訊。