Index: tmp/org.txm.rcp.feature/feature.xml
===================================================================
--- tmp/org.txm.rcp.feature/feature.xml	(revision 3165)
+++ tmp/org.txm.rcp.feature/feature.xml	(revision 3166)
@@ -256,6 +256,7 @@
       <import plugin="org.txm.rcp" version="0.8.0" match="greaterOrEqual"/>
       <import plugin="org.txm.searchengine.core" version="1.0.0" match="greaterOrEqual"/>
       <import plugin="org.txm.rcp" version="0.8.2" match="greaterOrEqual"/>
+      <import plugin="org.txm.core"/>
    </requires>
 
    <plugin
@@ -277,4 +278,11 @@
          version="0.0.0"
          unpack="false"/>
 
+   <plugin
+         id="org.txm.whatsnew.rcp"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
 </feature>
Index: tmp/org.txm.whatsnew.rcp/plugin.xml
===================================================================
--- tmp/org.txm.whatsnew.rcp/plugin.xml	(revision 3165)
+++ tmp/org.txm.whatsnew.rcp/plugin.xml	(revision 3166)
@@ -4,20 +4,15 @@
    <extension
          point="org.txm.PostInstallationStep">
       <PostInstallationStep
-            class="org.txm.whatsnew.rcp.DoInstallStep"
-            description="Whats new about TXM"
-            name="org.txm.whatsnew.rcp.DoInstallStep">
+            class="org.txm.whatsnew.rcp.DoWhatsNewSetupStep"
+            description="Whats new  TXM setup"
+            name="org.txm.whatsnew.rcp.DoWhatsNewSetupStep">
       </PostInstallationStep>
    </extension>
    <extension
          point="org.eclipse.ui.menus">
       <menuContribution
             locationURI="menu:menu.help?before=org.txm.rcp.separator1">
-         <command
-               commandId="org.txm.whatsnew.rcp.OpenNews"
-               icon="platform:/plugin/org.eclipse.ui.editors/icons/full/obj16/quick_assist_obj.gif"
-               style="push">
-         </command>
       </menuContribution>
    </extension>
    <extension
@@ -40,7 +35,7 @@
             category="org.txm.rcp.preferences.UserPreferencePage"
             class="org.txm.whatsnew.rcp.NewsPreferencesPage"
             id="org.txm.whatsnew.rcp.NewsPreferencesPage"
-            name="News">
+            name="New setups">
       </page>
    </extension>
    <extension
Index: tmp/org.txm.whatsnew.rcp/src/org/txm/whatsnew/rcp/DoInstallStep.java
===================================================================
--- tmp/org.txm.whatsnew.rcp/src/org/txm/whatsnew/rcp/DoInstallStep.java	(revision 3165)
+++ tmp/org.txm.whatsnew.rcp/src/org/txm/whatsnew/rcp/DoInstallStep.java	(revision 3166)
@@ -1,52 +0,0 @@
-package org.txm.whatsnew.rcp;
-
-
-import java.net.URL;
-
-import org.eclipse.swt.widgets.Display;
-import org.osgi.framework.Version;
-import org.txm.PostInstallationStep;
-import org.txm.core.preferences.TBXPreferences;
-import org.txm.rcp.Activator;
-import org.txm.rcp.commands.OpenBrowser;
-import org.txm.utils.io.IOUtils;
-import org.txm.utils.logger.Log;
-
-/**
- * Opens news about TXM development
- * 
- * @author mdecorde
- *
- */
-public class DoInstallStep  extends PostInstallationStep {
-
-	public static String ID = DoInstallStep.class.getName(); //$NON-NLS-1$
-
-	public void install() {
-		
-		try {
-			Version newsVersion = NewsEditor.getLastVersion();
-			
-			String currentNewsVersionString = NewsPreferences.getInstance().getString(NewsPreferences.NEWS_VERSION);
-			Version currentNewsVersion = new Version(currentNewsVersionString);
-			
-			NewsPreferences.getInstance().put(NewsPreferences.NEWS_VERSION, newsVersion.getMajor());
-			
-			if (NewsPreferences.getInstance().getBoolean(NewsPreferences.SHOW_NEWS) && newsVersion.compareTo(currentNewsVersion) > 0) {
-				OpenNews.open();
-			}
-		}
-		catch (Exception e) {
-			Log.warning("Error while fetching news: "+e);
-			Log.printStackTrace(e);
-		}
-	}
-	
-	public void preInstall() {
-		
-	}
-	
-	public DoInstallStep() {
-		name = "WhatsNew";
-	}
-}
Index: tmp/org.txm.whatsnew.rcp/src/org/txm/whatsnew/rcp/NewsPreferencesPage.java
===================================================================
--- tmp/org.txm.whatsnew.rcp/src/org/txm/whatsnew/rcp/NewsPreferencesPage.java	(revision 3165)
+++ tmp/org.txm.whatsnew.rcp/src/org/txm/whatsnew/rcp/NewsPreferencesPage.java	(revision 3166)
@@ -13,16 +13,19 @@
 	public void init(IWorkbench workbench) {
 		
 		this.setPreferenceStore(new TXMPreferenceStore(NewsPreferences.getInstance().getPreferencesNodeQualifier()));
-		this.setTitle("News");
+		this.setTitle("New setups");
 		this.setImageDescriptor(IImageKeys.getImageDescriptor("platform:/plugin/org.eclipse.ui.editors/icons/full/obj16/quick_assist_obj.gif"));
 	}
 	
 	@Override
 	protected void createFieldEditors() {
 		
-		this.addField(new BooleanFieldEditor(NewsPreferences.SHOW_NEWS, "Show news when TXM starts up", this.getFieldEditorParent()));
+		//this.addField(new BooleanFieldEditor(NewsPreferences.SHOW_NEWS, "Show news when TXM starts up", this.getFieldEditorParent()));
 		
+		this.addField(new BooleanFieldEditor(NewsPreferences.SHOW_NEW_SETUP, "Show new setup popups when TXM starts up", this.getFieldEditorParent()));
+		
 		// enable if dev needs to update the NEWS_VERSION value
-		//this.addField(new org.eclipse.jface.preference.IntegerFieldEditor(NewsPreferences.NEWS_VERSION, "Current news index", this.getFieldEditorParent()));
+		//this.addField(new org.eclipse.jface.preference.StringFieldEditor(NewsPreferences.NEWS_VERSION, "Current news index", this.getFieldEditorParent()));
+		//this.addField(new org.eclipse.jface.preference.StringFieldEditor(NewsPreferences.NEW_SETUP_VERSION, "Current new setup index", this.getFieldEditorParent()));
 	}
 }
Index: tmp/org.txm.whatsnew.rcp/src/org/txm/whatsnew/rcp/NewsPreferences.java
===================================================================
--- tmp/org.txm.whatsnew.rcp/src/org/txm/whatsnew/rcp/NewsPreferences.java	(revision 3165)
+++ tmp/org.txm.whatsnew.rcp/src/org/txm/whatsnew/rcp/NewsPreferences.java	(revision 3166)
@@ -9,6 +9,9 @@
 	public static final String SHOW_NEWS = "show_news";
 	public static final String NEWS_VERSION = "news_version";
 	
+	public static final String SHOW_NEW_SETUP = "show_new_setups";
+	public static final String NEW_SETUP_VERSION = "new_setups_version";
+	
 	/**
 	 * Gets the instance.
 	 * 
@@ -27,7 +30,10 @@
 		super.initializeDefaultPreferences();
 		
 		Preferences preferences = this.getDefaultPreferencesNode();
-		preferences.putBoolean(SHOW_NEWS, true); // $NON-NLS-1$
+		preferences.putBoolean(SHOW_NEWS, false); // $NON-NLS-1$
 		preferences.put(NEWS_VERSION, "0"); // $NON-NLS-1$
+		
+		preferences.putBoolean(SHOW_NEW_SETUP, true); // $NON-NLS-1$
+		preferences.put(NEW_SETUP_VERSION, "0"); // $NON-NLS-1$
 	}
 }
Index: tmp/org.txm.whatsnew.rcp/src/org/txm/whatsnew/rcp/DoWhatsNewStep.java
===================================================================
--- tmp/org.txm.whatsnew.rcp/src/org/txm/whatsnew/rcp/DoWhatsNewStep.java	(revision 0)
+++ tmp/org.txm.whatsnew.rcp/src/org/txm/whatsnew/rcp/DoWhatsNewStep.java	(revision 3166)
@@ -0,0 +1,48 @@
+package org.txm.whatsnew.rcp;
+
+
+import org.osgi.framework.Version;
+import org.txm.PostInstallationStep;
+import org.txm.utils.logger.Log;
+
+/**
+ * Opens news about TXM development
+ * 
+ * @author mdecorde
+ *
+ */
+public class DoWhatsNewStep  extends PostInstallationStep {
+
+	public static String ID = DoWhatsNewStep.class.getName(); //$NON-NLS-1$
+
+	public void install() {
+		
+		try {
+			Version lastNewsVersion = NewsEditor.getLastVersion();
+			
+			String currentShownNewsVersionString = NewsPreferences.getInstance().getString(NewsPreferences.NEWS_VERSION);
+			Version currentShownNewsVersion = new Version(currentShownNewsVersionString);
+			if (currentShownNewsVersion.compareTo(lastNewsVersion) > 0) { // the current version should be greater or equal to the last nest version
+				currentShownNewsVersion = lastNewsVersion;
+			}
+			NewsPreferences.getInstance().put(NewsPreferences.NEWS_VERSION, lastNewsVersion.getMajor());
+			
+			if (NewsPreferences.getInstance().getBoolean(NewsPreferences.SHOW_NEWS) 
+					&& lastNewsVersion.compareTo(currentShownNewsVersion) > 0) { // currentShownNewsVersion < lastNewsVersion
+				OpenNews.open();
+			}
+		}
+		catch (Exception e) {
+			Log.warning("Error while fetching news: "+e);
+			Log.printStackTrace(e);
+		}
+	}
+	
+	public void preInstall() {
+		
+	}
+	
+	public DoWhatsNewStep() {
+		name = "WhatsNew";
+	}
+}

Property changes on: tmp/org.txm.whatsnew.rcp/src/org/txm/whatsnew/rcp/DoWhatsNewStep.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.whatsnew.rcp/src/org/txm/whatsnew/rcp/DoWhatsNewSetupStep.java
===================================================================
--- tmp/org.txm.whatsnew.rcp/src/org/txm/whatsnew/rcp/DoWhatsNewSetupStep.java	(revision 0)
+++ tmp/org.txm.whatsnew.rcp/src/org/txm/whatsnew/rcp/DoWhatsNewSetupStep.java	(revision 3166)
@@ -0,0 +1,97 @@
+package org.txm.whatsnew.rcp;
+
+
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.osgi.framework.Version;
+import org.txm.PostInstallationStep;
+import org.txm.core.preferences.TBXPreferences;
+import org.txm.rcp.commands.OpenBrowser;
+import org.txm.rcp.swt.dialog.MultipleChoiceDialog;
+import org.txm.utils.logger.Log;
+
+/**
+ * Opens news about new TXM setup
+ * 
+ * @author mdecorde
+ *
+ */
+public class DoWhatsNewSetupStep  extends PostInstallationStep {
+
+	public static String ID = DoWhatsNewSetupStep.class.getName(); //$NON-NLS-1$
+
+	public void install() {
+		
+		try {
+			String lastNewSetupVersionString = NewsEditor.getLastSetupVersion();
+			
+			String currentShownNewSetupVersionString = NewsPreferences.getInstance().getString(NewsPreferences.NEW_SETUP_VERSION);
+			if (currentShownNewSetupVersionString.compareTo(lastNewSetupVersionString) > 0) { // the current version should be greater or equal to the last nest version
+				currentShownNewSetupVersionString = lastNewSetupVersionString;
+			}
+			NewsPreferences.getInstance().put(NewsPreferences.NEW_SETUP_VERSION, lastNewSetupVersionString);
+			
+			if (NewsPreferences.getInstance().getBoolean(NewsPreferences.SHOW_NEW_SETUP) 
+					&& lastNewSetupVersionString.compareTo(currentShownNewSetupVersionString) > 0) { // currentShownNewSetupVersion < lastNewsVersion
+				open();
+			}
+		}
+		catch (Exception e) {
+			Log.warning("Error while fetching new setup informations: "+e);
+			Log.printStackTrace(e);
+		}
+	}
+	
+	public static final String YES = "Yes";
+	public static final String NO = "No";
+	public static final String DONTBOTHERAGAIN = "No, don't bother again.";
+	
+	public static void open() throws MalformedURLException {
+		
+		Display.getDefault().syncExec(new Runnable() {
+			
+			@Override
+			public void run() {
+				try {
+					MultipleChoiceDialog dialog = new MultipleChoiceDialog(Display.getDefault().getActiveShell(), 
+							"A new TXM setup is available!", 
+							"Do you want to download it now?", 
+							new String[] {YES, NO, DONTBOTHERAGAIN}, NO);
+					dialog.open();
+					
+					String rep = dialog.getAnswer();
+					switch(rep) {
+						case YES:
+							String lastNewSetupVersion = NewsEditor.getLastSetupVersion();
+							String newSetupVersionURL = TBXPreferences.getInstance().getString(TBXPreferences.FILESSITE) + "software/TXM/"+lastNewSetupVersion;
+							OpenBrowser.openExternalBrowser(newSetupVersionURL);
+							break;
+						case NO:
+							break;
+						case DONTBOTHERAGAIN:
+							NewsPreferences.getInstance().put(NewsPreferences.SHOW_NEW_SETUP, false);
+							break;
+					}
+				}
+				catch (Exception e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				}
+			}
+		});
+	}
+	
+	public void preInstall() {
+		
+	}
+	
+	public DoWhatsNewSetupStep() {
+		name = "WhatsNewSetup";
+	}
+}

Property changes on: tmp/org.txm.whatsnew.rcp/src/org/txm/whatsnew/rcp/DoWhatsNewSetupStep.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.whatsnew.rcp/src/org/txm/whatsnew/rcp/NewsEditor.java
===================================================================
--- tmp/org.txm.whatsnew.rcp/src/org/txm/whatsnew/rcp/NewsEditor.java	(revision 3165)
+++ tmp/org.txm.whatsnew.rcp/src/org/txm/whatsnew/rcp/NewsEditor.java	(revision 3166)
@@ -21,6 +21,7 @@
 import org.txm.core.preferences.TBXPreferences;
 import org.txm.rcp.Activator;
 import org.txm.rcp.IImageKeys;
+import org.txm.rcp.p2.plugins.TXMUpdateHandler;
 import org.txm.utils.io.IOUtils;
 import org.txm.utils.logger.Log;
 
@@ -147,8 +148,16 @@
 		refreshNews();
 	}
 	
+	/**
+	 * 
+	 * @return the last news version available
+	 */
 	public static Version getLastVersion() {
 		try {
+			if (!TXMUpdateHandler.isUpdateSiteAvailable()) {
+				return new Version("0");
+			}
+			
 			Version v = Activator.getDefault().getBundle().getVersion();
 			String version = "" + v.getMajor() + "." + v.getMinor() + "." + v.getMicro();
 			
@@ -164,15 +173,44 @@
 			
 			return new Version(newsVersionString);
 		} catch (Exception e) {
-			e.printStackTrace();
+			Log.printStackTrace(e);
 			return new Version("0");
 		}
 	}
 	
+	/**
+	 * 
+	 * @return the last known available setup version
+	 */
+	public static String getLastSetupVersion() {
+		try {
+			if (!TXMUpdateHandler.isUpdateSiteAvailable()) {
+				return "0";
+			}
+			
+			URL newSetupVersionURL;
+			
+			newSetupVersionURL = new URL(TBXPreferences.getInstance().getString(TBXPreferences.RAWFILESSITE) + "software/TXM/new_setup.version");
+			
+			String newSetupVersionString = IOUtils.getText(newSetupVersionURL, "UTF-8");
+			if (newSetupVersionString == null || newSetupVersionString.length() == 0) {
+				Log.warning("No new setup version available at: "+newSetupVersionURL);
+				return "0";
+			}
+			
+			return newSetupVersionString;
+		} catch (Exception e) {
+			Log.printStackTrace(e);
+			return "0";
+		}
+	}
+	
 	public void refreshNews() {
 		
 		vMax = getLastVersion().getMajor();
-		
+		if (vCurrentNews > vMax) {
+			vCurrentNews = vMax;
+		}
 		Version v = Activator.getDefault().getBundle().getVersion();
 		String version = "" + v.getMajor() + "." + v.getMinor() + "." + v.getMicro();	
 		
Index: tmp/org.txm.core/src/java/org/txm/core/preferences/TBXPreferences.java
===================================================================
--- tmp/org.txm.core/src/java/org/txm/core/preferences/TBXPreferences.java	(revision 3165)
+++ tmp/org.txm.core/src/java/org/txm/core/preferences/TBXPreferences.java	(revision 3166)
@@ -85,6 +85,18 @@
 	 */
 	public static final String UPDATESITE = "update_site"; //$NON-NLS-1$
 	
+	/*
+	 * Base URL of TXM files site
+	 */
+	public static final String RAWFILESSITE = "raw_files_site"; //$NON-NLS-1$
+	
+	/*
+	 * Base URL of TXM files site
+	 */
+	public static final String FILESSITE = "files_site"; //$NON-NLS-1$
+	
+
+	
 	/**
 	 * To enable/disable the results persistence (save after a computing and load at Toolbox start).
 	 */
@@ -214,10 +226,14 @@
 		preferences.putBoolean(AUTO_PERSISTENCE_ENABLED, false);
 		
 		if (Toolbox.getTxmHomePath().endsWith("-dev")) {
-			preferences.put(UPDATESITE, "file://" + System.getProperty("user.home") + "/workspace047/TXMReleasePlugins.site");
+			preferences.put(UPDATESITE,		"file://" + System.getProperty("user.home") + "/workspace047/TXMReleasePlugins.site/");
+			preferences.put(RAWFILESSITE,	"file://" + System.getProperty("user.home") + "/workspace047/org.txm.setups/");
+			preferences.put(FILESSITE,		"file://" + System.getProperty("user.home") + "/workspace047/org.txm.setups/");
 		}
 		else {
-			preferences.put(UPDATESITE, "https://gitlab.huma-num.fr/txm/txm-software/-/raw/master/dist/");
+			preferences.put(UPDATESITE,		"https://gitlab.huma-num.fr/txm/txm-software/-/raw/master/dist/");
+			preferences.put(RAWFILESSITE,	"https://gitlab.huma-num.fr/txm/txm-software/-/raw/master/files/");
+			preferences.put(FILESSITE,		"https://txm.gitpages.huma-num.fr/textometrie/files/");
 		}
 	}
 }
Index: tmp/org.txm.core/src/java/org/txm/objects/Match2P.java
===================================================================
--- tmp/org.txm.core/src/java/org/txm/objects/Match2P.java	(revision 3165)
+++ tmp/org.txm.core/src/java/org/txm/objects/Match2P.java	(revision 3166)
@@ -17,6 +17,10 @@
 		this.end = end;
 	}
 	
+	public Match2P(int position) {
+		this(position, position);
+	}
+
 	@Override
 	public int getStart() {
 		return start;
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/p2/plugins/TXMUpdateHandler.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/p2/plugins/TXMUpdateHandler.java	(revision 3165)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/p2/plugins/TXMUpdateHandler.java	(revision 3166)
@@ -130,13 +130,7 @@
 			}
 			
 			// this is the default repository
-			URL baseURL = new URL(TBXPreferences.getInstance().getString(TBXPreferences.UPDATESITE) + "/index.html");
-			try {
-				InputStream s = baseURL.openStream();
-				s.close();
-			}
-			catch (Exception e) {
-				Log.severe("Update site is not reachable: " + baseURL + ", aborting.");
+			if (!isUpdateSiteAvailable()) {
 				return false;
 			}
 			
@@ -158,7 +152,21 @@
 		return null;
 	}
 	
-	private boolean isWindowsAdministratorUser() {
+	public static boolean isUpdateSiteAvailable() {
+		String baseURLString = TBXPreferences.getInstance().getString(TBXPreferences.UPDATESITE) + "index.html";
+		try {
+			URL baseURL = new URL(baseURLString);
+			InputStream s = baseURL.openStream();
+			s.close();
+			return true;
+		}
+		catch (Exception e) {
+			Log.warning(NLS.bind("Update site is not reachable ({0}): {1}. Aborting.", e.getMessage(), baseURLString));
+			return false;
+		}
+	}
+
+	public static boolean isWindowsAdministratorUser() {
 		String path = BundleUtils.getInstallDirectory();// System.getProperty("osgi.instance.area");
 		if (!path.startsWith("C:/Program Files/TXM")) {
 			return true; // TXM was not installed in program files no need to test admin user
@@ -167,7 +175,7 @@
 		return isWindowsAdminCommandTest();
 	}
 	
-	private static boolean isWindowsAdminCommandTest() {
+	public static boolean isWindowsAdminCommandTest() {
 		Preferences preferences = systemRoot();
 		
 		synchronized (System.err) {
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/views/fileexplorer/FileTreeLabelProvider.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/views/fileexplorer/FileTreeLabelProvider.java	(revision 3165)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/views/fileexplorer/FileTreeLabelProvider.java	(revision 3166)
@@ -68,41 +68,47 @@
 					Application.PLUGIN_ID, IImageKeys.FOLDER);
 		}
 		else if (f.isFile()) {
-			if (f.getName().matches(".*\\.(mp4|avi|mkv|ogv|mpg|webm)")) {
+			String fname = f.getName().toLowerCase();
+			if (fname.matches(".*\\.(mp4|avi|mkv|ogv|mpg|webm)")) {
 				imageDescriptor = AbstractUIPlugin
 						.imageDescriptorFromPlugin(Application.PLUGIN_ID,
 								IImageKeys.FILE_VIDEO);
 			}
-			else if (f.getName().endsWith(".txm")) {
+			else if (fname.endsWith(".txm")) {
 				imageDescriptor = AbstractUIPlugin
 						.imageDescriptorFromPlugin(Application.PLUGIN_ID,
 								IImageKeys.TXM1616);
 			}
-			else if (f.getName().matches(".*\\.(mp3|ogg|wav|flac)")) {
+			else if (fname.matches(".*\\.(mp3|ogg|wav|flac)")) {
 				imageDescriptor = AbstractUIPlugin
 						.imageDescriptorFromPlugin(Application.PLUGIN_ID,
 								IImageKeys.FILE_AUDIO);
 			}
-			else if (f.getName().matches(".*\\.(png|jpg|jpeg|bmp|gif)")) {
+			else if (fname.matches(".*\\.(png|jpg|jpeg|bmp|gif|svg)")) {
 				imageDescriptor = AbstractUIPlugin
 						.imageDescriptorFromPlugin(Application.PLUGIN_ID,
 								IImageKeys.FILE_IMAGE);
 			}
-			else if (f.getName().endsWith("Macro.groovy")) {
+			else if (fname.endsWith("Macro.groovy")) {
 				imageDescriptor = AbstractUIPlugin
 						.imageDescriptorFromPlugin(Application.PLUGIN_ID,
 								IImageKeys.SCRIPT_RUN);
 			}
-			else if (f.getName().matches(".*\\.(groovy|R|py|pl|java|rb|sh|bat)")) {
+			else if (fname.matches(".*\\.(groovy|R|py|pl|java|rb|sh|bat|js|c|cpp|xml|xsl|css)")) {
 				imageDescriptor = AbstractUIPlugin
 						.imageDescriptorFromPlugin(Application.PLUGIN_ID,
 								IImageKeys.SCRIPT);
 			}
-			else if (f.getName().matches(".*\\.(doc.|od.|pdf)")) {
+			else if (fname.matches(".*\\.(doc.|od.|pdf|rtf)")) {
 				imageDescriptor = AbstractUIPlugin
 						.imageDescriptorFromPlugin(Application.PLUGIN_ID,
 								IImageKeys.FILE_DOC);
 			}
+			else if (fname.endsWith("html")) {
+				imageDescriptor = AbstractUIPlugin
+						.imageDescriptorFromPlugin(Application.PLUGIN_ID,
+								IImageKeys.WORLD);
+			}
 			else {
 				imageDescriptor = AbstractUIPlugin
 						.imageDescriptorFromPlugin(Application.PLUGIN_ID,
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/utils/JobHandler.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/utils/JobHandler.java	(revision 3165)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/utils/JobHandler.java	(revision 3166)
@@ -206,7 +206,7 @@
 	}
 	
 	public void startJob() {
-		startJob(false);
+		startJob(true);
 	}
 	
 	/**
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/commands/OpenBrowser.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/commands/OpenBrowser.java	(revision 3165)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/commands/OpenBrowser.java	(revision 3166)
@@ -146,6 +146,16 @@
 	 * @param filepath the filepath
 	 * @return the txm browser
 	 */
+	static public TXMBrowserEditor open() {
+		return openfile("", null);
+	}
+	
+	/**
+	 * Openfile.
+	 *
+	 * @param filepath the filepath
+	 * @return the txm browser
+	 */
 	static public TXMBrowserEditor openfile(String filepath) {
 		return openfile(filepath, new File(filepath).getName());
 	}
@@ -174,7 +184,9 @@
 			// System.setProperty("org.eclipse.swt.browser.XULRunnerPath", "");
 			WebBrowserEditorInput editorInput;
 			File localfile = new File(filepath);
-			if (localfile.exists())
+			if (localfile == null || localfile.length() == 0)
+				editorInput = new WebBrowserEditorInput(null, BrowserViewer.BUTTON_BAR | BrowserViewer.LOCATION_BAR);
+			else if (localfile.exists())
 				editorInput = new WebBrowserEditorInput(localfile.toURI().toURL(), BrowserViewer.BUTTON_BAR | BrowserViewer.LOCATION_BAR);
 			else
 				editorInput = new WebBrowserEditorInput(new URL(filepath), BrowserViewer.BUTTON_BAR | BrowserViewer.LOCATION_BAR);
@@ -183,7 +195,9 @@
 			IWorkbenchPage page = window.getActivePage();
 			
 			TXMBrowserEditor editor = (TXMBrowserEditor) page.openEditor(editorInput, TXMBrowserEditor.ID, true);
-			editor.setPartName(editorname);
+			if (editorname != null) {
+				editor.setPartName(editorname);
+			}
 			return editor;
 		}
 		catch (Exception e) {
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/swt/dialog/MultipleChoiceDialog.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/swt/dialog/MultipleChoiceDialog.java	(revision 0)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/swt/dialog/MultipleChoiceDialog.java	(revision 3166)
@@ -0,0 +1,144 @@
+// Copyright © 2010-2020 ENS de Lyon., University of Franche-Comté
+// Copyright © 2007-2010 ENS de Lyon, CNRS, INRP, University of
+// Lyon 2, University of Franche-Comté, University of Nice
+// Sophia Antipolis, University of Paris 3.
+// 
+// The TXM platform is free software: you can redistribute it
+// and/or modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation,
+// either version 2 of the License, or (at your option) any
+// later version.
+// 
+// The TXM platform is distributed in the hope that it will be
+// useful, but WITHOUT ANY WARRANTY; without even the implied
+// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+// PURPOSE. See the GNU General Public License for more
+// details.
+// 
+// You should have received a copy of the GNU General
+// Public License along with the TXM platform. If not, see
+// http://www.gnu.org/licenses.
+// 
+// 
+// 
+// $LastChangedDate:$
+// $LastChangedRevision:$
+// $LastChangedBy:$ 
+//
+package org.txm.rcp.swt.dialog;
+
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+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.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * Open a dialog with a button per choice
+ */
+public class MultipleChoiceDialog extends Dialog {
+	
+	/** The self. */
+	MultipleChoiceDialog self;
+	
+	/** The main panel. */
+	Composite mainPanel;
+	
+	/** The parent shell. */
+	Shell parentShell;
+
+	/** The values. */
+	String[] values;
+	
+	/** The title. */
+	private String title;
+	
+	private String answer;
+
+	private String message;
+
+	/**
+	 * 
+	 * @param parentShell
+	 * @param title
+	 * @param message displayed before he buttons
+	 * @param values in the shown order, not null, not empty
+	 * @param defaultAnswer, default value. If null the first value is the default value
+	 */
+	public MultipleChoiceDialog(Shell parentShell, String title, String message, String[] values, String defaultAnswer) {
+		super(parentShell);
+		
+		if (values == null || values.length == 0) {
+			throw new IllegalStateException("Available values must be set and not empty");
+		}
+		
+		this.parentShell = parentShell;
+		this.setShellStyle(this.getShellStyle());
+		this.values = values;
+		this.title = title;
+		this.answer = defaultAnswer;
+		if (answer == null) {
+			answer = values[0];
+		}
+		this.message = message;
+	}
+
+	@Override
+	public void createButtonsForButtonBar(Composite parent) {
+		// default buttons not created
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
+	 */
+	@Override
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(title);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
+	 */
+	@Override
+	protected Control createDialogArea(Composite p) {
+		
+		p.setLayout(new GridLayout(values.length, false));
+		
+		Label label = new Label(p, SWT.NONE);
+		label.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, true, values.length, 1));
+		if (message != null) label.setText(message);
+		
+		for (String name : values) {
+			Button btn = new Button(p, SWT.PUSH);
+			btn.setText(name); //$NON-NLS-1$
+			btn.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, false, false));
+			btn.addSelectionListener(new SelectionListener() {
+
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					answer = ((Button)e.widget).getText();
+					MultipleChoiceDialog.super.okPressed();
+				}
+				
+				@Override
+				public void widgetDefaultSelected(SelectionEvent e) { }
+			});
+		}
+		return p;
+	}
+	
+	public String getAnswer() {
+		return answer;
+	}
+}

Property changes on: tmp/org.txm.rcp/src/main/java/org/txm/rcp/swt/dialog/MultipleChoiceDialog.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

