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
.