Připomeňme si, že nástroj pro soubor README definuje svůj vlastní editor, který poskytuje akce panelu nabídek pracovní plochy pomocí svého ReadmeEditorActionBarContributor.
<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>
Podívejme se blíže, co se děje ve třídě přispěvatele.
public ReadmeEditorActionBarContributor() { ... 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); ... handler2 = new EditorAction(MessageUtil.getString("Editor_Action2")); ... handler3 = new EditorAction(MessageUtil.getString("Editor_Action3")); ...
Jakmile je vytvořen přispěvatel, vytvoří dvě přecílitelné akce (jednu, která umožňuje aktualizaci štítku a druhou, která ji neumožňuje). Při vytváření akcí se používá stejná technika, jakou používá pracovní plocha. Vytváří také dva popisovače, které se budou používat pro akce, kdy je aktivní částí editor.
Kde jsou popisovače pro akce registrovány? Nastavování globálních popisovačů se provádí trochu odlišně v případě, že váš editor definuje přecílené akce. Proč? Protože váš přispěvatel je pověřen sledováním aktivního pohledu a zapojováním jiných popisovačů při aktivaci jiných pohledů, nebo samotného editoru. (Tento postup za vás provádí pracovní plocha, pokud nastavíte popisovač pro jednu z jeho globálních akcí). Zde je uvedeno, jak ReadmeEditorActionBarContributor provádí nastavení:
public void init(IActionBars bars, IWorkbenchPage page) { super.init(bars, page); bars.setGlobalActionHandler(IReadmeConstants.RETARGET2, handler2); bars.setGlobalActionHandler(IReadmeConstants.LABELRETARGET3, handler3); ...
Nejprve přispěvatel zaregistruje svoje popisovače pro přecílené akce. To zajistí, že akce přispěvatele budou spouštěny, pokud bude samotný editor aktivní. Dalším krokem je registrace všech RetargetAction jako listenerů částí na stránce.
... // Zapojte akce přecílení jako listenery stránek page.addPartListener(action2); page.addPartListener(action3); IWorkbenchPart activePart = page.getActivePart(); if (activePart != null) { action2.partActivated(activePart); action3.partActivated(activePart); } }
Přidání každé akce RetargetAction jako listeneru části znamená, že bude upozorněn při změně aktivní části. Akce může získat správný globální popisovač od nově aktivované části. (Veškeré podrobnosti viz implementace RetargetAction .) Pamatujte, že před spuštěním je akce otestována momentálně aktivní částí.
Pokud je přispěvatel editoru odstraněn, měl by uvolnit přecílitelné akce jako listenery stránek.
public void dispose() { // Odebrat akce přecílení jako listenery stránek getPage().removePartListener(action2); getPage().removePartListener(action3); }
Nakonec pamatujte na to, že přispěvatelé řádku s akcemi jsou sdíleni mezi instancemi stejné třídy editoru. Z tohoto důvodu musí být popisovače upozorněny, pokud se změní aktivní editor, aby se mohly připojit ke správné instanci editoru.
public void setActiveEditor(IEditorPart editor) { ... handler2.setActiveEditor(editor); handler3.setActiveEditor(editor); ... }
Tím se dokončí nastavení na straně editoru. Pokud je editor otevřený a aktivní, popisovače (a jejich štítky) se zobrazí na panelu nabídek pracovní plochy, jak je definováno v ReadmeEditorActionBarContributor .
Jak pohled registruje popisovač poté, co jsou příspěvky editoru umístěny? Kód na straně klienta je podobný registraci popisovače pro akci pracovní plochy, s výjimkou toho, že id akce je definováno editorem modulu plug-in. ReadmeContentOutlinePage pro tyto akce registruje popisovač.
public void createControl(Composite parent) { super.createControl(parent); ... getSite().getActionBars().setGlobalActionHandler( IReadmeConstants.RETARGET2, new OutlineAction(MessageUtil.getString("Outline_Action2"))); OutlineAction action = new OutlineAction(MessageUtil.getString("Outline_Action3")); action.setToolTipText(MessageUtil.getString("Readme_Outline_Action3")); getSite().getActionBars().setGlobalActionHandler( IReadmeConstants.LABELRETARGET3, action); ...
Pamatujte, že prohlížeč osnovy nastavuje text popisu a štítek v druhé akci, protože to umožňuje změnu štítku. Pokud je aktivován pohled prohlížeče osnovy souboru README, jeho popisovače (a jejich štítky) se zobrazí na panelu nabídek pracovní plochy.
Všimněte si, že akce se změněným štítkem zobrazuje nový štítek.