Áttervezhető szerkesztőtevékenységek

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.

Tájékoztató menü három szerkesztőművelettel a munkaterület menüsorában

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.

Tájékoztató menü egy átnevezett szerkesztőművelettel

Az átcímkézett tevékenység megjeleníti az új címkét.