org.eclipse.ui.editors

編輯器是工作台中可讓使用者編輯物件(通常是檔案)的部份。 編輯器運作的方式類似於檔案系統編輯工具,不過,它們緊密整合在平台工作台 UI 中。 編輯器永遠會關聯於一個輸入物件 (IEditorInput)。 您可以將輸入物件想成編輯的文件或檔案。 編輯器所進行的變更必須在使用者加以儲存時才會確定。

工作台頁面中的任何特定編輯器輸入都只能開啟一個編輯器。 比方說,如果使用者在工作台中編輯 readme.txt,在相同視景中重新開啟它會啟動相同的編輯器。 (您可以從不同的工作台視窗或視景開啟另一個編輯器來處理相同的檔案)。 不過,這不像檢視畫面,在相同工作台頁面中,不同的輸入可以重複開啟相同的編輯器類型(如文字編輯器)。

外掛程式會利用工作台延伸點 org.eclipse.ui.editors 來新增編輯器到工作台中。 提供編輯器的外掛程式必須附隨編輯器的配置資訊,在其 plugin.xml 檔中登錄編輯器延伸項目。 部份編輯器資訊(如工作台功能表和標籤中所用的實作類別名稱以及圖示)類似於檢視畫面資訊。 另外,編輯器延伸項目也會指定編輯器所瞭解之檔案類型的副檔名或檔案名稱型樣。 編輯器也可以定義 contributorClass,也就是在編輯器作用時,將動作新增到工作台功能表和工具列的類別。

編輯器的介面定義在 IEditorPart 中,但外掛程式可以選擇繼承 EditorPart 類別,而不重新實作 IEditorPart

附註:您也可以配置編輯器延伸規格啟動外部程式來編輯檔案,或提供用來呼叫先前存在的 Java 程式碼之發射台類別作為編輯器。 在這個討論中,焦點要放在實際緊密整合在工作台中且是利用 IEditorPart 來實作的編輯器。

Readme 工具有一個自訂編輯器,主要用來將自己的內容概要畫面頁面提供到工作台概要檢視畫面。

編輯器延伸項目的配置定義如下。

<extension
    point = "org.eclipse.ui.editors">
        <editor
            id = "org.eclipse.ui.examples.readmetool.ReadmeEditor"
            name="Readme 檔編輯器"
            icon="icons/basic/obj16/editor.gif"
            class="org.eclipse.ui.examples.readmetool.ReadmeEditor"
            extensions="readme"
            contributorClass="org.eclipse.ui.examples.readmetool.ReadmeEditorActionBarContributor">
        </editor>
</extension>

idnameiconclass 上,我們見到類似的配置標記。 另外還有一個新東西 - contributorClass

編輯器動作 contributor

contributor 類別會新增相關動作到工作台功能表和工具列中。 它必須實作 IEditorActionBarContributor 介面。 contributor 有別於編輯器本身,因為任何給定的工作台頁面都可以有相同類型的多個編輯器。 單一 contributor 不會有編輯器類型建立動作和影像的每個實例,而是會由所有特定類型的編輯器來共用。

ReadmeEditorActionBarContributor 中,我們提供三個動作,"Editor Action1"、"Editor Action2" 和 "Editor Action3"  。 這些都是在建構子中設定的。

public ReadmeEditorActionBarContributor() {
    ...
    action1 = new EditorAction("&Editor Action1");
    action1.setToolTipText("Readme Editor Action1");
    action1.setImageDescriptor(ReadmeImages.EDITOR_ACTION1_IMAGE);
    ...
    action2 = new EditorAction("&Editor Action2");
    action2.setToolTipText("Readme Editor Action2");
    action2.setImageDescriptor(ReadmeImages.EDITOR_ACTION2_IMAGE);
    ...
    action3 = new EditorAction("&Editor Action3");
    action3.setToolTipText("Readme Editor Action3");
    action3.setImageDescriptor(ReadmeImages.EDITOR_ACTION3_IMAGE);
    ...
}

動作的名稱和圖示是設定在程式碼中,而不是在 plugin.xml 中。 請注意,這個資訊與我們在檢視畫面動作的標記中見到的 viewActions 資訊有多類似。 動作是設定在程式碼中,因為我們必須管理相同編輯器的不同實例之間的動作共用。

由於它們是建立在建構子中,因此,動作會獨立於任何特定的編輯器實例之外。 當編輯器成為作用中,且動作必須安裝在工作台功能表和工具列時,會將 setActiveEditor 訊息傳送給建構子。 建構子會將編輯器動作連接到特定編輯器上。

public void setActiveEditor(IEditorPart editor) {
    ...
    action1.setActiveEditor(editor);
    action2.setActiveEditor(editor);
    action3.setActiveEditor(editor);
    ...
}

如您所能見到,當 Readme 編輯器在作用中,動作就會出現在工作台功能表和工具列中。

工作台功能表列的 Readme 編輯器構成要素
工作台工具列的 Readme 編輯器構成要素

編輯器必須在作用中,才會顯示這些功能表和工具列項目。 功能表和工具列項目的位置可以依照功能表和工具列路徑中的說明來指定。

編輯器和內容概要畫面

Readme 編輯器本身 ReadmeEditor 並不十分複雜。 它繼承 TextEditor 類別,因此,在編輯 Readme 檔時,它可以提供自訂內容概要畫面頁面到概要檢視畫面中。 它不會在文字編輯器中改變任何行為。

編輯器通常有對應的內容概要畫面,它提供編輯器內容的結構化檢視畫面並協助使用者導覽編輯器的內容。 請參閱內容概要畫面,以取得詳細資料。

我們將在文字編輯器和 JFace 文字中查看文字編輯器的實作。