Szerkesztőtevékenységek regisztrálása

A szövegszerkesztő/keretrendszer számos segédprogramosztályt biztosít, amelyek segítséget nyújtanak a szöveg és forráskód megjelenítéséhez és frissítéséhez. Ezután a figyelmet a munkaterületre irányítjuk, amelynek a szerkesztő egy része. A szerkesztő hogyan működik együtt más munkaterület-funkciókkal, mint például a kontextusmenük, menüsorok és eszköztárak?

Szerkesztőmenüsor-tevékenységek

Annak megértéséhez, hogy a szerkesztők hogyan jegyzik be magukat a munkaállomáshoz, és hogyan biztosítanak tevékenységeket a munkaterület menüsorhoz, tekintse meg az org.eclipse.ui.editors elemet bemutató részt.  Itt nem foglalkozunk ezekkel az információkkal.   Csak gyorsan átnézzük a leírónyelvet, amelyben a Java példaszerkesztő bejegyzi a szerkesztőt.

<extension
      point="org.eclipse.ui.editors">
   <editor
         name="%javaEditorName"
         icon="icons/obj16/java.png"
         extensions="jav"
         contributorClass="org.eclipse.ui.examples.javaeditor.JavaActionContributor"
         class="org.eclipse.ui.examples.javaeditor.JavaEditor"
         id="org.eclipse.ui.JavaEditor">
   </editor>
</extension>

Munkaterület menüsor-tevékenységeket a JavaActionContributor adja közre.   Megvalósítja a tevékenységeket, amelyek a munkaterület Szerkesztés menüjében és a munkaterület eszköztáron találhatók.

public JavaActionContributor() {
	super();
	fContentAssistProposal= new RetargetTextEditorAction(JavaEditorMessages.getResourceBundle(), "ContentAssistProposal."); //$NON-NLS-1$
	...
	fContentAssistTip= new RetargetTextEditorAction(JavaEditorMessages.getResourceBundle(), "ContentAssistTip."); //$NON-NLS-1$
	...
	fTogglePresentation= new PresentationAction();
}

Az első két tevékenység áttervezhető szövegszerkesztő-tevékenységként van megadva. Az alapelvek hasonlóak a munkaterület által biztosított áttervezhető tevékenységekhez. Áttervezhető szövegszerkesztő-tevékenységek menübejegyzéseket ábrázolnak, amelyeket a műveletközreműködők dinamikusan kötődnek az aktív szerkesztő által biztosított megfelelő tevékenységekhez. Ha az aktív szerkesztő megváltozik, akkor a művelet is megváltozik, amelyhez az áttervezhető szövegszerkesztő-tevékenység kötve van. Az alábbi részlet megjeleníti, hogy a szerkesztőtevékenység kontribútor megkeresi a megfelelő tevékenységet azáltal, hogy a szerkesztőtől kéri az adott azonosító tevékenységét:

protected final IAction getAction(ITextEditor editor, String actionId) {
return (editor == null ? null : editor.getAction(actionId));
} public void setActiveEditor(IEditorPart part) {
super.setActiveEditor(part);
ITextEditor editor= null;
if (part instanceof ITextEditor)
editor= (ITextEditor) part;
fContentAssistProposal.setAction(getAction(editor, "ContentAssistProposal"));
fContentAssistTip.setAction(getAction(editor, "ContentAssistTip"));
fTogglePresentation.setEditor(editor);
fTogglePresentation.update();
}

Az azonosítónak meg kell egyeznie, amely alatt a tevékenység be van jegyezve a szerkesztőhöz, ahogy a JavaTextEditor elemhez itt meg van adva. (Tekintse meg a következő részt is.):

protected void createActions() {
	super.createActions();
		
	IAction a= new TextOperationAction(JavaEditorMessages.getResourceBundle(), "ContentAssistProposal.", this, ISourceViewer.CONTENTASSIST_PROPOSALS); //$NON-NLS-1$
	a.setActionDefinitionId(ITextEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS);
	setAction("ContentAssistProposal", a); 
		
	a= new TextOperationAction(JavaEditorMessages.getResourceBundle(), "ContentAssistTip.", this, ISourceViewer.CONTENTASSIST_CONTEXT_INFORMATION);  //$NON-NLS-1$
	a.setActionDefinitionId(ITextEditorActionDefinitionIds.CONTENT_ASSIST_CONTEXT_INFORMATION);
	setAction("ContentAssistTip", a); 
}

A kontribútor harmadik tevékenysége a munkaterület eszköztárához adott konkrét tevékenység.  Átkapcsolja a szerkesztő állapotát a kijelölt tartomány megjelenítése (ahogy a Java példa tartalom kiemel[ által meg van adva) és a teljes fájl megjelenítése között. Ez a tevékenység csak az eszköztáron jelenik meg.

Szerkesztő előugró menük

A szerkesztő előugró menük az AbstractTextEditor és TextEditor keretrendszerben kerülnek létrehozásra és kezelésre.

A createActions metódus regisztrálja a tevékenységeket a szerkesztőhöz. Ez tartalmazza a szerkesztő előugró menüknek megfelelő tevékenységeket, vagy a kiterjesztés definíciókban biztosított tevékenységeket. A Java példaszerkesztőben csak az áttervezhető tevékenységekhez kötött tevékenységek jönnek létre. A Java példaszerkesztő a TextEditor és ennek szülőosztályai által létrehozott tevékenységeket is örökli.  Ezek a tevékenységek használhatók az előugró menükben.

A TextEditor editorContextMenuAboutToShow metódus a keretrendszerben kerül használatra annak érdekében, hogy a szerkesztők hozzáadhassanak tevékenységeket a szerkesztési terület előugró menüjéhez. Egy menü elérési utat használhat annak eldöntéséhez, hogy a tevékenységnek hol kell megjelennie. A szerkesztő előugró menün belüli érvényes menü elérési utak a metódus AbstractTextEditor elemen belüli megvalósításán belül vannak megadva.

Többféleképp lehet tevékenységet hozzáadni ehhez a menühöz. Az első lehetőség, ha a tevékenységet csak az azonosítóval adja hozzá, amellyel regisztrálva a szerkesztőhöz. A JavaTextEditor például akkor adja hozzá a tartalomtámogatási tevékenységeket a menühöz, amikor ez a metódus meghívásra kerül. A tevékenységek nem jelennek meg a menüben, ha nincs tevékenység bejegyezve a használt azonosító alatt.

public void editorContextMenuAboutToShow(MenuManager menu) {
	super.editorContextMenuAboutToShow(menu);
	addAction(menu, "ContentAssistProposal"); 
	addAction(menu, "ContentAssistTip"); 
}

A TextEditor szülőosztály egy második módszerrel adja hozzá a tevékenységeket - megad egy menücsoportot az előugró menüben a tevékenység elhelyezéséhez.  Ebben az esetben a tevékenységek (Shift Left, Shift Right) megjelennek az előugró menüben az AbstractTextEditor által megadott csoportban.

protected void editorContextMenuAboutToShow(IMenuManager menu) {
	super.editorContextMenuAboutToShow(menu);
	addAction(menu, ITextEditorActionConstants.GROUP_EDIT, ITextEditorActionConstants.SHIFT_RIGHT);
	addAction(menu, ITextEditorActionConstants.GROUP_EDIT, ITextEditorActionConstants.SHIFT_LEFT);
}

Szerkesztő előugró menü

A rulerContextMenuAboutToShow metódus ugyanilyen módon használt a vonalzó előugró menüjének megjelenítése előtt. A metódus megvalósítása az AbstractTextEditor elemben megadja a csoportokat, amelyekben az elemek hozzáadhatók a menühoz.

Menüazonosítók

A szerkesztő és a vonalzó előugró menük azonosítókhoz rendelhetők, így más bedolgozók is hozzájárulhatnak ezekhez a menükhöz a kiterjesztésekben.   A menüazonosítók sémája rugalmasabb a platform eredeti verziója óta. A keretrendszer kompatibilitás módban is futhat annak érdekében, hogy kompatibilis maradjon az eredeti verzióhoz fejlesztett bedolgozókkal.   AbstractTextEditor.setCompatibilityMode() elemet is használhatja a viselkedés szabályozásához. Az alapértelmezett beállítás igaz.

1.0 kompatibilis menüazonosítók

Ha a kompatibilitás mód igaz, akkor a szerkesztő és a vonalzó előugró menük azonosítói beállíthatók az AbstractTextEditor protokoll segítségével. A setEditorContextMenuId és setRulerContextMenuId metódus használható erre a célra. Az azonosítók visszaállítása hasznos lehet, ha meg kívánja akadályozni a menük öröklését, amelyek biztosítva lettek a szülőosztály menükhöz. A példában lévő JavaTextEditor például visszaállítja az előugró menü azonosítókat, hogy specifikusak legyenek az általános szöveg-közzétételek más bedolgozókból öröklésének megakadályozása érdekében.

protected void initializeEditor() {
	super.initializeEditor();
	JavaEditorEnvironment.connect(this);
	setSourceViewerConfiguration(new JavaSourceViewerConfiguration());
	setEditorContextMenuId("#JavaEditorContext"); 
	setRulerContextMenuId("#JavaRulerContext"); 
}

Ha nincs azonosító beállítva a konkrét hierarchiában, akkor az AbstractTextEditor által megadott alapértelmezett azonosítók kerülnek használatra.

1.0 nem kompatibilis menüazonosítók

A szerkesztő előugró menü azonosító mindig <szerkesztőazonosító>.EditorContext, amelyben a <szerkesztőazonosító> a szerkesztő azonosítója. Egy szerkesztő azonosítója a szerkesztő xml deklarációjában van megadva. A vonalzó előugró menü azonosító mindig <szerkesztőazonosító>.RulerContext.