Outils pour utilisateurs

Outils du site


Action disabled: source
public:impl_commands

Comment implémente-t-on une commande en RCP

Lire 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”

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;
	}

Voir l'extrait de la commande qui ouvre la vue “Edition” :

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);
	}
public/impl_commands.txt · Dernière modification: 2016/05/09 11:35 par severine.gedzelman@ens-lyon.fr