Outils pour utilisateurs

Outils du site


public:documentation:impl_commands

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

public:documentation:impl_commands [2020/02/19 09:35] (Version actuelle)
matthieu.decorde@ens-lyon.fr créée
Ligne 1: Ligne 1:
 +======= Comment implémente-t-on une commande en RCP =======
  
 +Lire [[http://​www.vogella.com/​tutorials/​EclipseCommandsAdvanced/​article.html#​command|le tutoriel]] de Vogella.
 +
 +Toutes les commandes sont dans la RCP, un des sous packages : "​org.txm.rcpapplication.commands.*"​
 +
 +En pratique, pour créer une nouvelle commande :
 +
 +
 +
 +==== Déclarer la commande parmi les existantes ====
 +
 +
 +  * Ouvrir le fichier "​plugin.xml"​
 +  * Choisir l'​onglet "​extensions"​ et regarder la liste complète des package : "​org.eclipse.ui.commands"​
 +  * Créer une nouvelle commande
 +    * cela implique d'​abord d'​avoir créer une classe qui étend un handler (voir ci-dessous) ​
 +
 +
 +==== Créer la classe étendant un handler ====
 +
 +On peut différencier différentes types de commandes :
 +  * celles qui se retrouvent dans les menu principaux (voir spec.)
 +  * celles qui font le lien depuis une vue en particulier vers une autre vue
 +  * celles qui font lien vers une ancre dans la documentation
 +
 +Toutes les classes se trouvent dans un des sous packages "​org.txm.rcpapplication.commands"​ :
 +  * package "​org.txm.rcpapplication.commands.base",​ pour les commandes donnant accès aux vues principales,​ ex: Ouvrir la vue édition
 +  * package "​org.txm.rcpapplication.commands.links"​ regroupe les classes qui font le lien entre deux vues, ex: Edition vers Concordance
 +
 +
 +Voir l'​extrait de la commande qui fait le lien entre vue "​Edition"​ et vue "​Concordance" ​
 +
 +<​code>​
 +package org.txm.rcpapplication.commands.link;​
 +
 +import org.eclipse.core.commands.AbstractHandler;​
 +import org.eclipse.core.commands.ExecutionEvent;​
 +import org.eclipse.core.commands.ExecutionException;​
 +
 +public class TextToConcordance extends AbstractHandler {
 +
 + /* (non-Javadoc)
 + * @see org.eclipse.core.commands.AbstractHandler#​execute(org.eclipse.core.commands.ExecutionEvent)
 + */
 + @Override
 + public Object execute(ExecutionEvent event) throws ExecutionException {
 + IWorkbenchWindow window;
 + ConcordancesEditorInput editorInput;​
 + window = HandlerUtil.getActiveWorkbenchWindow(event);​
 +
 + IEditorPart editor = window.getActivePage().getActiveEditor();​
 +
 + if (editor instanceof IEditionEditor) {
 +
 + String query = ((IEditionEditor)editor).getTextSelection();​
 + query = fixQuery(query);​
 +
 + Corpus corpus = ((IEditionEditor)editor).getCorpus();​
 + editorInput = new ConcordancesEditorInput(corpus,​ null);
 +
 + IWorkbenchPage page = window.getActivePage();​
 + try {
 + ConcordancesEditor conceditor = (ConcordancesEditor) page
 + .openEditor(editorInput,​
 + "​org.txm.rcpapplication.editors.ConcordancesEditor"​);​ //​$NON-NLS-1$
 + conceditor.setQuery(query);​
 + conceditor.compute();​
 + } catch (PartInitException e) {
 + System.err.println(NLS.bind(Messages.GetConcordances_4,​ e));
 + }
 + }
 + return null;
 + }
 +
 + public static String fixQuery(String query) {
 + query = "​\""​+query.replaceAll("​\"",​ "​\\\""​);//​.replaceAll("​("​+TokenizerClasses.regPunct+"​)",​ " $1 ");
 + query = query.replaceAll("​ +", "​\"​ \""​)+"​\"";​
 + return query;
 + }
 +</​code>​
 +
 +Voir l'​extrait de la commande qui ouvre la vue "​Edition"​ :
 +
 +<​code>​
 +package org.txm.rcpapplication.commands.base;​
 +
 +import org.eclipse.core.commands.AbstractHandler;​
 +
 +/**
 + * Open a text edition from: a main corpus : the first text of the maincorpus a
 + * sub-corpus : the first text of the subcorpus a partition : the user must
 + * choose one of the text used in the partition @ author mdecorde.
 + */
 +public class OpenEdition extends AbstractHandler {
 + private Text text;
 + private Edition edition;
 + private Page page;
 +
 + /**
 + * Open edition.
 + *
 + * @param corpus the corpus
 + * @return the object
 + */
 + public Object openEdition(Corpus corpus) {
 + String textid = null;
 + text = null;
 +
 + if (corpus instanceof Subcorpus) {}
 + if (maincorpus == null) {}
 + if (text == null) { }
 + if (edition == null) { }
 + if (page == null) { }
 +
 + TXMBrowser attachedBrowserEditor = OpenBrowser.openEdition(page.getFile().getAbsolutePath());​
 + attachedBrowserEditor.setEdition(edition);​
 + attachedBrowserEditor.setCorpus(corpus);​
 + attachedBrowserEditor.showPage(page);​
 + }
 +</​code>​
public/documentation/impl_commands.txt · Dernière modification: 2020/02/19 09:35 par matthieu.decorde@ens-lyon.fr