...
[iramuteq] / iramuteq.py
index 69e0bda..21453e9 100644 (file)
@@ -47,6 +47,7 @@ from tabchdalc import AnalyseQuest
 from tabsimi import DoSimi
 from tabrsimple import InputText
 from tabverges import Prototypical
+from tabsplitvar import SplitMatrixFromVar
 #from textafcuci import AfcUci
 from textdist import AnalysePam
 from textstat import Stat
@@ -191,7 +192,7 @@ class IraFrame(wx.Frame):
         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)
         
@@ -223,7 +224,7 @@ class IraFrame(wx.Frame):
         self.ID_splitvar = splitvar.GetId()
         self.ID_extractmod = extractmod.GetId()
         self.ID_extractthem = extractthem.GetId()
-        file_menu.AppendMenu(-1, _(u"Tools"), menuTools)
+        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'))
@@ -240,21 +241,26 @@ 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()
-
-        analyse_menu = wx.Menu()
-        analyse_menu.Append(ID_Freq, _(u"Frequencies").decode('utf8'))
-        analyse_menu.Append(ID_Chi2, _(u"Chi2").decode('utf8'))
-        #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_Chi2, _(u"Chi2").decode('utf8'))
+        #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.Append(ID_CHDSIM, u"Par matrice des distances")
-        analyse_menu.AppendMenu(-1, _(u"Clustering").decode('utf8'), menu_classif)
-        #analyse_menu.Append(ID_AFCM, u"AFCM")
-        analyse_menu.Append(ID_SIMI, _(u"Similarities Analysis").decode('utf8'))
-        analyse_menu.Append(ID_proto, _(u"Prototypical analysis").decode('utf8'))
+        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()
-        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.Append(ID_TEXTSTAT, _(u"Statistics").decode('utf8'))
@@ -267,15 +273,16 @@ class IraFrame(wx.Frame):
         text_menu.Append(ID_SimiTxt, _(u"Similarities Analysis").decode('utf8')) 
         ID_WC = wx.NewId()
         text_menu.Append(ID_WC, _(u"WordCloud").decode('utf8'))
+        self.text_menu = text_menu
         
         help_menu = wx.Menu()
         help_menu.Append(wx.ID_ABOUT, _(u"About...").decode('utf8'))
-        help_menu.Append(wx.ID_HELP, _(u"Inline help...").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(analyse_menu, _("Matrix 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'))
         
@@ -380,6 +387,7 @@ class IraFrame(wx.Frame):
         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)
@@ -544,39 +552,9 @@ 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)
-        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")
@@ -621,15 +599,17 @@ vous devez signaler le chemin de l'éxecutable de R dans les préférences."""
         self._mgr.Update()
     
     def OnSubText(self, corpus, parametres = None):
-        busy = wx.BusyInfo(_("Please wait...").decode('utf8'), self)
-        wx.SafeYield()
+        if corpus is None :
+            corpus = self.tree.getcorpus()
         builder = SubBuilder(self, corpus, parametres)
-        del busy
         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):
         dlg = wx.ProgressDialog("Ouverture...",
@@ -682,7 +662,7 @@ Laboratoire LERASS
 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 
@@ -839,7 +819,7 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
 ################################################################
 #debut des analyses
 ################################################################
-    def analyse_matrix(self, evt, analyse, analyse_type = '', matrix = None, dlgnb = 1):
+    def analyse_matrix(self, analyse, analyse_type = '', matrix = None, dlgnb = 1):
         if matrix is None :
             matrix = self.tree.getmatrix()
         #try :
@@ -848,7 +828,7 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
         #    BugReport(self)           
 
     def OnFreq(self, event, matrix = None):
-        self.analyse_matrix(event, Frequences, analyse_type = 'freq', matrix = matrix, dlgnb = 3)
+        self.analyse_matrix(Frequences, analyse_type = 'freq', matrix = matrix, dlgnb = 3)
         #if matrix is None :
         #    matrix = self.tree.getmatrix()
         #try:
@@ -858,7 +838,7 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
 
     def OnChi2(self, event, matrix = None):
         #try:
-        self.analyse_matrix(event, ChiSquare, matrix = matrix, analyse_type = 'chi2', dlgnb = 3) 
+        self.analyse_matrix(ChiSquare, matrix = matrix, analyse_type = 'chi2', dlgnb = 3) 
         #except:
         #    BugReport(self)
 
@@ -905,8 +885,14 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
 #         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', dlgnb = 3)
+        matrix = self.tree.getmatrix()
+        
 
     def OnSimiTxt(self, evt, corpus = None) :
         #    print 'PLUS DE BUG SUR SIMITXT'
@@ -914,7 +900,7 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
             #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 :
@@ -925,14 +911,14 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
         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) :
-        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:
@@ -945,7 +931,7 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
         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)
@@ -958,7 +944,7 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
             #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:
@@ -1010,7 +996,7 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
             #RunAnalyse(self, corpus, Alceste, OptAlceste)
             if corpus is None :
                 corpus = self.tree.getcorpus()            
-            self.Text = Reinert(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:
@@ -1020,7 +1006,7 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
         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:
@@ -1074,9 +1060,14 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
         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()
@@ -1212,7 +1203,10 @@ class MySplashScreen(wx.SplashScreen):
             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()