Editor je součást pracovní plochy, jež uživateli umožňuje provádět úpravy objektu (často úpravy souboru). Editory pracují shodně jako nástroje pro úpravu systému souborů, nicméně jsou úzce integrovány do uživatelského rozhraní pracovní plochy platformy. Editor je vždy přiřazen ke vstupnímu objektu (IEditorInput). Vstupní objekt si můžete představit jako dokument či soubor, který se upravuje. Změny provedené v editoru se uplatní až po jejich výslovném uložení.
Na stránce pracovní plochy smí být pro určitý vstup editoru otevřen pouze jediný editor. Pokud uživatel například v pracovní ploše edituje readme.txt, pak se po jeho opětovném otevření v téže perspektivě aktivuje tentýž editor. (Jiným editorem můžete otevřít již otevřený soubor z jiného okna či perspektivy pracovní plochy.) Na rozdíl od pohledů však může být v rámci jedné stránky pracovní plochy pro různé vstupy vícekrát otevřen editor téhož typu, např. textový editor.
Moduly plug-in používají k přidávání editorů do pracovní plochy bod rozšíření org.eclipse.ui.editors. Moduly plug-in přispívající do editoru musí rozšíření editoru registrovat ve svém souboru plugin.xml a uvést konfigurační informace editoru. Některé informace o editoru jsou obdobou informací o pohledu, např. implementační třída, název a ikona k použití v nabídkách pracovní plochy a ve štítcích. Dále rozšíření editoru určuje přípony nebo vzory názvů souborů typů, které editor podporuje. Editory mohou definovat rovněž contributorClass - třídu, jež zobrazuje akce v nabídkách pracovní plochy a na panelech nástrojů v době, kdy je editor aktivní.
Rozhraní editorů je definováno v IEditorPart, avšak moduly plug-in mohou rozšířit třídu EditorPart a ušetřit si tak práci na kompletní implementaci IEditorPart.
Poznámka: Rozšíření editoru lze nastavit rovněž tak, aby spouštělo externí program nebo volalo již existující kód java. V tomto textu se zaměřujeme zejména na editory, jež jsou skutečně důsledně zapracovány do pracovní plochy a jsou implementovány s použitím IEditorPart.
Nástroj README poskytuje uživatelský editor především k vložení své vlastní stránky prohlížeče osnovy obsahu do pohledu Osnova pracovní plochy.
Následuje konfigurace rozšíření editoru.
<extension point = "org.eclipse.ui.editors"> <editor id = "org.eclipse.ui.examples.readmetool.ReadmeEditor" name="%Editors.ReadmeEditor" icon="icons/obj16/editor.png" class="org.eclipse.ui.examples.readmetool.ReadmeEditor" extensions="readme" contributorClass="org.eclipse.ui.examples.readmetool.ReadmeEditorActionBarContributor"> </editor> </extension>
Vidíme známý konfigurační markup, který obsahuje položky id, name, icon a class. Atribut extensions určuje typy souborů, které editor podporuje. (Pro bližší určení můžete zadat rovněž atribut filenames.) Prvek class představuje třídu, která implementuje editor, třída contributorClass zajišťuje akce editoru. Podívejme se podrobněji na přispěvatele.
Třída přispěvatele přidává akce editoru do nabídky pracovní plochy a na panel nástrojů. Musí implementovat rozhraní IEditorActionBarContributor. Přispěvatel je od samotného editoru oddělen, protože na jedné stránce pracovní plochy může být více editorů téhož typu. Jediný přispěvatel je sdílen všemi editory určitého typu. Není proto zapotřebí, aby každá z instancí editoru vytvářela akce a obrázky.
V ReadmeEditorActionBarContributor vkládáme tři akce: "Akce_editoru1," "Akce_editoru2," a "Akce_editoru3." Tyto akce jsou definovány v konstruktoru.
public ReadmeEditorActionBarContributor() { ... action1 = new EditorAction(MessageUtil.getString("Editor_Action1")); action1.setToolTipText(MessageUtil.getString("Readme_Editor_Action1")); action1.setDisabledImageDescriptor(ReadmeImages.EDITOR_ACTION1_IMAGE_DISABLE); action1.setImageDescriptor(ReadmeImages.EDITOR_ACTION1_IMAGE_ENABLE); ... action2 = new RetargetAction(IReadmeConstants.RETARGET2, MessageUtil.getString("Editor_Action2")); action2.setToolTipText(MessageUtil.getString("Readme_Editor_Action2")); action2.setDisabledImageDescriptor(ReadmeImages.EDITOR_ACTION2_IMAGE_DISABLE); action2.setImageDescriptor(ReadmeImages.EDITOR_ACTION2_IMAGE_ENABLE); ... action3 = new LabelRetargetAction(IReadmeConstants.LABELRETARGET3, MessageUtil.getString("Editor_Action3")); action3.setDisabledImageDescriptor(ReadmeImages.EDITOR_ACTION3_IMAGE_DISABLE); action3.setImageDescriptor(ReadmeImages.EDITOR_ACTION3_IMAGE_ENABLE); ... }
Názvy a ikony akcí se nastavují v kódu, nikoli v souboru plugin.xml. (V tomto momentu si nebudeme všímat rozdílů tříd akce, a to dokud se nebudeme věnovat přecílitelným akcím.)
Povšimněte si, jak se informace akce podobá informaci viewActions, kterou jsme viděli v markupu pro akci pohledu. Akce se nastavují v kódu, protože musíme spravovat sdílení akcí mezi různými instancemi téhož editoru. Po vytvoření v konstruktoru jsou akce nezávislé na jednotlivých instancích editoru.
Po aktivaci editoru, který má akce, jež je zapotřebí instalovat do nabídek a panelu nástrojů pracovní plochy, je přispěvateli odeslána zpráva setActiveEditor. Přispěvatel připojí akce editoru ke konkrétnímu editoru.
public void setActiveEditor(IEditorPart editor) { ... action1.setActiveEditor(editor); ... }
Jak je patrné, akce se zobrazují v nabídce a na panelu nástrojů pracovní plochy, je-li aktivní editor README.
Tyto položky nabídky a panelu nástrojů se zobrazují pouze je-li aktivní editor. Umístění položek nabídky a panelu nástrojů lze zadat dle popisu uvedeného v Cesty nabídky a panelu nástrojů.
Samotný editor README, ReadmeEditor, není příliš složitý. Rozšiřuje třídu TextEditor, takže může během editace souboru README vkládat přizpůsobenou stránku prohlížeče osnovy obsahu do pohledu Osnova. Nepozměňuje chování v rámci textového editoru.
Editory často mají příslušné prohlížeče osnovy obsahu, které poskytují strukturované zobrazení obsahu editoru a pomáhají uživateli v procházení obsahem editoru. Další informace viz Prohlížeče osnovy obsahu.
Implementaci textových editorů se budeme věnovat v Textové editory a text platformy.