Ne feledje el, hogy a readme eszköz saját szerkesztőt ad meg, amely a ReadmeEditorActionBarContributor segítségével tevékenységeket ad hozzá a munkaterület-menühöz.
<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>
Nézzük meg közelebbről, hogy mi történik a közreadó-osztályban.
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")); ...
Ha közreadó létrehozás után létrehoz két áttervezhető tevékenységet (az egyik lehetővé teszi a címkefrissítést, és egy másikat, amely nem). Bizonyos tevékenységek ugyanazt az eljárást használják, mint a munkaterület. Ez szintén létrehoz két kezelőt, amelyet a tevékenységek használnak, ha a szerkesztő az aktív rész.
De a tevékenységek kezelői hol vannak regisztrálva? A globális kezelők beállítása egy kicsit másképp történik, amikor a szerkesztő áttervezett tevékenységeket ad meg. Miért? Mivel a közreadó felelős az aktív nézet nyomkövetéséért és a különböző kezelők különböző nézetekként csatlakoztatásáért, vagy maga a szerkesztő válik aktívvá. (A munkaterület elvégzi ezt, ha beállít egy kezelőt az egyik globális tevékenységhez). Az alábbiakban látható, hogy a ReadmeEditorActionBarContributor hogyan állítja be az elemeket:
public void init(IActionBars bars, IWorkbenchPage page) { super.init(bars, page); bars.setGlobalActionHandler(IReadmeConstants.RETARGET2, handler2); bars.setGlobalActionHandler(IReadmeConstants.LABELRETARGET3, handler3); ...
Először a közreadó bejegyzi a kezelőket az áttervezett tevékenységekhez. Ez biztosítja, hogy a közreadó tevékenységei fussanak, ha a szerkesztő aktív. A következő lépés a RetargetAction elemek bejegyzése az oldalon részfigyelőkként.
... // Áttervezett tevékenységek csatlakoztatása oldalfigyelőkként page.addPartListener(action2); page.addPartListener(action3); IWorkbenchPart activePart = page.getActivePart(); if (activePart != null) { action2.partActivated(activePart); action3.partActivated(activePart); } }
A RetargetAction elemek hozzáadása részfigyelőkként azt jelenti, hogy értesítést kap, ha az aktív rész módosul. A tevékenység az újonnan aktivált résztől megkaphatja a megfelelő globális kezelőt. (Részletes információkért tekintse meg a RetargetAction megvalósítását.) Ne feledje, hogy induláskor a tevékenység alapértéke az éppen aktív részből származik.
Ha a szerkesztő-közreadó eltávolításra került, akkor az áttervezhető tevékenységek oldalfigyelőkénti csatolását meg kell szüntetni.
public void dispose() { // Áttervezhető tevékenységek eltávolítása oldalfigyelőkként getPage().removePartListener(action2); getPage().removePartListener(action3); }
Végül ne feledje el, hogy a műveletsor-közreadók megosztásra kerülnek ugyanazon szerkesztő példányai között. Ezen okból a kezelőknek értesítést kell kapniuk az aktív szerkesztő változásairól, így csatlakozni tudnak a megfelelő szerkesztőpéldányhoz.
public void setActiveEditor(IEditorPart editor) { ... handler2.setActiveEditor(editor); handler3.setActiveEditor(editor); ... }
Ez befejezi a szerkesztőoldali beállítást. Ha a szerkesztő meg van nyitva és aktív, akkor a kezelők (és címkéik) a ReadmeEditorActionBarContributor által megadott módon jelennek meg a munkaterület-menüsoron.
Most, hogy a szerkesztő közreadói helyben vannak, mit tesz a nézet kezelő bejegyzéséhez? Az ügyféloldali kód hasonlít a kezelő munkaterület-tevékenységhez bejegyzéséhez azzal a kivétellel, hogy a tevékenységazonosító a bedolgozó szerkesztő által megadott. A ReadmeContentOutlinePage bejegyez egy kezelőt ezen tevékenységekhez.
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); ...
Ne feledje el, hogy a kiemelő buboréksúgó-szöveget és egy címkét ad meg a második tevékenységhez, mivel ez engedélyezi az átcímkézést. Ha a readme kiemelő nézet aktív, akkor a kezelők (és címkéik) megjelennek a munkaterület-menüsoron.
Az átcímkézett tevékenység megjeleníti az új címkét.