...
[iramuteq] / iramuteq.py
index d1b6077..f1dabc0 100644 (file)
@@ -2,46 +2,40 @@
 # -*- coding: utf-8 -*-
 #Author: Pierre Ratinaud
 #Copyright (c) 2008-2012, Pierre Ratinaud
 # -*- coding: utf-8 -*-
 #Author: Pierre Ratinaud
 #Copyright (c) 2008-2012, Pierre Ratinaud
-#Lisense: GNU GPL
+#License: GNU GPL
 
 from optparse import OptionParser
 
 from optparse import OptionParser
+from wx import BusyCursor
 
 parser = OptionParser()
 parser.add_option("-f", "--file", dest="filename",
                   help="open FILE", metavar="FILE", default=False)
 (options, args) = parser.parse_args()
 
 
 parser = OptionParser()
 parser.add_option("-f", "--file", dest="filename",
                   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
-if wx.__version__ >= '2.11' :
-    import wx.lib.agw.aui as aui
-else :
-    import aui
+import wx.lib.agw.aui as aui
 import wx.html
 import wx.grid
 import wx.lib.hyperlink as hl
 #------------------------------------
 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
 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, EncodeDialog, CorpusPref
-from tabfrequence import Frequences
+from dialog import PrefDialog
+from tabfrequence import Frequences, FreqMultiple
 from tabchi2 import ChiSquare
 #from tabstudent import MakeStudent
 from tabchddist import ChdCluster
 from tabchi2 import ChiSquare
 #from tabstudent import MakeStudent
 from tabchddist import ChdCluster
@@ -50,18 +44,16 @@ from tabchdalc import AnalyseQuest
 from tabsimi import DoSimi
 from tabrsimple import InputText
 from tabverges import Prototypical
 from tabsimi import DoSimi
 from tabrsimple import InputText
 from tabverges import Prototypical
-#from textafcuci import AfcUci
-from analysetxt import Alceste
+from tabsplitvar import SplitMatrixFromVar
 from textdist import AnalysePam
 from textstat import Stat
 from textaslexico import Lexico
 from textsimi import SimiTxt, SimiFromCluster
 from textwordcloud import WordCloud, ClusterCloud
 from textdist import AnalysePam
 from textstat import Stat
 from textaslexico import Lexico
 from textsimi import SimiTxt, SimiFromCluster
 from textwordcloud import WordCloud, ClusterCloud
-from profile_segment import ProfileSegment
+from textreinert import Reinert
 #from textcheckcorpus import checkcorpus
 from openanalyse import OpenAnalyse
 #from textcheckcorpus import checkcorpus
 from openanalyse import OpenAnalyse
-from corpus import BuildFromAlceste, Builder
-from sheet import MySheet
+from corpus import Builder, SubBuilder
 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
@@ -77,11 +69,11 @@ ID_Freq = wx.NewId()
 ID_Chi2 = wx.NewId()
 ID_Student = wx.NewId()
 ID_CHDSIM = wx.NewId()
 ID_Chi2 = wx.NewId()
 ID_Student = wx.NewId()
 ID_CHDSIM = wx.NewId()
-ID_CHDAlceste = wx.NewId()
+ID_CHDReinert = wx.NewId()
 ID_TEXTAFCM = wx.NewId()
 ID_TEXTSTAT = wx.NewId()
 ID_ASLEX = wx.NewId()
 ID_TEXTAFCM = wx.NewId()
 ID_TEXTSTAT = wx.NewId()
 ID_ASLEX = wx.NewId()
-ID_TEXTALCESTE = wx.NewId()
+ID_TEXTREINERT = wx.NewId()
 ID_TEXTPAM = wx.NewId()
 ID_CHECKCORPUS = wx.NewId()
 ID_Tabcontent = wx.NewId()
 ID_TEXTPAM = wx.NewId()
 ID_CHECKCORPUS = wx.NewId()
 ID_Tabcontent = wx.NewId()
@@ -96,6 +88,8 @@ ID_VIEWDATA = wx.NewId()
 ID_HTMLcontent = wx.NewId()
 ID_SimiTxt = wx.NewId()
 ID_proto = wx.NewId()
 ID_HTMLcontent = wx.NewId()
 ID_SimiTxt = wx.NewId()
 ID_proto = wx.NewId()
+ID_ImportTXM = wx.NewId()
+ID_FreqMulti = wx.NewId()
 ##########################################################
 #elements de configuration
 ##########################################################
 ##########################################################
 #elements de configuration
 ##########################################################
@@ -114,6 +108,8 @@ 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
 if os.getenv('HOME') != None:
     user_home = os.getenv('HOME')
 #repertoire de l'utilisateur
 if os.getenv('HOME') != None:
     user_home = os.getenv('HOME')
@@ -150,7 +146,18 @@ 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'
+               }
 #####################################################################
 
 class IraFrame(wx.Frame):
 #####################################################################
 
 class IraFrame(wx.Frame):
@@ -176,9 +183,15 @@ class IraFrame(wx.Frame):
         self.SimiFromCluster = SimiFromCluster
         #langues
         gettext.install('iramuteq',  os.path.join(AppliPath,'locale'), unicode=True)
         self.SimiFromCluster = SimiFromCluster
         #langues
         gettext.install('iramuteq',  os.path.join(AppliPath,'locale'), unicode=True)
-        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'])
+        #langues = ['fr_FR', 'en', 'pt_PT']
+        #for l in langues :
+        #    pass
+        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()
@@ -193,7 +206,7 @@ class IraFrame(wx.Frame):
         item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN))
         file_menu.AppendItem(item)
         
         item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN))
         file_menu.AppendItem(item)
         
-        item = wx.MenuItem(file_menu, ID_OpenText, _(u"Open a text corpora").decode('utf8'), _(u"Open a text corpora").decode('utf8'))
+        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))
         file_menu.AppendItem(item)
         
         item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN))
         file_menu.AppendItem(item)
         
@@ -209,23 +222,30 @@ class IraFrame(wx.Frame):
         menuFactiva.AppendItem(fact_from_xml)
         menuFactiva.AppendItem(fact_from_mail)
         menuFactiva.AppendItem(fact_from_txt)
         menuFactiva.AppendItem(fact_from_xml)
         menuFactiva.AppendItem(fact_from_mail)
         menuFactiva.AppendItem(fact_from_txt)
-        file_menu.AppendMenu(-1, _(u"Import from factiva"), menuFactiva)
+        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'))
+        extractthem = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Extract thematics").decode('utf8'))
         menuTools.AppendItem(splitvar)
         menuTools.AppendItem(extractmod)
         menuTools.AppendItem(splitvar)
         menuTools.AppendItem(extractmod)
+        menuTools.AppendItem(extractthem)
         self.ID_splitvar = splitvar.GetId()
         self.ID_extractmod = extractmod.GetId()
         self.ID_splitvar = splitvar.GetId()
         self.ID_extractmod = extractmod.GetId()
-        file_menu.AppendMenu(-1, _(u"Tools"), 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"))
+        file_menu.Append(wx.ID_EXIT, _(u"Exit").decode('utf8'))
         
         edit_menu = wx.Menu()
         edit_menu.Append(wx.ID_PREFERENCES, '', _(u'Preferences').decode('utf8'))
         
         edit_menu = wx.Menu()
         edit_menu.Append(wx.ID_PREFERENCES, '', _(u'Preferences').decode('utf8'))
@@ -235,42 +255,49 @@ class IraFrame(wx.Frame):
         view_menu.Append(ID_VIEWDATA, _(u"Show data").decode('utf8'))
         view_menu.Append(ID_RESULT, _(u'Show results').decode('utf8'))
         #view_menu.AppendSeparator()
         view_menu.Append(ID_VIEWDATA, _(u"Show data").decode('utf8'))
         view_menu.Append(ID_RESULT, _(u'Show results').decode('utf8'))
         #view_menu.AppendSeparator()
-
-        analyse_menu = wx.Menu()
-        analyse_menu.Append(ID_Freq, u"Fréquences")
-        analyse_menu.Append(ID_Chi2, u"Chi2")
-        #analyse_menu.Append(ID_Student, u"t de Student")
+        matrix_menu = wx.Menu()
+        matrix_menu.Append(ID_Freq, _(u"Frequencies").decode('utf8'))
+        matrix_menu.Append(ID_FreqMulti, _(u'Multiple frequencies').decode('utf8'))
+        matrix_menu.Append(ID_Chi2, _(u"Chi2").decode('utf8'))
+        #matrix_menu.Append(ID_Student, u"t de Student")
         menu_classif = wx.Menu()
         menu_classif = wx.Menu()
-        menu_classif.Append(ID_CHDAlceste, u"Méthode GNEPA")
+        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")
-        analyse_menu.AppendMenu(-1, u"Classification", menu_classif)
-        #analyse_menu.Append(ID_AFCM, u"AFCM")
-        analyse_menu.Append(ID_SIMI, u"Analyse de similitudes")
-        analyse_menu.Append(ID_proto, _(u"Prototypical analysis"))
+        matrix_menu.AppendMenu(-1, _(u"Clustering").decode('utf8'), menu_classif)
+        #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'))
         ID_RCODE = wx.NewId()
         ID_RCODE = wx.NewId()
-        analyse_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
+        
         text_menu = wx.Menu()
         #text_menu.Append(ID_CHECKCORPUS, u"Vérifier le corpus")
         text_menu = wx.Menu()
         #text_menu.Append(ID_CHECKCORPUS, u"Vérifier le corpus")
-        text_menu.Append(ID_TEXTSTAT, u"Statistiques textuelles")
-        text_menu.Append(ID_ASLEX, u"Spécificités et AFC")
+        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()
         #text_menu.Append(ID_TEXTAFCM, u"AFC sur UCI / Vocabulaire")
         menu_classiftxt = wx.Menu()
-        menu_classiftxt.Append(ID_TEXTALCESTE, u"Méthode GNEPA")
+        menu_classiftxt.Append(ID_TEXTREINERT, _(u"Reinert's Method").decode('utf8'))
         #menu_classiftxt.Append(ID_TEXTPAM, u"Par matrice des distances")
         #menu_classiftxt.Append(ID_TEXTPAM, u"Par matrice des distances")
-        text_menu.AppendMenu(-1, u"Classification", menu_classiftxt)
-        text_menu.Append(ID_SimiTxt, u'Analyse de similitude'
+        text_menu.AppendMenu(-1, _(u"Clustering").decode('utf8'), menu_classiftxt)
+        text_menu.Append(ID_SimiTxt, _(u"Similarities Analysis").decode('utf8')
         ID_WC = wx.NewId()
         ID_WC = wx.NewId()
-        text_menu.Append(ID_WC, u'Nuage de mots')
+        text_menu.Append(ID_WC, _(u"WordCloud").decode('utf8'))
+        self.text_menu = text_menu
         
         help_menu = wx.Menu()
         
         help_menu = wx.Menu()
-        help_menu.Append(wx.ID_ABOUT, u'À propos...')
-        help_menu.Append(wx.ID_HELP, u'Aide en ligne')
+        help_menu.Append(wx.ID_ABOUT, _(u"About...").decode('utf8'))
+        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(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(analyse_menu, _("Spreadsheet analysis").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(text_menu, _(u"Text analysis").decode('utf8'))
         self.mb.Append(help_menu, _(u"Help").decode('utf8'))
         
@@ -278,8 +305,8 @@ class IraFrame(wx.Frame):
 #--------------------------------------------------------------------
         self.statusbar = self.CreateStatusBar(2, wx.ST_SIZEGRIP)
         self.statusbar.SetStatusWidths([-2, -3])
 #--------------------------------------------------------------------
         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"), 0)
+        self.statusbar.SetStatusText(_(u"Wellcome"), 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
@@ -313,7 +340,7 @@ 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("Navigateur").
+        self._mgr.AddPane(self.tree, aui.AuiPaneInfo().Name("lefttree").Caption(_(u"Navigator").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))
         
@@ -331,9 +358,9 @@ class IraFrame(wx.Frame):
         self._mgr.AddPane(self.nb, aui.AuiPaneInfo().
                               Name("Tab_content").
                               CenterPane())        
         self._mgr.AddPane(self.nb, aui.AuiPaneInfo().
                               Name("Tab_content").
                               CenterPane())        
-        self.Sheet = MySheet(self)
+        
         #self._mgr.AddPane(self.Sheet, wx.aui.AuiPaneInfo().Name("Data").CenterPane())
         #self._mgr.AddPane(self.Sheet, wx.aui.AuiPaneInfo().Name("Data").CenterPane())
-        self._mgr.AddPane(self.Sheet, 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.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
@@ -366,28 +393,32 @@ class IraFrame(wx.Frame):
         self.Bind(wx.EVT_MENU, self.import_factiva_txt, fact_from_txt)
         self.Bind(wx.EVT_MENU, self.ExtractTools, splitvar)
         self.Bind(wx.EVT_MENU, self.ExtractTools, extractmod)
         self.Bind(wx.EVT_MENU, self.import_factiva_txt, fact_from_txt)
         self.Bind(wx.EVT_MENU, self.ExtractTools, splitvar)
         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.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.OnStudent, id=ID_Student)
         self.Bind(wx.EVT_MENU, self.OnCHDSIM, id=ID_CHDSIM)
         self.Bind(wx.EVT_MENU, self.OnChi2, id=ID_Chi2)
         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.OnCHDAlceste, id=ID_CHDAlceste)
+        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.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_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.OnTextAfcm, id=ID_TEXTAFCM)
         #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.OnTextAfcm, id=ID_TEXTAFCM)
-        self.Bind(wx.EVT_MENU, self.OnTextAlceste, id=ID_TEXTALCESTE)
+        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.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.OnSimi, id=ID_SIMI)
+        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.OnExit, id=wx.ID_EXIT)
-        self.Bind(wx.EVT_MENU, self.OnSaveTabAs, id=ID_SaveTab)
+        #self.Bind(wx.EVT_MENU, self.OnSaveTabAs, id=ID_SaveTab)
         self.Bind(wx.EVT_MENU, self.OnAbout, id=wx.ID_ABOUT)
         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.OnAbout, id=wx.ID_ABOUT)
         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_CLOSE, self.OnClose)
 ##################################################################
         flags = self._mgr.GetAGWFlags()
         self.Bind(wx.EVT_CLOSE, self.OnClose)
 ##################################################################
         flags = self._mgr.GetAGWFlags()
@@ -427,9 +458,9 @@ class IraFrame(wx.Frame):
 
 ##############################################################@
         self.DisEnSaveTabAs(False)
 
 ##############################################################@
         self.DisEnSaveTabAs(False)
-        self.ShowMenu(_("View"), False)
-        self.ShowMenu(_("Spreadsheet analysis"), False)
-        self.ShowMenu(_("Text analysis"), False)
+        self.ShowMenu('view', False)
+        self.ShowMenu('matrix', False)
+        self.ShowMenu('text', False)
    
         self._mgr.Update()
 
    
         self._mgr.Update()
 
@@ -488,27 +519,16 @@ 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)
             dlg.CenterOnParent()
             if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
             dlg = wx.MessageDialog(self, msg, u"Problème de configuration", wx.OK | wx.NO_DEFAULT | wx.ICON_WARNING)
             dlg.CenterOnParent()
             if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
-                 evt.Veto()
+                pass
             dlg.Destroy()
 
             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()
-            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)
 
     def OnVerif(self, evt) :
         pack = CheckRPackages(self)
@@ -516,7 +536,7 @@ vous devez signaler le chemin de l'éxecutable de R dans les préférences."""
             dlg = wx.MessageDialog(self, u"Installation OK", u"Installation", wx.OK | wx.ICON_INFORMATION)
             dlg.CenterOnParent()
             if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
             dlg = wx.MessageDialog(self, u"Installation OK", u"Installation", wx.OK | wx.ICON_INFORMATION)
             dlg.CenterOnParent()
             if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
-                 evt.Veto()
+                evt.Veto()
 
     def DisEnSaveTabAs(self, DISEN):
     #Disable SaveTabAs
 
     def DisEnSaveTabAs(self, DISEN):
     #Disable SaveTabAs
@@ -527,9 +547,19 @@ vous devez signaler le chemin de l'éxecutable de R dans les préférences."""
                 item.Enable(DISEN)
     
     def ShowMenu(self, menu, Show=True):
                 item.Enable(DISEN)
     
     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
+        elif menu == 'matrix' :
+            menu_pos = 3
+        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()
 
 
 #--------------------------------------------------------------------
 
 
 #--------------------------------------------------------------------
@@ -537,63 +567,41 @@ vous devez signaler le chemin de l'éxecutable de R dans les préférences."""
         print 'onclose'
         with open(self.ConfigPath['path'], 'w') as f :
             self.PathPath.write(f)
         print 'onclose'
         with open(self.ConfigPath['path'], 'w') as f :
             self.PathPath.write(f)
-        if self.DictTab != {} :
-            savestates = [self.DictTab[item][0] for item in self.DictTab]
-            if False in savestates :
-                notsave = [item for item in self.DictTab if self.DictTab[item][0] == False] 
-                msg = u"""
- Certains résultats ne sont pas enregistrés.
- 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]:
-                    event.Veto()
-                    dlg.Destroy()
-                else:
-                    dlg.Destroy()
-                    for item in notsave :
-                        for tmpfile in self.DictTab[item][1:] :
-                            os.remove(tmpfile)
-                            print 'remove : ' + tmpfile
-                    self._mgr.UnInit()
-                    del self._mgr
-                    self.Destroy()
-            else :
-                self._mgr.UnInit()
-                del self._mgr
-                self.Destroy()
-        else :
-            self._mgr.UnInit()
-            del self._mgr
-            self.Destroy()
-            #if sys.platform == 'win32' :
-            #    os.system("taskkill /im iramuteq.exe /f")
-            #    print 'meurtre de process'
+        self._mgr.UnInit()
+        del self._mgr
+        self.Destroy()
 
     def OnOpenData(self, event):
         inputname, self.input_path = OnOpen(self, "Data")
         if inputname:
 
     def OnOpenData(self, event):
         inputname, self.input_path = OnOpen(self, "Data")
         if inputname:
-            self.filename = self.input_path[0]
+            #filename = self.input_path[0]
             self.tableau = Tableau(self,os.path.abspath(self.input_path[0]))
             self.tableau = Tableau(self,os.path.abspath(self.input_path[0]))
-            get_table_param(self, self.input_path[0])
-            self.tableau.make_content()
-            self.tableau.show_tab()
+            val = get_table_param(self, self.input_path[0])
+            if val == wx.ID_OK :
+                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")
         OpenAnalyse(self, self.AnalysePath[1][0], True)
 
     def OnOpenAnalyse(self, event):
         self.AnalysePath = OnOpen(self, "Analyse")
         OpenAnalyse(self, self.AnalysePath[1][0], True)
-        self.ShowMenu(_("View"))
+        self.ShowMenu('view')
 
     def OnOpenText(self, event):
         inputname, self.input_path = OnOpen(self, "Texte")
         self.filename = self.input_path[0]
         if inputname:
 
     def OnOpenText(self, event):
         inputname, self.input_path = OnOpen(self, "Texte")
         self.filename = self.input_path[0]
         if inputname:
-             self.OpenText()
+            self.OpenText()
    
     def OnViewData(self, event):
    
     def OnViewData(self, event):
-        print self.type
-        print self.DataTxt
         if self.type == "Data":
             if not self.DataPop :
                 self.Sheet.Populate(self.content)
         if self.type == "Data":
             if not self.DataPop :
                 self.Sheet.Populate(self.content)
@@ -609,9 +617,21 @@ vous devez signaler le chemin de l'éxecutable de R dans les préférences."""
                 self.DataPop = False
             self.ShowAPane(u"Text")
         self._mgr.Update()
                 self.DataPop = False
             self.ShowAPane(u"Text")
         self._mgr.Update()
-        
+    
+    def OnSubText(self, corpus, parametres = None):
+        if corpus is None :
+            corpus = self.tree.getcorpus()
+        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)
+            del busy
+            
     def OpenText(self):
     def OpenText(self):
-        #dial = EncodeDialog(self)
         dlg = wx.ProgressDialog("Ouverture...",
                                    "Veuillez patienter...",
                                    maximum=2,
         dlg = wx.ProgressDialog("Ouverture...",
                                    "Veuillez patienter...",
                                    maximum=2,
@@ -627,35 +647,14 @@ 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 :
+                dlg.Destroy()
                 BugReport(self)
                 BugReport(self)
-        #self.content = DoConf().totext(corpus.parametres)
-#        parametres = DoConf(os.path.join(UserConfigPath,'corpus.cfg')).getoptions('corpus')
-#        parametres['originalpath'] = self.filename
-#        
-#        parametres['pathout'] = PathOut(self.filename, 'corpus').dirout
-#        dial = CorpusPref(self, parametres)
-#        dial.CenterOnParent()
-#        dial.txtpath.SetLabel(self.filename)
-#        res = dial.ShowModal()
-#        parametres = dial.doparametres()
-#        print parametres
-#        ReadLexique(self, lang = parametres['lang'])
-#        self.expressions = ReadDicoAsDico(self.DictPath.get(parametres['lang'], 'french_exp'))
-#        corpus = BuildFromAlceste(self.filename, parametres, self.lexique, self.expressions).corpus
-        #self.corpus_encodage =  dial.encodages[dial.list_encodages.GetSelection()][0]
-        #self.corpus_lang = dial.langues[dial.choice_dict.GetSelection()]
             else :
                 count = 1
                 keepGoing = dlg.Update(count, u"Lecture du fichier")
             else :
                 count = 1
                 keepGoing = dlg.Update(count, u"Lecture du fichier")
-    #            msg = u"Ce fichier ne semble pas être encodé en %s" % self.corpus_encodage
-    #            dial = wx.MessageDialog(self, msg, u"Problème d'encodage", wx.OK | wx.NO_DEFAULT | wx.ICON_WARNING)
-    #            dial.CenterOnParent()
-    #            res = dial.ShowModal()
-    #            dial.Destroy()
-    #            self.OpenText()
-                self.ShowMenu(_("View"))
-                self.ShowMenu(_("Text analysis"))
-                self.ShowMenu(_(u"Spreadsheet analysis"), False)
+                self.ShowMenu('view')
+                self.ShowMenu('text')
+                self.ShowMenu('matrix', False)
                 self.type = "Texte"
                 self.DataTxt = False
                 self.Text = ''
                 self.type = "Texte"
                 self.DataTxt = False
                 self.Text = ''
@@ -684,7 +683,7 @@ Laboratoire LERASS
 REPERE
 """
         info.WebSite = ("http://www.iramuteq.org", u"Site web IRaMuTeQ")
 REPERE
 """
         info.WebSite = ("http://www.iramuteq.org", u"Site web IRaMuTeQ")
-        dev = ConfigGlob.get('DEFAULT', 'dev').split(';')
+        dev = ConfigGlob.get('DEFAULT', 'dev').decode('utf8').split(';')
         info.Developers = dev
         info.License = u"""Iramuteq est un logiciel libre ; vous pouvez le diffuser et/ou le modifier 
 suivant les termes de la Licence Publique Générale GNU telle que publiée 
         info.Developers = dev
         info.License = u"""Iramuteq est un logiciel libre ; vous pouvez le diffuser et/ou le modifier 
 suivant les termes de la Licence Publique Générale GNU telle que publiée 
@@ -715,6 +714,12 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
             npage = self.nb.GetPage(new)
             if 'parametres' in dir(npage) :
                 self.tree.GiveFocus(uuid=npage.parametres['uuid'])
             npage = self.nb.GetPage(new)
             if 'parametres' in dir(npage) :
                 self.tree.GiveFocus(uuid=npage.parametres['uuid'])
+                if npage.parametres.get('matrix', False) :
+                    self.ShowMenu('text', False)
+                    self.ShowMenu('matrix', True)
+                elif npage.parametres.get('corpus', 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()))
@@ -728,40 +733,13 @@ 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 remove and not notebook :
+
+        if self.nb.GetPageCount() == 1 and not notebook :
             self.LastTabClose()
     
     def LastTabClose(self) :
         if self.nb.GetPageCount() == 1 :
             self.LastTabClose()
     
     def LastTabClose(self) :
         if self.nb.GetPageCount() == 1 :
-            self.DisEnSaveTabAs(False)
+            #self.DisEnSaveTabAs(False)
             if self.DataTxt :
                 self.ShowAPane("Text")
             elif self.DataPop :
             if self.DataTxt :
                 self.ShowAPane("Text")
             elif self.DataPop :
@@ -769,40 +747,6 @@ Voulez-vous fermer quand même ?"""
             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
     def GetStartPosition(self):
 
         self.x = self.x + 20
@@ -835,20 +779,37 @@ Voulez-vous fermer quand même ?"""
 ################################################################
 #debut des analyses
 ################################################################
 ################################################################
 #debut des analyses
 ################################################################
-
-    def OnFreq(self, event):
-        try:
-            Frequences(self) 
-        except:
-            BugReport(self)
-            
-    def OnChi2(self, event):
-        try:
-        #    print('PAS DE DEBUG SUR CHI2')
-            chi = ChiSquare(self)
+    def analyse_matrix(self, analyse, analyse_type = '', matrix = None, parametres = None, dlgnb = 1):
+        if matrix is None :
+            matrix = self.tree.getmatrix()
+        if parametres is not None :
+            parametres['type'] = analyse_type
+        else :
+            parametres = {'type' : analyse_type}
+        try :
+        #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 OnFreqMulti(self, event, matrix = None):
+        self.analyse_matrix(FreqMultiple, analyse_type = 'freqmulti', matrix = matrix, dlgnb = 3)
+
+    def OnChi2(self, event, matrix = None):
+        self.analyse_matrix(ChiSquare, matrix = matrix, analyse_type = 'chi2', 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):
+        #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:
             MakeStudent(self) 
     def OnStudent(self, event):
         try:
             MakeStudent(self) 
@@ -870,17 +831,23 @@ Voulez-vous fermer quand même ?"""
         except:
             BugReport(self)
  
         except:
             BugReport(self)
  
-    def OnCHDAlceste(self, event):
-        try:
-         #   print('PLUS DE BUG SUR ALCESTE QUESTIONNAIRE')
-            self.quest = AnalyseQuest(self)
-            if self.quest.val == wx.ID_OK:
-                PlaySound(self)
-        except:
-            BugReport(self)
+#     def OnCHDReinert(self, event):
+        try:
+         #   print('PLUS DE BUG SUR ALCESTE QUESTIONNAIRE')
+            self.quest = AnalyseQuest(self)
+            if self.quest.val == wx.ID_OK:
+                PlaySound(self)
+        except:
+            BugReport(self)
     
     
-    def OnProto(self, evt) :
-        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):
+        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'
 
     def OnSimiTxt(self, evt, corpus = None) :
         #    print 'PLUS DE BUG SUR SIMITXT'
@@ -888,7 +855,7 @@ Voulez-vous fermer quand même ?"""
             #self.Text = SimiTxt(self)
             if corpus is None :
                 corpus = self.tree.getcorpus()            
             #self.Text = SimiTxt(self)
             if corpus is None :
                 corpus = self.tree.getcorpus()            
-            self.Text = SimiTxt(self, corpus, parametres = {'type': 'simitxt'}, dlg = progressbar(self, 3))
+            self.Text = SimiTxt(self, corpus, parametres = {'type': 'simitxt'}, dlg = 3)
             if self.Text.val == wx.ID_OK :
                 PlaySound(self)
         except :
             if self.Text.val == wx.ID_OK :
                 PlaySound(self)
         except :
@@ -899,14 +866,14 @@ Voulez-vous fermer quand même ?"""
         try :
             if corpus is None :
                 corpus = self.tree.getcorpus()            
         try :
             if corpus is None :
                 corpus = self.tree.getcorpus()            
-            self.Text = WordCloud(self, corpus, parametres = {'type' : 'wordcloud'}, dlg = progressbar(self, 3))
+            self.Text = WordCloud(self, corpus, parametres = {'type' : 'wordcloud'}, dlg = 3)
             if self.Text.val == wx.ID_OK :
                 PlaySound(self)
         except :
             BugReport(self)
 
     def OnClusterCloud(self, corpus, parametres = None) :
             if self.Text.val == wx.ID_OK :
                 PlaySound(self)
         except :
             BugReport(self)
 
     def OnClusterCloud(self, corpus, parametres = None) :
-        self.Text = ClusterCloud(self, corpus, parametres = parametres, dlg = progressbar(self, 3))
+        self.Text = ClusterCloud(self, corpus, parametres = parametres, dlg = 3)
 
     def OnAFCM(self, event):
         try:
 
     def OnAFCM(self, event):
         try:
@@ -914,18 +881,12 @@ Voulez-vous fermer quand même ?"""
         except:
             BugReport(self)
 
         except:
             BugReport(self)
 
-#    def OnCheckcorpus(self, evt):
-#        try :
-#            checkcorpus(self)
-#        except :
-#            BugReport(self)
-
     def OnTextStat(self, event, corpus = None):
             #print 'PAS DE BUG SUR TEXT STAT'
         try:
             if corpus is None :
                 corpus = self.tree.getcorpus()
     def OnTextStat(self, event, corpus = None):
             #print 'PAS DE BUG SUR TEXT STAT'
         try:
             if corpus is None :
                 corpus = self.tree.getcorpus()
-            self.Text = Stat(self, corpus, parametres = {'type': 'stat'}, dlg = progressbar(self, 7))
+            self.Text = Stat(self, corpus, parametres = {'type': 'stat'}, dlg = 7)
             
             if self.Text.val == wx.ID_OK :
                 PlaySound(self)
             
             if self.Text.val == wx.ID_OK :
                 PlaySound(self)
@@ -938,7 +899,7 @@ Voulez-vous fermer quand même ?"""
             #print('ATTENTION : PLUS DE BUG SUR LEXICO')
             if corpus is None :
                 corpus = self.tree.getcorpus()
             #print('ATTENTION : PLUS DE BUG SUR LEXICO')
             if corpus is None :
                 corpus = self.tree.getcorpus()
-            self.Text = Lexico(self, corpus, parametres = {'type' : 'spec'}, dlg = progressbar(self, 3))
+            self.Text = Lexico(self, corpus, parametres = {'type' : 'spec'}, dlg = 3)
             if self.Text.val == wx.ID_OK :
                 PlaySound(self)
         except:
             if self.Text.val == wx.ID_OK :
                 PlaySound(self)
         except:
@@ -969,20 +930,28 @@ Voulez-vous fermer quand même ?"""
         except :
             BugReport(self)
 
         except :
             BugReport(self)
 
+    def OnImportTXM(self, evt) :
+        try :
+            ImportFactiva(self, 'txm')
+        except :
+            BugReport(self)
+
     def ExtractTools(self, evt) :
         ID = evt.GetId()
         if ID == self.ID_splitvar :
             Extract(self, 'splitvar')
     def ExtractTools(self, evt) :
         ID = evt.GetId()
         if ID == self.ID_splitvar :
             Extract(self, 'splitvar')
-        else :
+        elif ID == self.ID_extractmod :
             Extract(self, 'mods')
             Extract(self, 'mods')
+        elif ID == self.ID_extractthem :
+            Extract(self, 'them')
 
 
-    def OnTextAlceste(self, event, corpus = None):
+    def OnTextReinert(self, event, corpus = None):
         try:
             #print('ATTENTION : PLUS DE BUG SUR ALCESTE')
             #RunAnalyse(self, corpus, Alceste, OptAlceste)
             if corpus is None :
                 corpus = self.tree.getcorpus()            
         try:
             #print('ATTENTION : PLUS DE BUG SUR ALCESTE')
             #RunAnalyse(self, corpus, Alceste, OptAlceste)
             if corpus is None :
                 corpus = self.tree.getcorpus()            
-            self.Text = Alceste(self, corpus, parametres = {'type': 'alceste'}, dlg = progressbar(self,6))
+            self.Text = Reinert(self, corpus, parametres = {'type': 'alceste'}, dlg = 6)
             if self.Text.val == wx.ID_OK:
                 PlaySound(self)
         except:
             if self.Text.val == wx.ID_OK:
                 PlaySound(self)
         except:
@@ -992,25 +961,25 @@ Voulez-vous fermer quand même ?"""
         try:
             if corpus is None :
                 corpus = self.tree.getcorpus()
         try:
             if corpus is None :
                 corpus = self.tree.getcorpus()
-            self.Text = AnalysePam(self, corpus, parametres = {'type' : 'pamtxt'}, dlg = progressbar(self,6))
+            self.Text = AnalysePam(self, corpus, parametres = {'type' : 'pamtxt'}, dlg = 6)
             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 SimiCluster(self, parametres = {}, fromprof = False, pathout = '', listactives = [], actives = [], tableau = None) :
-        DoSimi(self, param = parametres, fromprof =  fromprof, pathout = pathout, 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)
     
     
-    def OnSimi(self,evt):
-        try :
+#    def OnSimi(self,evt):
+#        try :
             #print 'ATTENTION !!!! VERGES'
             #print 'PLUS DE BUG SUR SIMI'
             #print 'ATTENTION !!!! VERGES'
             #print 'PLUS DE BUG SUR SIMI'
-            self.res = DoSimi(self, param = None)
+#            self.res = DoSimi(self, param = None)
             #self.res = Verges(self)
             #self.res = Verges(self)
-            if self.res.val == wx.ID_OK :
-                 PlaySound(self)
-        except :
-            BugReport(self)
+#            if self.res.val == wx.ID_OK :
+#                PlaySound(self)
+#        except :
+#            BugReport(self)
 #################################################################
 
     def OnHelp(self, event):
 #################################################################
 
     def OnHelp(self, event):
@@ -1046,9 +1015,14 @@ Voulez-vous fermer quand même ?"""
         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)
-                get_table_param(self, self.filename)
-                self.tableau.make_content()
-                self.tableau.show_tab()
+                val = get_table_param(self, self.filename)
+                if val == wx.ID_OK :
+                    self.tableau.make_content()
+                    OpenAnalyse(self, self.tableau.parametres)
+                    self.tree.OnItemAppend(self.tableau.parametres)
+                #get_table_param(self, self.filename)
+                #self.tableau.make_content()
+                #self.tableau.show_tab()
                 #open_data(self, self.filename)
             elif os.path.splitext(self.filename)[1] == '.txt':
                 self.OpenText()
                 #open_data(self, self.filename)
             elif os.path.splitext(self.filename)[1] == '.txt':
                 self.OpenText()
@@ -1064,11 +1038,11 @@ Voulez-vous fermer quand même ?"""
 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 = 0
-        bckgrdcolor = wx.Colour(col, col, col)
+        col = randint(0, 255)
+        col1 = randint(0,255)
+        col2 = randint(0,255)
+        col = 57
+        bckgrdcolor = wx.Colour(col, col1, col2)
         self.SetBackgroundColour(bckgrdcolor)
         txtcolour = wx.Colour(250, 250, 250)
         linkcolor = wx.Colour(255, 0, 0)
         self.SetBackgroundColour(bckgrdcolor)
         txtcolour = wx.Colour(250, 250, 250)
         linkcolor = wx.Colour(255, 0, 0)
@@ -1110,7 +1084,7 @@ class IntroPanel(wx.Panel):
         self.hyper_lerass.UpdateLink()
         blank = wx.StaticText(PanelPres, -1, u'\n')
         blank1 = wx.StaticText(PanelPres, -1, u'\n')
         self.hyper_lerass.UpdateLink()
         blank = wx.StaticText(PanelPres, -1, u'\n')
         blank1 = wx.StaticText(PanelPres, -1, u'\n')
-        labellicence = wx.StaticText(PanelPres, -1, u'Licence GNU GPL')
+        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'))
         labellicence.SetForegroundColour(txtcolour)
         labellicence.SetBackgroundColour(bckgrdcolor)
         labelcopy = wx.StaticText(PanelPres, -1, ConfigGlob.get('DEFAULT', 'copyright'))
@@ -1184,7 +1158,10 @@ class MySplashScreen(wx.SplashScreen):
             self.ShowMain()
 
     def ShowMain(self):
             self.ShowMain()
 
     def ShowMain(self):
-        frame = IraFrame(None, -1, "IRaMuTeQ " + ConfigGlob.get('DEFAULT', 'version'), size=(1100, 800))
+        displaySize = wx.DisplaySize()
+        w = displaySize[0]/1.2
+        h = displaySize[1]/1.2
+        frame = IraFrame(None, -1, "IRaMuTeQ " + ConfigGlob.get('DEFAULT', 'version'), size=(w, h))
         frame.Show()
         frame.finish_init()
         frame.Upgrade()
         frame.Show()
         frame.finish_init()
         frame.Upgrade()