new frutch + spirale
[iramuteq] / iramuteq.py
index 6abc278..c84dd0d 100644 (file)
@@ -1,7 +1,7 @@
 #!/bin/env python
 # -*- coding: utf-8 -*-
 #Author: Pierre Ratinaud
 #!/bin/env python
 # -*- coding: utf-8 -*-
 #Author: Pierre Ratinaud
-#Copyright (c) 2008-2012, Pierre Ratinaud
+#Copyright (c) 2008-2016, Pierre Ratinaud
 #License: GNU GPL
 
 from optparse import OptionParser
 #License: GNU GPL
 
 from optparse import OptionParser
@@ -11,35 +11,32 @@ parser.add_option("-f", "--file", dest="filename",
                   help="open FILE", metavar="FILE", default=False)
 (options, args) = parser.parse_args()
 
                   help="open FILE", metavar="FILE", default=False)
 (options, args) = parser.parse_args()
 
-#print args
-#print options
 import sys
 reload(sys)
 import locale
 import tempfile
 import codecs
 import os
 import sys
 reload(sys)
 import locale
 import tempfile
 import codecs
 import os
-import shutil
 from random import randint
 from random import randint
-from ConfigParser import *
+from ConfigParser import ConfigParser, RawConfigParser
 import webbrowser
 import gettext
 import logging
 #------------------------------------
 import wx
 import webbrowser
 import gettext
 import logging
 #------------------------------------
 import wx
-#import wx.aui
 import wx.lib.agw.aui as aui
 import wx.html
 import wx.grid
 import wx.lib.hyperlink as hl
 #------------------------------------
 import wx.lib.agw.aui as aui
 import wx.html
 import wx.grid
 import wx.lib.hyperlink as hl
 #------------------------------------
-from functions import BugReport, PlaySound, ReadLexique, History, DoConf, ReadDicoAsDico, progressbar
+from functions import BugReport, PlaySound, History, progressbar
 from checkversion import NewVersion
 from guifunct import *
 from tableau import Tableau
 from checkversion import NewVersion
 from guifunct import *
 from tableau import Tableau
-from dialog import PrefDialog, CorpusPref
-from tabfrequence import Frequences
+from dialog import PrefDialog
+from tabfrequence import Frequences, FreqMultiple
 from tabchi2 import ChiSquare
 from tabchi2 import ChiSquare
+from tabchi2mcnemar import McNemar
 #from tabstudent import MakeStudent
 from tabchddist import ChdCluster
 from tabafcm import DoAFCM
 #from tabstudent import MakeStudent
 from tabchddist import ChdCluster
 from tabafcm import DoAFCM
@@ -48,22 +45,22 @@ from tabsimi import DoSimi
 from tabrsimple import InputText
 from tabverges import Prototypical
 from tabsplitvar import SplitMatrixFromVar
 from tabrsimple import InputText
 from tabverges import Prototypical
 from tabsplitvar import SplitMatrixFromVar
-#from textafcuci import AfcUci
-from textdist import AnalysePam
+#from textdist import AnalysePam
 from textstat import Stat
 from textaslexico import Lexico
 from textstat import Stat
 from textaslexico import Lexico
+from textlabbe import DistLabbe
 from textsimi import SimiTxt, SimiFromCluster
 from textwordcloud import WordCloud, ClusterCloud
 from textreinert import Reinert
 from textsimi import SimiTxt, SimiFromCluster
 from textwordcloud import WordCloud, ClusterCloud
 from textreinert import Reinert
-#from profile_segment import ProfileSegment
 #from textcheckcorpus import checkcorpus
 from openanalyse import OpenAnalyse
 from corpus import Builder, SubBuilder
 #from textcheckcorpus import checkcorpus
 from openanalyse import OpenAnalyse
 from corpus import Builder, SubBuilder
-#from sheet import MySheet
 from checkinstall import CreateIraDirectory, CheckRPath, FindRPAthWin32, FindRPathNix, CheckRPackages, IsNew, UpgradeConf, CopyConf, RLibsAreInstalled
 from chemins import RscriptsPath, ConstructConfigPath, ConstructDicoPath, ConstructGlobalPath, PathOut
 from parse_factiva_xml import ImportFactiva
 from checkinstall import CreateIraDirectory, CheckRPath, FindRPAthWin32, FindRPathNix, CheckRPackages, IsNew, UpgradeConf, CopyConf, RLibsAreInstalled
 from chemins import RscriptsPath, ConstructConfigPath, ConstructDicoPath, ConstructGlobalPath, PathOut
 from parse_factiva_xml import ImportFactiva
+from parse_dmi import ImportDMI
 from tools import Extract
 from tools import Extract
+from analyse_merge import AnalyseMerge
 
 from tree import LeftTree
 ##########################################################
 
 from tree import LeftTree
 ##########################################################
@@ -73,6 +70,7 @@ ID_OpenText = wx.NewId()
 ID_OnOpenAnalyse = wx.NewId()
 ID_Freq = wx.NewId()
 ID_Chi2 = wx.NewId()
 ID_OnOpenAnalyse = wx.NewId()
 ID_Freq = wx.NewId()
 ID_Chi2 = wx.NewId()
+ID_Chi2mc = wx.NewId()
 ID_Student = wx.NewId()
 ID_CHDSIM = wx.NewId()
 ID_CHDReinert = wx.NewId()
 ID_Student = wx.NewId()
 ID_CHDSIM = wx.NewId()
 ID_CHDReinert = wx.NewId()
@@ -90,11 +88,23 @@ ID_SaveTab = wx.NewId()
 ID_CreateText = wx.NewId()
 ID_ACCEUIL = wx.NewId()
 ID_RESULT = wx.NewId()
 ID_CreateText = wx.NewId()
 ID_ACCEUIL = wx.NewId()
 ID_RESULT = wx.NewId()
-ID_VIEWDATA = wx.NewId()
 ID_HTMLcontent = wx.NewId()
 ID_SimiTxt = wx.NewId()
 ID_proto = wx.NewId()
 ID_ImportTXM = wx.NewId()
 ID_HTMLcontent = wx.NewId()
 ID_SimiTxt = wx.NewId()
 ID_proto = wx.NewId()
 ID_ImportTXM = wx.NewId()
+ID_FreqMulti = wx.NewId()
+ID_Splitfromvar = wx.NewId()
+ID_Subtxtfrommeta = wx.NewId()
+ID_Subtxtfromthem = wx.NewId()
+ID_WC = wx.NewId()
+ID_ImportEuro = wx.NewId()
+ID_Fact_xml = wx.NewId()
+ID_Fact_mail = wx.NewId()
+ID_Fact_copy = wx.NewId()
+ID_exportmeta = wx.NewId()
+ID_importdmi = wx.NewId()
+ID_merge = wx.NewId()
+ID_labbe = wx.NewId()
 ##########################################################
 #elements de configuration
 ##########################################################
 ##########################################################
 #elements de configuration
 ##########################################################
@@ -113,12 +123,14 @@ ImagePath = os.path.join(AppliPath, 'images')
 DictConfigPath = ConstructGlobalPath(AppliPath)
 ConfigGlob = ConfigParser()
 ConfigGlob.read(DictConfigPath['global'])
 DictConfigPath = ConstructGlobalPath(AppliPath)
 ConfigGlob = ConfigParser()
 ConfigGlob.read(DictConfigPath['global'])
+DefaultConf = ConfigParser()
+DefaultConf.read(DictConfigPath['preferences'])
 #repertoire de l'utilisateur
 #repertoire de l'utilisateur
-if os.getenv('HOME') != None:
-    user_home = os.getenv('HOME')
-else:
-    user_home = os.getenv('HOMEPATH')
-UserConfigPath = os.path.abspath(os.path.join(user_home, '.iramuteq'))
+user_home = os.getenv('HOME')
+if user_home is None :
+    user_home = os.path.expanduser('~')
+
+UserConfigPath = os.path.abspath(os.path.join(user_home, '.iramuteq-%s' % ConfigGlob.get('DEFAULT', 'version_nb')))
 #Si pas de fichiers de config utilisateur, on cree le repertoire
 CreateIraDirectory(UserConfigPath, AppliPath)
 #fichiers log pour windows (py2exe)
 #Si pas de fichiers de config utilisateur, on cree le repertoire
 CreateIraDirectory(UserConfigPath, AppliPath)
 #fichiers log pour windows (py2exe)
@@ -149,7 +161,52 @@ sys.stdout = printer()
 ConfigPath = ConstructConfigPath(UserConfigPath)
 
 langues = {'french' : wx.LANGUAGE_FRENCH,
 ConfigPath = ConstructConfigPath(UserConfigPath)
 
 langues = {'french' : wx.LANGUAGE_FRENCH,
-            'english' : wx.LANGUAGE_ENGLISH,}
+           'english' : wx.LANGUAGE_ENGLISH,
+           'portuguese' : wx.LANGUAGE_PORTUGUESE,
+           'italian' : wx.LANGUAGE_ITALIAN,
+           'spanish' : wx.LANGUAGE_SPANISH
+           }
+
+code_langues = {'french' : 'fr_FR',
+                'english' : 'en',
+                'portuguese' : 'pt_PT',
+                'italian' : 'it_IT',
+                'spanish' : 'es_ES'
+               }
+
+images_analyses = {
+        'textroot' : 'textroot.png',
+        'alceste' : 'reinert.png',
+        'corpus' : 'textcorpus.png',
+        'wordcloud' :'wordcloud.png',
+        'stat' :'stats.png',
+        'simitxt' : 'simitxt.png',
+        'clustersimitxt' :'clustersimitxt.png',
+        'clustercloud' : 'clustercloud.png',
+        'spec' : 'spec.png',
+        'matroot' : 'matroot.png',
+        'matrix' : 'matrix.png',
+        'freq' : 'frequences.png',
+        'freqmulti' : 'frequences.png',
+        'chi2' : 'chi2.png',
+        'chi2mcnemar' : 'chi2.png',
+        'reinertmatrix' : 'reinertmatrix.png',
+        'simimatrix' : 'simimatrix.png',
+        'simiclustermatrix' : 'simimatrix.png',
+        'proto' : 'proto.png',
+        'TXM' : 'TXM.png',
+        'europress' : 'europress.png',
+        'factiva_xml' : 'factiva_xml.png',
+        'factiva_copy' : 'factiva_copy.png',
+        'factiva_mail': 'factiva_mail.png',
+        'iramuteq' : 'iraicone.png',
+        'subcorpusmeta' : 'subcorpusmeta.png',
+        'subcorpusthema' : 'subcorpusthema.png',
+        'preferences' : 'preferences.png',
+        'exportmetatable' : 'exportmetatable.png',
+        'importdmi' : 'twitter.png',
+        'labbe' : 'spec.png'
+         }
 #####################################################################
 
 class IraFrame(wx.Frame):
 #####################################################################
 
 class IraFrame(wx.Frame):
@@ -157,7 +214,8 @@ class IraFrame(wx.Frame):
                  size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE | 
                                             wx.SUNKEN_BORDER | 
                                             wx.CLIP_CHILDREN):
                  size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE | 
                                             wx.SUNKEN_BORDER | 
                                             wx.CLIP_CHILDREN):
-        log.info('Starting...')
+        log.info('Starting... ' )
+        log.info('version : %s' % ConfigGlob.get('DEFAULT', 'version'))
         wx.Frame.__init__(self, parent, id, title, pos, size, style)
         #configuration
         self.AppliPath = AppliPath
         wx.Frame.__init__(self, parent, id, title, pos, size, style)
         #configuration
         self.AppliPath = AppliPath
@@ -178,9 +236,12 @@ class IraFrame(wx.Frame):
         #langues = ['fr_FR', 'en', 'pt_PT']
         #for l in langues :
         #    pass
         #langues = ['fr_FR', 'en', 'pt_PT']
         #for l in langues :
         #    pass
-        self.presLan_fr = gettext.translation("iramuteq", os.path.join(AppliPath,'locale'), languages=['fr_FR'])
-        self.presLan_en = gettext.translation("iramuteq", os.path.join(AppliPath,'locale'), languages=['en'])
+        self.preslangue = {}
+        for langue in code_langues :
+            self.preslangue[langue] = gettext.translation("iramuteq", os.path.join(AppliPath,'locale'), languages=[code_langues[langue]])
         self.setlangue()
         self.setlangue()
+        #self.presLan_fr = gettext.translation("iramuteq", os.path.join(AppliPath,'locale'), languages=['fr_FR'])
+        #self.presLan_en = gettext.translation("iramuteq", os.path.join(AppliPath,'locale'), languages=['en'])
         # tell FrameManager to manage this frame        
         #self._mgr = wx.aui.AuiManager()
         self._mgr = aui.AuiManager()
         # tell FrameManager to manage this frame        
         #self._mgr = wx.aui.AuiManager()
         self._mgr = aui.AuiManager()
@@ -188,35 +249,52 @@ class IraFrame(wx.Frame):
         self.x = 0
         # create menu
 #--------------------------------------------------------------------------------
         self.x = 0
         # create menu
 #--------------------------------------------------------------------------------
+        self.images_analyses = images_analyses
+        for img in images_analyses :
+            self.images_analyses[img] = wx.Image(os.path.join(self.images_path, self.images_analyses[img]), wx.BITMAP_TYPE_PNG).Scale(16,16).ConvertToBitmap()
         self.mb = wx.MenuBar()
 
         file_menu = wx.Menu()
         item = wx.MenuItem(file_menu, ID_OpenData, _(u"Open a matrix").decode('utf8'), _(u"Open a matrix").decode('utf8'))
         self.mb = wx.MenuBar()
 
         file_menu = wx.Menu()
         item = wx.MenuItem(file_menu, ID_OpenData, _(u"Open a matrix").decode('utf8'), _(u"Open a matrix").decode('utf8'))
-        item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN))
+        #item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN))
+        item.SetBitmap(self.images_analyses['matroot'])
         file_menu.AppendItem(item)
         
         item = wx.MenuItem(file_menu, ID_OpenText, _(u"Open a text corpus").decode('utf8'), _(u"Open a text corpus").decode('utf8'))
         file_menu.AppendItem(item)
         
         item = wx.MenuItem(file_menu, ID_OpenText, _(u"Open a text corpus").decode('utf8'), _(u"Open a text corpus").decode('utf8'))
-        item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN))
+        item.SetBitmap(self.images_analyses['textroot'])
         file_menu.AppendItem(item)
         
         item = wx.MenuItem(file_menu, ID_OnOpenAnalyse, _(u"Open an analysis").decode('utf8'), _(u"Open an analysis").decode('utf8'))
         file_menu.AppendItem(item)
         
         item = wx.MenuItem(file_menu, ID_OnOpenAnalyse, _(u"Open an analysis").decode('utf8'), _(u"Open an analysis").decode('utf8'))
-        item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN))
+        item.SetBitmap(self.images_analyses['iramuteq'])
+        file_menu.AppendItem(item)
+
+        item = wx.MenuItem(file_menu, ID_ImportTXM, _(u"Import from TXM").decode('utf8'), _(u"Import from TXM").decode('utf8'))
+        item.SetBitmap(self.images_analyses['TXM'])
+        file_menu.AppendItem(item)
+
+        item = wx.MenuItem(file_menu, ID_ImportEuro, _(u"Import from Europress").decode('utf8'), _(u"Import from Europress").decode('utf8'))
+        item.SetBitmap(self.images_analyses['europress'])
+        file_menu.AppendItem(item)
+
+        item = wx.MenuItem(file_menu, ID_importdmi, _(u"Import from DMI-TCAT (exp.)").decode('utf8'), _(u"Import from DMI-TCAT (exp.)").decode('utf8'))
+        item.SetBitmap(self.images_analyses['importdmi'])
+        file_menu.AppendItem(item)
+
+        item = wx.MenuItem(file_menu, ID_merge, _(u'Merge graphs').decode('utf8'), _(u'Merge graphs').decode('utf8'))
         file_menu.AppendItem(item)
 
         file_menu.AppendItem(item)
 
-        
         menuFactiva = wx.Menu()
         menuFactiva = wx.Menu()
-        fact_from_xml = wx.MenuItem(menuFactiva, wx.ID_ANY, _(u"from xml").decode('utf8'))
-        fact_from_mail = wx.MenuItem(menuFactiva, wx.ID_ANY, _(u"from mail").decode('utf8'))
-        fact_from_txt = wx.MenuItem(menuFactiva, wx.ID_ANY, _(u"from copy/paste").decode('utf8'))
+        fact_from_xml = wx.MenuItem(menuFactiva, ID_Fact_xml, _(u"from xml").decode('utf8'))
+        fact_from_xml.SetBitmap(self.images_analyses['factiva_xml'])
+        fact_from_mail = wx.MenuItem(menuFactiva, ID_Fact_mail, _(u"from mail").decode('utf8'))
+        fact_from_mail.SetBitmap(self.images_analyses['factiva_mail'])
+        fact_from_txt = wx.MenuItem(menuFactiva, ID_Fact_copy, _(u"from copy/paste").decode('utf8'))
+        fact_from_txt.SetBitmap(self.images_analyses['factiva_copy'])
         menuFactiva.AppendItem(fact_from_xml)
         menuFactiva.AppendItem(fact_from_mail)
         menuFactiva.AppendItem(fact_from_txt)
         file_menu.AppendMenu(-1, _(u"Import from factiva").decode('utf8'), menuFactiva)
 
         menuFactiva.AppendItem(fact_from_xml)
         menuFactiva.AppendItem(fact_from_mail)
         menuFactiva.AppendItem(fact_from_txt)
         file_menu.AppendMenu(-1, _(u"Import from factiva").decode('utf8'), menuFactiva)
 
-        item = wx.MenuItem(file_menu, ID_ImportTXM, _(u"Import from TXM").decode('utf8'), _(u"Import from TXM").decode('utf8'))
-        item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN))
-        file_menu.AppendItem(item)
-
         menuTools = wx.Menu()
         splitvar = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Split from variable").decode('utf8'))
         extractmod = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Extract mods").decode('utf8'))
         menuTools = wx.Menu()
         splitvar = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Split from variable").decode('utf8'))
         extractmod = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Extract mods").decode('utf8'))
@@ -229,72 +307,141 @@ class IraFrame(wx.Frame):
         self.ID_extractthem = extractthem.GetId()
         file_menu.AppendMenu(-1, _(u"Tools").decode('utf8'), menuTools)
 
         self.ID_extractthem = extractthem.GetId()
         file_menu.AppendMenu(-1, _(u"Tools").decode('utf8'), menuTools)
 
-               
+
         #item = wx.MenuItem(file_menu, ID_SaveTab, _(u"Save tab as...").decode('utf8'), _(u"Save tab as...").decode('utf8'))
         #item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_SAVE_AS))
         #file_menu.AppendItem(item)
         #item = wx.MenuItem(file_menu, ID_SaveTab, _(u"Save tab as...").decode('utf8'), _(u"Save tab as...").decode('utf8'))
         #item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_SAVE_AS))
         #file_menu.AppendItem(item)
-        
+
         file_menu.Append(wx.ID_EXIT, _(u"Exit").decode('utf8'))
         file_menu.Append(wx.ID_EXIT, _(u"Exit").decode('utf8'))
-        
+
         edit_menu = wx.Menu()
         edit_menu = wx.Menu()
-        edit_menu.Append(wx.ID_PREFERENCES, '', _(u'Preferences').decode('utf8'))
-        
+        pref = wx.MenuItem(edit_menu, wx.ID_PREFERENCES, _(u'Preferences').decode('utf8'))
+        pref.SetBitmap(self.images_analyses['preferences'])
+        edit_menu.AppendItem(pref)
+        #edit_menu.Append(wx.ID_PREFERENCES, _(u'Preferences').decode('utf8'))
+
         view_menu = wx.Menu()
         view_menu = wx.Menu()
-        view_menu.Append(ID_ACCEUIL, _(u"Home page").decode('utf8'))
-        view_menu.Append(ID_VIEWDATA, _(u"Show data").decode('utf8'))
-        view_menu.Append(ID_RESULT, _(u'Show results').decode('utf8'))
+        home = wx.MenuItem(view_menu, ID_ACCEUIL, _(u"Home page").decode('utf8'))
+        home.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_GO_HOME, size = (16,16)))
+        view_menu.AppendItem(home)
+        #view_menu.Append(ID_ACCEUIL, _(u"Home page").decode('utf8'))
+        results = wx.MenuItem(view_menu, ID_RESULT, _(u'Show results').decode('utf8'))
+        results.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_LIST_VIEW, size = (16,16)))
+        view_menu.AppendItem(results)
+        #view_menu.Append(ID_RESULT, _(u'Show results').decode('utf8'))
         #view_menu.AppendSeparator()
         matrix_menu = wx.Menu()
         #view_menu.AppendSeparator()
         matrix_menu = wx.Menu()
-        matrix_menu.Append(ID_Freq, _(u"Frequencies").decode('utf8'))
-        matrix_menu.Append(ID_Chi2, _(u"Chi2").decode('utf8'))
+        matanalyses = [[ID_Freq, _(u"Frequencies").decode('utf8'), 'freq'],
+                       [ID_FreqMulti, _(u"Multiple  Frequencies").decode('utf8'), 'freqmulti'],
+                       [ID_Chi2, _(u"Chi2").decode('utf8'), 'chi2'],
+                       [ID_Chi2mc, _(u"Chi2 McNemar").decode('utf8'), 'chi2mcnemar'],
+                       {'name' : _(u"Clustering").decode('utf8'),
+                        'content' : [[ID_CHDReinert, _(u"Reinert's Method").decode('utf8'), 'reinertmatrix']]},
+                       [ID_SIMI, _(u"Similarities Analysis").decode('utf8'), 'simimatrix'],
+                       [ID_proto, _(u"Prototypical Analysis").decode('utf8'), 'proto'],
+                       [ID_Splitfromvar, _(u"Split from variable").decode('utf8'), 'subcorpusmeta'],
+                        ]
+
+        for analyse in matanalyses :
+            if not isinstance(analyse, dict) :
+                item = wx.MenuItem(matrix_menu, analyse[0], analyse[1])
+                item.SetBitmap(self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16)))
+                matrix_menu.AppendItem(item)
+            else :
+                nmenu = wx.Menu()
+                for subana in analyse['content'] :
+                    item = wx.MenuItem(nmenu, subana[0], subana[1])
+                    item.SetBitmap(self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)))
+                    nmenu.AppendItem(item)
+                matrix_menu.AppendMenu(-1, analyse['name'], nmenu)
+        #item = wx.MenuItem(matrix_menu, ID_Freq, _(u"Frequencies").decode('utf8'))
+        #item.SetBitmap(self.images_analyses['freq'])
+        #matrix_menu.AppendItem(item)
+        #matrix_menu.Append(ID_Freq, _(u"Frequencies").decode('utf8'))
+        #item = wx.MenuItem(matrix_menu, ID_Freq, _(u"Multiple  Frequencies").decode('utf8'))
+        #item.SetBitmap(self.images_analyses['freqmulti'])
+        #matrix_menu.Append(ID_FreqMulti, _(u'Multiple frequencies').decode('utf8'))
+        #matrix_menu.AppendItem(item)
+        #matrix_menu.Append(ID_Chi2, _(u"Chi2").decode('utf8'))
         #matrix_menu.Append(ID_Student, u"t de Student")
         #matrix_menu.Append(ID_Student, u"t de Student")
-        menu_classif = wx.Menu()
-        menu_classif.Append(ID_CHDReinert, _(u"Reinert's Method").decode('utf8'))
+        #menu_classif = wx.Menu()
+        #menu_classif.Append(ID_CHDReinert, _(u"Reinert's Method").decode('utf8'))
         #menu_classif.Append(ID_CHDSIM, u"Par matrice des distances")
         #menu_classif.Append(ID_CHDSIM, u"Par matrice des distances")
-        matrix_menu.AppendMenu(-1, _(u"Clustering").decode('utf8'), menu_classif)
+        #matrix_menu.AppendMenu(-1, _(u"Clustering").decode('utf8'), menu_classif)
         #matrix_menu.Append(ID_AFCM, u"AFCM")
         #matrix_menu.Append(ID_AFCM, u"AFCM")
-        matrix_menu.Append(ID_SIMI, _(u"Similarities Analysis").decode('utf8'))
-        matrix_menu.Append(ID_proto, _(u"Prototypical Analysis").decode('utf8'))
+        #matrix_menu.Append(ID_SIMI, _(u"Similarities Analysis").decode('utf8'))
+        #matrix_menu.Append(ID_proto, _(u"Prototypical Analysis").decode('utf8'))
         ID_RCODE = wx.NewId()
         ID_RCODE = wx.NewId()
-        matrix_menu.Append(ID_RCODE, u"Code R...") 
+        #matrix_menu.Append(ID_RCODE, u"Code R...") 
         #menu_splittab = wx.Menu()
         #ID_SPLITVAR = wx.NewId()
         #splitvar = wx.MenuItem(menu_splittab, ID_SPLITVAR, _(u"Split from variable").decode('utf8'))
         #menu_splittab.AppendItem(splitvar)
         #matrix_menu.AppendMenu(-1, _(u"Split matrix").decode('utf8'), menu_splittab)
         self.matrix_menu = matrix_menu
         #menu_splittab = wx.Menu()
         #ID_SPLITVAR = wx.NewId()
         #splitvar = wx.MenuItem(menu_splittab, ID_SPLITVAR, _(u"Split from variable").decode('utf8'))
         #menu_splittab.AppendItem(splitvar)
         #matrix_menu.AppendMenu(-1, _(u"Split matrix").decode('utf8'), menu_splittab)
         self.matrix_menu = matrix_menu
-        
+
         text_menu = wx.Menu()
         text_menu = wx.Menu()
+        analyses_text = [[ID_TEXTSTAT, _(u"Statistics").decode('utf8'), 'stat'],
+                         [ID_ASLEX, _(u"Specificities and CA").decode('utf8'), 'spec'],
+                         [ID_labbe, _(u"Labbe Distance").decode('utf8'),'labbe'],
+                         {'name' : _(u"Clustering").decode('utf8'),
+                          'content' : [[ID_TEXTREINERT, _(u"Reinert's Method").decode('utf8'), 'alceste']]},
+                         [ID_SimiTxt, _(u"Similarities Analysis").decode('utf8'), 'simitxt'],
+                         [ID_WC, _(u"WordCloud").decode('utf8'), 'wordcloud'],
+                         {'name' : _(u"Sub corpus").decode('utf8'),
+                          'content' : [[ID_Subtxtfrommeta, _(u'Sub corpus from metadata').decode('utf8'), 'subcorpusmeta'],
+                                       [ID_Subtxtfromthem, _(u'Sub corpus from thematic').decode('utf8'), 'subcorpusthema']]},
+                         [ID_exportmeta, _(u"Export metadata table").decode('utf8'), 'exportmetatable'],
+                         ]
+
+        for analyse in analyses_text :
+            if not isinstance(analyse, dict) :
+                item = wx.MenuItem(text_menu, analyse[0], analyse[1])
+                item.SetBitmap(self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16)))
+                text_menu.AppendItem(item)
+            else :
+                nmenu = wx.Menu()
+                for subana in analyse['content'] :
+                    item = wx.MenuItem(nmenu, subana[0], subana[1])
+                    item.SetBitmap(self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)))
+                    nmenu.AppendItem(item)
+                text_menu.AppendMenu(-1, analyse['name'], nmenu)
         #text_menu.Append(ID_CHECKCORPUS, u"Vérifier le corpus")
         #text_menu.Append(ID_CHECKCORPUS, u"Vérifier le corpus")
-        text_menu.Append(ID_TEXTSTAT, _(u"Statistics").decode('utf8'))
-        text_menu.Append(ID_ASLEX, _(u"Specificities and CA").decode('utf8'))
-        #text_menu.Append(ID_TEXTAFCM, u"AFC sur UCI / Vocabulaire")
-        menu_classiftxt = wx.Menu()
-        menu_classiftxt.Append(ID_TEXTREINERT, _(u"Reinert's Method").decode('utf8'))
-        #menu_classiftxt.Append(ID_TEXTPAM, u"Par matrice des distances")
-        text_menu.AppendMenu(-1, _(u"Clustering").decode('utf8'), menu_classiftxt)
-        text_menu.Append(ID_SimiTxt, _(u"Similarities Analysis").decode('utf8')) 
-        ID_WC = wx.NewId()
-        text_menu.Append(ID_WC, _(u"WordCloud").decode('utf8'))
+        text_menu.Append(ID_TEXTSTAT, _(u"Statistics").decode('utf8'))
+        text_menu.Append(ID_ASLEX, _(u"Specificities and CA").decode('utf8'))
+        #text_menu.Append(ID_TEXTAFCM, u"AFC sur UCI / Vocabulaire")
+        menu_classiftxt = wx.Menu()
+        menu_classiftxt.Append(ID_TEXTREINERT, _(u"Reinert's Method").decode('utf8'))
+        #menu_classiftxt.Append(ID_TEXTPAM, u"Par matrice des distances")
+        text_menu.AppendMenu(-1, _(u"Clustering").decode('utf8'), menu_classiftxt)
+        text_menu.Append(ID_SimiTxt, _(u"Similarities Analysis").decode('utf8')) 
+#         
+        text_menu.Append(ID_WC, _(u"WordCloud").decode('utf8'))
         self.text_menu = text_menu
         self.text_menu = text_menu
-        
+
         help_menu = wx.Menu()
         help_menu = wx.Menu()
-        help_menu.Append(wx.ID_ABOUT, _(u"About...").decode('utf8'))
-        help_menu.Append(wx.ID_HELP, _(u"Online help...").decode('utf8'))
-        
+        about = wx.MenuItem(help_menu, wx.ID_ABOUT, _(u"About...").decode('utf8'))
+        about.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_INFORMATION, size = (16,16)))
+        help_menu.AppendItem(about)
+        #help_menu.Append(wx.ID_ABOUT, _(u"About...").decode('utf8'))
+        help = wx.MenuItem(help_menu, wx.ID_HELP, _(u"Online help...").decode('utf8'))
+        help.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_HELP, size = (16,16)))
+        help_menu.AppendItem(help)
+        #help_menu.Append(wx.ID_HELP, _(u"Online help...").decode('utf8'))
+
         self.mb.Append(file_menu, _(u"File").decode('utf8'))
         self.mb.Append(edit_menu, _(u"Edition").decode('utf8'))
         self.mb.Append(view_menu, _(u"View").decode('utf8'))
         self.mb.Append(matrix_menu, _(u"Matrix analysis").decode('utf8'))
         self.mb.Append(text_menu, _(u"Text analysis").decode('utf8'))
         self.mb.Append(help_menu, _(u"Help").decode('utf8'))
         self.mb.Append(file_menu, _(u"File").decode('utf8'))
         self.mb.Append(edit_menu, _(u"Edition").decode('utf8'))
         self.mb.Append(view_menu, _(u"View").decode('utf8'))
         self.mb.Append(matrix_menu, _(u"Matrix analysis").decode('utf8'))
         self.mb.Append(text_menu, _(u"Text analysis").decode('utf8'))
         self.mb.Append(help_menu, _(u"Help").decode('utf8'))
-        
+
         self.SetMenuBar(self.mb)
 #--------------------------------------------------------------------
         self.statusbar = self.CreateStatusBar(2, wx.ST_SIZEGRIP)
         self.statusbar.SetStatusWidths([-2, -3])
         self.SetMenuBar(self.mb)
 #--------------------------------------------------------------------
         self.statusbar = self.CreateStatusBar(2, wx.ST_SIZEGRIP)
         self.statusbar.SetStatusWidths([-2, -3])
-        self.statusbar.SetStatusText(u"Prêt", 0)
-        self.statusbar.SetStatusText(u"Bienvenue", 1)
+        self.statusbar.SetStatusText(_(u"Ready").decode('utf8'), 0)
+        self.statusbar.SetStatusText(_(u"Welcome").decode('utf8'), 1)
 
         # min size for the frame itself isn't completely done.
         # see the end up FrameManager::Update() for the test
 
         # min size for the frame itself isn't completely done.
         # see the end up FrameManager::Update() for the test
@@ -305,16 +452,57 @@ class IraFrame(wx.Frame):
         tb1 = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
                          wx.TB_FLAT | wx.TB_NODIVIDER)
         tb1.SetToolBitmapSize(wx.Size(16, 16))
         tb1 = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
                          wx.TB_FLAT | wx.TB_NODIVIDER)
         tb1.SetToolBitmapSize(wx.Size(16, 16))
-        tb1.AddLabelTool(ID_OpenData, "OpenData", wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN, wx.ART_OTHER, wx.Size(16, 16)), shortHelp="Questionnaire", longHelp="Ouvrir un questionnaire")
+        tb1.AddLabelTool(ID_OpenData, "OpenData", self.images_analyses['matroot'], shortHelp=_(u"Matrix").decode('utf8'), longHelp=_(u"Open a matrix").decode('utf8'))
         tb1.AddSeparator()
         tb1.AddSeparator()
-        tb1.AddLabelTool(ID_OpenText, "OpenText", wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN, wx.ART_OTHER, wx.Size(16, 16)), shortHelp="Texte", longHelp="Ouvrir un corpus texte")
-
+        tb1.AddLabelTool(ID_OpenText, "OpenText", self.images_analyses['textroot'], shortHelp=_(u"Text").decode('utf8'), longHelp=_(u"Open a text corpus").decode('utf8'))
+        tb1.AddSeparator()
+        tb1.AddLabelTool(ID_OnOpenAnalyse, "OpenAnalyse", self.images_analyses['iramuteq'], shortHelp= _(u"Open an analysis").decode('utf8'), longHelp=_(u"Open an analysis").decode('utf8'))
+        tb1.AddSeparator()
+        tb1.AddLabelTool(ID_ImportTXM, "ImportTXM", self.images_analyses['TXM'], shortHelp= _(u"Import from TXM").decode('utf8'), longHelp=_(u"Import from TXM").decode('utf8'))
+        tb1.AddSeparator()
+        tb1.AddLabelTool(ID_ImportEuro, "ImportEuro", self.images_analyses['europress'], shortHelp= _(u"Import from Europress").decode('utf8'), longHelp=_(u"Import from Europress").decode('utf8'))
+        tb1.AddSeparator()
+        tb1.AddLabelTool(ID_importdmi, "ImportDMI", self.images_analyses['importdmi'], shortHelp= _(u"Import from DMI-TCAT (exp.)").decode('utf8'), longHelp=_(u"Import from DMI-TCAT (exp.)").decode('utf8'))
+        tb1.AddSeparator()
+        tb1.AddLabelTool(ID_Fact_xml, "ImportFactxml", self.images_analyses['factiva_xml'], shortHelp= _(u"Factiva from xml").decode('utf8'), longHelp=_(u"Factiva from xml").decode('utf8'))
+        tb1.AddLabelTool(ID_Fact_mail, "ImportFactmail", self.images_analyses['factiva_mail'], shortHelp= _(u"Factiva from mail").decode('utf8'), longHelp=_(u"Factiva from mail").decode('utf8'))
+        tb1.AddLabelTool(ID_Fact_copy, "ImportFactcopy", self.images_analyses['factiva_copy'], shortHelp= _(u"Factiva from copy/paste").decode('utf8'), longHelp=_(u"Factiva from copy/paste").decode('utf8'))
+        tb1.AddSeparator()
+        tb1.AddLabelTool(wx.ID_PREFERENCES, "Preferences", self.images_analyses['preferences'], shortHelp= _(u"Preferences").decode('utf8'), longHelp=_(u"Preferences").decode('utf8'))
+        tb1.AddSeparator()
+        tb1.AddLabelTool(ID_ACCEUIL, "Home", wx.ArtProvider_GetBitmap(wx.ART_GO_HOME, size = (16,16)), shortHelp= _(u"Home page").decode('utf8'), longHelp=_(u"Home page").decode('utf8'))
+        tb1.AddLabelTool(ID_RESULT, "Results", wx.ArtProvider_GetBitmap(wx.ART_LIST_VIEW, size = (16,16)), shortHelp= _(u'Show results').decode('utf8'), longHelp=_(u'Show results').decode('utf8'))
         tb1.Realize()
         tb1.Realize()
-        
+
+        tb_text = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
+                         wx.TB_FLAT | wx.TB_NODIVIDER)
+        for analyse in analyses_text :
+            if not isinstance(analyse, dict) :
+                tb_text.AddLabelTool(analyse[0], analyse[1], self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16)), shortHelp = analyse[1], longHelp = analyse[1])
+            else :
+                for subana in analyse['content'] :
+                    tb_text.AddLabelTool(subana[0], subana[1], self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)), shortHelp = subana[1], longHelp = subana[1])
+        tb_text.Realize()
+
+        tb_mat = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
+                         wx.TB_FLAT | wx.TB_NODIVIDER)
+        for analyse in matanalyses :
+            if not isinstance(analyse, dict) :
+                tb_mat.AddLabelTool(analyse[0], analyse[1], self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16)), shortHelp = analyse[1], longHelp = analyse[1])
+            else :
+                for subana in analyse['content'] :
+                    tb_mat.AddLabelTool(subana[0], subana[1], self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)), shortHelp = subana[1], longHelp = subana[1])
+        tb_mat.Realize()
+
+        tb_help = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
+                         wx.TB_FLAT | wx.TB_NODIVIDER)
+        tb_help.AddLabelTool(wx.ID_ABOUT, "About", wx.ArtProvider_GetBitmap(wx.ART_INFORMATION, size=(16,16)), shortHelp=_(u"About...").decode('utf8'), longHelp=_(u"About...").decode('utf8'))
+        tb_help.AddLabelTool(wx.ID_HELP, "Help", wx.ArtProvider_GetBitmap(wx.ART_HELP, size=(16,16)), shortHelp=_(u"Online help...").decode('utf8'), longHelp=_(u"Online help...").decode('utf8'))
+        tb_help.Realize()
 #------------------------------------------------------------------------------------------------
 
         self.text_ctrl_txt = wx.TextCtrl(self, -1, "", wx.Point(0, 0), wx.Size(200, 200), wx.NO_BORDER | wx.TE_MULTILINE | wx.TE_RICH2 | wx.TE_READONLY)
 #------------------------------------------------------------------------------------------------
 
         self.text_ctrl_txt = wx.TextCtrl(self, -1, "", wx.Point(0, 0), wx.Size(200, 200), wx.NO_BORDER | wx.TE_MULTILINE | wx.TE_RICH2 | wx.TE_READONLY)
-                      
+
         #self._mgr.AddPane(self.text_ctrl_txt, wx.aui.AuiPaneInfo().
         #                  Name("Text").CenterPane())                      
         self._mgr.AddPane(self.text_ctrl_txt, aui.AuiPaneInfo().
         #self._mgr.AddPane(self.text_ctrl_txt, wx.aui.AuiPaneInfo().
         #                  Name("Text").CenterPane())                      
         self._mgr.AddPane(self.text_ctrl_txt, aui.AuiPaneInfo().
@@ -328,10 +516,10 @@ class IraFrame(wx.Frame):
         #        f.write('')
         self.history = History(os.path.join(UserConfigPath, 'history.db'))
         self.tree = LeftTree(self)
         #        f.write('')
         self.history = History(os.path.join(UserConfigPath, 'history.db'))
         self.tree = LeftTree(self)
-        self._mgr.AddPane(self.tree, aui.AuiPaneInfo().Name("lefttree").Caption(_(u"Navigator").decode('utf8')).
+        self._mgr.AddPane(self.tree, aui.AuiPaneInfo().Name("lefttree").Caption(_(u"Historic").decode('utf8')).
                           Left().MinSize(wx.Size(200,500)).Layer(1).Position(1).CloseButton(False).MaximizeButton(True).
                           MinimizeButton(True))
                           Left().MinSize(wx.Size(200,500)).Layer(1).Position(1).CloseButton(False).MaximizeButton(True).
                           MinimizeButton(True))
-        
+
         #self.nb = wx.aui.AuiNotebook(self, -1, wx.DefaultPosition, wx.DefaultSize, wx.aui.AUI_NB_DEFAULT_STYLE | wx.aui.AUI_NB_TAB_EXTERNAL_MOVE | wx.aui.AUI_NB_TAB_MOVE | wx.aui.AUI_NB_TAB_FLOAT| wx.NO_BORDER)
         self.nb = aui.AuiNotebook(self, -1, wx.DefaultPosition, wx.DefaultSize, aui.AUI_NB_DEFAULT_STYLE | aui.AUI_NB_TAB_EXTERNAL_MOVE | aui.AUI_NB_TAB_MOVE | aui.AUI_NB_TAB_FLOAT| wx.NO_BORDER)
         notebook_flags =  aui.AUI_NB_DEFAULT_STYLE | aui.AUI_NB_TAB_EXTERNAL_MOVE | aui.AUI_NB_TAB_MOVE | aui.AUI_NB_TAB_FLOAT| wx.NO_BORDER
         #self.nb = wx.aui.AuiNotebook(self, -1, wx.DefaultPosition, wx.DefaultSize, wx.aui.AUI_NB_DEFAULT_STYLE | wx.aui.AUI_NB_TAB_EXTERNAL_MOVE | wx.aui.AUI_NB_TAB_MOVE | wx.aui.AUI_NB_TAB_FLOAT| wx.NO_BORDER)
         self.nb = aui.AuiNotebook(self, -1, wx.DefaultPosition, wx.DefaultSize, aui.AUI_NB_DEFAULT_STYLE | aui.AUI_NB_TAB_EXTERNAL_MOVE | aui.AUI_NB_TAB_MOVE | aui.AUI_NB_TAB_FLOAT| wx.NO_BORDER)
         notebook_flags =  aui.AUI_NB_DEFAULT_STYLE | aui.AUI_NB_TAB_EXTERNAL_MOVE | aui.AUI_NB_TAB_MOVE | aui.AUI_NB_TAB_FLOAT| wx.NO_BORDER
@@ -345,14 +533,14 @@ class IraFrame(wx.Frame):
         #                      CenterPane())
         self._mgr.AddPane(self.nb, aui.AuiPaneInfo().
                               Name("Tab_content").
         #                      CenterPane())
         self._mgr.AddPane(self.nb, aui.AuiPaneInfo().
                               Name("Tab_content").
-                              CenterPane())        
-        
+                              CenterPane())
+
         #self._mgr.AddPane(self.Sheet, wx.aui.AuiPaneInfo().Name("Data").CenterPane())
         #self._mgr.AddPane(self.Sheet, aui.AuiPaneInfo().Name("Data").CenterPane())
         self.nb.Bind(aui.EVT_AUINOTEBOOK_PAGE_CLOSE, self.OnCloseTab)
         self.nb.Bind(aui.EVT_AUINOTEBOOK_PAGE_CHANGED, self.OnPageChanged)
         # add the toolbars to the manager
         #self._mgr.AddPane(self.Sheet, wx.aui.AuiPaneInfo().Name("Data").CenterPane())
         #self._mgr.AddPane(self.Sheet, aui.AuiPaneInfo().Name("Data").CenterPane())
         self.nb.Bind(aui.EVT_AUINOTEBOOK_PAGE_CLOSE, self.OnCloseTab)
         self.nb.Bind(aui.EVT_AUINOTEBOOK_PAGE_CHANGED, self.OnPageChanged)
         # add the toolbars to the manager
-                        
+
         #self._mgr.AddPane(tb1, wx.aui.AuiPaneInfo().
         #                  Name("tb1").Caption("Fichiers").
         #                  ToolbarPane().Top().
         #self._mgr.AddPane(tb1, wx.aui.AuiPaneInfo().
         #                  Name("tb1").Caption("Fichiers").
         #                  ToolbarPane().Top().
@@ -360,8 +548,26 @@ class IraFrame(wx.Frame):
         self._mgr.AddPane(tb1, aui.AuiPaneInfo().
                           Name("tb1").Caption("Fichiers").
                           ToolbarPane().Top().
         self._mgr.AddPane(tb1, aui.AuiPaneInfo().
                           Name("tb1").Caption("Fichiers").
                           ToolbarPane().Top().
-                          LeftDockable(True).RightDockable(False))        
-        
+                          LeftDockable(True).RightDockable(False))
+
+        self._mgr.AddPane(tb_text, aui.AuiPaneInfo().
+                          Name("tb_text").Caption("analyse_text").
+                          ToolbarPane().Top().
+                          LeftDockable(True).RightDockable(False))
+
+        self._mgr.AddPane(tb_mat, aui.AuiPaneInfo().
+                          Name("tb_mat").Caption("analyse_matrix").
+                          ToolbarPane().Top().
+                          LeftDockable(True).RightDockable(False))
+
+        self._mgr.AddPane(tb_help, aui.AuiPaneInfo().
+                          Name("tb_help").Caption("help").
+                          ToolbarPane().Top().
+                          LeftDockable(True).RightDockable(False))
+
+        self._mgr.GetPane('tb_text').Hide()
+        self._mgr.GetPane('tb_mat').Hide()
+
         self.ShowAPane("Intro_Text")
         self._mgr.GetPane("lefttree").Show()
         self._mgr.GetPane("classif_tb").Hide()
         self.ShowAPane("Intro_Text")
         self._mgr.GetPane("lefttree").Show()
         self._mgr.GetPane("classif_tb").Hide()
@@ -371,7 +577,6 @@ class IraFrame(wx.Frame):
         # Show How To Use The Closing Panes Event
 ##################################################################        
         self.Bind(wx.EVT_MENU, self.OnAcceuil, id=ID_ACCEUIL)
         # Show How To Use The Closing Panes Event
 ##################################################################        
         self.Bind(wx.EVT_MENU, self.OnAcceuil, id=ID_ACCEUIL)
-        self.Bind(wx.EVT_MENU, self.OnViewData, id=ID_VIEWDATA)
         self.Bind(wx.EVT_MENU, self.ShowTab, id=ID_RESULT)
         self.Bind(wx.EVT_MENU, self.OnOpenData, id=ID_OpenData)
         self.Bind(wx.EVT_MENU, self.OnOpenText, id=ID_OpenText)
         self.Bind(wx.EVT_MENU, self.ShowTab, id=ID_RESULT)
         self.Bind(wx.EVT_MENU, self.OnOpenData, id=ID_OpenData)
         self.Bind(wx.EVT_MENU, self.OnOpenText, id=ID_OpenText)
@@ -383,22 +588,28 @@ class IraFrame(wx.Frame):
         self.Bind(wx.EVT_MENU, self.ExtractTools, extractmod)
         self.Bind(wx.EVT_MENU, self.ExtractTools, extractthem)
         self.Bind(wx.EVT_MENU, self.OnFreq, id=ID_Freq)
         self.Bind(wx.EVT_MENU, self.ExtractTools, extractmod)
         self.Bind(wx.EVT_MENU, self.ExtractTools, extractthem)
         self.Bind(wx.EVT_MENU, self.OnFreq, id=ID_Freq)
+        self.Bind(wx.EVT_MENU, self.OnFreqMulti, id=ID_FreqMulti)
         self.Bind(wx.EVT_MENU, self.OnChi2, id=ID_Chi2)
         self.Bind(wx.EVT_MENU, self.OnChi2, id=ID_Chi2)
+        self.Bind(wx.EVT_MENU, self.OnChi2McNemar, id=ID_Chi2mc)
         self.Bind(wx.EVT_MENU, self.OnStudent, id=ID_Student)
         self.Bind(wx.EVT_MENU, self.OnCHDSIM, id=ID_CHDSIM)
         self.Bind(wx.EVT_MENU, self.OnCHDReinert, id=ID_CHDReinert)
         self.Bind(wx.EVT_MENU, self.OnAFCM, id=ID_AFCM)
         self.Bind(wx.EVT_MENU, self.OnProto, id=ID_proto)
         self.Bind(wx.EVT_MENU, self.OnStudent, id=ID_Student)
         self.Bind(wx.EVT_MENU, self.OnCHDSIM, id=ID_CHDSIM)
         self.Bind(wx.EVT_MENU, self.OnCHDReinert, id=ID_CHDReinert)
         self.Bind(wx.EVT_MENU, self.OnAFCM, id=ID_AFCM)
         self.Bind(wx.EVT_MENU, self.OnProto, id=ID_proto)
-        self.Bind(wx.EVT_MENU, self.OnRCode, id=ID_RCODE)
+        self.Bind(wx.EVT_MENU, self.OnSplitVar, id = ID_Splitfromvar)
+        #self.Bind(wx.EVT_MENU, self.OnRCode, id=ID_RCODE)
         #self.Bind(wx.EVT_MENU, self.OnSplitVar, id=ID_SPLITVAR)
         #self.Bind(wx.EVT_MENU, self.OnCheckcorpus, id = ID_CHECKCORPUS)
         self.Bind(wx.EVT_MENU, self.OnTextStat, id=ID_TEXTSTAT)
         self.Bind(wx.EVT_MENU, self.OnTextSpec, id=ID_ASLEX)
         #self.Bind(wx.EVT_MENU, self.OnSplitVar, id=ID_SPLITVAR)
         #self.Bind(wx.EVT_MENU, self.OnCheckcorpus, id = ID_CHECKCORPUS)
         self.Bind(wx.EVT_MENU, self.OnTextStat, id=ID_TEXTSTAT)
         self.Bind(wx.EVT_MENU, self.OnTextSpec, id=ID_ASLEX)
+        self.Bind(wx.EVT_MENU, self.OnTextLabbe, id=ID_labbe)
         self.Bind(wx.EVT_MENU, self.OnTextAfcm, id=ID_TEXTAFCM)
         self.Bind(wx.EVT_MENU, self.OnTextReinert, id=ID_TEXTREINERT)
         self.Bind(wx.EVT_MENU, self.OnPamSimple, id=ID_TEXTPAM)
         self.Bind(wx.EVT_MENU, self.OnSimiTxt, id=ID_SimiTxt)
         self.Bind(wx.EVT_MENU, self.OnWordCloud, id=ID_WC)
         self.Bind(wx.EVT_MENU, self.OnTextAfcm, id=ID_TEXTAFCM)
         self.Bind(wx.EVT_MENU, self.OnTextReinert, id=ID_TEXTREINERT)
         self.Bind(wx.EVT_MENU, self.OnPamSimple, id=ID_TEXTPAM)
         self.Bind(wx.EVT_MENU, self.OnSimiTxt, id=ID_SimiTxt)
         self.Bind(wx.EVT_MENU, self.OnWordCloud, id=ID_WC)
+        self.Bind(wx.EVT_MENU, self.OnSubText, id = ID_Subtxtfrommeta)
+        self.Bind(wx.EVT_MENU, self.OnSubText, id = ID_Subtxtfromthem)
         self.Bind(wx.EVT_MENU, self.OnSimiTab, id=ID_SIMI)
         self.Bind(wx.EVT_MENU, self.OnExit, id=wx.ID_EXIT)
         #self.Bind(wx.EVT_MENU, self.OnSaveTabAs, id=ID_SaveTab)
         self.Bind(wx.EVT_MENU, self.OnSimiTab, id=ID_SIMI)
         self.Bind(wx.EVT_MENU, self.OnExit, id=wx.ID_EXIT)
         #self.Bind(wx.EVT_MENU, self.OnSaveTabAs, id=ID_SaveTab)
@@ -406,6 +617,10 @@ class IraFrame(wx.Frame):
         self.Bind(wx.EVT_MENU, self.OnHelp, id=wx.ID_HELP)
         self.Bind(wx.EVT_MENU, self.OnPref, id=wx.ID_PREFERENCES)
         self.Bind(wx.EVT_MENU, self.OnImportTXM, id=ID_ImportTXM)
         self.Bind(wx.EVT_MENU, self.OnHelp, id=wx.ID_HELP)
         self.Bind(wx.EVT_MENU, self.OnPref, id=wx.ID_PREFERENCES)
         self.Bind(wx.EVT_MENU, self.OnImportTXM, id=ID_ImportTXM)
+        self.Bind(wx.EVT_MENU, self.OnImportEuropress, id=ID_ImportEuro)
+        self.Bind(wx.EVT_MENU, self.OnImportDMI, id=ID_importdmi)
+        self.Bind(wx.EVT_MENU, self.OnExportMeta, id=ID_exportmeta)
+        self.Bind(wx.EVT_MENU, self.OnMergeGraph, id = ID_merge)
         self.Bind(wx.EVT_CLOSE, self.OnClose)
 ##################################################################
         flags = self._mgr.GetAGWFlags()
         self.Bind(wx.EVT_CLOSE, self.OnClose)
 ##################################################################
         flags = self._mgr.GetAGWFlags()
@@ -444,10 +659,9 @@ class IraFrame(wx.Frame):
         self.type = ''
 
 ##############################################################@
         self.type = ''
 
 ##############################################################@
-        self.DisEnSaveTabAs(False)
-        self.ShowMenu(_("View").decode('utf8'), False)
-        self.ShowMenu(_("Matrix analysis").decode('utf8'), False)
-        self.ShowMenu(_("Text analysis").decode('utf8'), False)
+        self.ShowMenu('view', True)
+        self.ShowMenu('matrix', False)
+        self.ShowMenu('text', False)
    
         self._mgr.Update()
 
    
         self._mgr.Update()
 
@@ -489,7 +703,7 @@ class IraFrame(wx.Frame):
                 with open(ConfigPath['path'], 'w') as f :
                     self.PathPath.write(f)
         else:
                 with open(ConfigPath['path'], 'w') as f :
                     self.PathPath.write(f)
         else:
-            BestRPath = True 
+            BestRPath = True
         if BestRPath :
             self.RPath = self.PathPath.get('PATHS', 'rpath')
             if New :
         if BestRPath :
             self.RPath = self.PathPath.get('PATHS', 'rpath')
             if New :
@@ -497,60 +711,54 @@ class IraFrame(wx.Frame):
             if not RLibsAreInstalled(self) :
                 CheckRPackages(self)
         else :
             if not RLibsAreInstalled(self) :
                 CheckRPackages(self)
         else :
-            msg = u"""
-Le chemin de l'executable de R n'a pas été trouvé.
-Si R n'est pas installé, vous devez l'installer (http://www.r-project.org/).
-Si R n'est pas installé dans le répertoire par défaut
-(souvent C:\Program Files\R\R-2.x.x\R.exe sous windows ou /usr/bin/R sous linux ou Mac Os X)
-vous devez signaler le chemin de l'éxecutable de R dans les préférences.""" 
-            dlg = wx.MessageDialog(self, msg, u"Problème de configuration", wx.OK | wx.NO_DEFAULT | wx.ICON_WARNING)
+            msg = '\n'.join([_(u"Can't find R executable").decode('utf8'), _(u"If R is not installed, get it from http://www.r-project.org.").decode('utf8'),
+                             _(u"If R is installed, report its path in Preferences.").decode('utf8'),
+                             _(u"IRaMuTeQ does not work without R.").decode('utf8')])
+            dlg = wx.MessageDialog(self, msg, _(u"Problem").decode('utf8'), wx.OK | wx.ICON_WARNING)
             dlg.CenterOnParent()
             if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
                 pass
             dlg.Destroy()
 
             dlg.CenterOnParent()
             if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
                 pass
             dlg.Destroy()
 
-
     def setlangue(self) :
     def setlangue(self) :
+        self.pref.read(self.ConfigPath['preferences'])
         try :
         try :
-            self.pref.read(self.ConfigPath['preferences'])
             guilangue = self.pref.get('iramuteq', 'guilanguage')
             guilangue = self.pref.get('iramuteq', 'guilanguage')
-            if guilangue == 'french' :
-                self.presLan_fr.install()
-            elif guilangue == 'portuguese' :
-                self.presLan_pt.install()
-            else :
-                self.presLan_en.install()
-            mylocale = wx.Locale(langues[guilangue])
-            mylocale.AddCatalogLookupPathPrefix(os.path.join(AppliPath,'locale'))
-            mylocale.AddCatalog('iramuteq')
         except :
         except :
-            self.presLan_fr.install()
-            mylocale = wx.Locale(langues['french'])
-            mylocale.AddCatalogLookupPathPrefix(os.path.join(AppliPath,'locale'))
-            mylocale.AddCatalog('iramuteq')
-
+            guilangue = DefaultConf.get('iramuteq', 'guilanguage')
+        self.preslangue.get(guilangue, 'english').install()
 
     def OnVerif(self, evt) :
         pack = CheckRPackages(self)
         if pack :
 
     def OnVerif(self, evt) :
         pack = CheckRPackages(self)
         if pack :
-            dlg = wx.MessageDialog(self, u"Installation OK", u"Installation", wx.OK | wx.ICON_INFORMATION)
+            dlg = wx.MessageDialog(self, _(u"Installation OK").decode('utf8'), _(u"Installation").decode('utf8'), wx.OK | wx.ICON_INFORMATION | wx.STAY_ON_TOP)
             dlg.CenterOnParent()
             if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
                 evt.Veto()
 
             dlg.CenterOnParent()
             if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
                 evt.Veto()
 
-    def DisEnSaveTabAs(self, DISEN):
-    #Disable SaveTabAs
-        file_menu = self.mb.GetMenu(0)
-        items = file_menu.GetMenuItems()
-        for item in items :
-            if item.GetId() == ID_SaveTab :
-                item.Enable(DISEN)
-    
     def ShowMenu(self, menu, Show=True):
     def ShowMenu(self, menu, Show=True):
-        menu_pos = self.mb.FindMenu(menu)
-        self.mb.EnableTop(menu_pos, Show)
-        self.mb.UpdateMenus()
+        if menu == 'text' :
+            menu_pos = 4
+            if Show :
+                self._mgr.GetPane('tb_text').Show()
+            else :
+                self._mgr.GetPane('tb_text').Hide()
+        elif menu == 'matrix' :
+            menu_pos = 3
+            if Show :
+                self._mgr.GetPane('tb_mat').Show()
+            else :
+                self._mgr.GetPane('tb_mat').Hide()
+        elif menu == 'view' :
+            menu_pos = 2
+        else :
+            menu_pos = None
 
 
+        #menu_pos = self.mb.FindMenu(menu)
+        if not menu_pos is None :
+            self.mb.EnableTop(menu_pos, Show)
+            self.mb.UpdateMenus()
+        self._mgr.Update()
 
 #--------------------------------------------------------------------
     def OnClose(self, event):
 
 #--------------------------------------------------------------------
     def OnClose(self, event):
@@ -568,15 +776,23 @@ vous devez signaler le chemin de l'éxecutable de R dans les préférences."""
             self.tableau = Tableau(self,os.path.abspath(self.input_path[0]))
             val = get_table_param(self, self.input_path[0])
             if val == wx.ID_OK :
             self.tableau = Tableau(self,os.path.abspath(self.input_path[0]))
             val = get_table_param(self, self.input_path[0])
             if val == wx.ID_OK :
-                self.tableau.make_content()
-                OpenAnalyse(self, self.tableau.parametres)
-                self.tree.OnItemAppend(self.tableau.parametres)
+                busy = wx.BusyInfo(_("Please wait...").decode('utf8'), self)
+                wx.SafeYield()
+                try :
+                    self.tableau.make_content()
+                    OpenAnalyse(self, self.tableau.parametres)
+                    self.tree.OnItemAppend(self.tableau.parametres)
+                    del busy
+                except :
+                    del busy
+                    BugReport(self)
                 #self.tableau.show_tab()
 
     def OnOpenAnalyse(self, event):
         self.AnalysePath = OnOpen(self, "Analyse")
                 #self.tableau.show_tab()
 
     def OnOpenAnalyse(self, event):
         self.AnalysePath = OnOpen(self, "Analyse")
-        OpenAnalyse(self, self.AnalysePath[1][0], True)
-        self.ShowMenu(_("View"))
+        if self.AnalysePath :
+            OpenAnalyse(self, self.AnalysePath[1][0], True)
+            self.ShowMenu('view')
 
     def OnOpenText(self, event):
         inputname, self.input_path = OnOpen(self, "Texte")
 
     def OnOpenText(self, event):
         inputname, self.input_path = OnOpen(self, "Texte")
@@ -584,47 +800,25 @@ vous devez signaler le chemin de l'éxecutable de R dans les préférences."""
         if inputname:
             self.OpenText()
    
         if inputname:
             self.OpenText()
    
-    def OnViewData(self, event):
-        print self.type
-        print self.DataTxt
-        if self.type == "Data":
-            if not self.DataPop :
-                self.Sheet.Populate(self.content)
-                self.DataPop = True
-                self.DataTxt = False
-            self.ShowAPane(u"Data")
-        elif self.type == "Texte" or self.type == 'Analyse' :
-            if not self.DataTxt :
-                self.text_ctrl_txt.Clear()
-                self.text_ctrl_txt.write(self.content)
-                self.text_ctrl_txt.ShowPosition(0)
-                self.DataTxt = True
-                self.DataPop = False
-            self.ShowAPane(u"Text")
-        self._mgr.Update()
-    
-    def OnSubText(self, corpus, parametres = None):
+    def OnSubText(self, evt, corpus = None, parametres = None):
         if corpus is None :
             corpus = self.tree.getcorpus()
         if corpus is None :
             corpus = self.tree.getcorpus()
+        if evt.GetId() == ID_Subtxtfrommeta :
+            parametres = {'frommeta' : True}
+        elif evt.GetId() == ID_Subtxtfromthem :
+            parametres = {'fromtheme' : True}
         builder = SubBuilder(self, corpus, parametres)
         if builder.res == wx.ID_OK :
             busy = wx.BusyInfo(_("Please wait...").decode('utf8'), self)
             wx.SafeYield()
             corpus = builder.doanalyse()
             self.history.add(corpus.parametres)
         builder = SubBuilder(self, corpus, parametres)
         if builder.res == wx.ID_OK :
             busy = wx.BusyInfo(_("Please wait...").decode('utf8'), self)
             wx.SafeYield()
             corpus = builder.doanalyse()
             self.history.add(corpus.parametres)
-            self.tree.OnItemAppend(corpus.parametres)
             OpenAnalyse(self, corpus.parametres)
             OpenAnalyse(self, corpus.parametres)
+            self.tree.OnItemAppend(corpus.parametres)
             del busy
             
     def OpenText(self):
             del busy
             
     def OpenText(self):
-        dlg = wx.ProgressDialog("Ouverture...",
-                                   "Veuillez patienter...",
-                                   maximum=2,
-                                   parent=self,
-                                   style=wx.PD_APP_MODAL | wx.PD_AUTO_HIDE | wx.PD_ELAPSED_TIME | wx.PD_CAN_ABORT
-                                   )
-        
-        builder =  Builder(self, dlg)
+        builder =  Builder(self, 5)
         if builder.res == wx.ID_OK :
             try :
                 corpus = builder.doanalyse()
         if builder.res == wx.ID_OK :
             try :
                 corpus = builder.doanalyse()
@@ -632,20 +826,20 @@ vous devez signaler le chemin de l'éxecutable de R dans les préférences."""
                 self.tree.OnItemAppend(corpus.parametres)
                 OpenAnalyse(self, corpus.parametres)
             except :
                 self.tree.OnItemAppend(corpus.parametres)
                 OpenAnalyse(self, corpus.parametres)
             except :
+                builder.dlg.Destroy()
                 BugReport(self)
             else :
                 count = 1
                 BugReport(self)
             else :
                 count = 1
-                keepGoing = dlg.Update(count, u"Lecture du fichier")
-                self.ShowMenu(_(u"View").decode('utf8'))
-                self.ShowMenu(_(u"Text analysis").decode('utf8'))
-                self.ShowMenu(_(u"Matrix analysis").decode('utf8'), False)
+                keepGoing = builder.dlg.Update(count, u"Lecture du fichier")
+                self.ShowMenu('view')
+                self.ShowMenu('text')
+                self.ShowMenu('matrix', False)
                 self.type = "Texte"
                 self.DataTxt = False
                 self.Text = ''
                 count += 1
                 self.type = "Texte"
                 self.DataTxt = False
                 self.Text = ''
                 count += 1
-                keepGoing = dlg.Update(count, u"Chargement du dictionnaire")
-                dlg.Destroy()
-        #self.OnViewData(wx.EVT_BUTTON)
+                keepGoing = builder.dlg.Update(count, u"Chargement du dictionnaire")
+                builder.dlg.Destroy()
         
     def OnExit(self, event):
         self.Close()
         
     def OnExit(self, event):
         self.Close()
@@ -655,6 +849,7 @@ vous devez signaler le chemin de l'éxecutable de R dans les préférences."""
         info.Name = ConfigGlob.get('DEFAULT', 'name')
         info.Version = ConfigGlob.get('DEFAULT', 'version')
         info.Copyright = ConfigGlob.get('DEFAULT', 'copyright')
         info.Name = ConfigGlob.get('DEFAULT', 'name')
         info.Version = ConfigGlob.get('DEFAULT', 'version')
         info.Copyright = ConfigGlob.get('DEFAULT', 'copyright')
+        info.Translators = ConfigGlob.get('DEFAULT', 'translators').decode('utf8').split(';')
         info.Description = u"""
 Interface de R pour les Analyses Multidimensionnelles 
 de Textes et de Questionnaires
         info.Description = u"""
 Interface de R pour les Analyses Multidimensionnelles 
 de Textes et de Questionnaires
@@ -699,11 +894,11 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
             if 'parametres' in dir(npage) :
                 self.tree.GiveFocus(uuid=npage.parametres['uuid'])
                 if npage.parametres.get('matrix', False) :
             if 'parametres' in dir(npage) :
                 self.tree.GiveFocus(uuid=npage.parametres['uuid'])
                 if npage.parametres.get('matrix', False) :
-                    self.ShowMenu(_(u"Text analysis").decode('utf8'), False)
-                    self.ShowMenu(_(u"Matrix analysis").decode('utf8'), True)
+                    self.ShowMenu('text', False)
+                    self.ShowMenu('matrix', True)
                 elif npage.parametres.get('corpus', False) :
                 elif npage.parametres.get('corpus', False) :
-                    self.ShowMenu(_(u"Text analysis").decode('utf8'))
-                    self.ShowMenu(_(u"Matrix analysis").decode('utf8'), False)
+                    self.ShowMenu('text')
+                    self.ShowMenu('matrix', False)
 
     def OnCloseTab(self, evt):
         #log.info('Closing tab %s' % str(evt.GetEventObject()))
 
     def OnCloseTab(self, evt):
         #log.info('Closing tab %s' % str(evt.GetEventObject()))
@@ -717,40 +912,12 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
             self.history.rmtab(page.parametres)
             self.tree.CloseItem(uuid = page.parametres['uuid'])
         TabTitle = self.nb.GetPageText(self.nb.GetSelection())
             self.history.rmtab(page.parametres)
             self.tree.CloseItem(uuid = page.parametres['uuid'])
         TabTitle = self.nb.GetPageText(self.nb.GetSelection())
-#         if self.DictTab != {} :
-#             if TabTitle in self.DictTab :
-#                 ListFile=self.DictTab[TabTitle]
-#                 if False in ListFile:
-#                     msg = u"""
-# Certains résultats ne sont pas enregistrer.
-# Voulez-vous fermer quand même ?"""
-#                     dlg = wx.MessageDialog(self, msg, "Sauvegarde",wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
-# 
-#                     dlg.CenterOnParent()
-#                     if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
-#                         remove = False
-#                         evt.Veto()
-#                         dlg.Destroy()
-#                     else :
-#                         for f in ListFile[1:] :
-#                             print 'remove', f
-#                             os.remove(f)
-#                             remove = True
-#                         dlg.Destroy()
-#                 elif True in ListFile :
-#                     remove = True
-#                 if remove:
-#                     del self.DictTab[TabTitle]
-#             else : 
-#                 self.LastTabClose()
-#        else :
-#            remove = True
+
         if self.nb.GetPageCount() == 1 and not notebook :
             self.LastTabClose()
     
     def LastTabClose(self) :
         if self.nb.GetPageCount() == 1 :
         if self.nb.GetPageCount() == 1 and not notebook :
             self.LastTabClose()
     
     def LastTabClose(self) :
         if self.nb.GetPageCount() == 1 :
-            #self.DisEnSaveTabAs(False)
             if self.DataTxt :
                 self.ShowAPane("Text")
             elif self.DataPop :
             if self.DataTxt :
                 self.ShowAPane("Text")
             elif self.DataPop :
@@ -758,64 +925,30 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
             else :
                 self.ShowAPane("Intro_Text")
 
             else :
                 self.ShowAPane("Intro_Text")
 
-#     def OnSaveTabAs(self, event):
-#         SelectTab = self.nb.GetSelection()
-#         TabTitle = self.nb.GetPageText(SelectTab)
-#         FileToSave = self.DictTab[TabTitle]
-#         NewListFile = []
-#         dlg = wx.FileDialog(
-#             self, message="Enregistrer sous...", defaultDir=os.getcwd(),
-#             defaultFile="resultat.html", wildcard="Tous les fichiers|*", style=wx.SAVE | wx.OVERWRITE_PROMPT
-#             )
-#         dlg.SetFilterIndex(2)
-#         dlg.CenterOnParent()
-#         
-#         if dlg.ShowModal() == wx.ID_OK:
-#             Path = dlg.GetPath()
-#             Dirname = os.path.dirname(Path)
-#             Filename = dlg.GetFilename()
-#         else :
-#             Path = False
-#         dlg.Destroy()
-#         if Path:
-#             shutil.copyfile(FileToSave[-1], Path)
-#             os.remove(FileToSave[len(FileToSave) - 1])
-#             NewListFile.append(True)
-#             NewListFile.append(Path)
-#             for f in FileToSave[1:-1] :
-#                 Fileout = os.path.join(Dirname, os.path.basename(f))
-#                 shutil.copyfile(f, Fileout)
-#                 NewListFile.append(Fileout)
-#                 os.remove(f)
-#             TabText = Filename
-#             self.DictTab[TabText] = NewListFile
-#             del self.DictTab[TabTitle]
-#             self.nb.SetPageText(SelectTab, TabText)
-
     def GetStartPosition(self):
 
         self.x = self.x + 20
         x = self.x
         pt = self.ClientToScreen(wx.Point(0, 0))
     def GetStartPosition(self):
 
         self.x = self.x + 20
         x = self.x
         pt = self.ClientToScreen(wx.Point(0, 0))
-        
+
         return wx.Point(pt.x + x, pt.y + x)
         return wx.Point(pt.x + x, pt.y + x)
-    
+
     def ShowAPane(self, panel):
         for pane in self._mgr.GetAllPanes() :
     def ShowAPane(self, panel):
         for pane in self._mgr.GetAllPanes() :
-            if not pane.IsToolbar() and pane.name != 'lefttree': 
+            if not pane.IsToolbar() and pane.name != 'lefttree':
                 pane.Hide()
         self._mgr.GetPane(panel).Show()
         self._mgr.Update()
                 pane.Hide()
         self._mgr.GetPane(panel).Show()
         self._mgr.Update()
-        
+
     def OnAcceuil(self, event):
         self.ShowAPane(u"Intro_Text")
         event.Skip()
     def OnAcceuil(self, event):
         self.ShowAPane(u"Intro_Text")
         event.Skip()
-    
+
     def CreateHTMLCtrl(self):
         ctrl = wx.html.HtmlWindow(self, -1, wx.DefaultPosition, wx.Size(400, 300))
         if "gtk2" in wx.PlatformInfo:
             ctrl.SetStandardFonts()
     def CreateHTMLCtrl(self):
         ctrl = wx.html.HtmlWindow(self, -1, wx.DefaultPosition, wx.Size(400, 300))
         if "gtk2" in wx.PlatformInfo:
             ctrl.SetStandardFonts()
-        ctrl.SetPage(u"text")        
+        ctrl.SetPage(u"text")
         return ctrl
 
     def ShowTab(self, evt):
         return ctrl
 
     def ShowTab(self, evt):
@@ -824,31 +957,43 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
 ################################################################
 #debut des analyses
 ################################################################
 ################################################################
 #debut des analyses
 ################################################################
-    def analyse_matrix(self, analyse, analyse_type = '', matrix = None, dlgnb = 1):
+    def analyse_matrix(self, analyse, analyse_type = '', matrix = None, parametres = None, dlgnb = 1):
         if matrix is None :
             matrix = self.tree.getmatrix()
         if matrix is None :
             matrix = self.tree.getmatrix()
+        if parametres is not None :
+            parametres['type'] = analyse_type
+        else :
+            parametres = {'type' : analyse_type}
         try :
         try :
-            analyse(self, matrix, parametres = {'type' : analyse_type}, dlg = dlgnb)
+        #print 'plus de bug@@@@@@@@@@@@@@@@@@@@@@'
+            analyse(self, matrix, parametres = parametres, dlg = dlgnb)
         except:
         except:
-            BugReport(self)           
+            BugReport(self)
 
     def OnFreq(self, event, matrix = None):
         self.analyse_matrix(Frequences, analyse_type = 'freq', matrix = matrix, dlgnb = 3)
 
 
     def OnFreq(self, event, matrix = None):
         self.analyse_matrix(Frequences, analyse_type = 'freq', matrix = matrix, dlgnb = 3)
 
+    def OnFreqMulti(self, event, matrix = None):
+        self.analyse_matrix(FreqMultiple, analyse_type = 'freqmulti', matrix = matrix, dlgnb = 3)
+
     def OnChi2(self, event, matrix = None):
     def OnChi2(self, event, matrix = None):
-        self.analyse_matrix(ChiSquare, matrix = matrix, analyse_type = 'chi2', dlgnb = 3) 
+        self.analyse_matrix(ChiSquare, matrix = matrix, analyse_type = 'chi2', dlgnb = 3)
+
+    def OnChi2McNemar(self, event, matrix = None):
+        self.analyse_matrix(McNemar, matrix = matrix, analyse_type = 'chi2mcnemar', dlgnb = 3)
 
     def OnSimiTab(self, event, matrix = None):
         self.analyse_matrix(DoSimi, matrix = matrix, analyse_type = 'simimatrix', dlgnb = 5)
 
     def OnCHDReinert(self, event, matrix = None):
 
     def OnSimiTab(self, event, matrix = None):
         self.analyse_matrix(DoSimi, matrix = matrix, analyse_type = 'simimatrix', dlgnb = 5)
 
     def OnCHDReinert(self, event, matrix = None):
-        if matrix is None :
-            matrix = self.tree.getmatrix()
-        AnalyseQuest(self, matrix, parametres = {'type' : 'reinertmatrix'}, dlg = progressbar(self, 3))
-            
+        #if matrix is None :
+        #    matrix = self.tree.getmatrix()
+        #AnalyseQuest(self, matrix, parametres = {'type' : 'reinertmatrix'}, dlg = 3)
+        self.analyse_matrix(AnalyseQuest, matrix = matrix, analyse_type = 'reinertmatrix', dlgnb = 5)
+
     def OnStudent(self, event):
         try:
     def OnStudent(self, event):
         try:
-            MakeStudent(self) 
+            MakeStudent(self)
         except:
             BugReport(self)
 
         except:
             BugReport(self)
 
@@ -866,7 +1011,7 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
                 PlaySound(self)
         except:
             BugReport(self)
                 PlaySound(self)
         except:
             BugReport(self)
+
 #     def OnCHDReinert(self, event):
 #         try:
 #          #   print('PLUS DE BUG SUR ALCESTE QUESTIONNAIRE')
 #     def OnCHDReinert(self, event):
 #         try:
 #          #   print('PLUS DE BUG SUR ALCESTE QUESTIONNAIRE')
@@ -875,33 +1020,38 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
 #                 PlaySound(self)
 #         except:
 #             BugReport(self)
 #                 PlaySound(self)
 #         except:
 #             BugReport(self)
-    
+    def OnMergeGraph(self, evt):
+        #FIXME
+        AnalyseMerge(self, {'type': 'merge', 'fileout' : '/tmp/test.txt'}, dlg = 5)
+
     def OnProto(self, evt, matrix = None) :
         self.analyse_matrix(Prototypical, matrix = matrix, analyse_type = 'proto', dlgnb = 3) 
         #Prototypical(self, {'type' : 'proto'})
     def OnProto(self, evt, matrix = None) :
         self.analyse_matrix(Prototypical, matrix = matrix, analyse_type = 'proto', dlgnb = 3) 
         #Prototypical(self, {'type' : 'proto'})
-    
+
     def OnSplitVar(self, evt, matrix = None):
     def OnSplitVar(self, evt, matrix = None):
-        self.analyse_matrix(SplitMatrixFromVar, matrix = matrix, analyse_type = 'splitvar', dlgnb = 3)
-        matrix = self.tree.getmatrix()
-        
+        if matrix is None :
+            matrix = self.tree.getmatrix()
+        self.analyse_matrix(SplitMatrixFromVar, matrix = matrix, analyse_type = 'splitvar', parametres = {'pathout': matrix.pathout.dirout}, dlgnb = 3)
+        #matrix = self.tree.getmatrix()
+
 
     def OnSimiTxt(self, evt, corpus = None) :
         #    print 'PLUS DE BUG SUR SIMITXT'
         try :
             #self.Text = SimiTxt(self)
             if corpus is None :
 
     def OnSimiTxt(self, evt, corpus = None) :
         #    print 'PLUS DE BUG SUR SIMITXT'
         try :
             #self.Text = SimiTxt(self)
             if corpus is None :
-                corpus = self.tree.getcorpus()            
+                corpus = self.tree.getcorpus()
             self.Text = SimiTxt(self, corpus, parametres = {'type': 'simitxt'}, dlg = 3)
             if self.Text.val == wx.ID_OK :
                 PlaySound(self)
         except :
             BugReport(self)
             self.Text = SimiTxt(self, corpus, parametres = {'type': 'simitxt'}, dlg = 3)
             if self.Text.val == wx.ID_OK :
                 PlaySound(self)
         except :
             BugReport(self)
-    
+
     def OnWordCloud(self, evt, corpus = None) :
         #    print 'PLUS DE BUG SUR WORDCLOUD'
         try :
             if corpus is None :
     def OnWordCloud(self, evt, corpus = None) :
         #    print 'PLUS DE BUG SUR WORDCLOUD'
         try :
             if corpus is None :
-                corpus = self.tree.getcorpus()            
+                corpus = self.tree.getcorpus()
             self.Text = WordCloud(self, corpus, parametres = {'type' : 'wordcloud'}, dlg = 3)
             if self.Text.val == wx.ID_OK :
                 PlaySound(self)
             self.Text = WordCloud(self, corpus, parametres = {'type' : 'wordcloud'}, dlg = 3)
             if self.Text.val == wx.ID_OK :
                 PlaySound(self)
@@ -923,13 +1073,13 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
             if corpus is None :
                 corpus = self.tree.getcorpus()
             self.Text = Stat(self, corpus, parametres = {'type': 'stat'}, dlg = 7)
             if corpus is None :
                 corpus = self.tree.getcorpus()
             self.Text = Stat(self, corpus, parametres = {'type': 'stat'}, dlg = 7)
-            
+
             if self.Text.val == wx.ID_OK :
                 PlaySound(self)
         except:
             BugReport(self)
             if self.Text.val == wx.ID_OK :
                 PlaySound(self)
         except:
             BugReport(self)
-        
-    def OnTextSpec(self, event, corpus = None):  
+
+    def OnTextSpec(self, event, corpus = None):
         try:
             #self.Text = AsLexico(self)
             #print('ATTENTION : PLUS DE BUG SUR LEXICO')
         try:
             #self.Text = AsLexico(self)
             #print('ATTENTION : PLUS DE BUG SUR LEXICO')
@@ -940,7 +1090,18 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
                 PlaySound(self)
         except:
             BugReport(self)
                 PlaySound(self)
         except:
             BugReport(self)
-    
+
+    def OnTextLabbe(self, event, corpus = None):
+        try:
+            if corpus is None :
+                corpus = self.tree.getcorpus()
+            self.Text = DistLabbe(self, corpus, parametres = {'type' : 'labbe'}, dlg = 3)
+            if self.Text.val == wx.ID_OK :
+                PlaySound(self)
+        except:
+            BugReport(self)
+
+
     def OnTextAfcm(self, event):
         try:
             AfcUci(self)
     def OnTextAfcm(self, event):
         try:
             AfcUci(self)
@@ -972,6 +1133,23 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
         except :
             BugReport(self)
 
         except :
             BugReport(self)
 
+    def OnImportEuropress(self, evt) :
+        try :
+            ImportFactiva(self, 'euro')
+        except :
+            BugReport(self)
+
+    def OnImportDMI(self, evt):
+        ImportDMI(self, {})
+
+    def OnExportMeta(self, evt, corpus = None):
+        if corpus is None :
+            corpus = self.tree.getcorpus()
+        try :
+            ExportMetaTable(self, corpus)
+        except :
+            BugReport(self)
+
     def ExtractTools(self, evt) :
         ID = evt.GetId()
         if ID == self.ID_splitvar :
     def ExtractTools(self, evt) :
         ID = evt.GetId()
         if ID == self.ID_splitvar :
@@ -986,7 +1164,7 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
             #print('ATTENTION : PLUS DE BUG SUR ALCESTE')
             #RunAnalyse(self, corpus, Alceste, OptAlceste)
             if corpus is None :
             #print('ATTENTION : PLUS DE BUG SUR ALCESTE')
             #RunAnalyse(self, corpus, Alceste, OptAlceste)
             if corpus is None :
-                corpus = self.tree.getcorpus()            
+                corpus = self.tree.getcorpus()
             self.Text = Reinert(self, corpus, parametres = {'type': 'alceste'}, dlg = 6)
             if self.Text.val == wx.ID_OK:
                 PlaySound(self)
             self.Text = Reinert(self, corpus, parametres = {'type': 'alceste'}, dlg = 6)
             if self.Text.val == wx.ID_OK:
                 PlaySound(self)
@@ -1003,8 +1181,8 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
         except:
             BugReport(self)
 
         except:
             BugReport(self)
 
-    def SimiCluster(self, parametres = {}, fromprof = False, pathout = '', listactives = [], actives = [], tableau = None) :
-        DoSimi(self, param = parametres, fromprof =  fromprof, listactives = listactives, actives = actives, tableau = tableau)
+    def SimiCluster(self, parametres = {}, fromprof = False, tableau = None) :
+        self.analyse_matrix(DoSimi, parametres = parametres, analyse_type = 'simiclustermatrix', matrix = tableau, dlgnb = 5)
     
 #    def OnSimi(self,evt):
 #        try :
     
 #    def OnSimi(self,evt):
 #        try :
@@ -1025,6 +1203,7 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
         dlg = PrefDialog(self)
         dlg.CenterOnParent()
         self.val = dlg.ShowModal()
         dlg = PrefDialog(self)
         dlg.CenterOnParent()
         self.val = dlg.ShowModal()
+        dlg.Destroy()
 
     def Upgrade(self) :
         if self.check_update:
 
     def Upgrade(self) :
         if self.check_update:
@@ -1047,7 +1226,7 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
             else:
                 truepath = False
         else:
             else:
                 truepath = False
         else:
-            pass
+            return
         if truepath :
             if os.path.splitext(self.filename)[1] in ['.csv', '.xls', '.ods']:
                 self.tableau = Tableau(self, self.filename)
         if truepath :
             if os.path.splitext(self.filename)[1] in ['.csv', '.xls', '.ods']:
                 self.tableau = Tableau(self, self.filename)
@@ -1067,40 +1246,54 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
                 #self.Text = OpenAnalyse(self, self.filename)
                 OpenAnalyse(self, self.filename)
         if not truepath:
                 #self.Text = OpenAnalyse(self, self.filename)
                 OpenAnalyse(self, self.filename)
         if not truepath:
-            print 'ce fichier n\'existe pas'
+            print 'This file does not exist'
             
         
 
 class IntroPanel(wx.Panel):
     def __init__(self, parent):
         wx.Panel.__init__(self, parent)
             
         
 
 class IntroPanel(wx.Panel):
     def __init__(self, parent):
         wx.Panel.__init__(self, parent)
-        col = randint(0, 255)
-        col1 = randint(0,255)
-        col2 = randint(0,255)
-        col = 57
+        #col = randint(0, 255)
+        #col1 = randint(0,255)
+        #col2 = randint(0,255)
+        #col = 57
+        col = 161
+        col1 = 198
+        col2 = 224
         bckgrdcolor = wx.Colour(col, col1, col2)
         self.SetBackgroundColour(bckgrdcolor)
         txtcolour = wx.Colour(250, 250, 250)
         linkcolor = wx.Colour(255, 0, 0)
         sizer1 = wx.BoxSizer(wx.VERTICAL)
         sizer2 = wx.BoxSizer(wx.VERTICAL)
         bckgrdcolor = wx.Colour(col, col1, col2)
         self.SetBackgroundColour(bckgrdcolor)
         txtcolour = wx.Colour(250, 250, 250)
         linkcolor = wx.Colour(255, 0, 0)
         sizer1 = wx.BoxSizer(wx.VERTICAL)
         sizer2 = wx.BoxSizer(wx.VERTICAL)
-        sizer3 = wx.BoxSizer(wx.HORIZONTAL)
-        sizer4 = wx.BoxSizer(wx.VERTICAL)
-        sizer5 = wx.BoxSizer(wx.HORIZONTAL)
+        sizer4 = wx.BoxSizer(wx.HORIZONTAL)
         grid_sizer_1 = wx.FlexGridSizer(1, 4, 0, 0)
         grid_sizer_3 = wx.FlexGridSizer(1, 4, 0, 0)
         grid_sizer_1 = wx.FlexGridSizer(1, 4, 0, 0)
         grid_sizer_3 = wx.FlexGridSizer(1, 4, 0, 0)
-        grid_sizer_2 = wx.FlexGridSizer(1, 3, 0, 0)
+        grid_sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
+        
+        iralink = hl.HyperLinkCtrl(self, wx.ID_ANY, u"http://www.iramuteq.org", URL="http://www.iramuteq.org")
+        iralink.SetColours(linkcolor, linkcolor, "RED")
+        iralink.SetBackgroundColour(bckgrdcolor)
+        iralink.EnableRollover(True)
+        iralink.SetUnderlines(False, False, True)
+        iralink.SetBold(True)
+        iralink.UpdateLink()
+        
         PanelPres = wx.Panel(self)
         PanelPres = wx.Panel(self)
+        bckgrdcolor = wx.Colour(randint(0, 255), randint(0, 255), randint(0, 255))
         PanelPres.SetBackgroundColour(bckgrdcolor)
         PanelPres.SetBackgroundColour(bckgrdcolor)
+        
         label_1 = wx.StaticText(self, -1, u"IRaMuTeQ", size=(-1, -1))
         label_1.SetFont(wx.Font(46, wx.TELETYPE, wx.NORMAL, wx.BOLD, 0, "Purisa"))
         label_1.SetForegroundColour(wx.RED)
         label_1 = wx.StaticText(self, -1, u"IRaMuTeQ", size=(-1, -1))
         label_1.SetFont(wx.Font(46, wx.TELETYPE, wx.NORMAL, wx.BOLD, 0, "Purisa"))
         label_1.SetForegroundColour(wx.RED)
+        
+        iraicone = wx.Image(os.path.join(ImagePath,'iraicone100x100.png'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
+        but_ira = wx.StaticBitmap(self, -1, bitmap = iraicone)
+
+        
         label2 = wx.StaticText(PanelPres, -1 , u'\nVersion ' + ConfigGlob.get('DEFAULT', 'version') + '\n')
         label2.SetForegroundColour(txtcolour)
         label2.SetBackgroundColour(bckgrdcolor)
         label2 = wx.StaticText(PanelPres, -1 , u'\nVersion ' + ConfigGlob.get('DEFAULT', 'version') + '\n')
         label2.SetForegroundColour(txtcolour)
         label2.SetBackgroundColour(bckgrdcolor)
-        #label3 = wx.StaticText(PanelPres, -1 , u'Equipe ')
-        #label3.SetForegroundColour(txtcolour)
-        #label3.SetBackgroundColour(bckgrdcolor)
         self.hyper2 = hl.HyperLinkCtrl(PanelPres, wx.ID_ANY, u"REPERE", URL="http://repere.no-ip.org/")
         self.hyper2.SetColours(linkcolor, linkcolor, "RED")
         self.hyper2.SetBackgroundColour(bckgrdcolor)
         self.hyper2 = hl.HyperLinkCtrl(PanelPres, wx.ID_ANY, u"REPERE", URL="http://repere.no-ip.org/")
         self.hyper2.SetColours(linkcolor, linkcolor, "RED")
         self.hyper2.SetBackgroundColour(bckgrdcolor)
@@ -1108,9 +1301,11 @@ class IntroPanel(wx.Panel):
         self.hyper2.SetUnderlines(False, False, True)
         self.hyper2.SetBold(True)
         self.hyper2.UpdateLink()
         self.hyper2.SetUnderlines(False, False, True)
         self.hyper2.SetBold(True)
         self.hyper2.UpdateLink()
+        
         label_lerass = wx.StaticText(PanelPres, -1, u'Laboratoire ')
         label_lerass.SetForegroundColour(txtcolour)
         label_lerass.SetBackgroundColour(bckgrdcolor)
         label_lerass = wx.StaticText(PanelPres, -1, u'Laboratoire ')
         label_lerass.SetForegroundColour(txtcolour)
         label_lerass.SetBackgroundColour(bckgrdcolor)
+        
         self.hyper_lerass = hl.HyperLinkCtrl(PanelPres, -1, u'LERASS', URL="http://www.lerass.com")
         self.hyper_lerass.SetColours(linkcolor, linkcolor, "RED")
         self.hyper_lerass.SetBackgroundColour(bckgrdcolor)
         self.hyper_lerass = hl.HyperLinkCtrl(PanelPres, -1, u'LERASS', URL="http://www.lerass.com")
         self.hyper_lerass.SetColours(linkcolor, linkcolor, "RED")
         self.hyper_lerass.SetBackgroundColour(bckgrdcolor)
@@ -1118,14 +1313,18 @@ class IntroPanel(wx.Panel):
         self.hyper_lerass.SetUnderlines(False, False, True)
         self.hyper_lerass.SetBold(True)
         self.hyper_lerass.UpdateLink()
         self.hyper_lerass.SetUnderlines(False, False, True)
         self.hyper_lerass.SetBold(True)
         self.hyper_lerass.UpdateLink()
+        
         blank = wx.StaticText(PanelPres, -1, u'\n')
         blank1 = wx.StaticText(PanelPres, -1, u'\n')
         blank = wx.StaticText(PanelPres, -1, u'\n')
         blank1 = wx.StaticText(PanelPres, -1, u'\n')
+        
         labellicence = wx.StaticText(PanelPres, -1, _(u"License GNU GPL").decode('utf8'))
         labellicence.SetForegroundColour(txtcolour)
         labellicence.SetBackgroundColour(bckgrdcolor)
         labellicence = wx.StaticText(PanelPres, -1, _(u"License GNU GPL").decode('utf8'))
         labellicence.SetForegroundColour(txtcolour)
         labellicence.SetBackgroundColour(bckgrdcolor)
+        
         labelcopy = wx.StaticText(PanelPres, -1, ConfigGlob.get('DEFAULT', 'copyright'))
         labelcopy.SetForegroundColour(txtcolour)
         labelcopy.SetBackgroundColour(bckgrdcolor)
         labelcopy = wx.StaticText(PanelPres, -1, ConfigGlob.get('DEFAULT', 'copyright'))
         labelcopy.SetForegroundColour(txtcolour)
         labelcopy.SetBackgroundColour(bckgrdcolor)
+        
         python_img = wx.Image(os.path.join(ImagePath,'python-logo.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
         r_img = wx.Image(os.path.join(ImagePath,'Rlogo.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
         lexique_img = wx.Image(os.path.join(ImagePath,'LexTexte4.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
         python_img = wx.Image(os.path.join(ImagePath,'python-logo.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
         r_img = wx.Image(os.path.join(ImagePath,'Rlogo.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
         lexique_img = wx.Image(os.path.join(ImagePath,'LexTexte4.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
@@ -1137,33 +1336,30 @@ class IntroPanel(wx.Panel):
         self.Bind(wx.EVT_BUTTON, self.OnR, but_r)
         
         
         self.Bind(wx.EVT_BUTTON, self.OnR, but_r)
         
         
-        #grid_sizer_1.Add(label3, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
         grid_sizer_1.Add(self.hyper2, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
         grid_sizer_3.Add(label_lerass, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
         grid_sizer_3.Add(self.hyper_lerass, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
         grid_sizer_1.Add(self.hyper2, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
         grid_sizer_3.Add(label_lerass, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
         grid_sizer_3.Add(self.hyper_lerass, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
-        sizer4.Add(label_1, 0, wx.ALIGN_CENTER, 5)
+        sizer4.Add(label_1, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 5)
+        
         sizer2.Add(label2, 0, wx.ALIGN_CENTER, 5)
         sizer2.Add(label2, 0, wx.ALIGN_CENTER, 5)
-        #sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
         sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
         sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
         sizer2.Add(grid_sizer_3, 0, wx.ALIGN_CENTER, 5)
         sizer2.Add(wx.StaticText(PanelPres, -1, u' '), 0, wx.ALIGN_CENTER, 5)
         sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
         sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
         sizer2.Add(grid_sizer_3, 0, wx.ALIGN_CENTER, 5)
         sizer2.Add(wx.StaticText(PanelPres, -1, u' '), 0, wx.ALIGN_CENTER, 5)
-        #sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
-        #sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
         sizer2.Add(grid_sizer_1, 0, wx.ALIGN_CENTER, 5)
         sizer2.Add(labellicence, 0, wx.ALIGN_CENTER, 5)
         sizer2.Add(labelcopy, 0, wx.ALIGN_CENTER, 5)
         sizer2.Add(grid_sizer_1, 0, wx.ALIGN_CENTER, 5)
         sizer2.Add(labellicence, 0, wx.ALIGN_CENTER, 5)
         sizer2.Add(labelcopy, 0, wx.ALIGN_CENTER, 5)
-        sizer1.Add(sizer4, 1, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
+        sizer1.Add(sizer4, 2, wx.ALIGN_CENTER_HORIZONTAL, 0)
+        sizer1.Add(but_ira, 1, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 5)
+        sizer1.Add(iralink, 1, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_TOP, 5)
+        sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 10)
         PanelPres.SetSizer(sizer2)
         PanelPres.SetSizer(sizer2)
-        sizer5.Add(blank, 1, wx.EXPAND | wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 2)
-        sizer5.Add(PanelPres, 1, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
-        sizer5.Add(blank1, 1, wx.ALIGN_CENTER_HORIZONTAL,2)
-        grid_sizer_2.Add(but_python, 1, wx.ALIGN_CENTER_HORIZONTAL| wx.ALIGN_CENTER_VERTICAL)
-        grid_sizer_2.Add(but_lexique, 1,wx.ALIGN_CENTER_HORIZONTAL| wx.ALIGN_CENTER_VERTICAL)
-        grid_sizer_2.Add(but_r, 1, wx.ALIGN_CENTER_HORIZONTAL| wx.ALIGN_CENTER_VERTICAL)
+        grid_sizer_2.Add(but_python, 1, wx.ALIGN_BOTTOM)
+        grid_sizer_2.Add(but_lexique, 1, wx.ALIGN_BOTTOM)
+        grid_sizer_2.Add(but_r, 1,  wx.ALIGN_BOTTOM)
         
         
-        sizer1.Add(sizer5, 3, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 1)
-        sizer1.Add(grid_sizer_2, 1, wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL)
+        sizer1.Add(PanelPres, 0, wx.EXPAND |wx.ALL, 10)
+        sizer1.Add(grid_sizer_2, 2, wx.ALIGN_CENTER_HORIZONTAL|wx.ALL, 1)
         self.SetSizer(sizer1)
         sizer1.Fit(self)
     
         self.SetSizer(sizer1)
         sizer1.Fit(self)
     
@@ -1181,7 +1377,7 @@ class MySplashScreen(wx.SplashScreen):
         bmp = wx.Image(os.path.join(ImagePath, 'splash.png')).ConvertToBitmap()
         wx.SplashScreen.__init__(self, bmp,
                                  wx.SPLASH_CENTRE_ON_SCREEN | wx.SPLASH_TIMEOUT,
         bmp = wx.Image(os.path.join(ImagePath, 'splash.png')).ConvertToBitmap()
         wx.SplashScreen.__init__(self, bmp,
                                  wx.SPLASH_CENTRE_ON_SCREEN | wx.SPLASH_TIMEOUT,
-                                 2000, None, -1)
+                                 1000, None, -1)
         self.Bind(wx.EVT_CLOSE, self.OnClose)
         self.fc = wx.FutureCall(1, self.ShowMain)
 
         self.Bind(wx.EVT_CLOSE, self.OnClose)
         self.fc = wx.FutureCall(1, self.ShowMain)