org.eclipse.ui.editors

Un editor è una parte del workbench che consente all'utente di modificare un oggetto (spesso un file). Gli editor operano come gli strumenti di modifica di un file system, tranne che per il fatto che sono strettamente integrati nell'interfaccia utente del workbench della piattaforma. Un editor è sempre associato a un oggetto di input IEditorInput. Un oggetto di input può essere considerato un documento o un file che viene modificato. Le modifiche apportate nell'editor non sono memorizzate finché non vengono salvate.

In una pagina del workbench è possibile aprire un solo editor per qualsiasi input particolare di editor. Ad esempio, se l'utente sta modificando il file readme.txt nel workbench, quando apre nuovamente il file nella stessa prospettiva attiverà lo stesso editor. Un altro editor può essere aperto sullo stesso file utilizzando una finestra o prospettiva differente.  Diversamente dalle visualizzazioni, comunque, è possibile aprire molte volte lo stesso tipo di editor (ad esempio, un editor di testo) in una pagina del workbench per eseguire differenti input.

Il punto di estensione del workbench org.eclipse.ui.editors viene utilizzato dai plug-in per aggiungere editor al workbench. I plug-in che forniscono un editor possono registrare la corrispondente estensione, insieme alle informazioni sulla relativa configurazione, nel loro file plugin.xml . Alcune informazioni relative all'editor, come la classe di implementazione e il nome e l'icona utilizzati nei menu e nelle etichette del workbench, sono simili alle informazioni relative alla visualizzazione. Inoltre, le estensioni di editor specificano i modelli di estensioni o nome del file per i tipi di file compresi dall'editor. Gli editor, inoltre, possono definire contributorClass, una classe che aggiunge azioni ai menu e alle barre degli strumenti del workbench quando l'editor è attivo.

L'interfaccia per gli editor è definita in IEditorPart, ma i plug-in possono scegliere di estendere la classe EditorPart, invece di implementare una classe IEditorPart partendo da zero.

Nota:  le estensioni di editor possono essere configurate anche per avviare un programma esterno per la modifica di un file o per fornire una classe di utilità di avvio, utilizzata per richiamare come editor il preesistente codice Java. In questa sezione, vengono analizzati soltanto gli editor che sono effettivamente integrati strettamente al workbench e che vengono implementati mediante IEditorPart.

Lo strumento readme fornisce un editor personalizzato principalmente per fornire la propria pagina di funzione di struttura del contenuto alla visualizzazione della struttura del workbench.  

La configurazione per l'estensione dell'editor è definita come segue:

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

Oltre al tag conosciuto di configurazione per ID, name, icon e class, è presente anche una nuova classe, contributorClass.

Fornitori di azioni di editor

La classe dei fornitori aggiunge al menu e alla barra degli strumenti del workbench le azioni relative a un editor. La classe deve implementare l'interfaccia IEditorActionBarContributor. Il fornitore è separato dall'editor perché su una pagina del workbench possono essere presenti più editor dello stesso tipo. Un singolo fornitore è condiviso da tutti gli editor di un determinato tipo senza che ciascuna istanza di un tipo di editor debba creare azioni e immagini. 

In ReadmeEditorActionBarContributor, vengono fornite tre azioni, "Editor Action1," "Editor Action2," e "Editor Action3"  , impostate nel costruttore.

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);
    ...
}

I nomi e le icone per le azioni vengono impostate nel codice invece che nel file plugin.xml.  Si osservi come questa informazione sia simile all'informazione viewActions, illustrata nel tag per l'azione di visualizzazione.  Le azioni vengono impostate nel codice perché è necessario gestire la condivisione delle azioni tra diverse istanze dello stesso editor.

Poiché vengono create nel costruttore, le azioni sono indipendenti da qualsiasi istanza particolare dell'editor.  Quando un editor diventa attivo ed è necessario installare le azioni nei menu e nella barra degli strumenti del workbench, viene inviato al fornitore il messaggio setActiveEditor,  in modo che connetta le azioni di editor a uno specifico editor.  

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

Quando un editor di readme è attivo, le azioni vengono visualizzate nel menu e nella barra degli strumenti del workbench.

Contributi dell'editor di readme alla barra dei menu del workbench
Contributi dell'editor di readme alla barra degli strumenti del workbench

Queste voci di menu e della barra degli strumenti vengono visualizzate soltanto quando l'editor è attivo. Per informazioni sul percorso delle voci di menu e della barra degli strumenti, consultare Percorsi di menu e barre degli strumenti.

Editor e funzioni di struttura del contenuto

Anche l'editor di readme, ReadmeEditor, non è molto complicato. Durante la modifica di un file readme, estende la classe TextEditor in modo da fornire una pagina personalizzata della funzione di struttura del contenuto alla visualizzazione della struttura. Non modifica alcun comportamento all'interno dell'editor di testo.

Gli editor spesso possiedono corrispondenti funzioni della struttura di contenuto, le quali forniscono una visualizzazione strutturata dei contenuti dell'editor e assistono l'utente durante l'esplorazione degli stessi.   Per ulteriori informazioni, consultare Funzioni della struttura di contenuto.

L'implementazione degli editor di testo è illustrata nella sezione Editor di testo e testo JFace.