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?
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.
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);
}
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.
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.
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.
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.