Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/commands/workspace/LoadBinaryCorpus.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/commands/workspace/LoadBinaryCorpus.java	(revision 2225)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/commands/workspace/LoadBinaryCorpus.java	(revision 2226)
@@ -211,7 +211,7 @@
 					public void run() {
 
 						if (newProject2 != null) {
-							newProject2.compute();
+							newProject2.compute(); // TODO calling compute now calls preferences.flush --> JOB LOCK
 							RestartTXM.reloadViews();
 							//System.out.println("Select newly loaded corpus: "+base2.getCorpora().values());
 							CorporaView.select(newProject2.getChildren(MainCorpus.class));
Index: tmp/org.txm.rcp/src/main/java/org/eclipse/jface/fieldassist/TXMContentProposalAdapter.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/eclipse/jface/fieldassist/TXMContentProposalAdapter.java	(revision 0)
+++ tmp/org.txm.rcp/src/main/java/org/eclipse/jface/fieldassist/TXMContentProposalAdapter.java	(revision 2226)
@@ -0,0 +1,76 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2013 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Hannes Erven <hannes@erven.at> - Bug 293841 - [FieldAssist] NumLock keyDown event should not close the proposal popup [with patch]
+ *******************************************************************************/
+package org.eclipse.jface.fieldassist;
+
+import java.util.ArrayList;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.ListenerList;
+import org.eclipse.jface.bindings.keys.KeyStroke;
+import org.eclipse.jface.dialogs.PopupDialog;
+import org.eclipse.jface.preference.JFacePreferences;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.util.Util;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.FocusAdapter;
+import org.eclipse.swt.events.FocusEvent;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.ScrollBar;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * ContentProposalAdapter can be used to attach content proposal behavior to a
+ * control. This behavior includes obtaining proposals, opening a popup dialog,
+ * managing the content of the control relative to the selections in the popup,
+ * and optionally opening up a secondary popup to further describe proposals.
+ * <p>
+ * A number of configurable options are provided to determine how the control
+ * content is altered when a proposal is chosen, how the content proposal popup
+ * is activated, and whether any filtering should be done on the proposals as
+ * the user types characters.
+ * <p>
+ * This class provides some overridable methods to allow clients to manually
+ * control the popup. However, most of the implementation remains private.
+ * 
+ * @since 3.2
+ */
+public class TXMContentProposalAdapter extends ContentProposalAdapter {
+	public TXMContentProposalAdapter(Control control, IControlContentAdapter controlContentAdapter, IContentProposalProvider proposalProvider, KeyStroke keyStroke, char[] autoActivationCharacters) {
+		super(control, controlContentAdapter, proposalProvider, keyStroke, autoActivationCharacters);
+		// TODO Auto-generated constructor stub
+	}
+	
+	public void open() {
+		super.openProposalPopup();
+	}
+	
+	public void close() {
+		super.closeProposalPopup();
+	}
+}

Property changes on: tmp/org.txm.rcp/src/main/java/org/eclipse/jface/fieldassist/TXMContentProposalAdapter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.rcp/src/main/java/org/eclipse/jface/fieldassist/TXMSimpleContentProposalProvider.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/eclipse/jface/fieldassist/TXMSimpleContentProposalProvider.java	(revision 0)
+++ tmp/org.txm.rcp/src/main/java/org/eclipse/jface/fieldassist/TXMSimpleContentProposalProvider.java	(revision 2226)
@@ -0,0 +1,133 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2013 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Amir Kouchekinia <amir@pyrus.us> - bug 200762
+ *******************************************************************************/
+package org.eclipse.jface.fieldassist;
+
+import java.util.ArrayList;
+
+/**
+ * SimpleContentProposalProvider is a class designed to map a static list of
+ * Strings to content proposals.
+ * 
+ * Modified to find values 
+ * 
+ * @see IContentProposalProvider
+ * @since 3.2
+ * 
+ */
+public class TXMSimpleContentProposalProvider implements IContentProposalProvider {
+
+	/*
+	 * The proposals provided.
+	 */
+	private String[] proposals;
+
+	/*
+	 * The proposals mapped to IContentProposal. Cached for speed in the case
+	 * where filtering is not used.
+	 */
+	private IContentProposal[] contentProposals;
+
+	/*
+	 * Boolean that tracks whether filtering is used.
+	 */
+	private boolean filterProposals = false;
+
+	/**
+	 * Construct a SimpleContentProposalProvider whose content proposals are
+	 * always the specified array of Objects.
+	 * 
+	 * @param proposals
+	 *            the array of Strings to be returned whenever proposals are
+	 *            requested.
+	 */
+	public TXMSimpleContentProposalProvider(String[] proposals) {
+		super();
+		this.proposals = proposals;
+	}
+
+	/**
+	 * Return an array of Objects representing the valid content proposals for a
+	 * field. 
+	 * 
+	 * @param contents
+	 *            the current contents of the field (only consulted if filtering
+	 *            is set to <code>true</code>)
+	 * @param position
+	 *            the current cursor position within the field (ignored)
+	 * @return the array of Objects that represent valid proposals for the field
+	 *         given its current content.
+	 */
+	@Override
+	public IContentProposal[] getProposals(String contents, int position) {
+		
+		if (filterProposals) {
+//			System.out.println("getProposals...");
+			ArrayList<ContentProposal> list = new ArrayList<ContentProposal>();
+			
+			boolean prefixeSearch = true;
+			if (prefixeSearch) {
+				for (int i = 0; i < proposals.length; i++) {
+					if (proposals[i].length() >= contents.length()
+							&& proposals[i].substring(0, contents.length())
+									.equalsIgnoreCase(contents)) {
+						list.add(new ContentProposal(proposals[i]));
+					}
+				}
+			} else {
+				contents = contents.toLowerCase();
+				for (int i = 0; i < proposals.length; i++) {
+					if (proposals[i].toLowerCase().contains(contents)) {
+						list.add(new ContentProposal(proposals[i]));
+					}
+				}
+			}
+			
+			return list.toArray(new IContentProposal[list.size()]);
+		}
+		
+		if (contentProposals == null) {
+			contentProposals = new IContentProposal[proposals.length];
+			for (int i = 0; i < proposals.length; i++) {
+				contentProposals[i] = new ContentProposal(proposals[i]);
+			}
+		}
+		return contentProposals;
+	}
+
+	/**
+	 * Set the Strings to be used as content proposals.
+	 * 
+	 * @param items
+	 *            the array of Strings to be used as proposals.
+	 */
+	public void setProposals(String[] items) {
+		this.proposals = items;
+		contentProposals = null;
+	}
+
+	/**
+	 * Set the boolean that controls whether proposals are filtered according to
+	 * the current field content.
+	 * 
+	 * @param filterProposals
+	 *            <code>true</code> if the proposals should be filtered to
+	 *            show only those that match the current contents of the field,
+	 *            and <code>false</code> if the proposals should remain the
+	 *            same, ignoring the field content.
+	 * @since 3.3
+	 */
+	public void setFiltering(boolean filterProposals) {
+		this.filterProposals = filterProposals;
+		// Clear any cached proposals.
+		contentProposals = null;
+	}
+}

Property changes on: tmp/org.txm.rcp/src/main/java/org/eclipse/jface/fieldassist/TXMSimpleContentProposalProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.rcp/src/main/java/org/eclipse/jface/fieldassist/TXMAutoCompleteField.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/eclipse/jface/fieldassist/TXMAutoCompleteField.java	(revision 0)
+++ tmp/org.txm.rcp/src/main/java/org/eclipse/jface/fieldassist/TXMAutoCompleteField.java	(revision 2226)
@@ -0,0 +1,114 @@
+package org.eclipse.jface.fieldassist;
+
+import java.util.ArrayList;
+
+import org.eclipse.jface.bindings.keys.KeyStroke;
+import org.eclipse.swt.widgets.Control;
+
+/**
+ * AutoCompleteField is a class which attempts to auto-complete a user's
+ * keystrokes by activating a popup that filters a list of proposals according
+ * to the content typed by the user.
+ * 
+ * @see ContentProposalAdapter
+ * @see SimpleContentProposalProvider
+ * 
+ * @since 3.3
+ */
+public class TXMAutoCompleteField {
+
+	private TXMSimpleContentProposalProvider proposalProvider;
+	private TXMContentProposalAdapter adapter;
+	boolean open = false;
+
+	public boolean isOpen() { return adapter.isProposalPopupOpen();};
+	
+	/**
+	 * Construct an AutoComplete field on the specified control, whose
+	 * completions are characterized by the specified array of Strings.
+	 * 
+	 * @param control
+	 *            the control for which autocomplete is desired. May not be
+	 *            <code>null</code>.
+	 * @param controlContentAdapter
+	 *            the <code>IControlContentAdapter</code> used to obtain and
+	 *            update the control's contents. May not be <code>null</code>.
+	 * @param proposals
+	 *            the array of Strings representing valid content proposals for
+	 *            the field.
+	 */
+	public TXMAutoCompleteField(Control control,
+			IControlContentAdapter controlContentAdapter, String[] proposals, KeyStroke keyStroke) {
+		this(control, controlContentAdapter, proposals, keyStroke, null);
+	}
+	
+	/**
+	 * Construct an AutoComplete field on the specified control, whose
+	 * completions are characterized by the specified array of Strings.
+	 * 
+	 * @param control
+	 *            the control for which autocomplete is desired. May not be
+	 *            <code>null</code>.
+	 * @param controlContentAdapter
+	 *            the <code>IControlContentAdapter</code> used to obtain and
+	 *            update the control's contents. May not be <code>null</code>.
+	 * @param proposals
+	 *            the array of Strings representing valid content proposals for
+	 *            the field.
+	 */
+	public TXMAutoCompleteField(Control control,
+			IControlContentAdapter controlContentAdapter, String[] proposals, KeyStroke keyStroke, char[] autoActivationCharacters) {
+		proposalProvider = new TXMSimpleContentProposalProvider(proposals);
+		proposalProvider.setFiltering(true);
+		
+		adapter = new TXMContentProposalAdapter(control, controlContentAdapter,
+				proposalProvider, keyStroke, autoActivationCharacters);
+		adapter.setPropagateKeys(true);
+		adapter.setProposalAcceptanceStyle(ContentProposalAdapter.PROPOSAL_REPLACE);
+		adapter.addContentProposalListener(new IContentProposalListener2() {
+			@Override
+			public void proposalPopupOpened(ContentProposalAdapter adapter) {
+				open = true;
+			}
+			
+			@Override
+			public void proposalPopupClosed(ContentProposalAdapter adapter) {
+				open = false;
+			}
+		});
+	}
+	
+	/**
+	 * Construct an AutoComplete field on the specified control, whose
+	 * completions are characterized by the specified array of Strings.
+	 * 
+	 * @param control
+	 *            the control for which autocomplete is desired. May not be
+	 *            <code>null</code>.
+	 * @param controlContentAdapter
+	 *            the <code>IControlContentAdapter</code> used to obtain and
+	 *            update the control's contents. May not be <code>null</code>.
+	 * @param proposals
+	 *            the array of Strings representing valid content proposals for
+	 *            the field.
+	 */
+	public TXMAutoCompleteField(Control control,
+			IControlContentAdapter controlContentAdapter, String[] proposals) {
+		this(control, controlContentAdapter, proposals, null, null);
+	}
+
+	/**
+	 * Set the Strings to be used as content proposals.
+	 * 
+	 * @param proposals
+	 *            the array of Strings to be used as proposals.
+	 */
+	public void setProposals(String[] proposals) {
+		proposalProvider.setProposals(proposals);
+	}
+
+	public void open() {
+		if (open) adapter.close();
+		else adapter.open();
+	}
+}
\ No newline at end of file

Property changes on: tmp/org.txm.rcp/src/main/java/org/eclipse/jface/fieldassist/TXMAutoCompleteField.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.rcp/META-INF/MANIFEST.MF
===================================================================
--- tmp/org.txm.rcp/META-INF/MANIFEST.MF	(revision 2225)
+++ tmp/org.txm.rcp/META-INF/MANIFEST.MF	(revision 2226)
@@ -72,6 +72,7 @@
  org.apache.log4j.spi,
  org.apache.log4j.varia,
  org.apache.log4j.xml,
+ org.eclipse.jface.fieldassist,
  org.hamcrest,
  org.hamcrest.core,
  org.hamcrest.internal,
@@ -116,6 +117,7 @@
  org.txm.rcp.handlers.scripts,
  org.txm.rcp.jface,
  org.txm.rcp.log,
+ org.txm.rcp.menu,
  org.txm.rcp.messages,
  org.txm.rcp.p2.plugins,
  org.txm.rcp.perspective,
Index: tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/editors/EditionPanel.java
===================================================================
--- tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/editors/EditionPanel.java	(revision 2225)
+++ tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/editors/EditionPanel.java	(revision 2226)
@@ -1,6 +1,7 @@
 package org.txm.edition.rcp.editors;
 
 import java.io.File;
+import java.io.IOException;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -39,6 +40,8 @@
 import org.txm.objects.Text;
 import org.txm.rcp.StatusLine;
 import org.txm.rcp.utils.IOClipboard;
+import org.txm.searchengine.cqp.clientExceptions.CqiClientException;
+import org.txm.searchengine.cqp.serverException.CqiServerError;
 import org.txm.utils.io.IOUtils;
 import org.txm.utils.logger.Log;
 
@@ -690,8 +693,16 @@
 
 	public void firstText() {
 		//Text current = this.currentPage.getEdition().getText();
-		Project corpus = currentText.getProject();
-		Text firstText = corpus.getFirstText();
+		Project project = currentText.getProject();
+		String id;
+		try {
+			id = this.synopticEditionEditor.getCorpus().getCorpusTextIdsList()[0];
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+			return;
+		}
+		Text firstText = project.getText(id);
 
 		if (firstText != null) {
 			String editionName = currentEdition.getName();
@@ -716,8 +727,17 @@
 	 */
 	public void lastText() {
 		//Text current = this.currentPage.getEdition().getText();
-		Project b = currentText.getProject();
-		Text lastText = b.getLastText();
+		Project project = currentText.getProject();
+		String id;
+		try {
+			String[] ids = this.synopticEditionEditor.getCorpus().getCorpusTextIdsList();
+			id = ids[ids.length-1];
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+			return;
+		}
+		Text lastText = project.getText(id);
 
 		if (lastText != null) {
 			String editionName = currentEdition.getName();
@@ -747,9 +767,19 @@
 	 */
 	public void previousText(boolean fromNextText) {
 
-		//Text current = this.currentPage.getEdition().getText();
-		Project corpus = currentText.getProject();
-		Text previousText = corpus.getPreviousText(currentText);
+		Project project = currentText.getProject();
+		String id;
+		try {
+			String[] ids = this.synopticEditionEditor.getCorpus().getCorpusTextIdsList();
+			String current = currentText.getName();
+			int idx = Arrays.binarySearch(ids, current);
+			if (idx > 0) idx--;
+			id = ids[idx];
+		} catch (Exception e) {
+			e.printStackTrace();
+			return;
+		}
+		Text previousText = project.getText(id);
 
 		if (previousText != null) {
 			String editionName = currentEdition.getName();
@@ -780,8 +810,19 @@
 	 */
 	public void nextText() {
 		//Text current = this.currentPage.getEdition().getText();
-		Project b = currentText.getProject();
-		Text nextText = b.getNextText(currentText);
+		Project project = currentText.getProject();
+		String id;
+		try {
+			String[] ids = this.synopticEditionEditor.getCorpus().getCorpusTextIdsList();
+			String currentId = currentText.getName();
+			int idx = Arrays.binarySearch(ids, currentId);
+			if (idx < ids.length - 1) idx++;
+			id = ids[idx];
+		} catch (Exception e) {
+			e.printStackTrace();
+			return;
+		}
+		Text nextText = project.getText(id);
 
 		if (nextText != null) {
 			String editionName = currentEdition.getName();
Index: tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/editors/SynopticEditionEditor.java
===================================================================
--- tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/editors/SynopticEditionEditor.java	(revision 2225)
+++ tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/editors/SynopticEditionEditor.java	(revision 2226)
@@ -27,6 +27,7 @@
 //
 package org.txm.edition.rcp.editors;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -41,9 +42,9 @@
 import org.eclipse.core.commands.Parameterization;
 import org.eclipse.core.commands.ParameterizedCommand;
 import org.eclipse.core.commands.common.NotDefinedException;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.bindings.keys.KeyStroke;
+import org.eclipse.jface.fieldassist.TXMAutoCompleteField;
+import org.eclipse.jface.fieldassist.TextContentAdapter;
 import org.eclipse.jface.text.ITextSelection;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.ISelectionChangedListener;
@@ -55,18 +56,15 @@
 import org.eclipse.swt.events.KeyListener;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Cursor;
 import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.ToolItem;
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.IEditorSite;
-import org.eclipse.ui.IPartListener2;
-import org.eclipse.ui.IWorkbenchPartReference;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.PlatformUI;
@@ -80,7 +78,10 @@
 import org.txm.rcp.editors.IEditionEditor;
 import org.txm.rcp.editors.TXMEditor;
 import org.txm.rcp.swt.GLComposite;
+import org.txm.searchengine.cqp.clientExceptions.CqiClientException;
 import org.txm.searchengine.cqp.corpus.CQPCorpus;
+import org.txm.searchengine.cqp.corpus.MainCorpus;
+import org.txm.searchengine.cqp.serverException.CqiServerError;
 import org.txm.utils.logger.Log;
 /**
  * Call the internal browser of RCP to display the Edition Pages of a Text
@@ -100,6 +101,8 @@
 	GLComposite editionsArea;
 	private List<String> editionNames;
 	private CQPCorpus corpus;
+	private MainCorpus mainCorpus;
+	
 	private Text text;
 	private Button editionsChooser;
 	//private Label editionsLabel;
@@ -107,6 +110,8 @@
 //	private GLComposite annotationWidgetsArea;
 //	private TXMEditorToolBar supplementaryButtonToolbar;
 	private ISelectionProvider selProvider;
+	private org.eclipse.swt.widgets.Text text_text;
+	private Label text_label;
 
 	//TODO finish editor conversion
 	public Text getResult() {
@@ -256,7 +261,7 @@
 	}
 
 	/**
-	 * Next page.
+	 * Direct access to a page with a name.
 	 */
 	public void goToPage(String name) {
 		for(EditionPanel panel : editionPanels.values())
@@ -264,6 +269,28 @@
 		updatePageLabel();
 
 	}
+	
+	/**
+	 * Direct access to a text with a name.
+	 */
+	public void goToText(String id) {
+		try {
+			String[] texts = corpus.getCorpusTextIdsList();
+			for (String text_id : texts) {
+				if (text_id.equals(id)) {
+					Text text = mainCorpus.getProject().getText(text_id);
+					if (text != null) {
+						setText(text, true);
+						return;
+					}
+				}
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		
+		Log.info(NLS.bind("No {0} text found.", id));
+	}
 
 	/**
 	 * Previous text.
@@ -335,19 +362,19 @@
 		editionsChooser = new Button(controlsArea, SWT.PUSH);
 		editionsChooser.setText(StringUtils.join(editionNames, " | ")); //$NON-NLS-1$
 
-		if (corpus.getProject().getBuiltEditionNames().size() > 1) {			
+		if (mainCorpus.getProject().getBuiltEditionNames().size() > 1) {			
 
 			editionsChooser.addSelectionListener(new SelectionListener() {
 				@Override
 				public void widgetSelected(SelectionEvent e) {
 					try {
-						List<String> availableEditions = corpus.getProject().getBuiltEditionNames();
+						List<String> availableEditions = mainCorpus.getProject().getBuiltEditionNames();
 						if (availableEditions.size() == 0) return;
 						if (availableEditions.size() == 1) return;
 						
 						
 						Shell shell = e.display.getActiveShell();
-						EditionSelectorDialog d = new EditionSelectorDialog(shell, corpus, editionNames);
+						EditionSelectorDialog d = new EditionSelectorDialog(shell, mainCorpus, editionNames);
 
 						if (d.open() == Window.OK) {
 							Object[] rez = d.getResult();
@@ -355,7 +382,7 @@
 							for(int i = 0 ; i < rez.length ; i++) editionNames.add(rez[i].toString());
 							
 							editionsChooser.setText(StringUtils.join(editionNames, " | ")); //$NON-NLS-1$
-							openEditions(corpus, text, editionNames);
+							openEditions(text, editionNames);
 							firstPage();
 						}
 					} catch (Exception e2) {
@@ -383,10 +410,29 @@
 		pageNavigationComposite.setLayoutData(new GridData(GridData.CENTER, GridData.FILL, true, false));
 		
 		GLComposite textNavigationComposite = new GLComposite(controlsArea, SWT.NONE, EditionUIMessages.textButtons);
-		textNavigationComposite.getLayout().numColumns = 6;
+		textNavigationComposite.getLayout().numColumns = 7;
 		Button firstText = new Button(textNavigationComposite, SWT.FLAT);
 		Button previousText = new Button(textNavigationComposite, SWT.FLAT);
-		new Label(textNavigationComposite, SWT.NONE).setText(EditionUIMessages.CommandLink_empty);
+		text_text = new org.eclipse.swt.widgets.Text(textNavigationComposite, SWT.BORDER);
+		KeyStroke keys = KeyStroke.getInstance(SWT.CONTROL, SWT.SPACE);
+		try {
+			String[] text_ids = corpus.getCorpusTextIdsList();
+			GridData gdata = new GridData(GridData.CENTER, GridData.FILL, true, false);
+			gdata.minimumWidth = 1;
+			for (String text_id : text_ids) {
+				double s = text_id.length()*7;
+				if (s > gdata.minimumWidth) {
+					gdata.minimumWidth = (int) s;
+				}
+			}
+			text_text.setLayoutData(gdata);
+			TXMAutoCompleteField identifiantComboAutoCompleteField = new TXMAutoCompleteField(text_text, new TextContentAdapter(), text_ids, keys);
+		} catch (Exception e2) {
+			e2.printStackTrace();
+		}
+		Cursor cursor = new Cursor(text_text.getDisplay(), SWT.CURSOR_SIZENS);
+		text_text.setCursor(cursor);
+		text_label = new Label(textNavigationComposite, SWT.NONE);
 		Button nextText = new Button(textNavigationComposite, SWT.FLAT|SWT.PUSH);
 		Button lastText = new Button(textNavigationComposite, SWT.FLAT|SWT.PUSH);
 		textNavigationComposite.setLayoutData(new GridData(GridData.CENTER, GridData.FILL, false, false));
@@ -431,6 +477,7 @@
 
 		// set labels
 		page_label.setText(""); //$NON-NLS-1$
+		text_label.setText(""); //$NON-NLS-1$
 		firstText.setImage(IImageKeys.getImage(IImageKeys.CTRLREWINDSTART));
 		firstText.setToolTipText(EditionUIMessages.firstTextOfTheCorpus); 
 		previousText.setImage(IImageKeys.getImage(IImageKeys.CTRLREWIND));
@@ -460,6 +507,18 @@
 			@Override
 			public void keyPressed(KeyEvent e) {}
 		});
+		text_text.addKeyListener(new KeyListener() {
+
+			@Override
+			public void keyReleased(KeyEvent e) {
+				if (e.keyCode == SWT.CR || e.keyCode == SWT.KEYPAD_CR) {
+					goToText(text_text.getText());
+				}
+			}
+
+			@Override
+			public void keyPressed(KeyEvent e) {}
+		});
 		// set listeners
 		first.addSelectionListener(new SelectionListener() {
 			@Override
@@ -554,10 +613,10 @@
 
 		try {
 			// ensure all texts have build their page indexes
-			for (Text t : corpus.getProject().getTexts()) {
+			for (Text t : mainCorpus.getProject().getTexts()) {
 				t.compute();
 			}
-			if (openEditions(corpus, text, editionNames)) {
+			if (openEditions(text, editionNames)) {
 				firstPage();
 			}
 		} catch (Exception e1) {
@@ -566,15 +625,15 @@
 		}
 	}
 
-	/**
-	 * Opens the default corpus edition with the first Text
-	 * 
-	 * @param corpus
-	 */
-	public boolean openEditions(CQPCorpus corpus) {
-		if (corpus == null) return false;
-		return openEditions(corpus, corpus.getProject().getFirstText(), corpus.getProject().getDefaultEdition());
-	}
+//	/**
+//	 * Opens the default corpus edition with the first Text
+//	 * 
+//	 * @param corpus
+//	 */
+//	public boolean openEditions(CQPCorpus corpus) {
+//		if (corpus == null) return false;
+//		return openEditions(corpus, corpus.getProject().getFirstText(), corpus.getProject().getDefaultEdition());
+//	}
 
 	/**
 	 * update editor title using the first panel only 
@@ -590,32 +649,41 @@
 			if (page_text.isDisposed()) continue;
 			page_text.setText(cpage.getName());
 			page_label.setText(" / "+e.getNumPages()); //$NON-NLS-1$
+			
+			text_text.setText(p.getCurrentText().getName());
+			try {
+				text_label.setText(" / "+corpus.getCorpusTextIdsList().length);
+			} catch (Exception e1) {
+				// TODO Auto-generated catch block
+				e1.printStackTrace();
+			}
+
 			controlsArea.layout();
 			return;
 		}
 	}
 
-	public boolean openEditions(CQPCorpus corpus, String textID, String... editionNames) {
-		Text text = corpus.getProject().getText(textID);
-		if (text == null) return false;
-		return openEditions(corpus, text, editionNames);
-	}
+//	public boolean openEditions(CQPCorpus corpus, String textID, String... editionNames) {
+//		Text text = corpus.getProject().getText(textID);
+//		if (text == null) return false;
+//		return openEditions(corpus, text, editionNames);
+//	}
 
-	/**
-	 * Opens a list of edition corpus
-	 * @param corpus
-	 * @param editionNames
-	 */
-	public boolean openEditions(CQPCorpus corpus, Text text, String... editionNames) {
-		return openEditions(corpus, text, Arrays.asList(editionNames));
-	}
+//	/**
+//	 * Opens a list of edition corpus
+//	 * @param corpus
+//	 * @param editionNames
+//	 */
+//	public boolean openEditions(CQPCorpus corpus, Text text, String... editionNames) {
+//		return openEditions(corpus, text, Arrays.asList(editionNames));
+//	}
 	
 	/**
 	 * Opens a list of edition corpus
 	 * @param corpus
 	 * @param editionNames
 	 */
-	public boolean openEditions(CQPCorpus corpus, Text text, List<String> editionNames) {
+	public boolean openEditions(Text text, List<String> editionNames) {
 
 		try {
 			text.compute();
@@ -654,21 +722,21 @@
 		return true;
 	}
 
-	/**
-	 * 
-	 * //TODO: add getDefaultEditions to Corpus object
-	 * 
-	 * @param corpus
-	 * @return a list of default editions
-	 */
-	public String[] getDefaultEditions(CQPCorpus corpus) {
-		String defaultEdition = corpus.getProject().getDefaultEdition();
-		if (defaultEdition.contains(",")) { //$NON-NLS-1$
-			return defaultEdition.split(","); //$NON-NLS-1$
-		} else {
-			return new String[]{defaultEdition};
-		}
-	}
+//	/**
+//	 * 
+//	 * //TODO: add getDefaultEditions to Corpus object
+//	 * 
+//	 * @param corpus
+//	 * @return a list of default editions
+//	 */
+//	public String[] getDefaultEditions(CQPCorpus corpus) {
+//		String defaultEdition = corpus.getProject().getDefaultEdition();
+//		if (defaultEdition.contains(",")) { //$NON-NLS-1$
+//			return defaultEdition.split(","); //$NON-NLS-1$
+//		} else {
+//			return new String[]{defaultEdition};
+//		}
+//	}
 
 	@Override
 	public void doSaveAs() {
@@ -679,8 +747,9 @@
 	public void init(IEditorSite site, IEditorInput input)
 			throws PartInitException {
 		
-		corpus = ((SynopticEditorInput) input).getCorpus();
-		corpus = corpus.getMainCorpus(); // get the main corpus of the corpus
+		corpus = ((SynopticEditorInput) input).getCorpus(); // corpus focused when opening the editions
+		corpus.compute(false);
+		mainCorpus = corpus.getMainCorpus(); // get the main corpus of the corpus
 		text = ((SynopticEditorInput) input).getText();
 		editionNames = ((SynopticEditorInput) input).getEditions();
 		
@@ -737,7 +806,12 @@
 	public CQPCorpus getCorpus() {
 		return corpus;
 	}
+	
 
+	public CQPCorpus getMainCorpus() {
+		return mainCorpus;
+	}
+
 	public EditionPanel getEditionPanel(int i) {
 		int n = 0;
 		for (EditionPanel p : editionPanels.values()) {
Index: tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/handlers/OpenEdition.java
===================================================================
--- tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/handlers/OpenEdition.java	(revision 2225)
+++ tmp/org.txm.edition.rcp/src/org/txm/edition/rcp/handlers/OpenEdition.java	(revision 2226)
@@ -153,6 +153,7 @@
 			Text text = null;
 			if (corpus instanceof Subcorpus) {
 				Subcorpus sub = (Subcorpus)corpus;
+				sub.compute(false);
 				List<Match> matches = sub.getMatches();
 				if (matches.size() > 0) {
 					StructuralUnit text_su = corpus.getStructuralUnit("text"); //$NON-NLS-1$
