Tekstinmuokkausohjelmien kehyksen apuohjelmaluokat ovat avuksi tekstin ja lähdekoodin esittämisessä ja päivittämisessä. Seuraavassa perehdytään siihen, miten muokkausohjelma toimii osana työympäristöä eli miten muokkausohjelma toimii vuorovaikutuksessa muiden työympäristön ominaisuuksien, kuten pikavalikkojen, valikkopalkkien ja työkalurivien, kanssa.
Lisätietoja siitä, miten muokkausohjelmat rekisteröivät itsensä työympäristöön ja lisäävät toimintoja työympäristön valikkopalkkiin, löytyy kohdasta org.eclipse.ui.editors. Asiaan ei syvennytä enempää tässä kohdassa. Seuraavassa esitellään lyhyesti merkinnät, joissa Java-sovelluksen esimerkkimuokkausohjelma rekisteröi muokkausohjelmansa.
<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>
Työympäristön valikkopalkin toiminnot lisätään JavaActionContributor-luokan avulla. Se toteuttaa toimintoja, jotka on sijoitettu työympäristön Muokkaa-valikkoon ja työkaluriviin.
public JavaActionContributor() { super(); fContentAssistProposal= new RetargetTextEditorAction(JavaEditorMessages.getResourceBundle(), "ContentAssistProposal."); //$NON-NLS-1$ ... fContentAssistTip= new RetargetTextEditorAction(JavaEditorMessages.getResourceBundle(), "ContentAssistTip."); //$NON-NLS-1$ ... fTogglePresentation= new PresentationAction(); }
Kaksi ensimmäistä toimintoa kuvataan uudelleen kohdennettaviksi tekstinmuokkausohjelman toiminnoiksi. Ne ovat samankaltaisia kuin työympäristön uudelleen kohdennettavat toiminnot. Uudelleen kohdennettavat tekstinmuokkausohjelman toiminnot edustavat valikon kohtia, jotka toiminnon toimittaja sitoo dynaamisesti käytössä olevan muokkausohjelman vastaaviin toimintoihin. Kun käytössä oleva muokkausohjelma muuttuu, uudelleen kohdennettavaan tekstin muokkausohjelman toimintoon sidottu toiminto muuttuu myös. Seuraava koodikatkelma kuvaa, kuinka muokkausohjelman toiminnon toimittaja kysyy muokkausohjelmalta annetun tunnuksen perusteella toimintoa ja löytää siten oikean toiminnon:
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();
}
Tunnuksen on oltava sama, jolla toiminto on rekisteröity muokkausohjelmaan, tässä
JavaTextEditor-ohjelmaan. (Katso myös seuraava osio.):
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); }
Kolmanneksi toimittaja liittää työympäristön työkaluriviin konkreettisen toiminnon. Toiminto vaihtaa muokkausohjelman tilaa näyttämällä välillä korostetun alueen (esimerkissä sisällön jäsentelutoiminnon määräämän) ja välillä koko tiedoston. Tämä toiminto näkyy vain työkalurivillä.
Metodin createActions avulla muokkausohjelmaan rekisteröidään toimintoja. Nämä toiminnot ovat joko muokkausohjelman pikavalikkoon kelvollisia tai muita laajennusmäärityksissä lisättyjä toimintoja. Java-esimerkkimuokkausohjelmassa luodaan ainoastaan uudelleen kohdennettaviin toimintoihin sidotut toiminnot. Esimerkkimuokkausohjelma kuitenkin myös perii TextEditor-luokan ja sen yliluokkien luomat toiminnot. Näitä toimintoja voi käyttää muokkausohjelmien pikavalikoissa.
TextEditor-luokan metodin editorContextMenuAboutToShow avulla muokkausohjelmat voivat lisätä pikavalikkoon toimintoja muokkausaluetta varten. Valikkopolun avulla voi päättää, missä haluaa toiminnon näkyvän. Muokkausohjelman pikavalikon sisältämät kelvolliset valikkopolut määritellään tämän metodin toteutuksessa AbstractTextEditor-luokassa.
Valikkoon voi lisätä toimintoja monella tavalla. Ensinnäkin on mahdollista lisätä toiminto käyttämällä pelkästään tunnusta, jolla toiminto on rekisteröity muokkausohjelmaan. Esimerkiksi JavaTextEditor lisää valikkoon sisällönhallinnan aputoimintoja silloin, kun tätä metodia kutsutaan. Valikossa ei näy toimintoa, jos kyseisellä tunnuksella ei ole rekisteröity yhtään toimintoa.
public void editorContextMenuAboutToShow(MenuManager menu) { super.editorContextMenuAboutToShow(menu); addAction(menu, "ContentAssistProposal"); addAction(menu, "ContentAssistTip"); }
Yliluokka TextEditor lisää toimintoja toisella tavalla. Se määrittää pikavalikkoon valikkoryhmän, johon toiminto sijoitetaan. Tässä tapauksessa toiminnot (Siirrä vasemmalle ja Siirrä oikealle ) näkyvät pikavalikossa ryhmässä, jonka on määrittänyt AbstractTextEditor-luokka.
protected void editorContextMenuAboutToShow(IMenuManager menu) { super.editorContextMenuAboutToShow(menu); addAction(menu, ITextEditorActionConstants.GROUP_EDIT, ITextEditorActionConstants.SHIFT_RIGHT); addAction(menu, ITextEditorActionConstants.GROUP_EDIT, ITextEditorActionConstants.SHIFT_LEFT); }
Metodia rulerContextMenuAboutToShow käytetään samalla tavalla ennen viivaimen pikavalikon näkymistä. Tämän metodin toteutus luokassa AbstractTextEditor määrittää ryhmät, joissa valikkoon voidaan tehdä lisäyksiä.
Muokkausohjelman ja viivaimen pikavalikoille voi määrittää tunnukset, joiden avulla muut lisäosat voivat tehdä lisäyksiä näihin valikoihin niiden laajennuksissa. Valikon tunnukset muodostetaan tavalla, joka on joustavampi kuin ympäristön alkuperäinen tapa. Kehys voidaan kuitenkin ajaa yhteensopivuustilassa, jotta alkuperäisestä versiota varten kehitetyt lisäosat pysyvät yhä yhteensopivina ympäristön kanssa. Voit hallita tätä toimintaa kohteen AbstractTextEditor.setCompatibilityMode() avulla. Oletusarvo on tosi (true).
Kun yhteensopivuustila on tosi (true), muokkausohjelman ja viivaimen pikavalikoiden tunnukset voi määrittää käyttämällä yhteyskäytäntöä AbstractTextEditor. Myös metodeja setEditorContextMenuId ja setRulerContextMenuId voidaan hyödyntää tässä. Tunnusten palautus voi olla hyödyksi, mikäli haluaa estää yliluokkien valikkoihin lisättyjen valikoiden periytymisen. Esimerkin JavaTextEditor palauttaa pikavalikon tunnukset Java-kohtaisiksi, jotta se ei perisi muilta lisäosilta yleisiä tekstilisäyksiä.
protected void initializeEditor() { super.initializeEditor(); JavaEditorEnvironment.connect(this); setSourceViewerConfiguration(new JavaSourceViewerConfiguration()); setEditorContextMenuId("#JavaEditorContext"); setRulerContextMenuId("#JavaRulerContext"); }
Jos tunnusta ei ole määritetty konkreettisessa hierarkiassa ollenkaan, käytetään luokan AbstractTextEditor määrittämiä oletusasetuksia.
Muokkausohjelman pikavalikon tunnus on aina <editor
id>.EditorContext
, jossa <editor id>
on muokkausohjelman tunnus. Tunnus
on määritelty muokkausohjelman xml-esittelyssä. Viivaimen pikavalikon tunnus on aina <editor id>.RulerContext
.