... x2
authorPierre <ratinaud@univ-tlse2.fr>
Fri, 23 Nov 2012 19:32:48 +0000 (20:32 +0100)
committerPierre <ratinaud@univ-tlse2.fr>
Fri, 23 Nov 2012 19:32:48 +0000 (20:32 +0100)
22 files changed:
Liste.py
PrintRScript.py
ProfList.py
Rscripts/afc_graph.R
app.fil
chemins.py
configuration/simitxt.cfg [new file with mode: 0644]
configuration/stat.cfg [new file with mode: 0644]
corpusNG.py
dialog.py
functions.py
guifunct.py
iracmd.py
iramuteq.py
layout.py
listlex.py
messages.pot
profile_segment.py
search_list.py
textsimi.py
textwordcloud.py
tree.py

index 86ec3bf..1b283f6 100644 (file)
--- a/Liste.py
+++ b/Liste.py
@@ -22,20 +22,21 @@ import cStringIO
 
 #---------------------------------------------------------------------------
 
 
 #---------------------------------------------------------------------------
 
-class List(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin):
-    def __init__(self, parent, ID, pos=wx.DefaultPosition,
-                 size=wx.DefaultSize, style=0):
-        wx.ListCtrl.__init__(self, parent, ID, pos, size, style)
-        listmix.ListCtrlAutoWidthMixin.__init__(self)
+#class List(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin):
+#    def __init__(self, parent, ID, pos=wx.DefaultPosition,
+#                 size=wx.DefaultSize, style=0):
+#        wx.ListCtrl.__init__(self, parent, ID, pos, size, style)
+#        listmix.ListCtrlAutoWidthMixin.__init__(self)
 
 
 
 
-class ListPanel(wx.Panel, listmix.ColumnSorterMixin):
+class ListPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.ColumnSorterMixin):
     def __init__(self, parent, gparent, dlist):
     def __init__(self, parent, gparent, dlist):
+        wx.ListCtrl.__init__( self, parent, -1, style=wx.LC_REPORT|wx.LC_VIRTUAL|wx.LC_HRULES|wx.LC_VRULES)
         self.parent = parent
         self.gparent = gparent
         self.source = gparent
         self.dlist = dlist
         self.parent = parent
         self.gparent = gparent
         self.source = gparent
         self.dlist = dlist
-        wx.Panel.__init__(self, parent, -1, style=wx.WANTS_CHARS)
+        #wx.Panel.__init__(self, parent, -1, style=wx.WANTS_CHARS)
         
         search_id = wx.NewId()
         self.parent.Bind(wx.EVT_MENU, self.onsearch, id = search_id)
         
         search_id = wx.NewId()
         self.parent.Bind(wx.EVT_MENU, self.onsearch, id = search_id)
@@ -43,97 +44,119 @@ class ListPanel(wx.Panel, listmix.ColumnSorterMixin):
         self.SetAcceleratorTable(self.accel_tbl)
         
         self.il = wx.ImageList(16, 16)
         self.SetAcceleratorTable(self.accel_tbl)
         
         self.il = wx.ImageList(16, 16)
-        self.sm_up = self.il.Add(getSmallUpArrowBitmap())
-        self.sm_dn = self.il.Add(getSmallDnArrowBitmap())
-
+        a={"sm_up":"GO_UP","sm_dn":"GO_DOWN","w_idx":"WARNING","e_idx":"ERROR","i_idx":"QUESTION"}
+        for k,v in a.items():
+            s="self.%s= self.il.Add(wx.ArtProvider_GetBitmap(wx.ART_%s,wx.ART_TOOLBAR,(16,16)))" % (k,v)
+            exec(s)
+        self.SetImageList(self.il, wx.IMAGE_LIST_SMALL)
 
         tID = wx.NewId()
 
 
         tID = wx.NewId()
 
-        self.list = List(self, tID,
-                                 style=wx.LC_REPORT 
-                                 | wx.BORDER_NONE
-                                 | wx.LC_EDIT_LABELS
-                                 | wx.LC_SORT_ASCENDING
-                                 )
         
         
+#-----------------------------------------------------------------------------------------    
+        self.attr1 = wx.ListItemAttr()
+        self.attr1.SetBackgroundColour((230, 230, 230))
+        self.attr2 = wx.ListItemAttr()
+        self.attr2.SetBackgroundColour("light blue")
+
+    #def PopulateList(self, dlist):
+        
+        #self.InsertColumn(0,'id', wx.LIST_FORMAT_LEFT)
+#        i=1
+        self.InsertColumn(0, 'forme', wx.LIST_FORMAT_RIGHT)
+        self.InsertColumn(1, 'nb', wx.LIST_FORMAT_RIGHT)
+        self.InsertColumn(2, 'type', wx.LIST_FORMAT_RIGHT)
+        #self.InsertColumn(3, '', wx.LIST_FORMAT_RIGHT)
+
+        #ct = 0
+#        for key, data in dlist.iteritems():
+#            ct += 1
+#            index = self.InsertStringItem(sys.maxint, data[0])
+#            self.SetStringItem(index, 1, `data[1]`)
+#            self.SetStringItem(index, 2, data[2])
+#            self.SetStringItem(index, 3, '')
+#            self.SetItemData(index, key)
         
         
-        self.list.SetImageList(self.il, wx.IMAGE_LIST_SMALL)
-        self.PopulateList(dlist)
+        self.SetColumnWidth(0, 150)   
+        self.SetColumnWidth(1, 100)  
+        self.SetColumnWidth(2, 100)
+        #self.SetColumnWidth(3, wx.LIST_AUTOSIZE)
 
 
-        self.Bind(wx.EVT_SIZE, self.OnSize)
+        self.itemDataMap = dlist
+        self.itemIndexMap = dlist.keys()
+        self.SetItemCount(len(dlist))
+
+        #self.Bind(wx.EVT_SIZE, self.OnSize)
 
 
-        self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected, self.list)
-        self.Bind(wx.EVT_LIST_COL_CLICK, self.OnColClick, self.list)
+        self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected, self)
+        self.Bind(wx.EVT_LIST_COL_CLICK, self.OnColClick, self)
         # for wxMSW
         # for wxMSW
-        self.list.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.OnRightClick)
+        self.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.OnRightClick)
 
         # for wxGTK
 
         # for wxGTK
-        self.list.Bind(wx.EVT_RIGHT_UP, self.OnRightClick)
-        self.itemDataMap = dlist
+        self.Bind(wx.EVT_RIGHT_UP, self.OnRightClick)
 
 
+        #listmix.ListCtrlAutoWidthMixin.__init__(self)
         listmix.ColumnSorterMixin.__init__(self, 3)
         self.SortListItems(1, False)
         listmix.ColumnSorterMixin.__init__(self, 3)
         self.SortListItems(1, False)
-        self.do_greyline()
-#-----------------------------------------------------------------------------------------    
-
-    def PopulateList(self, dlist):
-        
-        #self.list.InsertColumn(0,'id', wx.LIST_FORMAT_LEFT)
-#        i=1
-        self.list.InsertColumn(0, 'forme', wx.LIST_FORMAT_RIGHT)
-        self.list.InsertColumn(1, 'nb', wx.LIST_FORMAT_RIGHT)
-        self.list.InsertColumn(2, 'type', wx.LIST_FORMAT_RIGHT)
-        self.list.InsertColumn(3, '', wx.LIST_FORMAT_RIGHT)
-
-        ct = 0
-        for key, data in dlist.iteritems():
-            ct += 1
-            index = self.list.InsertStringItem(sys.maxint, data[0])
-            self.list.SetStringItem(index, 1, `data[1]`)
-            self.list.SetStringItem(index, 2, data[2])
-            self.list.SetStringItem(index, 3, '')
-            self.list.SetItemData(index, key)
-        
-        self.list.SetColumnWidth(0, 150)   
-        self.list.SetColumnWidth(1, 100)  
-        self.list.SetColumnWidth(2, 100)
-        self.list.SetColumnWidth(3, wx.LIST_AUTOSIZE)
-
-
-        self.currentItem = 0
-
-    def do_greyline(self):
-        for row in xrange(self.list.GetItemCount()):
-            if row % 2 :
-                self.list.SetItemBackgroundColour(row, (230, 230, 230))
-            else :
-                self.list.SetItemBackgroundColour(row, wx.WHITE)
+        #self.do_greyline()
+
+        #self.currentItem = 0
+
+    def OnGetItemText(self, item, col):
+        index=self.itemIndexMap[item]
+        s = self.itemDataMap[index][col]
+        return s
+
+    def OnGetItemAttr(self, item):
+        #index=self.itemIndexMap[item]
+        #genre=self.itemDataMap[index][2]
+        if item % 2 :
+            return self.attr1
+        else :
+            return self.attr2
+
+#    def do_greyline(self):
+#        for row in xrange(self.GetItemCount()):
+#            if row % 2 :
+#                self.SetItemBackgroundColour(row, (230, 230, 230))
+#            else :
+#                self.SetItemBackgroundColour(row, wx.WHITE)
                 
     def OnColClick(self, event):
                 
     def OnColClick(self, event):
-        self.do_greyline()
+        pass
+        #self.do_greyline()
         
     # Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py
     def GetListCtrl(self):
         
     # Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py
     def GetListCtrl(self):
-        return self.list
+        return self
 
     # Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py
     def GetSortImages(self):
         return (self.sm_dn, self.sm_up)
 
 
     # Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py
     def GetSortImages(self):
         return (self.sm_dn, self.sm_up)
 
+    def SortItems(self,sorter=cmp):
+        items = list(self.itemDataMap.keys())
+        items.sort(sorter)
+        self.itemIndexMap = items
+        
+        # redraw the list
+        self.Refresh()
+
 
     def OnRightDown(self, event):
         x = event.GetX()
         y = event.GetY()
 
     def OnRightDown(self, event):
         x = event.GetX()
         y = event.GetY()
-        item, flags = self.list.HitTest((x, y))
+        item, flags = self.HitTest((x, y))
 
         if flags & wx.LIST_HITTEST_ONITEM:
 
         if flags & wx.LIST_HITTEST_ONITEM:
-            self.list.Select(item)
+            self.Select(item)
 
         event.Skip()
 
 
     def getColumnText(self, index, col):
 
         event.Skip()
 
 
     def getColumnText(self, index, col):
-        item = self.list.GetItem(index, col)
+        item = self.GetItem(index, col)
         return item.GetText()
 
 
         return item.GetText()
 
 
@@ -172,7 +195,7 @@ class ListPanel(wx.Panel, listmix.ColumnSorterMixin):
 
     def OnPopupOne(self, event):
         corpus = self.gparent.corpus
 
     def OnPopupOne(self, event):
         corpus = self.gparent.corpus
-        word = self.getColumnText(self.list.GetFirstSelected(), 0)
+        word = self.getColumnText(self.GetFirstSelected(), 0)
         lems = corpus.getlems()
         rep = []
         for forme in lems[word].formes :
         lems = corpus.getlems()
         rep = []
         for forme in lems[word].formes :
@@ -186,7 +209,7 @@ class ListPanel(wx.Panel, listmix.ColumnSorterMixin):
         corpus = self.gparent.corpus
         win = message(self, -1, u"Concordancier", size=(600, 200), style=wx.DEFAULT_FRAME_STYLE)
         avap = 60
         corpus = self.gparent.corpus
         win = message(self, -1, u"Concordancier", size=(600, 200), style=wx.DEFAULT_FRAME_STYLE)
         avap = 60
-        item = self.getColumnText(self.list.GetFirstSelected(), 0)
+        item = self.getColumnText(self.GetFirstSelected(), 0)
         listmot = corpus.getlems()[item].formes
         #uce_ok = [corpus.formes[corpus.idformes[forme].forme][1] for forme in listmot]
         uce_ok = corpus.getlemuces(item)#list(set([tuple(val) for line in uce_ok for val in line]))
         listmot = corpus.getlems()[item].formes
         #uce_ok = [corpus.formes[corpus.idformes[forme].forme][1] for forme in listmot]
         uce_ok = corpus.getlemuces(item)#list(set([tuple(val) for line in uce_ok for val in line]))
@@ -240,9 +263,9 @@ class ListPanel(wx.Panel, listmix.ColumnSorterMixin):
         win.HtmlPage.SetPage(txt) 
         win.Show(True)
         
         win.HtmlPage.SetPage(txt) 
         win.Show(True)
         
-    def OnSize(self, event):
-        w, h = self.GetClientSizeTuple()
-        self.list.SetDimensions(0, 0, w, h)
+#    def OnSize(self, event):
+#        w, h = self.GetClientSizeTuple()
+#        self.SetDimensions(0, 0, w, h)
 
 class message(wx.Frame):
     def __init__(self, *args, **kwds):
 
 class message(wx.Frame):
     def __init__(self, *args, **kwds):
index 7a847a6..45022f3 100644 (file)
@@ -921,11 +921,15 @@ class WordCloudRScript(PrintRScript) :
         selected.col <- read.table("%s")
         toprint <- as.matrix(act[selected.col[,1] + 1,])
         rownames(toprint) <- rownames(act)[selected.col[,1] + 1]
         selected.col <- read.table("%s")
         toprint <- as.matrix(act[selected.col[,1] + 1,])
         rownames(toprint) <- rownames(act)[selected.col[,1] + 1]
+        maxword <- %i
+        if (nrow(toprint) > maxword) {
+            toprint <- as.matrix(toprint[order(toprint[,1], decreasing=TRUE),])
+            toprint <- as.matrix(toprint[1:maxword,])
+        }
         open_file_graph("%s", width = %i, height = %i)
         par(bg=rgb%s)
         wordcloud(row.names(toprint), toprint[,1], scale=c(%f,%f), random.order=FALSE, colors=rgb%s)
         dev.off()
         open_file_graph("%s", width = %i, height = %i)
         par(bg=rgb%s)
         wordcloud(row.names(toprint), toprint[,1], scale=c(%f,%f), random.order=FALSE, colors=rgb%s)
         dev.off()
-        """ % (ffr(self.analyse.pathout['actives_eff.csv']), ffr(self.analyse.pathout['selected.csv']),
-                ffr(self.parametres['graphout']), self.parametres['width'], self.parametres['height'], bg_col, self.parametres['maxcex'], self.parametres['mincex'], txt_col)
+        """ % (ffr(self.analyse.pathout['actives_eff.csv']), ffr(self.analyse.pathout['selected.csv']), self.parametres['maxword'], ffr(self.parametres['graphout']), self.parametres['width'], self.parametres['height'], bg_col, self.parametres['maxcex'], self.parametres['mincex'], txt_col)
         self.add(txt)
         self.write()
         self.add(txt)
         self.write()
index 3e6f150..73f8ff7 100644 (file)
@@ -33,188 +33,221 @@ from textclassechd import ClasseCHD
 from shutil import copyfile
 
 #---------------------------------------------------------------------------
 from shutil import copyfile
 
 #---------------------------------------------------------------------------
+class ProfListctrlPanel(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.ColumnSorterMixin):
+    def __init__(self, parent, gparent, profclasse, Alceste=False, cl=0):
+        wx.ListCtrl.__init__( self, parent, -1, style=wx.LC_REPORT|wx.LC_VIRTUAL|wx.LC_HRULES|wx.LC_VRULES)
 
 
-class ProfListctrl(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin):
-    def __init__(self, parent, ID, pos=wx.DefaultPosition,
-                 size=wx.DefaultSize, style=0):
-        wx.ListCtrl.__init__(self, parent, ID, pos, size, style)
-        listmix.ListCtrlAutoWidthMixin.__init__(self)
-
-
-class ProfListctrlPanel(wx.Panel, listmix.ColumnSorterMixin):
-    def __init__(self, parent, gparent, ProfClasse, Alceste=False, cl=0):
         self.parent = parent
         self.parent = parent
-        classe = ProfClasse
-        self.cl = cl
-        self.Source = gparent
-        if 'tableau' in dir(self.Source):
-            self.tableau = self.Source.tableau
         self.Alceste = Alceste
         self.Alceste = Alceste
-        self.var_mod = {}
-        
+        self.Source = gparent
+        self.cl = cl
 
 
-        wx.Panel.__init__(self, parent, -1, style=wx.WANTS_CHARS)
-        
-        search_id = wx.NewId()
-        searchall_id = wx.NewId()
-        self.parent.Bind(wx.EVT_MENU, self.onsearch, id = search_id)
-        self.parent.Bind(wx.EVT_MENU, self.onsearchall, id = searchall_id)
-        self.accel_tbl = wx.AcceleratorTable([(wx.ACCEL_CTRL, ord('F'), search_id),
-                                              (wx.ACCEL_CTRL|wx.ACCEL_SHIFT, ord('F'), searchall_id)])
-        self.SetAcceleratorTable(self.accel_tbl)
-       
-        self.il = wx.ImageList(16, 16)
-#        self.idx1 = self.il.Add(images.getSmilesBitmap())
-        self.sm_up = self.il.Add(getSmallUpArrowBitmap())
-        self.sm_dn = self.il.Add(getSmallDnArrowBitmap())
-        tID = wx.NewId()
-
-        self.list = ProfListctrl(self, tID,
-                                 style=wx.LC_REPORT 
-                                 | wx.BORDER_NONE
-                                 | wx.LC_EDIT_LABELS
-                                 | wx.LC_SORT_ASCENDING
-                                 )
-        line1 = classe.pop(0)
-        limit = 0
-        limitsup = 0
-        i = 0
-        dictdata = {}
-        classen = [line for line in classe if line[0] != '*' and line[0] != '*****']
-        if len(classen) == 0 :
-            lenact = 0
-            lensup = 0
-            lenet = 0
-        else :
-            lenact = [i for i,b in enumerate(classe) if b[0] == '*****']
-            if lenact == [] :
-                lensup = 0
-                lenact = [i for i,b in enumerate(classe) if b[0] == '*']
-                if lenact == [] :
-                    lenact = len(classen)
-                    lenet = 0
-                else :
-                    lenact = 0
-                    lenet = len(classen)
-            else :
-                lenact = lenact[0]
-                lensup = [i for i,b in enumerate(classe[1:]) if b[0] == '*']
-                if lensup != [] :
-                   lensup = lensup[0] - lenact
-                   lenet = len(classen) - lensup
-                else :
-                   lensup == 0
-                   lenet = len(classen)
-        debsup = lenact
-                
-        self.lenact = lenact
-
-        debet = lenact + lensup
+        line1 = profclasse.pop(0)
+        classen = [line for line in profclasse if line[0] != '*' and line[0] != '*****']
+        try :
+            self.lenact = profclasse.index([u'*****', u'*', u'*', u'*', u'*', u'*', '', ''])
+            profclasse.pop(self.lenact)
+        except ValueError:
+            self.lenact = len(profclasse)
+        try :
+            self.lensup = profclasse.index([u'*', u'*', u'*', u'*', u'*', u'*', '', ''])
+            self.lensup = self.lensup - self.lenact
+            profclasse.pop(self.lensup)
+        except ValueError: 
+            self.lensup = 0
+        self.lenet = len(profclasse) - (self.lenact + self.lensup)
+        print self.lenact, self.lensup, self.lenet
+        for i,  line in enumerate(classen) :
+            line[0] = i
         dictdata = dict(zip([i for i in range(0,len(classen))], classen))
         dictdata = dict(zip([i for i in range(0,len(classen))], classen))
-        self.list.SetImageList(self.il, wx.IMAGE_LIST_SMALL)
-        
-        self.PopulateList(dictdata, debet, debsup, Alceste)
-
-        self.Bind(wx.EVT_SIZE, self.OnSize)
-        self.Bind(wx.EVT_LIST_COL_CLICK, self.OnColClick)
-        self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected, self.list)
-
-        # for wxMSW
-        self.list.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.OnRightClick)
-
-        # for wxGTK
-        self.list.Bind(wx.EVT_RIGHT_UP, self.OnRightClick)
-        self.itemDataMap = dictdata
-        listmix.ColumnSorterMixin.__init__(self, 8)
-        self.do_greyline()
-#-----------------------------------------------------------------------------------------    
 
 
-    def PopulateList(self, dictdata, limit, limitsup, Alceste):
-        
-        
-            # for normal, simple columns, you can add them like this:
-        self.list.InsertColumn(0, "num", wx.LIST_FORMAT_RIGHT)
-        self.list.InsertColumn(1, "eff. uce", wx.LIST_FORMAT_RIGHT)
-        self.list.InsertColumn(2, "eff. total", wx.LIST_FORMAT_RIGHT)
-        self.list.InsertColumn(3, "pourcentage", wx.LIST_FORMAT_RIGHT)
-        self.list.InsertColumn(4, "chi2", wx.LIST_FORMAT_RIGHT)
-        self.list.InsertColumn(5, "Type", wx.LIST_FORMAT_RIGHT)
-        self.list.InsertColumn(6, "forme", wx.LIST_FORMAT_RIGHT)
-        self.list.InsertColumn(7, "p", wx.LIST_FORMAT_RIGHT)
-        
-        for key in dictdata : #.iteritems():
-                index = self.list.InsertStringItem(sys.maxint, '%4i' % key)
-                i = 1
-                for val in dictdata[key][1:]:
-                    self.list.SetStringItem(index, i, str(dictdata[key][i]))
-                    i += 1
-                self.list.SetItemData(index, key)
-
-        self.list.SetColumnWidth(0, 60)
-        self.list.SetColumnWidth(1, 70)
-        self.list.SetColumnWidth(2, 80)
-        self.list.SetColumnWidth(3, 100)
-        self.list.SetColumnWidth(4, 70)
-        self.list.SetColumnWidth(5, wx.LIST_AUTOSIZE)
-        self.list.SetColumnWidth(6, wx.LIST_AUTOSIZE)
-        self.list.SetColumnWidth(7, wx.LIST_AUTOSIZE)
-
-        # show how to change the colour of a couple items
-        for i in range(limitsup, limit):
-            item = self.list.GetItem(i)
-            item.SetTextColour(wx.RED) 
-            self.list.SetItem(item)
-        
-        for i in range(limit, len(dictdata)):
-            item = self.list.GetItem(i)
-            item.SetTextColour(wx.BLUE)
-            self.list.SetItem(item)          
-        
         if self.lenact != 0 :
         if self.lenact != 0 :
-            self.la = [self.getColumnText(i,6) for i in range(0, self.lenact)]
-            self.lchi = [float(self.getColumnText(i,4)) for i in range(0, self.lenact)]
-            self.lfreq = [int(self.getColumnText(i,1)) for i in range(0, self.lenact)]
+            self.la = [dictdata[i][6] for i in range(0, self.lenact)]
+            self.lchi = [dictdata[i][4] for i in range(0, self.lenact)]
+            self.lfreq = [dictdata[i][1] for i in range(0, self.lenact)]
         else :
             self.la = []
             self.lchi = []
             self.lfreq = []
         else :
             self.la = []
             self.lchi = []
             self.lfreq = []
+            
+        #adding some art
+        self.il = wx.ImageList(16, 16)
+        a={"sm_up":"GO_UP","sm_dn":"GO_DOWN","w_idx":"WARNING","e_idx":"ERROR","i_idx":"QUESTION"}
+        for k,v in a.items():
+            s="self.%s= self.il.Add(wx.ArtProvider_GetBitmap(wx.ART_%s,wx.ART_TOOLBAR,(16,16)))" % (k,v)
+            exec(s)
+        self.SetImageList(self.il, wx.IMAGE_LIST_SMALL)
+
+        #adding some attributes (colourful background for each item rows)
+        self.attr1 = wx.ListItemAttr()
+        self.attr1.SetBackgroundColour((220, 220, 220))
+        self.attrsg = wx.ListItemAttr()
+        self.attrsg.SetBackgroundColour((230, 230, 230))
+        self.attr2 = wx.ListItemAttr()
+        self.attr2.SetBackgroundColour((190, 249, 236))
+        self.attr2s = wx.ListItemAttr()
+        self.attr2s.SetBackgroundColour((211, 252, 244))        
+        self.attr3 = wx.ListItemAttr()
+        self.attr3.SetBackgroundColour((245, 180, 180))
+        self.attr3s = wx.ListItemAttr()
+        self.attr3s.SetBackgroundColour((245, 190, 190))
+
+
+        self.InsertColumn(0, "num", wx.LIST_FORMAT_RIGHT)
+        self.InsertColumn(1, "eff. uce", wx.LIST_FORMAT_RIGHT)
+        self.InsertColumn(2, "eff. total", wx.LIST_FORMAT_RIGHT)
+        self.InsertColumn(3, "pourcentage", wx.LIST_FORMAT_RIGHT)
+        self.InsertColumn(4, "chi2", wx.LIST_FORMAT_RIGHT)
+        self.InsertColumn(5, "Type", wx.LIST_FORMAT_RIGHT)
+        self.InsertColumn(6, "forme", wx.LIST_FORMAT_RIGHT)
+        self.InsertColumn(7, "p", wx.LIST_FORMAT_RIGHT)
+        
 
 
-    def do_greyline(self):
-        for row in xrange(self.list.GetItemCount()):
-            if row % 2 :
-                self.list.SetItemBackgroundColour(row, (230, 230, 230))
-            else :
-                self.list.SetItemBackgroundColour(row, wx.WHITE)
+        self.SetColumnWidth(0, 60)
+        self.SetColumnWidth(1, 70)
+        self.SetColumnWidth(2, 80)
+        self.SetColumnWidth(3, 100)
+        self.SetColumnWidth(4, 70)
+        self.SetColumnWidth(5, 60)
+        self.SetColumnWidth(6, 140)
+        self.SetColumnWidth(7, wx.LIST_AUTOSIZE)
+
+        #These two should probably be passed to init more cleanly
+        #setting the numbers of items = number of elements in the dictionary
+        self.itemDataMap = dictdata
+        self.itemIndexMap = dictdata.keys()
+        self.SetItemCount(len(dictdata))
+        
+        #mixins
+        listmix.ListCtrlAutoWidthMixin.__init__(self)
+        listmix.ColumnSorterMixin.__init__(self, len(classen[0]))
 
 
+        #sort by genre (column 2), A->Z ascending order (1)
+        self.SortListItems(0, 1)
 
 
-    # Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py
-    def GetListCtrl(self):
-        return self.list
+        #events
+        #self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected)
+        #self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnItemActivated)
+        #self.Bind(wx.EVT_LIST_ITEM_DESELECTED, self.OnItemDeselected)
+        self.Bind(wx.EVT_LIST_COL_CLICK, self.OnColClick)
 
 
-    # Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py
-    def GetSortImages(self):
-        return (self.sm_dn, self.sm_up)
+        # for wxMSW
+        self.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.OnRightClick)
 
 
+        # for wxGTK
+        self.Bind(wx.EVT_RIGHT_UP, self.OnRightClick)
 
 
-    def OnRightDown(self, event):
-        x = event.GetX()
-        y = event.GetY()
-        item, flags = self.list.HitTest((x, y))
+        #for searching
+        search_id = wx.NewId()
+        searchall_id = wx.NewId()
+        self.parent.Bind(wx.EVT_MENU, self.onsearch, id = search_id)
+        self.parent.Bind(wx.EVT_MENU, self.onsearchall, id = searchall_id)
+        self.accel_tbl = wx.AcceleratorTable([(wx.ACCEL_CTRL, ord('F'), search_id),
+                                              (wx.ACCEL_CTRL|wx.ACCEL_SHIFT, ord('F'), searchall_id)])
+        self.SetAcceleratorTable(self.accel_tbl)
 
 
-        if flags & wx.LIST_HITTEST_ONITEM:
-            self.list.Select(item)
 
 
+
+    def OnColClick(self,event):
         event.Skip()
 
         event.Skip()
 
+    def OnItemSelected(self, event):
+        self.currentItem = event.m_itemIndex
+        print 'OnItemSelected: "%s", "%s", "%s", "%s"\n' % (self.currentItem, self.GetItemText(self.currentItem), self.getColumnText(self.currentItem, 1), self.getColumnText(self.currentItem, 2))
+        #self.log.WriteText('OnItemSelected: "%s", "%s", "%s", "%s"\n' %
+        #                   (self.currentItem,
+        #                    self.GetItemText(self.currentItem),
+        #                    self.getColumnText(self.currentItem, 1),
+        #                    self.getColumnText(self.currentItem, 2)))
+
+    def OnItemActivated(self, event):
+        self.currentItem = event.m_itemIndex
+        print "OnItemActivated: %s\nTopItem: %s\n" % (self.GetItemText(self.currentItem), self.GetTopItem())
+        #self.log.WriteText("OnItemActivated: %s\nTopItem: %s\n" %
+        #                   (self.GetItemText(self.currentItem), self.GetTopItem()))
 
     def getColumnText(self, index, col):
 
     def getColumnText(self, index, col):
-        item = self.list.GetItem(index, col)
+        item = self.GetItem(index, col)
         return item.GetText()
 
         return item.GetText()
 
+    def OnItemDeselected(self, evt):
+        pass
+        #self.log.WriteText("OnItemDeselected: %s" % evt.m_itemIndex)
+
+
+    #---------------------------------------------------
+    # These methods are callbacks for implementing the
+    # "virtualness" of the list...
+
+    def OnGetItemText(self, item, col):
+        index=self.itemIndexMap[item]
+        s = self.itemDataMap[index][col]
+        return s
+
+    def OnGetItemImage(self, item):
+        index=self.itemIndexMap[item]
+        genre=self.itemDataMap[index][2]
+
+        if genre=="Rock":
+            return self.w_idx
+        elif genre=="Jazz":
+            return self.e_idx
+        elif genre=="New Age":
+            return self.i_idx
+        else:
+            return -1
+
+    def OnGetItemAttr(self, item):
+        index=self.itemIndexMap[item]
+        #genre=self.itemDataMap[index][2]
+        if index < self.lenact :
+            if item % 2 :
+                return self.attr1
+            else :
+                return self.attrsg
+        elif index >= self.lenact and index < (self.lenact + self.lensup) :
+            if item % 2 :
+                return self.attr2
+            else :
+                return self.attr2s
+        elif index >= (self.lenact + self.lensup) :
+            if item % 2 :
+                return self.attr3
+            else :
+                return self.attr3s
+        else :
+            return None
+
+#        if genre=="Rock":
+#            return self.attr2
+#        elif genre=="Jazz":
+#            return self.attr1
+#        elif genre=="New Age":
+#            return self.attr3
+#        else:
+#            return None
+
+    #---------------------------------------------------
+    # Matt C, 2006/02/22
+    # Here's a better SortItems() method --
+    # the ColumnSorterMixin.__ColumnSorter() method already handles the ascending/descending,
+    # and it knows to sort on another column if the chosen columns have the same value.
+
+    def SortItems(self,sorter=cmp):
+        items = list(self.itemDataMap.keys())
+        items.sort(sorter)
+        self.itemIndexMap = items
+        
+        # redraw the list
+        self.Refresh()
 
 
-    def OnItemSelected(self, event):
-        self.currentItem = event.m_itemIndex
-        event.Skip()
+    # Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py
+    def GetListCtrl(self):
+        return self
+
+    # Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py
+    def GetSortImages(self):
+        return (self.sm_dn, self.sm_up)
 
     def onsearch(self, evt) :
         self.dial = SearchDial(self, self, 6, True)
 
     def onsearch(self, evt) :
         self.dial = SearchDial(self, self, 6, True)
@@ -275,8 +308,8 @@ class ProfListctrlPanel(wx.Panel, listmix.ColumnSorterMixin):
                 self.Bind(wx.EVT_MENU, self.onproxe, id = self.popup_proxe)
                 self.Bind(wx.EVT_MENU, self.onlexdendro, id = self.idlexdendro)
                 self.Bind(wx.EVT_MENU, self.onexport, id = self.idexport)
                 self.Bind(wx.EVT_MENU, self.onproxe, id = self.popup_proxe)
                 self.Bind(wx.EVT_MENU, self.onlexdendro, id = self.idlexdendro)
                 self.Bind(wx.EVT_MENU, self.onexport, id = self.idexport)
-              #  self.Bind(wx.EVT_MENU, self.on_export_classes, id = self.export_classes)
-    #            self.Bind(wx.EVT_MENU, self.OnPopupThree, id=self.popupID3)
+             #  self.Bind(wx.EVT_MENU, self.on_export_classes, id = self.export_classes)
+   #            self.Bind(wx.EVT_MENU, self.OnPopupThree, id=self.popupID3)
     
             # make a menu
             menu = wx.Menu()
     
             # make a menu
             menu = wx.Menu()
@@ -350,7 +383,7 @@ class ProfListctrlPanel(wx.Panel, listmix.ColumnSorterMixin):
         chistable.pop(0)
         vchistable = [line[1:] for line in chistable]
         fchistable = [line[0] for line in chistable]
         chistable.pop(0)
         vchistable = [line[1:] for line in chistable]
         fchistable = [line[0] for line in chistable]
-        word = self.getColumnText(self.list.GetFirstSelected(), 6)
+        word = self.getColumnText(self.GetFirstSelected(), 6)
         if len(word.split('_')) > 1 :
             var = word.split('_')[0]
             words = [word for word in self.var_mod[var]]
         if len(word.split('_')) > 1 :
             var = word.split('_')[0]
             words = [word for word in self.var_mod[var]]
@@ -434,7 +467,7 @@ class ProfListctrlPanel(wx.Panel, listmix.ColumnSorterMixin):
         DoSimi(self, param = paramsimi, fromprof = ffr(self.filename), pathout = pathout, listactives = self.la, actives = act)
 
     def onwordgraph(self, evt):
         DoSimi(self, param = paramsimi, fromprof = ffr(self.filename), pathout = pathout, listactives = self.la, actives = act)
 
     def onwordgraph(self, evt):
-        word = self.getColumnText(self.list.GetFirstSelected(), 6)
+        word = self.getColumnText(self.GetFirstSelected(), 6)
         dlg = progressbar(self, 2)
         corpus = self.Source.corpus
         uces = corpus.lc[self.cl-1]
         dlg = progressbar(self, 2)
         corpus = self.Source.corpus
         uces = corpus.lc[self.cl-1]
@@ -483,27 +516,6 @@ class ProfListctrlPanel(wx.Panel, listmix.ColumnSorterMixin):
             self.tableau.actives[val] = [self.lfreq[i]]
         DoSimi(self, param = paramsimi, fromprof = ffr(self.filename), pathout = pathout, wordgraph = word)
 
             self.tableau.actives[val] = [self.lfreq[i]]
         DoSimi(self, param = paramsimi, fromprof = ffr(self.filename), pathout = pathout, wordgraph = word)
 
-
-    def OnPopupOne(self, event):
-        corpus = self.Source.corpus
-        #print 'ATTENTION PRINT ET TABLE'
-        #corpus.make_et_table()
-        word = self.getColumnText(self.list.GetFirstSelected(), 6)
-        lems = corpus.getlems()
-        uces = corpus.lc[self.cl-1]
-        rep = []
-        #FIXME : donner aussi eff reel a la place de nb uce
-        for forme in lems[word].formes :
-            ucef = list(set(corpus.getworduces(forme)).intersection(uces))
-            #ucef = [uce for uce in corpus.formes[forme][1] if uce in uces]
-            if ucef != [] :
-                nb = len(ucef)
-                rep.append([corpus.getforme(forme).forme, nb])
-        win = message(self, -1, u"Formes associées", size=(300, 200), style=wx.DEFAULT_FRAME_STYLE)
-        win.html = '<html>\n' + '<br>'.join([' : '.join([str(val) for val in forme]) for forme in rep]) + '\n</html>'
-        win.HtmlPage.SetPage(win.html)
-        win.Show(True)
-
     def on_graph(self, evt):
         dlg = progressbar(self, 2)
         corpus = self.Source.corpus
     def on_graph(self, evt):
         dlg = progressbar(self, 2)
         corpus = self.Source.corpus
@@ -638,11 +650,11 @@ class ProfListctrlPanel(wx.Panel, listmix.ColumnSorterMixin):
         chistable.pop(0)
         vchistable = [line[1:] for line in chistable]
         fchistable = [line[0] for line in chistable]
         chistable.pop(0)
         vchistable = [line[1:] for line in chistable]
         fchistable = [line[0] for line in chistable]
-        words = [self.getColumnText(self.list.GetFirstSelected(), 6)]
+        words = [self.getColumnText(self.GetFirstSelected(), 6)]
         tableout = [vchistable[fchistable.index(words[0])]]
         tableout = [vchistable[fchistable.index(words[0])]]
-        last = self.list.GetFirstSelected()
-        while self.list.GetNextSelected(last) != -1:
-            last = self.list.GetNextSelected(last)
+        last = self.GetFirstSelected()
+        while self.GetNextSelected(last) != -1:
+            last = self.GetNextSelected(last)
             word = self.getColumnText(last, 6)
             words.append(word)
             tableout.append(vchistable[fchistable.index(word)])
             word = self.getColumnText(last, 6)
             words.append(word)
             tableout.append(vchistable[fchistable.index(word)])
@@ -673,11 +685,11 @@ class ProfListctrlPanel(wx.Panel, listmix.ColumnSorterMixin):
         chistable.pop(0)
         vchistable = [line[1:] for line in chistable]
         fchistable = [line[0] for line in chistable]
         chistable.pop(0)
         vchistable = [line[1:] for line in chistable]
         fchistable = [line[0] for line in chistable]
-        words = [self.getColumnText(self.list.GetFirstSelected(), 6)]
+        words = [self.getColumnText(self.GetFirstSelected(), 6)]
         tableout = [vchistable[fchistable.index(words[0])]]
         tableout = [vchistable[fchistable.index(words[0])]]
-        last = self.list.GetFirstSelected()
-        while self.list.GetNextSelected(last) != -1:
-            last = self.list.GetNextSelected(last)
+        last = self.GetFirstSelected()
+        while self.GetNextSelected(last) != -1:
+            last = self.GetNextSelected(last)
             word = self.getColumnText(last, 6)
             words.append(word)
             tableout.append(vchistable[fchistable.index(word)])
             word = self.getColumnText(last, 6)
             words.append(word)
             tableout.append(vchistable[fchistable.index(word)])
@@ -714,10 +726,10 @@ class ProfListctrlPanel(wx.Panel, listmix.ColumnSorterMixin):
 
     def make_concord(self, uces, title, color = 'red') :
         corpus = self.Source.corpus
 
     def make_concord(self, uces, title, color = 'red') :
         corpus = self.Source.corpus
-        ListWord = [self.getColumnText(self.list.GetFirstSelected(), 6)]
-        last = self.list.GetFirstSelected()
-        while self.list.GetNextSelected(last) != -1:
-            last = self.list.GetNextSelected(last)
+        ListWord = [self.getColumnText(self.GetFirstSelected(), 6)]
+        last = self.GetFirstSelected()
+        while self.GetNextSelected(last) != -1:
+            last = self.GetNextSelected(last)
             ListWord.append(self.getColumnText(last, 6))
         listmot = [forme for item in ListWord for forme in corpus.getlems()[item].formes]
         win = message(self, -1, title, size=(600, 500), style=wx.DEFAULT_FRAME_STYLE)
             ListWord.append(self.getColumnText(last, 6))
         listmot = [forme for item in ListWord for forme in corpus.getlems()[item].formes]
         win = message(self, -1, title, size=(600, 500), style=wx.DEFAULT_FRAME_STYLE)
@@ -760,68 +772,825 @@ class ProfListctrlPanel(wx.Panel, listmix.ColumnSorterMixin):
         win.Show(True)
 
     def OnPopupFive(self, event):
         win.Show(True)
 
     def OnPopupFive(self, event):
-        word = self.getColumnText(self.list.GetFirstSelected(), 6)
+        word = self.getColumnText(self.GetFirstSelected(), 6)
         lk = "http://www.cnrtl.fr/definition/" + word
         webbrowser.open(lk)
 
     def OnPopupSix(self, event):  
         lk = "http://www.cnrtl.fr/definition/" + word
         webbrowser.open(lk)
 
     def OnPopupSix(self, event):  
-        word = self.getColumnText(self.list.GetFirstSelected(), 6)
+        word = self.getColumnText(self.GetFirstSelected(), 6)
         lk = "http://www.cnrtl.fr/etymologie/" + word
         webbrowser.open(lk)
         
     def OnPopupSeven(self, event):        
         lk = "http://www.cnrtl.fr/etymologie/" + word
         webbrowser.open(lk)
         
     def OnPopupSeven(self, event):        
-        word = self.getColumnText(self.list.GetFirstSelected(), 6)
+        word = self.getColumnText(self.GetFirstSelected(), 6)
         lk = "http://www.cnrtl.fr/synonymie/" + word
         webbrowser.open(lk)
         
     def OnPopupHeight(self, event):  
         lk = "http://www.cnrtl.fr/synonymie/" + word
         webbrowser.open(lk)
         
     def OnPopupHeight(self, event):  
-        word = self.getColumnText(self.list.GetFirstSelected(), 6)
+        word = self.getColumnText(self.GetFirstSelected(), 6)
         lk = "http://www.cnrtl.fr/antonymie/" + word
         webbrowser.open(lk)
         
     def OnPopupNine(self, event):            
         lk = "http://www.cnrtl.fr/antonymie/" + word
         webbrowser.open(lk)
         
     def OnPopupNine(self, event):            
-        word = self.getColumnText(self.list.GetFirstSelected(), 6)
+        word = self.getColumnText(self.GetFirstSelected(), 6)
         lk = "http://www.cnrtl.fr/morphologie/" + word
         webbrowser.open(lk)
 
     def onproxe(self, evt) :
         lk = "http://www.cnrtl.fr/morphologie/" + word
         webbrowser.open(lk)
 
     def onproxe(self, evt) :
-        word = self.getColumnText(self.list.GetFirstSelected(), 6)
+        word = self.getColumnText(self.GetFirstSelected(), 6)
         lk = "http://www.cnrtl.fr/proxemie/" + word
         webbrowser.open(lk)
         lk = "http://www.cnrtl.fr/proxemie/" + word
         webbrowser.open(lk)
+#
 
 
-    def OnSize(self, event):
-        w, h = self.GetClientSizeTuple()
-        self.list.SetDimensions(0, 0, w, h)
-        
-    def OnColClick(self, event):
-        self.do_greyline()
-
-
-class wliste(wx.Frame):
-    def __init__(self, parent, id, title, d, fline, size=(600, 500)):
-        wx.Frame.__init__(self, parent, id)
-        self.liste = ListForSpec(self, parent, d, fline)
-        self.button_1 = wx.Button(self, -1, "Fermer")
-        self.Bind(wx.EVT_BUTTON, self.OnCloseMe, self.button_1)
-        self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
-        self.__do_layout()
-
-    def __do_layout(self):
-        sizer_1 = wx.BoxSizer(wx.VERTICAL)
-        sizer_2 = wx.BoxSizer(wx.VERTICAL)
-        sizer_2.Add(self.liste, 1, wx.EXPAND | wx.ADJUST_MINSIZE, 0)
-        sizer_2.Add(self.button_1, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ADJUST_MINSIZE, 0)
-        sizer_1.Add(sizer_2, 1, wx.EXPAND, 0)
-        self.SetAutoLayout(True)
-        self.SetSizer(sizer_1)
-        self.Layout()
-        
-    def OnCloseMe(self, event):
-        self.Close(True)
-
-    def OnCloseWindow(self, event):
-        self.Destroy()
-
+#---------------------------------------------------------------------------
+#class ProfListctrl(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin):
+#    def __init__(self, parent, ID, pos=wx.DefaultPosition,
+#                 size=wx.DefaultSize, style=0):
+#        wx.ListCtrl.__init__(self, parent, ID, pos, size, style)
+#        listmix.ListCtrlAutoWidthMixin.__init__(self)
+#
+#
+#class ProfListctrlPanel(wx.Panel, listmix.ColumnSorterMixin):
+#    def __init__(self, parent, gparent, ProfClasse, Alceste=False, cl=0):
+#        self.parent = parent
+#        classe = ProfClasse
+#        self.cl = cl
+#        self.Source = gparent
+#        if 'tableau' in dir(self.Source):
+#            self.tableau = self.Source.tableau
+#        self.Alceste = Alceste
+#        self.var_mod = {}
+#        
+#
+#        wx.Panel.__init__(self, parent, -1, style=wx.WANTS_CHARS)
+#        
+#        search_id = wx.NewId()
+#        searchall_id = wx.NewId()
+#        self.parent.Bind(wx.EVT_MENU, self.onsearch, id = search_id)
+#        self.parent.Bind(wx.EVT_MENU, self.onsearchall, id = searchall_id)
+#        self.accel_tbl = wx.AcceleratorTable([(wx.ACCEL_CTRL, ord('F'), search_id),
+#                                              (wx.ACCEL_CTRL|wx.ACCEL_SHIFT, ord('F'), searchall_id)])
+#        self.SetAcceleratorTable(self.accel_tbl)
+#       
+#        self.il = wx.ImageList(16, 16)
+##        self.idx1 = self.il.Add(images.getSmilesBitmap())
+#        self.sm_up = self.il.Add(getSmallUpArrowBitmap())
+#        self.sm_dn = self.il.Add(getSmallDnArrowBitmap())
+#        tID = wx.NewId()
+#
+#        self.list = ProfListctrl(self, tID,
+#                                 style=wx.LC_REPORT 
+#                                 | wx.BORDER_NONE
+#                                 | wx.LC_EDIT_LABELS
+#                                 | wx.LC_SORT_ASCENDING
+#                                 )
+#        line1 = classe.pop(0)
+#        limit = 0
+#        limitsup = 0
+#        i = 0
+#        dictdata = {}
+#        classen = [line for line in classe if line[0] != '*' and line[0] != '*****']
+#        if len(classen) == 0 :
+#            lenact = 0
+#            lensup = 0
+#            lenet = 0
+#        else :
+#            lenact = [i for i,b in enumerate(classe) if b[0] == '*****']
+#            if lenact == [] :
+#                lensup = 0
+#                lenact = [i for i,b in enumerate(classe) if b[0] == '*']
+#                if lenact == [] :
+#                    lenact = len(classen)
+#                    lenet = 0
+#                else :
+#                    lenact = 0
+#                    lenet = len(classen)
+#            else :
+#                lenact = lenact[0]
+#                lensup = [i for i,b in enumerate(classe[1:]) if b[0] == '*']
+#                if lensup != [] :
+#                   lensup = lensup[0] - lenact
+#                   lenet = len(classen) - lensup
+#                else :
+#                   lensup == 0
+#                   lenet = len(classen)
+#        debsup = lenact
+#                
+#        self.lenact = lenact
+#
+#        debet = lenact + lensup
+#        dictdata = dict(zip([i for i in range(0,len(classen))], classen))
+#        self.list.SetImageList(self.il, wx.IMAGE_LIST_SMALL)
+#        
+#        self.PopulateList(dictdata, debet, debsup, Alceste)
+#
+#        self.Bind(wx.EVT_SIZE, self.OnSize)
+#        self.Bind(wx.EVT_LIST_COL_CLICK, self.OnColClick)
+#        self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected, self.list)
+#
+#        # for wxMSW
+#        self.list.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.OnRightClick)
+#
+#        # for wxGTK
+#        self.list.Bind(wx.EVT_RIGHT_UP, self.OnRightClick)
+#        self.itemDataMap = dictdata
+#        listmix.ColumnSorterMixin.__init__(self, 8)
+#        self.do_greyline()
+##-----------------------------------------------------------------------------------------    
+#
+#    def PopulateList(self, dictdata, limit, limitsup, Alceste):
+#        
+#        
+#            # for normal, simple columns, you can add them like this:
+#        self.list.InsertColumn(0, "num", wx.LIST_FORMAT_RIGHT)
+#        self.list.InsertColumn(1, "eff. uce", wx.LIST_FORMAT_RIGHT)
+#        self.list.InsertColumn(2, "eff. total", wx.LIST_FORMAT_RIGHT)
+#        self.list.InsertColumn(3, "pourcentage", wx.LIST_FORMAT_RIGHT)
+#        self.list.InsertColumn(4, "chi2", wx.LIST_FORMAT_RIGHT)
+#        self.list.InsertColumn(5, "Type", wx.LIST_FORMAT_RIGHT)
+#        self.list.InsertColumn(6, "forme", wx.LIST_FORMAT_RIGHT)
+#        self.list.InsertColumn(7, "p", wx.LIST_FORMAT_RIGHT)
+#        
+#        for key in dictdata : #.iteritems():
+#                index = self.list.InsertStringItem(sys.maxint, '%4i' % key)
+#                i = 1
+#                for val in dictdata[key][1:]:
+#                    self.list.SetStringItem(index, i, str(dictdata[key][i]))
+#                    i += 1
+#                self.list.SetItemData(index, key)
+#
+#        self.list.SetColumnWidth(0, 60)
+#        self.list.SetColumnWidth(1, 70)
+#        self.list.SetColumnWidth(2, 80)
+#        self.list.SetColumnWidth(3, 100)
+#        self.list.SetColumnWidth(4, 70)
+#        self.list.SetColumnWidth(5, wx.LIST_AUTOSIZE)
+#        self.list.SetColumnWidth(6, wx.LIST_AUTOSIZE)
+#        self.list.SetColumnWidth(7, wx.LIST_AUTOSIZE)
+#
+#        # show how to change the colour of a couple items
+#        for i in range(limitsup, limit):
+#            item = self.list.GetItem(i)
+#            item.SetTextColour(wx.RED) 
+#            self.list.SetItem(item)
+#        
+#        for i in range(limit, len(dictdata)):
+#            item = self.list.GetItem(i)
+#            item.SetTextColour(wx.BLUE)
+#            self.list.SetItem(item)          
+#        
+#        if self.lenact != 0 :
+#            self.la = [self.getColumnText(i,6) for i in range(0, self.lenact)]
+#            self.lchi = [float(self.getColumnText(i,4)) for i in range(0, self.lenact)]
+#            self.lfreq = [int(self.getColumnText(i,1)) for i in range(0, self.lenact)]
+#        else :
+#            self.la = []
+#            self.lchi = []
+#            self.lfreq = []
+#
+#    def do_greyline(self):
+#        for row in xrange(self.list.GetItemCount()):
+#            if row % 2 :
+#                self.list.SetItemBackgroundColour(row, (230, 230, 230))
+#            else :
+#                self.list.SetItemBackgroundColour(row, wx.WHITE)
+#
+#
+#    # Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py
+#    def GetListCtrl(self):
+#        return self.list
+#
+#    # Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py
+#    def GetSortImages(self):
+#        return (self.sm_dn, self.sm_up)
+#
+#
+#    def OnRightDown(self, event):
+#        x = event.GetX()
+#        y = event.GetY()
+#        item, flags = self.list.HitTest((x, y))
+#
+#        if flags & wx.LIST_HITTEST_ONITEM:
+#            self.list.Select(item)
+#
+#        event.Skip()
+#
+#
+#    def getColumnText(self, index, col):
+#        item = self.list.GetItem(index, col)
+#        return item.GetText()
+#
+#
+#    def OnItemSelected(self, event):
+#        self.currentItem = event.m_itemIndex
+#        event.Skip()
+#
+#    def onsearch(self, evt) :
+#        self.dial = SearchDial(self, self, 6, True)
+#        self.dial.CenterOnParent()
+#        self.dial.ShowModal()
+#        self.dial.Destroy()
+#
+#    def onsearchall(self, evt) :
+#        if 'FrameSearch' not in dir(self.Source) :
+#            self.Source.FrameSearch = SearchFrame(self.parent, -1, u"Rechercher...", self.Source.corpus)
+#        self.dial = SearchDial(self, self.Source.FrameSearch.liste, 1, False)
+#        self.dial.CenterOnParent()
+#        self.dial.ShowModal()
+#        self.dial.Destroy()
+#
+#    def OnRightClick(self, event):
+#
+#        # only do this part the first time so the events are only bound once
+#        if self.Alceste:
+#            if not hasattr(self, "popupID1"):
+#                self.popupID1 = wx.NewId()
+#                self.popupID2 = wx.NewId()
+#                self.popupID3 = wx.NewId()
+#                self.popupID4 = wx.NewId()
+#                self.popupID5 = wx.NewId()
+#                self.popupID6 = wx.NewId()
+#                self.popupID7 = wx.NewId()
+#                self.popupID8 = wx.NewId()
+#                self.popupID9 = wx.NewId()
+#                #self.popupID10 = wx.NewId()
+#                self.popupIDgraph = wx.NewId()
+#                self.idseg = wx.NewId()
+#                self.iducecarac = wx.NewId()
+#                self.idtablex = wx.NewId()
+#                self.idchimod = wx.NewId()
+#                self.idwordgraph = wx.NewId()
+#                self.popup_proxe = wx.NewId()
+#                self.idlexdendro = wx.NewId()
+#                self.idexport = wx.NewId()
+#            #    self.export_classes = wx.NewId()
+#   
+#                self.Bind(wx.EVT_MENU, self.OnPopupOne, id=self.popupID1)
+#                self.Bind(wx.EVT_MENU, self.OnPopupTwo, id=self.popupID2)
+#                self.Bind(wx.EVT_MENU, self.OnPopupThree, id=self.popupID3)
+#                self.Bind(wx.EVT_MENU, self.OnPopupFour, id=self.popupID4)
+#                self.Bind(wx.EVT_MENU, self.OnPopupFive, id=self.popupID5)
+#                self.Bind(wx.EVT_MENU, self.OnPopupSix, id=self.popupID6)
+#                self.Bind(wx.EVT_MENU, self.OnPopupSeven, id=self.popupID7)
+#                self.Bind(wx.EVT_MENU, self.OnPopupHeight, id=self.popupID8)
+#                self.Bind(wx.EVT_MENU, self.OnPopupNine, id=self.popupID9)
+#                #self.Bind(wx.EVT_MENU, self.OnPopupSpec, id=self.popupID10)
+#                self.Bind(wx.EVT_MENU, self.on_graph, id=self.popupIDgraph)
+#                self.Bind(wx.EVT_MENU, self.on_segments, id=self.idseg)
+#                self.Bind(wx.EVT_MENU, self.on_uce_carac, id = self.iducecarac)
+#                self.Bind(wx.EVT_MENU, self.on_tablex, id = self.idtablex)
+#                self.Bind(wx.EVT_MENU, self.quest_var_mod, id = self.idchimod)
+#                self.Bind(wx.EVT_MENU, self.onwordgraph, id = self.idwordgraph)
+#                self.Bind(wx.EVT_MENU, self.onproxe, id = self.popup_proxe)
+#                self.Bind(wx.EVT_MENU, self.onlexdendro, id = self.idlexdendro)
+#                self.Bind(wx.EVT_MENU, self.onexport, id = self.idexport)
+#              #  self.Bind(wx.EVT_MENU, self.on_export_classes, id = self.export_classes)
+#    #            self.Bind(wx.EVT_MENU, self.OnPopupThree, id=self.popupID3)
+#    
+#            # make a menu
+#            menu = wx.Menu()
+#            menu.Append(self.popupID1, u"Formes associées")
+#            menu.Append(self.idtablex, u"Chi2 par classe")
+#            menu.Append(self.idlexdendro, u"Chi2 par classe + dendro")
+#            menu.Append(self.idchimod, u"Chi2 modalités de la variable")
+#            menu.Append(self.idwordgraph, u"Graphe du mot")
+#            #menu.Append(self.export_classes, u"Exporter le corpus...") 
+#            
+#            #menu.Append(self.popupID10, u"Spécificités")
+#
+#            menu_conc = wx.Menu()
+#            menu_conc.Append(self.popupID2, u"dans les uce de la classe")
+#            menu_conc.Append(self.popupID3, u"dans les uce classées")
+#            menu_conc.Append(self.popupID4, u"dans toutes les uce")
+#            menu.AppendMenu(-1, u"Concordancier", menu_conc) 
+#            menu_cnrtl = wx.Menu()      
+#            menu_cnrtl.Append(self.popupID5, u"Définition")
+#            menu_cnrtl.Append(self.popupID6, u"Etymologie")
+#            menu_cnrtl.Append(self.popupID7, u"Synonymie")
+#            menu_cnrtl.Append(self.popupID8, u"Antonymie")
+#            menu_cnrtl.Append(self.popupID9, u"Morphologie")
+#            menu_cnrtl.Append(self.popup_proxe, u"Proxémie")
+#            menu.AppendMenu(-1, u"Outils du CNRTL", menu_cnrtl)
+#            menu.AppendSeparator()
+#            menu.Append(self.popupIDgraph, u"Graphe de la classe")
+#            menu.Append(self.idseg, u"Segments répétés")
+#            menu.Append(self.iducecarac, u"UCE caractéristiques")
+#            menu.Append(self.idexport, 'Partitionner...')
+#            #menu.Append(self.popupID2, u"Concordancier")
+#    #        menu.Append(self.popupID3, "recharger")
+#    
+#            self.PopupMenu(menu)
+#            menu.Destroy()
+#        elif 'tableau' in dir(self.Source) :
+#            if not hasattr(self, "pop1"):
+#                self.pop1 = wx.NewId()
+#                self.pop2 = wx.NewId()
+#                self.pop3 = wx.NewId()
+#                self.Bind(wx.EVT_MENU, self.quest_simi, id=self.pop1)
+#                self.Bind(wx.EVT_MENU, self.on_tablex, id=self.pop2)
+#                self.Bind(wx.EVT_MENU, self.quest_var_mod, id=self.pop3)
+#
+#            menu = wx.Menu()
+#            menu.Append(self.pop2, u"Chi2 par classe")
+#            menu.Append(self.pop3, u"Chi2 modalités de la variable")
+#            menu.AppendSeparator()
+#            menu.Append(self.pop1, u"Graph de la classe")
+#            self.PopupMenu(menu)
+#            menu.Destroy()
+#
+#    def onexport(self, evt) :
+#        if 'corpus' in dir(self.Source):
+#            corpus = self.Source.corpus
+#        ClasseCHD(self.parent, corpus, self.cl)
+#
+#    def quest_var_mod(self, evt) :
+#        if 'corpus' in dir(self.Source):
+#            corpus = self.Source.corpus
+#            if self.var_mod == {} :
+#                self.var_mod = treat_var_mod([val for val in corpus.make_etoiles()])
+#        else :
+#            corpus = self.Source.tableau
+#            if self.var_mod == {} :
+#                self.var_mod = treat_var_mod([val for val in corpus.actives] + [val for val in corpus.sups])
+#        with codecs.open(self.Source.pathout['chisqtable'], 'r', corpus.parametres['syscoding']) as f :
+#            chistable = [line.replace('\n','').replace('\r','').replace('"','').replace(',','.').split(';') for line in f]
+#        title = chistable[0]
+#        title.pop(0)
+#        chistable.pop(0)
+#        vchistable = [line[1:] for line in chistable]
+#        fchistable = [line[0] for line in chistable]
+#        word = self.getColumnText(self.list.GetFirstSelected(), 6)
+#        if len(word.split('_')) > 1 :
+#            var = word.split('_')[0]
+#            words = [word for word in self.var_mod[var]]
+#            words.sort()
+#            tableout = []
+#            kwords = []
+#            for word in words :
+#                if word in fchistable :
+#                    tableout.append(vchistable[fchistable.index(word)])
+#                    kwords.append(word)
+#            tmpgraph = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
+#            txt = barplot(tableout, kwords, title, self.Source.parent.RscriptsPath['Rgraph'], tmpgraph)
+#            tmpscript = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
+#            file = open(tmpscript,'w')
+#            file.write(txt)
+#            file.close()
+#            exec_rcode(self.Source.parent.RPath, tmpscript, wait = True)
+#            win = MessageImage(self, -1, u"Graphique", size=(700, 500),style = wx.DEFAULT_FRAME_STYLE)
+#            win.addsaveimage(tmpgraph)
+#            txt = "<img src='%s'>" % tmpgraph
+#            win.HtmlPage.SetPage(txt)
+#            win.Show(True)
+#        else :
+#            dial = wx.MessageDialog(self, u"Ce n'est pas une forme du type variable_modalité", u"Problème", wx.OK | wx.ICON_WARNING)
+#            dial.CenterOnParent()
+#            dial.ShowModal()
+#            dial.Destroy()
+#
+#    def quest_simi(self, evt) :
+#        tableau = self.Source.tableau
+#        tab = tableau.make_table_from_classe(self.cl, self.la)
+#        pathout = ConstructPathOut(self.Source.pathout+'/', 'simi_classe_%i' %self.cl)
+#        self.filename = os.path.join(pathout,'mat01.csv')
+#        tableau.printtable(self.filename, tab)
+#        del tab
+#        paramsimi = {'coeff' : 0,
+#                          'layout' : 2,
+#                          'type' : 1,
+#                          'arbremax' : 1,
+#                          'coeff_tv' : 1,
+#                          'coeff_tv_nb' : 0,
+#                          'tvprop' : 0,
+#                          'tvmin' : 5,
+#                          'tvmax' : 30,
+#                          'coeff_te' : 1,
+#                          'coeff_temin' : 1,
+#                          'coeff_temax' : 10,
+#                          'label_v': 1,
+#                          'label_e': 1,
+#                          'vcex' : 0,
+#                          'vcexmin' : 10,
+#                          'vcexmax' : 25,
+#                          'cex' : 10,
+#                          'cexfromchi' : True,
+#                          'sfromchi': False,
+#                          'seuil_ok' : 0,
+#                          'seuil' : 1,
+#                          'cols' : (255,0,0),
+#                          'cola' : (200,200,200),
+#                          'width' : 1000,
+#                          'height' : 1000,
+#                          'first' : True,
+#                          'keep_coord' : True,
+#                          'alpha' : 20,
+#                          'film': False,
+#                          }
+##        self.tableau.actives = {}
+##        self.tableau.lchi = self.lchi
+##        self.tableau.chi = {}
+##        for i, val in enumerate(self.la) :
+##            self.tableau.actives[val] = [self.lfreq[i]]
+##            self.tableau.chi[val] = [self.lchi[i]]
+#                          
+#        act = {}
+#        self.tableau.chi = {}
+#        self.tableau.lchi = self.lchi
+#        self.tableau.parametre['fromprof'] = True
+#        for i, val in enumerate(self.la) :
+#            act[val] = [self.lfreq[i]]
+#            self.tableau.chi[val] = [self.lchi[i]]
+#        DoSimi(self, param = paramsimi, fromprof = ffr(self.filename), pathout = pathout, listactives = self.la, actives = act)
+#
+#    def onwordgraph(self, evt):
+#        word = self.getColumnText(self.list.GetFirstSelected(), 6)
+#        dlg = progressbar(self, 2)
+#        corpus = self.Source.corpus
+#        uces = corpus.lc[self.cl-1]
+#        dlg.Update(1, u'Tableau...')
+#        #tab = corpus.make_table_with_classe(uces, self.la)
+#        pathout = ConstructPathOut(self.Source.pathout.dirout + '/' , 'simi_%s' % word)
+#        self.filename = os.path.join(pathout,'mat01.csv')
+#        dlg.Update(2, u'Ecriture...')
+#        #corpus.write_tab(tab, self.filename)
+#        #del tab
+#        corpus.make_and_write_sparse_matrix_from_classe(self.la, uces, self.filename)
+#        dlg.Destroy()
+#        paramsimi = {'coeff' : 0,
+#                          'layout' : 2,
+#                          'type' : 1,
+#                          'arbremax' : 0,
+#                          'coeff_tv' : 1,
+#                          'coeff_tv_nb' : 0,
+#                          'tvprop' : 0,
+#                          'tvmin' : 5,
+#                          'tvmax' : 30,
+#                          'coeff_te' : 1,
+#                          'coeff_temin' : 1,
+#                          'coeff_temax' : 10,
+#                          'label_v': 1,
+#                          'label_e': 0,
+#                          'vcex' : 1,
+#                          'vcexmin' : 10,
+#                          'vcexmax' : 25, 
+#                          'cex' : 10,
+#                          'seuil_ok' : 1,
+#                          'seuil' : 1,
+#                          'cols' : (255,0,0),
+#                          'cola' : (200,200,200),
+#                          'width' : 600,
+#                          'height' : 600,
+#                          'first' : True,
+#                          'keep_coord' : True,
+#                          'alpha' : 20,
+#                          'film': False,
+#                          }
+#        self.tableau = Tableau(self.parent, '')
+#        self.tableau.listactives = self.la
+#        self.tableau.actives = {}
+#        for i, val in enumerate(self.la) :
+#            self.tableau.actives[val] = [self.lfreq[i]]
+#        DoSimi(self, param = paramsimi, fromprof = ffr(self.filename), pathout = pathout, wordgraph = word)
+#
+#
+    def OnPopupOne(self, event):
+        corpus = self.Source.corpus
+        #print 'ATTENTION PRINT ET TABLE'
+        #corpus.make_et_table()
+        word = self.getColumnText(self.GetFirstSelected(), 6)
+        lems = corpus.getlems()
+        uces = corpus.lc[self.cl-1]
+        rep = []
+        #FIXME : donner aussi eff reel a la place de nb uce
+        for forme in lems[word].formes :
+            ucef = list(set(corpus.getworduces(forme)).intersection(uces))
+            #ucef = [uce for uce in corpus.formes[forme][1] if uce in uces]
+            if ucef != [] :
+                nb = len(ucef)
+                rep.append([corpus.getforme(forme).forme, nb])
+        win = message(self, -1, u"Formes associées", size=(300, 200), style=wx.DEFAULT_FRAME_STYLE)
+        win.html = '<html>\n' + '<br>'.join([' : '.join([str(val) for val in forme]) for forme in rep]) + '\n</html>'
+        win.HtmlPage.SetPage(win.html)
+        win.Show(True)
+#
+#    def on_graph(self, evt):
+#        dlg = progressbar(self, 2)
+#        corpus = self.Source.corpus
+#        uces = corpus.lc[self.cl-1]
+#        dlg.Update(1, u'Tableau...')
+#        #tab = corpus.make_table_with_classe(uces, self.la)
+#        pathout = ConstructPathOut(self.Source.pathout.dirout+'/', 'simi_classe_%i' %self.cl)
+#        self.filename = os.path.join(pathout,'mat01.csv')
+#        dlg.Update(2, u'Ecriture...')
+#        #corpus.write_tab(tab, self.filename)
+#        #del tab
+#        corpus.make_and_write_sparse_matrix_from_classe(self.la, uces, self.filename)
+#        dlg.Destroy()
+#        paramsimi = {'coeff' : 0,
+#                          'layout' : 2,
+#                          'type' : 1,
+#                          'arbremax' : 1,
+#                          'coeff_tv' : 1,
+#                          'coeff_tv_nb' : 0,
+#                          'tvprop' : 0,
+#                          'tvmin' : 5,
+#                          'tvmax' : 30,
+#                          'coeff_te' : 1,
+#                          'coeff_temin' : 1,
+#                          'coeff_temax' : 10,
+#                          'label_v': 1,
+#                          'label_e': 0,
+#                          'vcex' : 0,
+#                          'vcexmin' : 10,
+#                          'vcexmax' : 25,
+#                          'cex' : 10,
+#                          'cexfromchi' : True,
+#                          'sfromchi': False,
+#                          'seuil_ok' : 0,
+#                          'seuil' : 1,
+#                          'cols' : (255,0,0),
+#                          'cola' : (200,200,200),
+#                          'width' : 1000,
+#                          'height' : 1000,
+#                          'first' : True,
+#                          'keep_coord' : True,
+#                          'alpha' : 20,
+#                          'film': False,
+#                          }
+#        self.tableau = Tableau(self.parent, '')
+#        self.tableau.listactives = self.la
+#        self.tableau.actives = {}
+#        self.tableau.lchi = self.lchi
+#        self.tableau.chi = {}
+#        self.tableau.parametre['fromprof'] = True
+#        for i, val in enumerate(self.la) :
+#            self.tableau.actives[val] = [self.lfreq[i]]
+#            self.tableau.chi[val] = [self.lchi[i]]
+#        DoSimi(self, param = paramsimi, fromprof = ffr(self.filename), pathout = pathout)
+#
+#    def on_segments(self,evt) :
+#        dlg = progressbar(self, 2)
+#        corpus = self.Source.corpus
+#        uces = corpus.lc[self.cl-1]
+#        l = []
+#        dlg.Update(1, u'Segments...')
+#        for i in range(2,10) :
+#            li = corpus.find_segments_in_classe(uces, i, 1000)
+#            if li == [] :
+#                break
+#            else :
+#                l += li
+#        l.sort(reverse = True)
+#        d = {}
+#        dlg.Update(2, 'Tri...')
+#        for i, line in enumerate(l) :
+#            d[i] = [line[1],line[0], line[2]]
+#        first = ['','','']
+#        para={'dico': d,'fline':first}
+#        dlg.Destroy()
+#        win = wliste(self, -1, u"Segments répétés - Classe %i" % self.cl, d, first, size=(600, 500))
+#        win.Show(True)
+#
+#    def on_uce_carac(self,evt) :
+#        dial = PrefUCECarac(self, self.parent)
+#        dial.CenterOnParent()
+#        if dial.ShowModal() == wx.ID_OK :
+#            limite = dial.spin_eff.GetValue()
+#            atype = dial.radio_type.GetSelection()
+#            dlg = progressbar(self,maxi = 4)
+#            corpus = self.Source.corpus
+#            uces = corpus.lc[self.cl-1]
+#            tab = corpus.make_table_with_classe(uces, self.la)
+#            tab.pop(0)
+#            dlg.Update(2, u'score...')
+#            if atype == 0 :
+#                ntab = [round(sum([self.lchi[i] for i, word in enumerate(line) if word == 1]),2) for line in tab]
+#            else :
+#                ntab = [round(sum([self.lchi[i] for i, word in enumerate(line) if word == 1])/float(sum(line)),2) if sum(line)!=0 else 0 for line in tab]
+#            ntab2 = [[ntab[i], uces[i]] for i, val in enumerate(ntab)]
+#            del ntab
+#            ntab2.sort(reverse = True)
+#            ntab2 = ntab2[:limite]
+#            nuces = [val[1] for val in ntab2]
+#            dlg.Update(3, u'concordancier...')
+#            #ucestxt = [corpus.ucis_paras_uces[val[1][0]][val[1][1]][val[1][2]] for val in ntab2]
+#            ucestxt1 = [row for row in corpus.getconcorde(nuces)]
+#            ucestxt = []
+#            ucis_txt = []
+#            for uce in ucestxt1 :
+#                ucetxt = ' '+uce[1]+' '
+#                ucis_txt.append(' '.join(corpus.ucis[corpus.getucefromid(uce[0]).uci].etoiles) + '<br>')
+#                for lem in self.la :
+#                    listmot = corpus.getlems()[lem].formes
+#                    for id in listmot :
+#                        forme = corpus.getforme(id).forme
+#                        ucetxt = ucetxt.replace(' '+forme+' ', '<font color=red> ' + forme + ' </font>')
+#                ucestxt.append(ucetxt)        
+#            #ucestxt = [corpus.make_concord(self.la, ' '.join(uce), 'red') for uce in ucestxt]
+#            dlg.Update(4, u'texte...')
+#            #ucis_txt = [' '.join(corpus.ucis[val[1][0]][0]) for val in ntab2]
+#            win = message(self, -1, u"UCE caractéristiques - Classe %i" % self.cl, size=(600, 500), style=wx.DEFAULT_FRAME_STYLE)
+#            win.html = '<html>\n' + '<br><br>'.join(['<br>'.join([ucis_txt[i], 'score : ' + str(ntab2[i][0]), ucestxt[i]]) for i in range(0,len(ucestxt))]) + '\n</html>'
+#            win.HtmlPage.SetPage(win.html)
+#            dlg.Destroy()
+#            win.Show(True)
+#    
+#    def on_tablex(self, evt):
+#        if 'corpus' in dir(self.Source):
+#            corpus = self.Source.corpus
+#        else :
+#            corpus = self.Source.tableau
+#        with codecs.open(self.Source.pathout['chisqtable'], 'r', corpus.parametres['syscoding']) as f :
+#            chistable = [line.replace('\n','').replace('\r','').replace('"','').replace(',','.').split(';') for line in f]
+#        title = chistable[0]
+#        title.pop(0)
+#        chistable.pop(0)
+#        vchistable = [line[1:] for line in chistable]
+#        fchistable = [line[0] for line in chistable]
+#        words = [self.getColumnText(self.list.GetFirstSelected(), 6)]
+#        tableout = [vchistable[fchistable.index(words[0])]]
+#        last = self.list.GetFirstSelected()
+#        while self.list.GetNextSelected(last) != -1:
+#            last = self.list.GetNextSelected(last)
+#            word = self.getColumnText(last, 6)
+#            words.append(word)
+#            tableout.append(vchistable[fchistable.index(word)])
+#        tmpgraph = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
+#        nbcl = len(title)
+#        txt = barplot(tableout, words, title, self.Source.parent.RscriptsPath['Rgraph'], tmpgraph)
+#        tmpscript = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
+#        file = open(tmpscript,'w')
+#        file.write(txt)
+#        file.close()
+#        
+#        exec_rcode(self.Source.parent.RPath, tmpscript, wait = True)
+#        win = MessageImage(self, -1, u"Graphique", size=(700, 500),style = wx.DEFAULT_FRAME_STYLE)
+#        win.addsaveimage(tmpgraph)
+#        txt = "<img src='%s'>" % tmpgraph
+#        win.HtmlPage.SetPage(txt)
+#        win.Show(True)
+#
+#    def onlexdendro(self, evt):
+#        if 'corpus' in dir(self.Source):
+#            corpus = self.Source.corpus
+#        else :
+#            corpus = self.Source.tableau
+#        with codecs.open(self.Source.pathout['chisqtable'], 'r', corpus.parametres['syscoding']) as f :
+#            chistable = [line.replace('\n','').replace('\r','').replace('"','').replace(',','.').split(';') for line in f]
+#        title = chistable[0]
+#        title.pop(0)
+#        chistable.pop(0)
+#        vchistable = [line[1:] for line in chistable]
+#        fchistable = [line[0] for line in chistable]
+#        words = [self.getColumnText(self.list.GetFirstSelected(), 6)]
+#        tableout = [vchistable[fchistable.index(words[0])]]
+#        last = self.list.GetFirstSelected()
+#        while self.list.GetNextSelected(last) != -1:
+#            last = self.list.GetNextSelected(last)
+#            word = self.getColumnText(last, 6)
+#            words.append(word)
+#            tableout.append(vchistable[fchistable.index(word)])
+#        tmpgraph = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
+#        txttable = 'c(' + ','.join([','.join(line) for line in tableout]) + ')'
+#        rownames = 'c("' + '","'.join(words) + '")'
+#        colnames = 'c("' + '","'.join(title) + '")'
+#        nbcl = len(title)
+#        rownb = len(words)
+#        txt = """
+#        load("%s")
+#        di <- matrix(data=%s, nrow=%i, byrow = TRUE)
+#        rownames(di)<- %s
+#        colnames(di) <- %s
+#        library(ape)
+#        source("%s")
+#        height <- (30*ncol(di)) + (15*nrow(di))
+#        height <- ifelse(height <= 400, 400, height)
+#        width <- 500
+#        open_file_graph("%s", width=width, height=height)
+#        plot.dendro.lex(tree.cut1$tree.cl, di)
+#        """ % (self.Source.pathout['Rdendro'], txttable, rownb, rownames, colnames, self.Source.parent.RscriptsPath['Rgraph'], ffr(tmpgraph))
+#        tmpscript = tempfile.mktemp(dir=self.Source.parent.TEMPDIR)
+#        file = open(tmpscript,'w')
+#        file.write(txt)
+#        file.close()
+#        exec_rcode(self.Source.parent.RPath, tmpscript, wait = True)
+#        win = MessageImage(self, -1, u"Graphique", size=(700, 500),style = wx.DEFAULT_FRAME_STYLE)
+#        win.addsaveimage(tmpgraph)
+#        txt = "<img src='%s'>" % tmpgraph
+#        win.HtmlPage.SetPage(txt)
+#        win.Show(True)
+#
+#
+#    def make_concord(self, uces, title, color = 'red') :
+#        corpus = self.Source.corpus
+#        ListWord = [self.getColumnText(self.list.GetFirstSelected(), 6)]
+#        last = self.list.GetFirstSelected()
+#        while self.list.GetNextSelected(last) != -1:
+#            last = self.list.GetNextSelected(last)
+#            ListWord.append(self.getColumnText(last, 6))
+#        listmot = [forme for item in ListWord for forme in corpus.getlems()[item].formes]
+#        win = message(self, -1, title, size=(600, 500), style=wx.DEFAULT_FRAME_STYLE)
+#        toshow = ['<html>\n<H1>Concordancier</H1>\n']
+#        toshow.append('<h3><font color=%s>' % color + ' '.join(ListWord) + '</font></h3><br>')
+#        duce = {}
+#        ucef = []
+#        for word in ListWord : 
+#            ucef += list(set(corpus.getlemuces(word)).intersection(uces))
+#        ucef = list(set(ucef))
+#        ucef.sort()
+#        res = corpus.getconcorde(ucef)
+#        txt = '<br>'.join(toshow) +'<br><br>'
+#        for uce in res :
+#            ucetxt = ' '+uce[1]+' '
+#            txt += ' '.join(corpus.ucis[corpus.getucefromid(uce[0]).uci].etoiles) + '<br>'
+#            for forme in listmot:
+#                forme = corpus.getforme(forme).forme
+#                ucetxt = ucetxt.replace(' '+forme+' ', '<font color=red> ' + forme + ' </font>')
+#            txt += ucetxt + '<br><br>'
+#        win.HtmlPage.SetPage(txt)
+#        return win
+#
+#    def OnPopupTwo(self, event):
+#        corpus = self.Source.corpus
+#        uces = corpus.lc[self.cl-1]
+#        win = self.make_concord(uces, "Concordancier - Classe %i" % self.cl)
+#        win.Show(True)
+#    
+#    def OnPopupThree(self, event):
+#        corpus = self.Source.corpus
+#        uces = [classe[i] for classe in corpus.lc for i in range(0,len(classe))]
+#        win = self.make_concord(uces, "Concordancier - UCE classées")
+#        win.Show(True)
+#        
+#    def OnPopupFour(self, event):
+#        corpus = self.Source.corpus
+#        uces = [classe[i] for classe in corpus.lc for i in range(0,len(classe))] + corpus.lc0
+#        win = self.make_concord(uces, "Concordancier - Toutes les UCE")
+#        win.Show(True)
+#
+#    def OnPopupFive(self, event):
+#        word = self.getColumnText(self.list.GetFirstSelected(), 6)
+#        lk = "http://www.cnrtl.fr/definition/" + word
+#        webbrowser.open(lk)
+#
+#    def OnPopupSix(self, event):  
+#        word = self.getColumnText(self.list.GetFirstSelected(), 6)
+#        lk = "http://www.cnrtl.fr/etymologie/" + word
+#        webbrowser.open(lk)
+#        
+#    def OnPopupSeven(self, event):        
+#        word = self.getColumnText(self.list.GetFirstSelected(), 6)
+#        lk = "http://www.cnrtl.fr/synonymie/" + word
+#        webbrowser.open(lk)
+#        
+#    def OnPopupHeight(self, event):  
+#        word = self.getColumnText(self.list.GetFirstSelected(), 6)
+#        lk = "http://www.cnrtl.fr/antonymie/" + word
+#        webbrowser.open(lk)
+#        
+#    def OnPopupNine(self, event):            
+#        word = self.getColumnText(self.list.GetFirstSelected(), 6)
+#        lk = "http://www.cnrtl.fr/morphologie/" + word
+#        webbrowser.open(lk)
+#
+#    def onproxe(self, evt) :
+#        word = self.getColumnText(self.list.GetFirstSelected(), 6)
+#        lk = "http://www.cnrtl.fr/proxemie/" + word
+#        webbrowser.open(lk)
+#
+#    def OnSize(self, event):
+#        w, h = self.GetClientSizeTuple()
+#        self.list.SetDimensions(0, 0, w, h)
+#        
+#    def OnColClick(self, event):
+#        self.do_greyline()
+#
+#
+#class wliste(wx.Frame):
+#    def __init__(self, parent, id, title, d, fline, size=(600, 500)):
+#        wx.Frame.__init__(self, parent, id)
+#        self.liste = ListForSpec(self, parent, d, fline)
+#        self.button_1 = wx.Button(self, -1, "Fermer")
+#        self.Bind(wx.EVT_BUTTON, self.OnCloseMe, self.button_1)
+#        self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
+#        self.__do_layout()
+#
+#    def __do_layout(self):
+#        sizer_1 = wx.BoxSizer(wx.VERTICAL)
+#        sizer_2 = wx.BoxSizer(wx.VERTICAL)
+#        sizer_2.Add(self.liste, 1, wx.EXPAND | wx.ADJUST_MINSIZE, 0)
+#        sizer_2.Add(self.button_1, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ADJUST_MINSIZE, 0)
+#        sizer_1.Add(sizer_2, 1, wx.EXPAND, 0)
+#        self.SetAutoLayout(True)
+#        self.SetSizer(sizer_1)
+#        self.Layout()
+#        
+#    def OnCloseMe(self, event):
+#        self.Close(True)
+#
+#    def OnCloseWindow(self, event):
+#        self.Destroy()
+#
 class message(wx.Frame):
     def __init__(self, *args, **kwds):
         kwds["style"] = wx.DEFAULT_FRAME_STYLE
 class message(wx.Frame):
     def __init__(self, *args, **kwds):
         kwds["style"] = wx.DEFAULT_FRAME_STYLE
@@ -867,36 +1636,36 @@ class message(wx.Frame):
 
     def OnCloseWindow(self, event):
         self.Destroy()
 
     def OnCloseWindow(self, event):
         self.Destroy()
-
-def getSmallUpArrowData():
-    return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
-\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
-\x00\x00<IDAT8\x8dcddbf\xa0\x040Q\xa4{h\x18\xf0\xff\xdf\xdf\xffd\x1b\x00\xd3\
-\x8c\xcf\x10\x9c\x06\xa0k\xc2e\x08m\xc2\x00\x97m\xd8\xc41\x0c \x14h\xe8\xf2\
-\x8c\xa3)q\x10\x18\x00\x00R\xd8#\xec\xb2\xcd\xc1Y\x00\x00\x00\x00IEND\xaeB`\
-\x82' 
-
-def getSmallUpArrowBitmap():
-    return wx.BitmapFromImage(getSmallUpArrowImage())
-
-def getSmallUpArrowImage():
-    stream = cStringIO.StringIO(getSmallUpArrowData())
-    return wx.ImageFromStream(stream)
-
-#----------------------------------------------------------------------
-def getSmallDnArrowData():
-    return \
-"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
-\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
-\x00\x00HIDAT8\x8dcddbf\xa0\x040Q\xa4{\xd4\x00\x06\x06\x06\x06\x06\x16t\x81\
-\xff\xff\xfe\xfe'\xa4\x89\x91\x89\x99\x11\xa7\x0b\x90%\ti\xc6j\x00>C\xb0\x89\
-\xd3.\x10\xd1m\xc3\xe5*\xbc.\x80i\xc2\x17.\x8c\xa3y\x81\x01\x00\xa1\x0e\x04e\
-?\x84B\xef\x00\x00\x00\x00IEND\xaeB`\x82" 
-
-def getSmallDnArrowBitmap():
-    return wx.BitmapFromImage(getSmallDnArrowImage())
-
-def getSmallDnArrowImage():
-    stream = cStringIO.StringIO(getSmallDnArrowData())
-    return wx.ImageFromStream(stream)
+#
+#def getSmallUpArrowData():
+#    return \
+#'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
+#\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
+#\x00\x00<IDAT8\x8dcddbf\xa0\x040Q\xa4{h\x18\xf0\xff\xdf\xdf\xffd\x1b\x00\xd3\
+#\x8c\xcf\x10\x9c\x06\xa0k\xc2e\x08m\xc2\x00\x97m\xd8\xc41\x0c \x14h\xe8\xf2\
+#\x8c\xa3)q\x10\x18\x00\x00R\xd8#\xec\xb2\xcd\xc1Y\x00\x00\x00\x00IEND\xaeB`\
+#\x82' 
+#
+#def getSmallUpArrowBitmap():
+#    return wx.BitmapFromImage(getSmallUpArrowImage())
+#
+#def getSmallUpArrowImage():
+#    stream = cStringIO.StringIO(getSmallUpArrowData())
+#    return wx.ImageFromStream(stream)
+#
+##----------------------------------------------------------------------
+#def getSmallDnArrowData():
+#    return \
+#"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
+#\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
+#\x00\x00HIDAT8\x8dcddbf\xa0\x040Q\xa4{\xd4\x00\x06\x06\x06\x06\x06\x16t\x81\
+#\xff\xff\xfe\xfe'\xa4\x89\x91\x89\x99\x11\xa7\x0b\x90%\ti\xc6j\x00>C\xb0\x89\
+#\xd3.\x10\xd1m\xc3\xe5*\xbc.\x80i\xc2\x17.\x8c\xa3y\x81\x01\x00\xa1\x0e\x04e\
+#?\x84B\xef\x00\x00\x00\x00IEND\xaeB`\x82" 
+#
+#def getSmallDnArrowBitmap():
+#    return wx.BitmapFromImage(getSmallDnArrowImage())
+#
+#def getSmallDnArrowImage():
+#    stream = cStringIO.StringIO(getSmallDnArrowData())
+#    return wx.ImageFromStream(stream)
index 17f065e..0c47dfa 100644 (file)
@@ -184,8 +184,10 @@ if (typegraph == 0) {
         rnames
     }
     library(rgl)
         rnames
     }
     library(rgl)
-    rn <- vire.nonascii(rownames(table.in))
+    #rn <- vire.nonascii(rownames(table.in))
+    rn <- rownames(table.in)
     rgl.open()
     rgl.open()
+    par3d(cex=0.7)
     #par3d(windowRect = c(100,100,600,600))
     rgl.bg(col = c('white', "#99bb99"), front = "lines", box=FALSE, sphere = TRUE)
     rgl.lines(c(rx), c(0, 0), c(0, 0), col = "#000000")
     #par3d(windowRect = c(100,100,600,600))
     rgl.bg(col = c('white', "#99bb99"), front = "lines", box=FALSE, sphere = TRUE)
     rgl.lines(c(rx), c(0, 0), c(0, 0), col = "#000000")
@@ -195,19 +197,21 @@ if (typegraph == 0) {
     text3d(0,ry[2]+1,0, ylab)
     text3d(0,0,rz[2]+1, zlab)
     rain = rainbow(clnb)
     text3d(0,ry[2]+1,0, ylab)
     text3d(0,0,rz[2]+1, zlab)
     rain = rainbow(clnb)
-    colors = rain[classes]
-    text3d(table.in[,1], table.in[,2], table.in[,3], rn, col='black')
-    if (tchi) {
+     if (tchi) {
         maxchi <- norm.vec(maxchi, tchi.min/100, tchi.max/100)
     } else if (!is.null(cex.par)) {
         maxchi <- norm.vec(cex.par, txt.min/100, txt.max/100)
     } else {
         maxchi <- 0.1
     }
         maxchi <- norm.vec(maxchi, tchi.min/100, tchi.max/100)
     } else if (!is.null(cex.par)) {
         maxchi <- norm.vec(cex.par, txt.min/100, txt.max/100)
     } else {
         maxchi <- 0.1
     }
+    colors = rain[classes]
+    text3d(table.in[,1], table.in[,2], table.in[,3], rn, col= colors , cex = cex.par)
     for (i in 1:clnb) {
         text3d(rx[2],(ry[2]+(0.2*i)),0,paste('classe',i),col=rain[i])
     }
     for (i in 1:clnb) {
         text3d(rx[2],(ry[2]+(0.2*i)),0,paste('classe',i),col=rain[i])
     }
-    rgl.spheres(table.in, col = colors, radius = maxchi, alpha = alpha)
+    #if (tchi) {
+    #    rgl.spheres(table.in, col = colors, radius = maxchi, alpha = alpha)
+    #}
 
     if (dofilm) {
         require(tcltk)
 
     if (dofilm) {
         require(tcltk)
diff --git a/app.fil b/app.fil
index 0202140..43f8e8d 100644 (file)
--- a/app.fil
+++ b/app.fil
@@ -1,37 +1,54 @@
-./checkinstall.py
-./aslexico.py
+./corpusNG.py
+./Liste.py
+./analysetxt.py
+./KeyFrame.py
+./ttparser.py
+./tabverges.py
+./listlex.py
+./textdist.py
+./textafcuci.py
+./iramuteq.py
+./checkversion.py
+./tabrsimple.py
+./textaslexico.py
+./corpus.py
+./tabchddist.py
+./extract.py
+./dialog.py
 ./openanalyse.py
 ./openanalyse.py
-./listlex2.py
-./chdtxt.py
-./student.py
-./sheet.py
-./textstat.py
-./guiparam3d.py
-./chdtxtNG.py
-./chd.py
-./OptionAlceste.py
-./rchdng.py
-./getencoding.py
+./tableau.py
+./search_tools.py
 ./PrintRScript.py
 ./PrintRScript.py
-./normalize.py
-./lancergl.py
-./dendro.py
+./tabstudent.py
+./textstat.py
+./guifunct.py
 ./layout.py
 ./layout.py
-./chi2.py
-./afcm.py
-./dialog.py
-./checkversion.py
-./pamtxt.py
-./ProfList.py
-./frequence.py
-./simi.py
-./listlex.py
-./ooolib.py
-./chdquest.py
+./usecorpusNG.py
+./textsimi.py
+./textcheckcorpus.py
+./OptionAlceste.py
+./tabsimi.py
+./iracmd.py
+./textclassechd.py
+./newsimi.py
 ./chemins.py
 ./chemins.py
+./ProfList.py
+./word_stat.py
+./tree.py
+./textwordcloud.py
+./guiparam3d.py
+./parse_factiva_xml.py
+./textchdalc.py
+./colors.py
+./parse_factiva_txt2.py
 ./functions.py
 ./functions.py
-./afcuci.py
-./KeyFrame.py
-./Liste.py
-./guifunct.py
-./iramuteq.py
+./sheet.py
+./profile_segment.py
+./checkinstall.py
+./parse_factiva_html.py
+./search_list.py
+./tabchdalc.py
+./parse_factiva_txt.py
+./tabfrequence.py
+./tabchi2.py
+./tabafcm.py
index ec4ab2d..e448064 100644 (file)
@@ -119,6 +119,8 @@ def ConstructConfigPath(AppliPath, user=True):
         'pam' : os.path.join(ConfigPath, 'pam.cfg'),
         'history' : os.path.join(ConfigPath, 'history.db'),
         'corpus' : os.path.join(ConfigPath, 'corpus.cfg'),
         'pam' : os.path.join(ConfigPath, 'pam.cfg'),
         'history' : os.path.join(ConfigPath, 'history.db'),
         'corpus' : os.path.join(ConfigPath, 'corpus.cfg'),
+        'stat' : os.path.join(ConfigPath, 'stat.cfg'),
+        'simitxt' : os.path.join(ConfigPath, 'simitxt.cfg'),
     }
     return DictConfigPath
 
     }
     return DictConfigPath
 
diff --git a/configuration/simitxt.cfg b/configuration/simitxt.cfg
new file mode 100644 (file)
index 0000000..6b6c6fc
--- /dev/null
@@ -0,0 +1,39 @@
+
+[simitxt]
+tvprop = False
+arbremax = True
+coeff_temin = 1
+seuil = 1
+cols = (255, 0, 0, 255)
+vcex = True
+height = 1000
+alpha = 20
+vcexmax = 25
+film = False
+cola = (200, 200, 200, 255)
+coeff_tv_nb = 0
+bystar = False
+cexfromchi = False
+width = 1000
+tvmax = 30
+time = 0h 0m 20s
+nbactives = 1833
+vcexmin = 10
+seuil_ok = False
+type = simitxt
+keep_coord = False
+label_e = False
+sfromchi = False
+lem = 1
+label_v = True
+eff_min_forme = 3
+fromprof = True
+layout = 2
+tvmin = 5
+cex = 10
+coeff = 0
+coeff_te = True
+coeff_temax = 10
+type_graph = 1
+coeff_tv = True
+first = False
diff --git a/configuration/stat.cfg b/configuration/stat.cfg
new file mode 100644 (file)
index 0000000..642c876
--- /dev/null
@@ -0,0 +1,7 @@
+[stat]
+pathout = 
+name = 
+encoding = 
+lem = 1
+corpus = 
+type = stat
index a950d0f..6a027dc 100644 (file)
@@ -3,6 +3,9 @@
 
 import codecs
 import os
 
 import codecs
 import os
+import gettext
+_ = gettext.gettext
+import locale
 import sys
 from time import time
 from functions import decoupercharact, ReadDicoAsDico, DoConf
 import sys
 from time import time
 from functions import decoupercharact, ReadDicoAsDico, DoConf
@@ -16,6 +19,7 @@ from uuid import uuid4
 from chemins import PathOut
 from dialog import CorpusPref
 from functions import ReadLexique, ReadDicoAsDico
 from chemins import PathOut
 from dialog import CorpusPref
 from functions import ReadLexique, ReadDicoAsDico
+from colors import colors
 import datetime
 
 
 import datetime
 
 
@@ -457,10 +461,10 @@ class Corpus :
             else :
                 self.lems[lem].act = 2
 
             else :
                 self.lems[lem].act = 2
 
-    def make_actives_limit(self, limit) :
+    def make_actives_limit(self, limit, key = 1) :
         if self.idformes is None :
             self.make_idformes()
         if self.idformes is None :
             self.make_idformes()
-        return [lem for lem in self.lems if self.getlemeff(lem) >= limit and self.lems[lem].act == 1]
+        return [lem for lem in self.lems if self.getlemeff(lem) >= limit and self.lems[lem].act == key]
     
     def make_actives_nb(self, nbmax, key) :
         log.info('make_actives_nb : %i - %i' % (nbmax,key))
     
     def make_actives_nb(self, nbmax, key) :
         log.info('make_actives_nb : %i - %i' % (nbmax,key))
@@ -520,7 +524,6 @@ class Corpus :
                 except IndexError :
                     det[et[0]] = 1
         print det
                 except IndexError :
                     det[et[0]] = 1
         print det
-            
 
     def make_and_write_profile_et(self, ucecl, fileout) :
         log.info('etoiles/classes')
 
     def make_and_write_profile_et(self, ucecl, fileout) :
         log.info('etoiles/classes')
@@ -528,6 +531,31 @@ class Corpus :
         with open(fileout, 'w') as f :
             f.write('\n'.join([';'.join([etoile] + [`len(set(self.getucesfrometoile(etoile)).intersection(classe))` for classe in ucecl]) for etoile in etoiles]).encode(self.parametres['syscoding']))
 
         with open(fileout, 'w') as f :
             f.write('\n'.join([';'.join([etoile] + [`len(set(self.getucesfrometoile(etoile)).intersection(classe))` for classe in ucecl]) for etoile in etoiles]).encode(self.parametres['syscoding']))
 
+    def make_colored_corpus(self) :
+        ucecl = {}
+        for i, lc in enumerate(self.lc) :
+            for uce in lc : 
+                ucecl[uce] = i + 1
+        for uce in self.lc0 :
+            ucecl[uce] = 0
+        color = ['black'] + colors[len(self.lc) - 1]        
+        txt = '''<html>
+        <meta http-equiv="content-Type" content="text/html; charset=%s" />
+        <body>
+''' % sys.getdefaultencoding()
+        res = self.getalluces()
+        self.make_iduces()
+        actuci = ''
+        actpara = False
+        for uce in res :
+            if self.iduces[uce[0]].uci != actuci :
+                actuci = self.iduces[uce[0]].uci
+                txt += '<br><hr>' + ' '.join(self.ucis[self.iduces[uce[0]].uci].etoiles) + '<br><br>'
+                txt += '<font color="%s">' % (color[ucecl[uce[0]]]) + uce[1] + '</font><br><br>'
+            else :
+                txt += '<font color="%s">' % (color[ucecl[uce[0]]]) + uce[1] + '</font><br><br>'
+        return txt + '\n</body></html>'
+
     def count_from_list(self, l, d) :
         for val in l :
             if val in d :
     def count_from_list(self, l, d) :
         for val in l :
             if val in d :
@@ -536,6 +564,15 @@ class Corpus :
                 d[val] = 1
         return d
 
                 d[val] = 1
         return d
 
+    def count_from_list_cl(self, l, d, a, clnb) :
+        for val in l :
+            if val in d :
+                d[val][a] += 1
+            else :
+                d[val] = [0] * clnb
+                d[val][a] = 1
+        return d
+
     def find_segments(self, taille_segment, taille_limite) :
         d = {}
         for uce in self.getalluces() :
     def find_segments(self, taille_segment, taille_limite) :
         d = {}
         for uce in self.getalluces() :
@@ -560,8 +597,18 @@ class Corpus :
             l = l[-taille_limite:]
         return l
             
             l = l[-taille_limite:]
         return l
             
-
-
+    def make_segments_profile(self, fileout, lenmin = 3, lenmax = 10, effmin = 50, lem = False) :
+        d = {}
+        for b, classe in enumerate(self.lc) :
+            for uce in self.getconcorde(classe) :
+                uce = uce[1].split()
+                if lem :
+                    uce = [self.formes[forme].lem for forme in uce]
+                for taille_segment in range(lenmin,lenmax) :
+                    d =self.count_from_list_cl([' '.join(uce[i:i+taille_segment]) for i in range(len(uce)-(taille_segment - 1))], d, b, len(self.lc))
+        result = [[seg] + [str(val) for val in d[seg]] for seg in d if sum(d[seg]) >= effmin]
+        with open(fileout, 'w') as f :
+            f.write('\n'.join([';'.join(line) for line in result]))
          
     def make_ucecl_from_R(self, filein) :
         with open(filein, 'rU') as f :
          
     def make_ucecl_from_R(self, filein) :
         with open(filein, 'rU') as f :
@@ -689,7 +736,7 @@ def decouperlist(chaine, longueur, longueurOptimale) :
         Si on trouve un '$', c'est fini.
         Sinon, on cherche le meilleur candidat. C'est-à-dire le rapport poids/distance le plus important.
     """
         Si on trouve un '$', c'est fini.
         Sinon, on cherche le meilleur candidat. C'est-à-dire le rapport poids/distance le plus important.
     """
-    separateurs = [[u'.', 6.0], [u'?', 6.0], [u'!', 6.0], [u'£', 6.0], [u':', 5.0], [u';', 4.0], [u',', 1.0], [u' ', 0.01]]
+    separateurs = [[u'.', 6.0], [u'?', 6.0], [u'!', 6.0], [u'£', 6.0], [u':', 5.0], [u';', 4.0], [u',', 1.0], [u' ', 0.01]]
     dsep = dict([[val[0],val[1]] for val in separateurs])
     trouve = False                 # si on a trouvé un bon séparateur
     iDecoupe = 0                # indice du caractere ou il faut decouper
     dsep = dict([[val[0],val[1]] for val in separateurs])
     trouve = False                 # si on a trouvé un bon séparateur
     iDecoupe = 0                # indice du caractere ou il faut decouper
@@ -771,7 +818,7 @@ class BuildCorpus :
         if self.corpus.parametres['keep_ponct'] :
             self.ponctuation_espace = [' ', '']
         else :
         if self.corpus.parametres['keep_ponct'] :
             self.ponctuation_espace = [' ', '']
         else :
-            self.ponctuation_espace =  [' ','.', u'£', ';', '?', '!', ',', ':','']
+            self.ponctuation_espace =  [' ','.', u'£', ';', '?', '!', ',', ':','']
         self.cleans = []
         self.tolist = self.corpus.parametres.get('tolist', 0)
         self.buildcleans()
         self.cleans = []
         self.tolist = self.corpus.parametres.get('tolist', 0)
         self.buildcleans()
@@ -794,13 +841,18 @@ class BuildCorpus :
 
     def dobuild(self) :    
         t1 = time()
 
     def dobuild(self) :    
         t1 = time()
-        self.read_corpus(self.infile)
-        self.indexdb()
-        self.corpus.parametres['ira'] = self.corpus.pathout['Corpus.cira']
-        self.time = time() - t1
-        self.dofinish()
-        DoConf().makeoptions(['corpus'],[self.corpus.parametres], self.corpus.pathout['Corpus.cira'])
-        log.info('time : %f' % (time() - t1))
+        try :
+            self.read_corpus(self.infile)
+        except Warning, args :
+            log.info('pas kool %s' % args)
+            raise Warning
+        else :    
+            self.indexdb()
+            self.corpus.parametres['ira'] = self.corpus.pathout['Corpus.cira']
+            self.time = time() - t1
+            self.dofinish()
+            DoConf().makeoptions(['corpus'],[self.corpus.parametres], self.corpus.pathout['Corpus.cira'])
+            log.info('time : %f' % (time() - t1))
 
     def connect(self) :
         self.conn_f = sqlite3.connect(self.corpus.pathout['formes.db'])
 
     def connect(self) :
         self.conn_f = sqlite3.connect(self.corpus.pathout['formes.db'])
@@ -854,7 +906,7 @@ class BuildCorpus :
             self.cleans.append(self.dolower)
         if self.corpus.parametres.get('firstclean', 1) :
             self.cleans.append(self.firstclean)
             self.cleans.append(self.dolower)
         if self.corpus.parametres.get('firstclean', 1) :
             self.cleans.append(self.firstclean)
-        self.rule = self.corpus.parametres.get('keep_caract', u"^a-zA-Z0-9àÀâÂäÄáÁéÉèÈêÊëËìÌîÎïÏòÒôÔöÖùÙûÛüÜçÇßœŒ’ñ.:,;!?*'_-")
+        self.rule = self.corpus.parametres.get('keep_caract', u"^a-zA-Z0-9àÀâÂäÄáÁéÉèÈêÊëËìÌîÎïÏòÒôÔöÖùÙûÛüÜçÇßœŒ’ñ.:,;!?*'_")
         self.cleans.append(self.docharact)
         if self.corpus.parametres.get('expressions', 1) :
             self.cleans.append(self.make_expression)
         self.cleans.append(self.docharact)
         if self.corpus.parametres.get('expressions', 1) :
             self.cleans.append(self.make_expression)
@@ -886,7 +938,7 @@ class BuildCorpus :
     def firstclean(self, txt) :
         txt = txt.replace(u'’',"'")
         txt = txt.replace(u'œ', u'oe')
     def firstclean(self, txt) :
         txt = txt.replace(u'’',"'")
         txt = txt.replace(u'œ', u'oe')
-        return txt.replace('...',u' £ ').replace('?',' ? ').replace('.',' . ').replace('!', ' ! ').replace(',',' , ').replace(';', ' ; ').replace(':',' : ')
+        return txt.replace('...',u' £$£ ').replace('?',' ? ').replace('.',' . ').replace('!', ' ! ').replace(',',' , ').replace(';', ' ; ').replace(':',' : ').replace(u'…', ' £$£ ')
 
     def make_cleans(self, txt) :
         for clean in self.cleans :
 
     def make_cleans(self, txt) :
         for clean in self.cleans :
@@ -945,28 +997,47 @@ class BuildFromAlceste(BuildCorpus) :
         iduci = -1
         idpara = -1
         iduce = -1
         iduci = -1
         idpara = -1
         iduce = -1
-        with codecs.open(infile, 'rU', self.encoding) as f :
-            for line in f :
-                if self.testuci(line) :
-                    iduci += 1
-                    if txt != [] :
-                        iduce, idpara = self.treattxt(txt, iduce, idpara, iduci - 1)
-                        txt = []
-                        self.corpus.ucis.append(Uci(iduci, line))
-                    else :
-                        self.corpus.ucis.append(Uci(iduci, line))
-                elif line.startswith(u'-*') :
-                    if txt != [] :
-                        iduce, idpara = self.treattxt(txt, iduce, idpara, iduci)
-                        txt = []
-                    idpara += 1
-                    self.corpus.ucis[-1].paras.append(line.split()[0])
-                elif line.strip() != '' and iduci != -1 :
-                    txt.append(line)
-        if txt != [] :
-            iduce, idpara = self.treattxt(txt, iduce, idpara, iduci)
-            del(txt)
-        self.backup_uce()
+        linenb = 0
+        try :
+            with codecs.open(infile, 'r', self.encoding) as f :
+                for line in f :
+                    linenb += 1
+                    line = line.rstrip('\n\r')
+                    if self.testuci(line) :
+                        iduci += 1
+                        if txt != [] :
+                            iduce, idpara = self.treattxt(txt, iduce, idpara, iduci - 1)
+                            txt = []
+                            self.corpus.ucis.append(Uci(iduci, line))
+                        else :
+                            if iduci > 0 :
+                                if self.corpus.ucis[-1].uces == [] :
+                                    log.info('linenb : %i' % linenb)
+                                    raise Exception("EmptyText %i" % linenb)
+                            self.corpus.ucis.append(Uci(iduci, line))
+                    elif line.startswith(u'-*') :
+                        if iduci != -1 :
+                            if txt != [] :
+                                iduce, idpara = self.treattxt(txt, iduce, idpara, iduci)
+                                txt = []
+                            idpara += 1
+                            self.corpus.ucis[-1].paras.append(line.split()[0])
+                        else :
+                            raise Exception('paragrapheOT')
+                    elif line.strip() != '' and iduci != -1 :
+                        txt.append(line)
+            if txt != [] and iduci != -1 :
+                iduce, idpara = self.treattxt(txt, iduce, idpara, iduci)
+                del(txt)
+            else :
+                raise Exception("EmptyText")
+            if iduci != -1  and iduce != -1:
+                self.backup_uce()
+            else : 
+                log.info(_(u"No Texte in corpora. Are you sure of the formatting ?"))
+                raise Exception('TextBeforeTextMark')
+        except UnicodeDecodeError :
+            raise Exception("CorpusEncoding")
 
     def treattxt(self, txt, iduce, idpara, iduci) :
         if self.corpus.parametres.get('ucemethod', 0) == 2 and self.corpus.parametres['douce']:
 
     def treattxt(self, txt, iduce, idpara, iduci) :
         if self.corpus.parametres.get('ucemethod', 0) == 2 and self.corpus.parametres['douce']:
@@ -1029,7 +1100,7 @@ class BuildFromAlceste(BuildCorpus) :
 
             uce = ' '.join([val for val in texte_uce if val not in self.ponctuation_espace])
             if uce != '' : 
 
             uce = ' '.join([val for val in texte_uce if val not in self.ponctuation_espace])
             if uce != '' : 
-                print 'RESTEE UUCEEEEEEEEEEEEE', uce
+                #print 'RESTEE UUCEEEEEEEEEEEEE', uce
                 out.append(uce)
             return out
         else :
                 out.append(uce)
             return out
         else :
index 79ad5f9..44b7dc8 100755 (executable)
--- a/dialog.py
+++ b/dialog.py
@@ -19,7 +19,7 @@ wx.HelpProvider_Set(provider)
 #---------------------------------------------------------------------------
 
 
 #---------------------------------------------------------------------------
 
 
-encodages = [[u'cp1252',u'Windows'], [u'utf-8',u'Linux'], [u'MacRoman',u'MacOs X'], [u'ascii', u'English'], [u'big5', u'Traditional Chinese'], [u'big5hkscs', u'Traditional Chinese'], [u'cp037', u'English'], [u'cp424', u'Hebrew'], [u'cp437', u'English'], [u'cp500', u'Western Europe'], [u'cp737', u'Greek'], [u'cp775', u'Baltic languages'], [u'cp850', u'Western Europe'], [u'cp852', u'Central and Eastern Europe'], [u'cp855', u'Bulg, Byelorus, Mace, Rus, Serb'], [u'cp856', u'Hebrew'], [u'cp857', u'Turkish'], [u'cp860', u'Portuguese'], [u'cp861', u'Icelandic'], [u'cp862', u'Hebrew'], [u'cp863', u'Canadian'], [u'cp864', u'Arabic'], [u'cp865', u'Danish, Norwegian'], [u'cp866', u'Russian'], [u'cp869', u'Greek'], [u'cp874', u'Thai'], [u'cp875', u'Greek'], [u'cp932', u'Japanese'], [u'cp949', u'Korean'], [u'cp950', u'Traditional Chinese'], [u'cp1006', u'Urdu'], [u'cp1026', u'Turkish'], [u'cp1140', u'Western Europe'], [u'cp1250', u'Central and Eastern Europe'], [u'cp1251', u'Bulg, Byelorus, Mace, Rus, Serb'], [u'cp1253', u'Greek'], [u'cp1254', u'Turkish'], [u'cp1255', u'Hebrew'], [u'cp1256', u'Arabic'], [u'cp1257', u'Baltic languages'], [u'cp1258', u'Vietnamese'], [u'euc_jp', u'Japanese'], [u'euc_jis_2004', u'Japanese'], [u'euc_jisx0213', u'Japanese'], [u'euc_kr', u'Korean'], [u'gb2312', u'Simplified Chinese'], [u'gbk', u'Unified Chinese'], [u'gb18030', u'Unified Chinese'], [u'hz', u'Simplified Chinese'], [u'iso2022_jp', u'Japanese'], [u'iso2022_jp_1', u'Japanese'], [u'iso2022_jp_2', u'Jp, K, S C, WE, G'], [u'iso2022_jp_2004', u'Japanese'], [u'iso2022_jp_3', u'Japanese'], [u'iso2022_jp_ext', u'Japanese'], [u'iso2022_kr', u'Korean'], [u'latin_1', u'West Europe'], [u'iso8859_2', u'Central and Eastern Europe'], [u'iso8859_3', u'Esperanto, Maltese'], [u'iso8859_4', u'Baltic languages'], [u'iso8859_5', u'Bulg, Byelorus, Mace, Rus, Serb'], [u'iso8859_6', u'Arabic'], [u'iso8859_7', u'Greek'], [u'iso8859_8', u'Hebrew'], [u'iso8859_9', u'Turkish'], [u'iso8859_10', u'Nordic languages'], [u'iso8859_13', u'Baltic languages'], [u'iso8859_14', u'Celtic languages'], [u'iso8859_15', u'Western Europe'], [u'iso8859_16', u'South-Eastern Europe'], [u'johab', u'Korean'], [u'koi8_r', u'Russian'], [u'koi8_u', u'Ukrainian'], [u'mac_cyrillic', u'Bulg, Byelorus, Mace, Rus, Serb'], [u'mac_greek', u'Greek'], [u'mac_iceland', u'Icelandic'], [u'mac_latin2', u'Central and Eastern Europe'], [u'mac_turkish', u'Turkish'], [u'ptcp154', u'Kazakh'], [u'shift_jis', u'Japanese'], [u'shift_jis_2004', u'Japanese'], [u'shift_jisx0213', u'Japanese'], [u'utf_32', u'all languages'], [u'utf_32_be', u'all languages'], [u'utf_32_le', u'all languages'], [u'utf_16', u'all languages'], [u'utf_16_be', u'all languages (BMP only)'], [u'utf_16_le', u'all languages (BMP only)'], [u'utf_7', u'all languages'], [u'utf_8_sig', u'all languages']]
+encodages = [[u'cp1252',u'Western Europe'], [u'utf-8',u'all languages'], [u'MacRoman',u'Western Europe'], [u'ascii', u'English'], [u'big5', u'Traditional Chinese'], [u'big5hkscs', u'Traditional Chinese'], [u'cp037', u'English'], [u'cp424', u'Hebrew'], [u'cp437', u'English'], [u'cp500', u'Western Europe'], [u'cp737', u'Greek'], [u'cp775', u'Baltic languages'], [u'cp850', u'Western Europe'], [u'cp852', u'Central and Eastern Europe'], [u'cp855', u'Bulg, Byelorus, Mace, Rus, Serb'], [u'cp856', u'Hebrew'], [u'cp857', u'Turkish'], [u'cp860', u'Portuguese'], [u'cp861', u'Icelandic'], [u'cp862', u'Hebrew'], [u'cp863', u'Canadian'], [u'cp864', u'Arabic'], [u'cp865', u'Danish, Norwegian'], [u'cp866', u'Russian'], [u'cp869', u'Greek'], [u'cp874', u'Thai'], [u'cp875', u'Greek'], [u'cp932', u'Japanese'], [u'cp949', u'Korean'], [u'cp950', u'Traditional Chinese'], [u'cp1006', u'Urdu'], [u'cp1026', u'Turkish'], [u'cp1140', u'Western Europe'], [u'cp1250', u'Central and Eastern Europe'], [u'cp1251', u'Bulg, Byelorus, Mace, Rus, Serb'], [u'cp1253', u'Greek'], [u'cp1254', u'Turkish'], [u'cp1255', u'Hebrew'], [u'cp1256', u'Arabic'], [u'cp1257', u'Baltic languages'], [u'cp1258', u'Vietnamese'], [u'euc_jp', u'Japanese'], [u'euc_jis_2004', u'Japanese'], [u'euc_jisx0213', u'Japanese'], [u'euc_kr', u'Korean'], [u'gb2312', u'Simplified Chinese'], [u'gbk', u'Unified Chinese'], [u'gb18030', u'Unified Chinese'], [u'hz', u'Simplified Chinese'], [u'iso2022_jp', u'Japanese'], [u'iso2022_jp_1', u'Japanese'], [u'iso2022_jp_2', u'Jp, K, S C, WE, G'], [u'iso2022_jp_2004', u'Japanese'], [u'iso2022_jp_3', u'Japanese'], [u'iso2022_jp_ext', u'Japanese'], [u'iso2022_kr', u'Korean'], [u'latin_1', u'West Europe'], [u'iso8859_2', u'Central and Eastern Europe'], [u'iso8859_3', u'Esperanto, Maltese'], [u'iso8859_4', u'Baltic languages'], [u'iso8859_5', u'Bulg, Byelorus, Mace, Rus, Serb'], [u'iso8859_6', u'Arabic'], [u'iso8859_7', u'Greek'], [u'iso8859_8', u'Hebrew'], [u'iso8859_9', u'Turkish'], [u'iso8859_10', u'Nordic languages'], [u'iso8859_13', u'Baltic languages'], [u'iso8859_14', u'Celtic languages'], [u'iso8859_15', u'Western Europe'], [u'iso8859_16', u'South-Eastern Europe'], [u'johab', u'Korean'], [u'koi8_r', u'Russian'], [u'koi8_u', u'Ukrainian'], [u'mac_cyrillic', u'Bulg, Byelorus, Mace, Rus, Serb'], [u'mac_greek', u'Greek'], [u'mac_iceland', u'Icelandic'], [u'mac_latin2', u'Central and Eastern Europe'], [u'mac_turkish', u'Turkish'], [u'ptcp154', u'Kazakh'], [u'shift_jis', u'Japanese'], [u'shift_jis_2004', u'Japanese'], [u'shift_jisx0213', u'Japanese'], [u'utf_32', u'all languages'], [u'utf_32_be', u'all languages'], [u'utf_32_le', u'all languages'], [u'utf_16', u'all languages'], [u'utf_16_be', u'all languages (BMP only)'], [u'utf_16_le', u'all languages (BMP only)'], [u'utf_7', u'all languages'], [u'utf_8_sig', u'all languages']]
 
 class FileOptionDialog(wx.Dialog):
     def __init__(
 
 class FileOptionDialog(wx.Dialog):
     def __init__(
@@ -1493,7 +1493,7 @@ class PrefSimi ( wx.Dialog ):
 class SelectColDial ( wx.Dialog ):
     
     def __init__( self, parent ):
 class SelectColDial ( wx.Dialog ):
     
     def __init__( self, parent ):
-        wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 200,300 ), style = wx.DEFAULT_DIALOG_STYLE )
+        wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 400,500 ), style = wx.DEFAULT_DIALOG_STYLE )
         
         self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
         
         
         self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
         
@@ -2129,11 +2129,11 @@ class FindInCluster(wx.Frame):
         cl = self.formes[idb][1] - 1
         forme = self.formes[idb][0]
         profile.ProfNB.SetSelection(cl)
         cl = self.formes[idb][1] - 1
         forme = self.formes[idb][0]
         profile.ProfNB.SetSelection(cl)
-        UnSelectList(profile.ProfNB.GetPage(cl).list)
-        datas = dict([[profile.ProfNB.GetPage(cl).getColumnText(i,6),i] for i in range(profile.ProfNB.GetPage(cl).list.GetItemCount())])
-        profile.ProfNB.GetPage(cl).list.SetItemState(datas[self.formes[idb][0]], wx.LIST_STATE_SELECTED, wx.LIST_STATE_SELECTED)
-        profile.ProfNB.GetPage(cl).list.Focus(datas[forme])
-        profile.ProfNB.GetPage(cl).list.SetFocus()
+        UnSelectList(profile.ProfNB.GetPage(cl))
+        datas = dict([[profile.ProfNB.GetPage(cl).getColumnText(i,6),i] for i in range(profile.ProfNB.GetPage(cl).GetItemCount())])
+        profile.ProfNB.GetPage(cl).SetItemState(datas[self.formes[idb][0]], wx.LIST_STATE_SELECTED, wx.LIST_STATE_SELECTED)
+        profile.ProfNB.GetPage(cl).Focus(datas[forme])
+        profile.ProfNB.GetPage(cl).SetFocus()
 
     def OnCloseMe(self, evt) :
         self.Close(True)
 
     def OnCloseMe(self, evt) :
         self.Close(True)
@@ -2182,10 +2182,10 @@ class SearchDial ( wx.Dialog ):
         pass
 
     def OnSearch(self, evt):
         pass
 
     def OnSearch(self, evt):
-        UnSelectList(self.listctrl.list)
+        UnSelectList(self.listctrl)
         search_word = self.search.GetValue()
         if search_word.strip() != '' :
         search_word = self.search.GetValue()
         if search_word.strip() != '' :
-            formes = [self.listctrl.getColumnText(i, self.col) for i in range(self.listctrl.list.GetItemCount())]
+            formes = [self.listctrl.getColumnText(i, self.col) for i in range(self.listctrl.GetItemCount())]
             if search_word.endswith(u'*') :
                 search_word = search_word[0:-1]
                 result = [j for j, forme in enumerate(formes) if forme.startswith(search_word)]
             if search_word.endswith(u'*') :
                 search_word = search_word[0:-1]
                 result = [j for j, forme in enumerate(formes) if forme.startswith(search_word)]
@@ -2203,15 +2203,15 @@ class SearchDial ( wx.Dialog ):
     
     def showitems(self, items) :
         if len(items) == 1 :
     
     def showitems(self, items) :
         if len(items) == 1 :
-            self.listctrl.list.SetItemState(items[0], wx.LIST_STATE_SELECTED, wx.LIST_STATE_SELECTED)
-            self.listctrl.list.Focus(items[0])
-            self.listctrl.list.SetFocus()
+            self.listctrl.SetItemState(items[0], wx.LIST_STATE_SELECTED, wx.LIST_STATE_SELECTED)
+            self.listctrl.Focus(items[0])
+            self.listctrl.SetFocus()
             self.Destroy()
         else :
             for i in items :
             self.Destroy()
         else :
             for i in items :
-                self.listctrl.list.SetItemState(i, wx.LIST_STATE_SELECTED, wx.LIST_STATE_SELECTED)
-            self.listctrl.list.Focus(items[0])
-            self.listctrl.list.SetFocus()
+                self.listctrl.SetItemState(i, wx.LIST_STATE_SELECTED, wx.LIST_STATE_SELECTED)
+            self.listctrl.Focus(items[0])
+            self.listctrl.SetFocus()
             self.forward.Enable(True)
             self.backward.Enable(False)
             self.items = items
             self.forward.Enable(True)
             self.backward.Enable(False)
             self.items = items
@@ -2229,12 +2229,13 @@ class SearchDial ( wx.Dialog ):
             first_forme = proflist[0]
             cl = first_forme[1] - 1
             profile.ProfNB.SetSelection(cl)
             first_forme = proflist[0]
             cl = first_forme[1] - 1
             profile.ProfNB.SetSelection(cl)
-            profile.ProfNB.GetPage(cl).list.SetFocus()
-            UnSelectList(profile.ProfNB.GetPage(cl).list)
-            datas = dict([[profile.ProfNB.GetPage(cl).getColumnText(i,6),i] for i in range(profile.ProfNB.GetPage(cl).list.GetItemCount())])
-            profile.ProfNB.GetPage(cl).list.SetItemState(datas[first_forme[0]], wx.LIST_STATE_SELECTED, wx.LIST_STATE_SELECTED)
-            profile.ProfNB.GetPage(cl).list.Focus(datas[first_forme[0]])
-            profile.ProfNB.GetPage(cl).list.SetFocus()
+            profile.ProfNB.GetPage(cl).SetFocus()
+            print profile.ProfNB.GetPage(cl)
+            UnSelectList(profile.ProfNB.GetPage(cl))
+            datas = dict([[profile.ProfNB.GetPage(cl).getColumnText(i,6),i] for i in range(profile.ProfNB.GetPage(cl).GetItemCount())])
+            profile.ProfNB.GetPage(cl).SetItemState(datas[first_forme[0]], wx.LIST_STATE_SELECTED, wx.LIST_STATE_SELECTED)
+            profile.ProfNB.GetPage(cl).Focus(datas[first_forme[0]])
+            profile.ProfNB.GetPage(cl).SetFocus()
             if len(proflist) == 1 :
                 self.Destroy()
             else :
             if len(proflist) == 1 :
                 self.Destroy()
             else :
@@ -2245,8 +2246,8 @@ class SearchDial ( wx.Dialog ):
             self.noresult()
 
     def onforward(self, evt) :
             self.noresult()
 
     def onforward(self, evt) :
-        self.listctrl.list.Focus(self.items[self.forwitem])
-        self.listctrl.list.SetFocus()
+        self.listctrl.Focus(self.items[self.forwitem])
+        self.listctrl.SetFocus()
         self.forwitem += 1
         if self.forwitem == len(self.items) :
             self.forward.Enable(False)
         self.forwitem += 1
         if self.forwitem == len(self.items) :
             self.forward.Enable(False)
@@ -2257,8 +2258,8 @@ class SearchDial ( wx.Dialog ):
             self.backward.Enable(True)
 
     def onbackward(self, evt) :
             self.backward.Enable(True)
 
     def onbackward(self, evt) :
-        self.listctrl.list.Focus(self.items[self.backitem])
-        self.listctrl.list.SetFocus()
+        self.listctrl.Focus(self.items[self.backitem])
+        self.listctrl.SetFocus()
         self.backitem -= 1
         if self.backitem == -1 :
             self.forwitem -= 1
         self.backitem -= 1
         if self.backitem == -1 :
             self.forwitem -= 1
@@ -2279,6 +2280,7 @@ class SearchDial ( wx.Dialog ):
         self.search.Clear()
 
 def UnSelectList(liste) :
         self.search.Clear()
 
 def UnSelectList(liste) :
+    print liste
     if liste.GetFirstSelected() != -1 :
         last = liste.GetFirstSelected()
         liste.Select(liste.GetFirstSelected(), False)
     if liste.GetFirstSelected() != -1 :
         last = liste.GetFirstSelected()
         liste.Select(liste.GetFirstSelected(), False)
@@ -2535,18 +2537,18 @@ class PrefWordCloud ( wx.Dialog ):
         self.m_staticline4 = wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL )
         fgSizer1.Add( self.m_staticline4, 0, wx.EXPAND |wx.ALL, 5 )
         
         self.m_staticline4 = wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL )
         fgSizer1.Add( self.m_staticline4, 0, wx.EXPAND |wx.ALL, 5 )
         
-        #self.m_staticText5 = wx.StaticText( self, wx.ID_ANY, u"Nombre maximum de formes", wx.DefaultPosition, wx.DefaultSize, 0 )
-        #self.m_staticText5.Wrap( -1 )
-        #fgSizer1.Add( self.m_staticText5, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT|wx.ALL, 5 )
+        self.m_staticText5 = wx.StaticText( self, wx.ID_ANY, u"Nombre maximum de formes", wx.DefaultPosition, wx.DefaultSize, 0 )
+        self.m_staticText5.Wrap( -1 )
+        fgSizer1.Add( self.m_staticText5, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT|wx.ALL, 5 )
         
         
-        #self.spin_maxword = wx.SpinCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.SP_ARROW_KEYS, 0, 10000, 600 )
-        #fgSizer1.Add( self.spin_maxword, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )
+        self.spin_maxword = wx.SpinCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.SP_ARROW_KEYS, 0, 10000, 600 )
+        fgSizer1.Add( self.spin_maxword, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )
         
         
-        #self.m_staticline5 = wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL )
-        #fgSizer1.Add( self.m_staticline5, 0, wx.EXPAND |wx.ALL, 5 )
+        self.m_staticline5 = wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL )
+        fgSizer1.Add( self.m_staticline5, 0, wx.EXPAND |wx.ALL, 5 )
         
         
-        #self.m_staticline6 = wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL )
-        #fgSizer1.Add( self.m_staticline6, 0, wx.EXPAND |wx.ALL, 5 )
+        self.m_staticline6 = wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL )
+        fgSizer1.Add( self.m_staticline6, 0, wx.EXPAND |wx.ALL, 5 )
         
         self.m_staticText6 = wx.StaticText( self, wx.ID_ANY, u"Taille du texte", wx.DefaultPosition, wx.DefaultSize, 0 )
         self.m_staticText6.Wrap( -1 )
         
         self.m_staticText6 = wx.StaticText( self, wx.ID_ANY, u"Taille du texte", wx.DefaultPosition, wx.DefaultSize, 0 )
         self.m_staticText6.Wrap( -1 )
@@ -2767,7 +2769,8 @@ class CorpusPref ( wx.Dialog ):
         self.parent = parent 
         langues_n = [u'français', u'english', u'german (expérimentale)', u'italian (expérimentale)', u'swedish (exp.)', u'portuguese (exp.)']
         self.langues = [u'french', u'english', u'german', 'italian', 'swedish', u'portuguese']
         self.parent = parent 
         langues_n = [u'français', u'english', u'german (expérimentale)', u'italian (expérimentale)', u'swedish (exp.)', u'portuguese (exp.)']
         self.langues = [u'french', u'english', u'german', 'italian', 'swedish', u'portuguese']
-        self.encodages = encodages
+        self.encodages = [enc[0].lower() for enc in encodages]
+
         ucimark = [u'****', u'0000']
         ucemethod = [u'charactères', u'occurrences', u'paragraphe']
 
         ucimark = [u'****', u'0000']
         ucemethod = [u'charactères', u'occurrences', u'paragraphe']
 
@@ -2793,7 +2796,7 @@ class CorpusPref ( wx.Dialog ):
         self.m_staticText1.Wrap( -1 )
         fgSizer1.Add( self.m_staticText1, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT|wx.ALL, 5 )
         
         self.m_staticText1.Wrap( -1 )
         fgSizer1.Add( self.m_staticText1, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT|wx.ALL, 5 )
         
-        encodage_choicesChoices = [' - '.join(encodage) for encodage in self.encodages]
+        encodage_choicesChoices = [' - '.join(encodage) for encodage in encodages]
         self.encodage_choices = wx.Choice( self.m_panel1, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, encodage_choicesChoices, 0 )
         self.encodage_choices.SetSelection( 0 )
         fgSizer1.Add( self.encodage_choices, 0, wx.ALL, 5 )
         self.encodage_choices = wx.Choice( self.m_panel1, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, encodage_choicesChoices, 0 )
         self.encodage_choices.SetSelection( 0 )
         fgSizer1.Add( self.encodage_choices, 0, wx.ALL, 5 )
@@ -2969,7 +2972,11 @@ class CorpusPref ( wx.Dialog ):
         pass
 
     def setparametres(self, parametres) :
         pass
 
     def setparametres(self, parametres) :
-        self.encodage_choices.SetSelection(0)
+        if  locale.getpreferredencoding().lower() == 'mac-roman' :
+            enc = self.encodages.index('macroman')
+        else :
+            enc = self.encodages.index(locale.getpreferredencoding().lower())
+        self.encodage_choices.SetSelection(enc)
         self.lang_choices.SetSelection(0)
         self.repout_choices.SetValue(parametres['pathout'])
         self.ucimark_choices.SetSelection(parametres['ucimark'])
         self.lang_choices.SetSelection(0)
         self.repout_choices.SetValue(parametres['pathout'])
         self.ucimark_choices.SetSelection(parametres['ucimark'])
@@ -2987,7 +2994,7 @@ class CorpusPref ( wx.Dialog ):
 
     def doparametres(self) :
         parametres = {}
 
     def doparametres(self) :
         parametres = {}
-        parametres['encoding'] = self.encodages[self.encodage_choices.GetSelection()][0]
+        parametres['encoding'] = encodages[self.encodage_choices.GetSelection()][0]
         parametres['lang'] = self.langues[self.lang_choices.GetSelection()]
         parametres['pathout'] = self.repout_choices.GetValue()
         parametres['ucimark'] = self.ucimark_choices.GetSelection()
         parametres['lang'] = self.langues[self.lang_choices.GetSelection()]
         parametres['pathout'] = self.repout_choices.GetValue()
         parametres['ucimark'] = self.ucimark_choices.GetSelection()
index 0e5edfd..4479eaf 100644 (file)
@@ -171,7 +171,8 @@ class DoConf :
             self.conf.write(f)
 
     def totext(self, parametres) :
             self.conf.write(f)
 
     def totext(self, parametres) :
-        txt = ['Corpus']
+        #txt = ['Corpus']
+        txt = []
         for val in parametres :
             if isinstance(parametres[val], int) :
                 txt.append(' \t\t: '.join([val, `parametres[val]`]))
         for val in parametres :
             if isinstance(parametres[val], int) :
                 txt.append(' \t\t: '.join([val, `parametres[val]`]))
@@ -316,8 +317,8 @@ def formatExceptionInfo(maxTBlevel=5):
          cla, exc, trbk = sys.exc_info()
          excName = cla.__name__
          try:
          cla, exc, trbk = sys.exc_info()
          excName = cla.__name__
          try:
-             excArgs = exc.__dict__["args"]
-         except KeyError:
+             excArgs = exc.args[0]
+         except :
              excArgs = "<no args>"
          excTb = traceback.format_tb(trbk, maxTBlevel)
          return (excName, excArgs, excTb)
              excArgs = "<no args>"
          excTb = traceback.format_tb(trbk, maxTBlevel)
          return (excName, excArgs, excTb)
@@ -330,7 +331,7 @@ def decoupercharact(chaine, longueur, longueurOptimale, separateurs = None) :
         Si on trouve un '$', c'est fini.
         Sinon, on cherche le meilleur candidat. C'est-à-dire le rapport poids/distance le plus important.
     """
         Si on trouve un '$', c'est fini.
         Sinon, on cherche le meilleur candidat. C'est-à-dire le rapport poids/distance le plus important.
     """
-    separateurs = [[u'.', 60.0], [u'?', 60.0], [u'!', 60.0], [u'£', 60], [u':', 50.0], [u';', 40.0], [u',', 10.0], [u' ', 0.1]]
+    separateurs = [[u'.', 60.0], [u'?', 60.0], [u'!', 60.0], [u'£', 60], [u':', 50.0], [u';', 40.0], [u',', 10.0], [u' ', 0.1]]
     trouve = False                 # si on a trouvé un bon séparateur
     iDecoupe = 0                # indice du caractere ou il faut decouper
     
     trouve = False                 # si on a trouvé un bon séparateur
     iDecoupe = 0                # indice du caractere ou il faut decouper
     
@@ -380,28 +381,38 @@ def decoupercharact(chaine, longueur, longueurOptimale, separateurs = None) :
     # si on a rien trouvé
     return False, chaine.split(), ''
 
     # si on a rien trouvé
     return False, chaine.split(), ''
 
-def BugReport(parent):
+def BugReport(parent, error = None):
     for ch in parent.GetChildren():
         if "<class 'wx._windows.ProgressDialog'>" == str(type(ch)):
             ch.Destroy()   
     for ch in parent.GetChildren():
         if "<class 'wx._windows.ProgressDialog'>" == str(type(ch)):
             ch.Destroy()   
+    excName, exc, excTb = formatExceptionInfo()
+    if excName == 'Exception' :
+        txt = 'Message :\n'
+    else :
+        txt = u'            !== BUG ==!       \n'
+        txt += u'*************************************\n'
+        txt += '\n'.join(excTb).replace('    ', ' ')
+        txt += excName + '\n'
+    txt += exc
+
     dial = BugDialog(parent)
     dial = BugDialog(parent)
-    txt = u'            !== BUG ==!       \n'
-    txt += u'*************************************\n'
-    for line in formatExceptionInfo():
-        if type(line) == type([]):
-            for don in line:
-                txt += don.replace('    ', ' ')
-        else:
-            txt += line + '\n'
+    #for line in formatExceptionInfo():
+    #    if type(line) == type([]):
+    #        for don in line:
+    #            txt += don.replace('    ', ' ')
+    #    else:
+    #        txt += line + '\n'
     if 'Rerror' in dir(parent) :
         txt += parent.Rerror
         parent.Rerror = ''
     if 'Rerror' in dir(parent) :
         txt += parent.Rerror
         parent.Rerror = ''
+    #if error is not None :
+    #    txt += '\n%s\n' %error
     print formatExceptionInfo()
     log.error(txt)
     dial.text_ctrl_1.write(txt)
     dial.CenterOnParent()
     dial.ShowModal()
     print formatExceptionInfo()
     log.error(txt)
     dial.text_ctrl_1.write(txt)
     dial.CenterOnParent()
     dial.ShowModal()
-    raise NameError('Bug')
+    #raise Exception('Bug')
     
 def PlaySound(parent):
     if parent.pref.getboolean('iramuteq', 'sound') :
     
 def PlaySound(parent):
     if parent.pref.getboolean('iramuteq', 'sound') :
@@ -514,7 +525,7 @@ def check_Rresult(parent, pid) :
             except :
                 BugReport(parent)
     else :
             except :
                 BugReport(parent)
     else :
-        if pid !=0 :
+        if pid != 0 :
             try :
                 raise Exception(u'Erreur R')
             except :
             try :
                 raise Exception(u'Erreur R')
             except :
index 7b1f2fe..f7e6249 100644 (file)
@@ -114,36 +114,40 @@ def getCorpus(page) :
         return None
             
 class SelectColumn :
         return None
             
 class SelectColumn :
-    def __init__(self, parent, dictcol, actives, pathout, selected = None) :
+    def __init__(self, parent, dictcol, actives, pathout, selected = None, dlg = False) :
         self.ira = parent
         self.ira = parent
-        dial = dialog.SelectColDial(self.ira)
-        listcol = ListForSpec(dial, self, dictcol, ['forme', 'eff'])
-        dial.bSizer2.Add( listcol, 2, wx.ALL|wx.EXPAND, 5 )
-        dial.m_sdbSizer2.AddButton( dial.m_sdbSizer2OK )
-        dial.m_sdbSizer2.Realize()
-        dial.bSizer2.Add( dial.m_sdbSizer2, 0, wx.EXPAND, 5 )
-        dial.Layout()
-        if selected is None :
-            for row in xrange(listcol.list.GetItemCount()):
-                listcol.list.Select(row)
+        if dlg :
+            dial = dialog.SelectColDial(self.ira)
+            listcol = ListForSpec(dial, self, dictcol, ['forme', 'eff'])
+            dial.bSizer2.Add( listcol, 2, wx.ALL|wx.EXPAND, 5 )
+            dial.m_sdbSizer2.AddButton( dial.m_sdbSizer2OK )
+            dial.m_sdbSizer2.Realize()
+            dial.bSizer2.Add( dial.m_sdbSizer2, 0, wx.EXPAND, 5 )
+            dial.Layout()
+            if selected is None :
+                for row in xrange(listcol.GetItemCount()):
+                    listcol.Select(row)
+            else :
+                orderlex = dict([[listcol.getColumnText(i,0),i] for i in range(0,listcol.GetItemCount())])
+                for row in selected :
+                    listcol.Select(orderlex[actives[row]])
+            dial.CenterOnParent()
+            val = dial.ShowModal()        
+            last = listcol.GetFirstSelected()
+            lastl = [listcol.GetFirstSelected()]
+            indexes = [listcol.getColumnText(listcol.GetFirstSelected(),0)]
+            while listcol.GetNextSelected(last) != -1:
+                last = listcol.GetNextSelected(last)
+                lastl.append(last)
+                indexes.append(listcol.getColumnText(last,0))
+            dial.Destroy()
+            column = [actives.index(val) for val in indexes]
+            column.sort()
+            with open(pathout, 'w') as f :
+                f.write('\n'.join([`val` for val in column]))
         else :
         else :
-            orderlex = dict([[listcol.getColumnText(i,0),i] for i in range(0,listcol.list.GetItemCount())])
-            for row in selected :
-                listcol.list.Select(orderlex[actives[row]])
-        dial.CenterOnParent()
-        val = dial.ShowModal()        
-        last = listcol.list.GetFirstSelected()
-        lastl = [listcol.list.GetFirstSelected()]
-        indexes = [listcol.getColumnText(listcol.list.GetFirstSelected(),0)]
-        while listcol.list.GetNextSelected(last) != -1:
-            last = listcol.list.GetNextSelected(last)
-            lastl.append(last)
-            indexes.append(listcol.getColumnText(last,0))
-        dial.Destroy()
-        column = [actives.index(val) for val in indexes]
-        column.sort()
-        with open(pathout, 'w') as f :
-            f.write('\n'.join([`val` for val in column]))
+            with open(pathout, 'w') as f :
+                f.write('\n'.join([`i` for i in range(0,len(actives))]))
 
 class PrepSimi :
     def __init__(self, parent, parametres, indices_simi) :    
 
 class PrepSimi :
     def __init__(self, parent, parametres, indices_simi) :    
index ad31bed..e0fd3da 100644 (file)
--- a/iracmd.py
+++ b/iracmd.py
@@ -35,7 +35,7 @@ log.debug('----------TEST corpusNG-----------------')
 from analysetxt import Alceste,  gramact, gramsup
 from corpusNG import *
 
 from analysetxt import Alceste,  gramact, gramsup
 from corpusNG import *
 
-
+#cmd = iracmd.CmdLine(args=['-f','/home/pierre/workspace/iramuteq/corpus/lru2.txt','-t','alceste'])
 
 AppliPath = os.path.abspath(os.path.dirname(os.path.realpath(sys.argv[0])))
 if os.getenv('HOME') != None:
 
 AppliPath = os.path.abspath(os.path.dirname(os.path.realpath(sys.argv[0])))
 if os.getenv('HOME') != None:
@@ -45,10 +45,19 @@ else:
 UserConfigPath = os.path.abspath(os.path.join(user_home, '.iramuteq'))
 
 class CmdLine :
 UserConfigPath = os.path.abspath(os.path.join(user_home, '.iramuteq'))
 
 class CmdLine :
-    def __init__(self) :
+    def __init__(self, args = None) :
         self.DictPath = ConstructDicoPath(AppliPath)
         self.ConfigPath = ConstructConfigPath(UserConfigPath)
         self.syscoding = sys.getdefaultencoding()
         self.DictPath = ConstructDicoPath(AppliPath)
         self.ConfigPath = ConstructConfigPath(UserConfigPath)
         self.syscoding = sys.getdefaultencoding()
+        self.TEMPDIR = tempfile.mkdtemp('iramuteq') 
+        self.RscriptsPath = ConstructRscriptsPath(AppliPath)
+        self.PathPath = ConfigParser()
+        self.PathPath.read(self.ConfigPath['path'])        
+        self.RPath = self.PathPath.get('PATHS', 'rpath')
+        self.pref = RawConfigParser()
+        self.pref.read(self.ConfigPath['preferences'])
+        self.history = History(self.ConfigPath['history'])
+
         parser = OptionParser()
     
         parser.add_option("-f", "--file", dest="filename", help="chemin du corpus", metavar="FILE", default=False)
         parser = OptionParser()
     
         parser.add_option("-f", "--file", dest="filename", help="chemin du corpus", metavar="FILE", default=False)
@@ -58,8 +67,12 @@ class CmdLine :
         parser.add_option("-e", "--enc", dest="encodage", help="encodage du corpus", metavar="ENC", default=locale.getpreferredencoding())
         parser.add_option("-l", "--lang", dest="language", help="langue du corpus", metavar="LANG", default='french')
         parser.add_option("-r", "--read", dest="read", help="lire un corpus", metavar="READ", default = False)
         parser.add_option("-e", "--enc", dest="encodage", help="encodage du corpus", metavar="ENC", default=locale.getpreferredencoding())
         parser.add_option("-l", "--lang", dest="language", help="langue du corpus", metavar="LANG", default='french')
         parser.add_option("-r", "--read", dest="read", help="lire un corpus", metavar="READ", default = False)
+        parser.add_option("-b", "--build", action="store_true", dest="build", help = "construire un corpus", default = False)
 
 
-        (options, args) = parser.parse_args()
+        if args is None :
+            (options, args) = parser.parse_args()
+        else : 
+            (options, args) = parser.parse_args(args)
         print args
         print options
         options.type_analyse
         print args
         print options
         options.type_analyse
@@ -68,19 +81,16 @@ class CmdLine :
         elif options.filename and options.type_analyse :
             config = DoConf(self.ConfigPath[options.type_analyse]).getoptions()
             #self.ConfigPath[options.type_analyse] = os.path.abspath(options.configfile)
         elif options.filename and options.type_analyse :
             config = DoConf(self.ConfigPath[options.type_analyse]).getoptions()
             #self.ConfigPath[options.type_analyse] = os.path.abspath(options.configfile)
+        elif options.read and options.type_analyse :
+            config = DoConf(self.ConfigPath[options.type_analyse]).getoptions()
         elif options.read :
             pass
         elif options.read :
             pass
+        elif options.filename and options.build :
+            pass
         else :
             print 'rien a faire'
             return
         else :
             print 'rien a faire'
             return
-        self.TEMPDIR = tempfile.mkdtemp('iramuteq') 
-        self.RscriptsPath = ConstructRscriptsPath(AppliPath)
-        self.PathPath = ConfigParser()
-        self.PathPath.read(self.ConfigPath['path'])        
-        self.RPath = self.PathPath.get('PATHS', 'rpath')
-        self.pref = RawConfigParser()
-        self.pref.read(self.ConfigPath['preferences'])
-        self.history = History(self.ConfigPath['history'])
+
         #self.history.write()
         if options.filename or options.read :#or options.build:
             self.corpus_encodage = options.encodage
         #self.history.write()
         if options.filename or options.read :#or options.build:
             self.corpus_encodage = options.encodage
@@ -101,20 +111,27 @@ class CmdLine :
                 corpus_parametres['encoding'] = self.corpus_encodage
                 corpus_parametres['syscoding'] = locale.getpreferredencoding()
                 corpus_parametres['pathout'] = PathOut(self.filename, 'corpus').mkdirout()
                 corpus_parametres['encoding'] = self.corpus_encodage
                 corpus_parametres['syscoding'] = locale.getpreferredencoding()
                 corpus_parametres['pathout'] = PathOut(self.filename, 'corpus').mkdirout()
-                corpus = BuildFromAlceste(self.filename, corpus_parametres, self.lexique, self.expressions).corpus
-                self.history.add(corpus.parametres)
-                corpus = copycorpus(corpus)
+                try :
+                    corpus = BuildFromAlceste(self.filename, corpus_parametres, self.lexique, self.expressions).corpus
+                except Exception, txt:
+                    log.info('probleme lors de la construction: %s' %txt)
+                    corpus = None
+                    raise
+                else :
+                    self.history.add(corpus.parametres)
+                    corpus = copycorpus(corpus)
 
                 #with codecs.open(self.filename, 'r', self.corpus_encodage) as f:
             elif options.read :
                 corpus = Corpus(self, parametres = DoConf(options.read).getoptions('corpus'), read = options.read)
                 corpus.parametres['path'] = os.path.abspath(options.read)
                 pathout = os.path.dirname(os.path.dirname(os.path.abspath(options.read)))
 
                 #with codecs.open(self.filename, 'r', self.corpus_encodage) as f:
             elif options.read :
                 corpus = Corpus(self, parametres = DoConf(options.read).getoptions('corpus'), read = options.read)
                 corpus.parametres['path'] = os.path.abspath(options.read)
                 pathout = os.path.dirname(os.path.dirname(os.path.abspath(options.read)))
+                self.corpus = corpus
 
 
-
-            corpus.conn_all()
-            corpus.make_lems()
-            corpus.parse_active(gramact, gramsup)
+            if corpus is not None :
+                corpus.conn_all()
+                corpus.make_lems()
+                corpus.parse_active(gramact, gramsup)
 #            log.warning('ATTENTION gethapaxuces')
 #            MakeUciStat(corpus)
 #            qfqsdf
 #            log.warning('ATTENTION gethapaxuces')
 #            MakeUciStat(corpus)
 #            qfqsdf
@@ -127,24 +144,24 @@ class CmdLine :
             #    f.write('\n'.join(['\t'.join(val) for val in res]))
                 #    self.content = f.read()
                 #self.content = self.content.replace('\r','')
             #    f.write('\n'.join(['\t'.join(val) for val in res]))
                 #    self.content = f.read()
                 #self.content = self.content.replace('\r','')
-            if options.type_analyse == 'alceste' :
-                log.debug('ATTENTION : ANALYSE NG')
-                    #print corpus.make_etoiles()
-                    #zerzre
-                #corpus.read_corpus()
-                #corpus.parse_active(gramact, gramsup)
-                config['type'] = 'alceste'
-                Alceste(self, corpus, parametres = config)
-            #    self.Text = AnalyseAlceste(self, cmd = True, big = True)
-                #self.Text = AnalyseAlceste(self, cmd = True)
-            elif options.type_analyse == 'pam' :
-                self.Text = PamTxt(self, cmd = True)
-            elif options.type_analyse == 'afcuci' :
-                self.Text = AfcUci(self, cmd = True)
-            elif options.type_analyse == 'stat' :
-                self.Text = Stat(self, corpus, config = {'type' : 'stat'})
-            elif options.type_analyse == 'spec' :
-                self.Text = Lexico(self, corpus, config = {'type' : 'spec'})
+                if options.type_analyse == 'alceste' :
+                    log.debug('ATTENTION : ANALYSE NG')
+                        #print corpus.make_etoiles()
+                        #zerzre
+                    #corpus.read_corpus()
+                    #corpus.parse_active(gramact, gramsup)
+                    config['type'] = 'alceste'
+                    self.Text = Alceste(self, corpus, parametres = config)
+                #    self.Text = AnalyseAlceste(self, cmd = True, big = True)
+                    #self.Text = AnalyseAlceste(self, cmd = True)
+                elif options.type_analyse == 'pam' :
+                    self.Text = PamTxt(self, cmd = True)
+                elif options.type_analyse == 'afcuci' :
+                    self.Text = AfcUci(self, cmd = True)
+                elif options.type_analyse == 'stat' :
+                    self.Text = Stat(self, corpus, parametres = config)
+                elif options.type_analyse == 'spec' :
+                    self.Text = Lexico(self, corpus, config = {'type' : 'spec'})
             #print self.Text.corpus.hours, 'h', self.Text.corpus.minutes,'min', self.Text.corpus.seconds, 's'
 #            self.Text.corpus.make_colored_corpus('colored.html')
 
             #print self.Text.corpus.hours, 'h', self.Text.corpus.minutes,'min', self.Text.corpus.seconds, 's'
 #            self.Text.corpus.make_colored_corpus('colored.html')
 
index 01cbcb6..8fa06d6 100644 (file)
@@ -118,7 +118,7 @@ if os.getenv('HOME') != None:
 else:
     user_home = os.getenv('HOMEPATH')
 UserConfigPath = os.path.abspath(os.path.join(user_home, '.iramuteq'))
 else:
     user_home = os.getenv('HOMEPATH')
 UserConfigPath = os.path.abspath(os.path.join(user_home, '.iramuteq'))
-#Si pas de fichiers de config utilisateur, on crée le repertoire
+#Si pas de fichiers de config utilisateur, on cree le repertoire
 CreateIraDirectory(UserConfigPath, AppliPath)
 #fichiers log pour windows (py2exe)
 print 'PLUS DE LOG !!!!!!!!!!'
 CreateIraDirectory(UserConfigPath, AppliPath)
 #fichiers log pour windows (py2exe)
 print 'PLUS DE LOG !!!!!!!!!!'
@@ -177,37 +177,37 @@ class IraFrame(wx.Frame):
         self.mb = wx.MenuBar()
 
         file_menu = wx.Menu()
         self.mb = wx.MenuBar()
 
         file_menu = wx.Menu()
-        item = wx.MenuItem(file_menu, ID_OpenData, _(u"Open a questionnaire"), _(u"Open a questionnaire"))
+        item = wx.MenuItem(file_menu, ID_OpenData, _(u"Open a matrix"), _(u"Open a matrix"))
         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"Ouvrir texte", u"Ouvrir un corpus texte")
+        item = wx.MenuItem(file_menu, ID_OpenText, _(u"Open a text corpora"), _(u"Open a text corpora"))
         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_OnOpenAnalyse, u"Ouvrir une Analyse", "Ouvrir une Analyse")
+        item = wx.MenuItem(file_menu, ID_OnOpenAnalyse, _(u"Open an analysis"), _("Open an analysis"))
         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)
 
-        item1 = wx.MenuItem(file_menu, ID_Import, u"Importer un corpus factiva...", "Importer un corpus factiva...")
+        item1 = wx.MenuItem(file_menu, ID_Import, _(u"Import a factiva corpora..."), _("Import a factiva corpora..."))
         item1.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_TIP))
         file_menu.AppendItem(item1)
         #item1.Enable(True)
        
         item1.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_TIP))
         file_menu.AppendItem(item1)
         #item1.Enable(True)
        
-        item = wx.MenuItem(file_menu, ID_SaveTab, u"Enregistrer l\'onglet sous...", u"Enregistrer l\'onglet sous ...")
+        item = wx.MenuItem(file_menu, ID_SaveTab, _(u"Save tab as..."), _(u"Save tab as..."))
         item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_SAVE_AS))
         #item.Enable(False)
         file_menu.AppendItem(item)
         
         item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_SAVE_AS))
         #item.Enable(False)
         file_menu.AppendItem(item)
         
-        file_menu.Append(wx.ID_EXIT, u"Exit")
+        file_menu.Append(wx.ID_EXIT, _(u"Exit"))
         
         edit_menu = wx.Menu()
         
         edit_menu = wx.Menu()
-        edit_menu.Append(wx.ID_PREFERENCES, '', u'Préférences')
+        edit_menu.Append(wx.ID_PREFERENCES, '', _(u'Preferences'))
         
         view_menu = wx.Menu()
         
         view_menu = wx.Menu()
-        view_menu.Append(ID_ACCEUIL, u"Page d'accueil")
-        view_menu.Append(ID_VIEWDATA, u"Afficher les données")
-        view_menu.Append(ID_RESULT, u'Afficher les résultats')
+        view_menu.Append(ID_ACCEUIL, _(u"Home page"))
+        view_menu.Append(ID_VIEWDATA, _(u"Show data"))
+        view_menu.Append(ID_RESULT, _(u'Show results'))
         #view_menu.AppendSeparator()
 
         analyse_menu = wx.Menu()
         #view_menu.AppendSeparator()
 
         analyse_menu = wx.Menu()
@@ -570,10 +570,13 @@ vous devez signaler le chemin de l'éxecutable de R dans les préférences."""
         
         builder =  Builder(self, dlg)
         if builder.res == wx.ID_OK :
         
         builder =  Builder(self, dlg)
         if builder.res == wx.ID_OK :
-            corpus = builder.doanalyse()
-            self.history.add(corpus.parametres)
-            self.tree.OnItemAppend(corpus.parametres)
-            OpenAnalyse(self, corpus.parametres)
+            try :
+                corpus = builder.doanalyse()
+                self.history.add(corpus.parametres)
+                self.tree.OnItemAppend(corpus.parametres)
+                OpenAnalyse(self, corpus.parametres)
+            except :
+                BugReport(self)
         #self.content = DoConf().totext(corpus.parametres)
 #        parametres = DoConf(os.path.join(UserConfigPath,'corpus.cfg')).getoptions('corpus')
 #        parametres['originalpath'] = self.filename
         #self.content = DoConf().totext(corpus.parametres)
 #        parametres = DoConf(os.path.join(UserConfigPath,'corpus.cfg')).getoptions('corpus')
 #        parametres['originalpath'] = self.filename
@@ -590,28 +593,24 @@ vous devez signaler le chemin de l'éxecutable de R dans les préférences."""
 #        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()]
 #        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()]
-            count = 1
-            keepGoing = dlg.Update(count, u"Lecture du fichier")
-#        try :
-#            with codecs.open(self.filename, 'rU', self.corpus_encodage) as f:
-#                self.content = f.read()
-#            #self.content = self.content.replace('\r','\n')
-#        except UnicodeDecodeError :
-#            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.type = "Texte"
-            self.DataTxt = False
-            self.Text = ''
-            count += 1
-            keepGoing = dlg.Update(count, u"Chargement du dictionnaire")
-        dlg.Destroy()
+            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.type = "Texte"
+                self.DataTxt = False
+                self.Text = ''
+                count += 1
+                keepGoing = dlg.Update(count, u"Chargement du dictionnaire")
+                dlg.Destroy()
         #self.OnViewData(wx.EVT_BUTTON)
         
     def OnExit(self, event):
         #self.OnViewData(wx.EVT_BUTTON)
         
     def OnExit(self, event):
@@ -707,7 +706,6 @@ Voulez-vous fermer quand même ?"""
             remove = True
         if self.nb.GetPageCount() == 1 and remove and not notebook :
             self.LastTabClose()
             remove = True
         if self.nb.GetPageCount() == 1 and remove and not notebook :
             self.LastTabClose()
-
     
     def LastTabClose(self) :
         if self.nb.GetPageCount() == 1 :
     
     def LastTabClose(self) :
         if self.nb.GetPageCount() == 1 :
@@ -991,7 +989,9 @@ 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, 100)
+        #col = randint(0, 255)
+        #col1 = randint(0,255)
+        #col2 = randint(0,255)
         col = 0
         bckgrdcolor = wx.Colour(col, col, col)
         self.SetBackgroundColour(bckgrdcolor)
         col = 0
         bckgrdcolor = wx.Colour(col, col, col)
         self.SetBackgroundColour(bckgrdcolor)
index 91d5f83..642121c 100644 (file)
--- a/layout.py
+++ b/layout.py
@@ -227,6 +227,7 @@ class OpenCHDS():
        self.pathout.basefiles(ChdTxtPathOut)
        DictPathOut = self.pathout 
        self.DictPathOut = DictPathOut
        self.pathout.basefiles(ChdTxtPathOut)
        DictPathOut = self.pathout 
        self.DictPathOut = DictPathOut
+       self.dictpathout = DictPathOut
        self.parent = parent
 
        Profile = DictPathOut['PROFILE_OUT']
        self.parent = parent
 
        Profile = DictPathOut['PROFILE_OUT']
@@ -341,7 +342,7 @@ class OpenCHDS():
        panel.ProfNB = aui.AuiNotebook(panel, -1, wx.DefaultPosition)
        panel.ProfNB.SetArtProvider(aui.ChromeTabArt())
        #self.ProfNB.SetTabCtrlHeight(100)
        panel.ProfNB = aui.AuiNotebook(panel, -1, wx.DefaultPosition)
        panel.ProfNB.SetArtProvider(aui.ChromeTabArt())
        #self.ProfNB.SetTabCtrlHeight(100)
-       panel.AntiProfNB = aui.AuiNotebook(panel, -1, wx.DefaultPosition)
+       #panel.AntiProfNB = aui.AuiNotebook(panel, -1, wx.DefaultPosition)
        if os.path.exists(DictPathOut['prof_seg']) :
             prof_seg = ReadProfileAsDico(self, DictPathOut['prof_seg'], False, self.encoding)
             self.prof_seg_nb = aui.AuiNotebook(panel, -1, wx.DefaultPosition)
        if os.path.exists(DictPathOut['prof_seg']) :
             prof_seg = ReadProfileAsDico(self, DictPathOut['prof_seg'], False, self.encoding)
             self.prof_seg_nb = aui.AuiNotebook(panel, -1, wx.DefaultPosition)
@@ -351,9 +352,9 @@ class OpenCHDS():
             indpour = ' - '.join([ind, DictProfile[str(i + 1)][0][2]])
             print 'construction liste classe %i' % i
             self.tabprofile = ProfListctrlPanel(self.parent, self, DictProfile[str(i + 1)], Alceste, i + 1)
             indpour = ' - '.join([ind, DictProfile[str(i + 1)][0][2]])
             print 'construction liste classe %i' % i
             self.tabprofile = ProfListctrlPanel(self.parent, self, DictProfile[str(i + 1)], Alceste, i + 1)
-            self.tabantiprofile = ProfListctrlPanel(self.parent, self, DictAnti[str(i + 1)], Alceste, i + 1)
+            #self.tabantiprofile = ProfListctrlPanel(self.parent, self, DictAnti[str(i + 1)], Alceste, i + 1)
             panel.ProfNB.AddPage(self.tabprofile, 'classe %s %s(%s%%)' % (str(i + 1), sep, indpour))
             panel.ProfNB.AddPage(self.tabprofile, 'classe %s %s(%s%%)' % (str(i + 1), sep, indpour))
-            panel.AntiProfNB.AddPage(self.tabantiprofile, 'classe %s' % str(i + 1))
+            #panel.AntiProfNB.AddPage(self.tabantiprofile, 'classe %s' % str(i + 1))
             if os.path.exists(DictPathOut['prof_seg']) :
                 self.tab_prof_seg = ProfListctrlPanel(self.parent, self, prof_seg[str(i + 1)], False, i + 1)
                 self.prof_seg_nb.AddPage(self.tab_prof_seg, 'classe %i' % (i + 1))
             if os.path.exists(DictPathOut['prof_seg']) :
                 self.tab_prof_seg = ProfListctrlPanel(self.parent, self, prof_seg[str(i + 1)], False, i + 1)
                 self.prof_seg_nb.AddPage(self.tab_prof_seg, 'classe %i' % (i + 1))
@@ -368,13 +369,13 @@ class OpenCHDS():
            if os.path.exists(self.DictPathOut['afc_facteur']) :
                dictrow, first = ReadList(self.DictPathOut['afc_facteur'], self.encoding)
                self.TabAFC_facteur = ListForSpec(self.parent, parametres, dictrow, first)
            if os.path.exists(self.DictPathOut['afc_facteur']) :
                dictrow, first = ReadList(self.DictPathOut['afc_facteur'], self.encoding)
                self.TabAFC_facteur = ListForSpec(self.parent, parametres, dictrow, first)
-               dictrow, first = ReadList(self.DictPathOut['afc_row'], self.encoding)
-               self.TabAFC_ligne = ListForSpec(self.parent, self.parametres, dictrow, first)
-               dictrow, first = ReadList(self.DictPathOut['afc_col'], self.encoding)
-               self.TabAFC_colonne = ListForSpec(parent, self.parametres, dictrow, first)
+               #dictrow, first = ReadList(self.DictPathOut['afc_row'], self.encoding)
+               #self.TabAFC_ligne = ListForSpec(self.parent, self.parametres, dictrow, first)
+               #dictrow, first = ReadList(self.DictPathOut['afc_col'], self.encoding)
+               #self.TabAFC_colonne = ListForSpec(parent, self.parametres, dictrow, first)
                self.TabAFC.AddPage(self.TabAFC_facteur, 'Facteurs')
                self.TabAFC.AddPage(self.TabAFC_facteur, 'Facteurs')
-               self.TabAFC.AddPage(self.TabAFC_colonne, u'Colonnes')
-               self.TabAFC.AddPage(self.TabAFC_ligne, u'Lignes')
+               #self.TabAFC.AddPage(self.TabAFC_colonne, u'Colonnes')
+               #self.TabAFC.AddPage(self.TabAFC_ligne, u'Lignes')
            
            sizer_3 = wx.BoxSizer(wx.VERTICAL)
            self.parent.nb_panel_2 = wx.Panel(panel.TabChdSim, -1)
            
            sizer_3 = wx.BoxSizer(wx.VERTICAL)
            self.parent.nb_panel_2 = wx.Panel(panel.TabChdSim, -1)
@@ -387,7 +388,7 @@ class OpenCHDS():
            self.parent.Bind(wx.EVT_BUTTON, self.onsimi, self.parent.button_simi)
        
        panel.TabChdSim.AddPage(panel.ProfNB, 'Profils')
            self.parent.Bind(wx.EVT_BUTTON, self.onsimi, self.parent.button_simi)
        
        panel.TabChdSim.AddPage(panel.ProfNB, 'Profils')
-       panel.TabChdSim.AddPage(panel.AntiProfNB, 'Antiprofils')
+       #panel.TabChdSim.AddPage(panel.AntiProfNB, 'Antiprofils')
        dlg.Update(4 + self.clnb, 'Affichage...')
        if clnb > 2 :
            panel.TabChdSim.AddPage(self.TabAFC, 'AFC')
        dlg.Update(4 + self.clnb, 'Affichage...')
        if clnb > 2 :
            panel.TabChdSim.AddPage(self.TabAFC, 'AFC')
@@ -456,11 +457,13 @@ class OpenCHDS():
             dlg.Destroy()
 
     def onprofseg(self, event):
             dlg.Destroy()
 
     def onprofseg(self, event):
-        try :
+        #try :
+            print 'plus de bug profseg'
+            print self.parametres
             corpus = self.parent.nb.GetPage(self.parent.nb.GetSelection()).corpus
             corpus = self.parent.nb.GetPage(self.parent.nb.GetSelection()).corpus
-            ProfileSegment(self.parent,corpus)
-        except :
-            BugReport(self.parent)
+            ProfileSegment(self.parent, self.dictpathout, self.parametres, corpus)
+        #except :
+        #    BugReport(self.parent)
 
     def onproftype(self, event):
         try :
 
     def onproftype(self, event):
         try :
index 46d3b54..5d34a66 100644 (file)
@@ -24,19 +24,19 @@ from PrintRScript import barplot
 from dialog import SearchDial
 #---------------------------------------------------------------------------
 
 from dialog import SearchDial
 #---------------------------------------------------------------------------
 
-class List(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin):
-    def __init__(self, parent, ID, pos=wx.DefaultPosition,
-                 size=wx.DefaultSize, style=0):
-        wx.ListCtrl.__init__(self, parent, ID, pos, size, style)
-        listmix.ListCtrlAutoWidthMixin.__init__(self)
+#class List(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin):
+#    def __init__(self, parent, ID, pos=wx.DefaultPosition,
+#                 size=wx.DefaultSize, style=0):
+#        wx.ListCtrl.__init__(self, parent, ID, pos, size, style)
+#        listmix.ListCtrlAutoWidthMixin.__init__(self)
 
 
-class ListForSpec(wx.Panel, listmix.ColumnSorterMixin):
+class ListForSpec(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.ColumnSorterMixin):
     def __init__(self, parent,gparent, dlist,first):
     def __init__(self, parent,gparent, dlist,first):
+        wx.ListCtrl.__init__( self, parent, -1, style=wx.LC_REPORT|wx.LC_VIRTUAL|wx.LC_HRULES|wx.LC_VRULES)
         self.parent=parent
         self.gparent=gparent
         self.dlist=dlist
         self.first = first
         self.parent=parent
         self.gparent=gparent
         self.dlist=dlist
         self.first = first
-        wx.Panel.__init__(self, parent, -1, style=wx.WANTS_CHARS)
 
         search_id = wx.NewId()
         self.parent.Bind(wx.EVT_MENU, self.onsearch, id = search_id)
 
         search_id = wx.NewId()
         self.parent.Bind(wx.EVT_MENU, self.onsearch, id = search_id)
@@ -44,73 +44,65 @@ class ListForSpec(wx.Panel, listmix.ColumnSorterMixin):
         self.SetAcceleratorTable(self.accel_tbl)
 
         self.il = wx.ImageList(16, 16)
         self.SetAcceleratorTable(self.accel_tbl)
 
         self.il = wx.ImageList(16, 16)
-
-        self.sm_up = self.il.Add(getSmallUpArrowBitmap())
-        self.sm_dn = self.il.Add(getSmallDnArrowBitmap())
+        a={"sm_up":"GO_UP","sm_dn":"GO_DOWN","w_idx":"WARNING","e_idx":"ERROR","i_idx":"QUESTION"}
+        for k,v in a.items():
+            s="self.%s= self.il.Add(wx.ArtProvider_GetBitmap(wx.ART_%s,wx.ART_TOOLBAR,(16,16)))" % (k,v)
+            exec(s)
+        self.SetImageList(self.il, wx.IMAGE_LIST_SMALL)
 
         tID = wx.NewId()
 
 
         tID = wx.NewId()
 
-        self.list = List(self, tID,
-                                 style=wx.LC_REPORT 
-                                 | wx.BORDER_NONE
-                                 | wx.LC_EDIT_LABELS
-                                 | wx.LC_SORT_ASCENDING
-                                 )
-        
-        self.list.SetImageList(self.il, wx.IMAGE_LIST_SMALL)
+        self.attr1 = wx.ListItemAttr()
+        self.attr1.SetBackgroundColour((230, 230, 230))
+        self.attr2 = wx.ListItemAttr()
+        self.attr2.SetBackgroundColour("light blue")
         
         self.dlist = dlist 
         
         self.dlist = dlist 
-        self.PopulateList(dlist,first)
-        self.Bind(wx.EVT_SIZE, self.OnSize)
 
 
-        self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected, self.list)
-        self.Bind(wx.EVT_LIST_COL_CLICK, self.OnColClick)
+        self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected, self)
         
         # for wxMSW
         
         # for wxMSW
-        self.list.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.OnRightClick)
+        self.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.OnRightClick)
 
         # for wxGTK
 
         # for wxGTK
-        self.list.Bind(wx.EVT_RIGHT_UP, self.OnRightClick)
+        self.Bind(wx.EVT_RIGHT_UP, self.OnRightClick)
         
         
         self.itemDataMap = dlist
         
         
         self.itemDataMap = dlist
+        self.itemIndexMap = dlist.keys()
+        self.SetItemCount(len(dlist))
+        
+        listmix.ListCtrlAutoWidthMixin.__init__(self)
         listmix.ColumnSorterMixin.__init__(self, len(first))
         self.SortListItems(1, False)
         listmix.ColumnSorterMixin.__init__(self, len(first))
         self.SortListItems(1, False)
-        self.do_greyline()
         
 #-----------------------------------------------------------------------------------------    
 
         
 #-----------------------------------------------------------------------------------------    
 
-    def PopulateList(self, dlist,first):
         i=0
         for name in first :
         i=0
         for name in first :
-            self.list.InsertColumn(i,name,wx.LIST_FORMAT_LEFT)
+            self.InsertColumn(i,name,wx.LIST_FORMAT_LEFT)
             i+=1
             i+=1
-        ct=0
-        for key,data in dlist.iteritems() :
-            ct+=1
-            index = self.list.InsertStringItem(sys.maxint, str(data[0]))
-            i=1
-            for val in data[1:]:
-                self.list.SetStringItem(index, i, str(data[i]))
-                i+=1
-
-            self.list.SetItemData(index, key)
             
             
-        self.list.SetColumnWidth(0, wx.LIST_AUTOSIZE)
+        self.SetColumnWidth(0, 180)
+
         for i in range(1,len(first)-1):
         for i in range(1,len(first)-1):
-            self.list.SetColumnWidth(i, 130)
+            self.SetColumnWidth(i, len(first[i]) * 10)
         
         
-    def do_greyline(self):
-        for row in xrange(self.list.GetItemCount()):
-            if row % 2 :
-                self.list.SetItemBackgroundColour(row,(230,230,230))
-            else :
-                self.list.SetItemBackgroundColour(row,wx.WHITE)
+    def OnGetItemText(self, item, col):
+        index=self.itemIndexMap[item]
+        s = self.itemDataMap[index][col]
+        return s
+
+    def OnGetItemAttr(self, item):
+        if item % 2 :
+            return self.attr1
+        else :
+            return self.attr2
 
 
     # Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py
     def GetListCtrl(self):
 
 
     # Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py
     def GetListCtrl(self):
-        return self.list
+        return self
 
     # Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py
     def GetSortImages(self):
 
     # Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py
     def GetSortImages(self):
@@ -120,17 +112,22 @@ class ListForSpec(wx.Panel, listmix.ColumnSorterMixin):
     def OnRightDown(self, event):
         x = event.GetX()
         y = event.GetY()
     def OnRightDown(self, event):
         x = event.GetX()
         y = event.GetY()
-        item, flags = self.list.HitTest((x, y))
+        item, flags = self.HitTest((x, y))
 
         if flags & wx.LIST_HITTEST_ONITEM:
 
         if flags & wx.LIST_HITTEST_ONITEM:
-            self.list.Select(item)
+            self.Select(item)
 
         event.Skip()
 
     def getColumnText(self, index, col):
 
         event.Skip()
 
     def getColumnText(self, index, col):
-        item = self.list.GetItem(index, col)
+        item = self.GetItem(index, col)
         return item.GetText()
 
         return item.GetText()
 
+    def GetItemData(self, item) :
+        index=self.itemIndexMap[item]
+        s = self.itemDataMap[index]
+        return s
+
     def OnItemSelected(self, event):
         self.currentItem = event.m_itemIndex
         event.Skip()
     def OnItemSelected(self, event):
         self.currentItem = event.m_itemIndex
         event.Skip()
@@ -170,7 +167,7 @@ class ListForSpec(wx.Panel, listmix.ColumnSorterMixin):
         activenotebook = self.parent.nb.GetSelection()
         page = self.parent.nb.GetPage(activenotebook)
         corpus = page.corpus
         activenotebook = self.parent.nb.GetSelection()
         page = self.parent.nb.GetPage(activenotebook)
         corpus = page.corpus
-        word = self.getColumnText(self.list.GetFirstSelected(), 0)
+        word = self.getColumnText(self.GetFirstSelected(), 0)
         lems = corpus.getlems()
         rep = []
         for forme in lems[word].formes :
         lems = corpus.getlems()
         rep = []
         for forme in lems[word].formes :
@@ -183,7 +180,7 @@ class ListForSpec(wx.Panel, listmix.ColumnSorterMixin):
     def OnPopupTwo(self, event):
         activenotebook = self.parent.nb.GetSelection()
         page = self.parent.nb.GetPage(activenotebook)
     def OnPopupTwo(self, event):
         activenotebook = self.parent.nb.GetSelection()
         page = self.parent.nb.GetPage(activenotebook)
-        item=self.getColumnText(self.list.GetFirstSelected(), 0)
+        item=self.getColumnText(self.GetFirstSelected(), 0)
         corpus = page.corpus
         win = message(self, -1, u"Concordancier", size=(600, 200),style = wx.DEFAULT_FRAME_STYLE)
         avap=60
         corpus = page.corpus
         win = message(self, -1, u"Concordancier", size=(600, 200),style = wx.DEFAULT_FRAME_STYLE)
         avap=60
@@ -198,53 +195,17 @@ class ListForSpec(wx.Panel, listmix.ColumnSorterMixin):
                 forme = corpus.getforme(forme).forme
                 ucetxt = ucetxt.replace(' '+forme+' ', '<font color=red> ' + forme + ' </font>')
             txt += ucetxt + '<br><br>'        
                 forme = corpus.getforme(forme).forme
                 ucetxt = ucetxt.replace(' '+forme+' ', '<font color=red> ' + forme + ' </font>')
             txt += ucetxt + '<br><br>'        
-#        for uce in uce_ok:
-#            content = ' '+' '.join(corpus.ucis_paras_uces[uce[0]][uce[1]][uce[2]])+' '
-#            for form in listmot :
-#                sp = ''
-#                i = 0
-#                forme = ' ' + form + ' '
-#                while i < len(content):
-#                    coordword = content[i:].find(forme)
-#                    if coordword != -1 and i == 0:
-#                        txt += '<br><b>' + ' '.join(corpus.ucis[uce[0]][0]) + '</b><br>'
-#                        if coordword < avap:
-#                            sp = '&nbsp;' * (avap - coordword)
-#                            deb = i
-#                        else:
-#                            deb = i + coordword - avap
-#                        if len(content) < i + coordword + avap:
-#                            fin = len(content) - 1
-#                        else:
-#                            fin = i + coordword + avap
-#                        txt += '<TT>' + sp + content[deb:fin].replace(forme, '<font color=red>' + forme + '</font>') + '</TT><br>'
-#                        i += coordword + len(forme)
-#                        sp = ''
-#                    elif coordword != -1 and i != 0 :
-#                        if coordword < avap:
-#                            sp = '&nbsp;' * (avap - coordword)
-#                            deb = i
-#                        else:
-#                            deb = i + coordword - avap
-#                        if len(content) < i + coordword + avap:
-#                            fin = len(content) - 1
-#                        else:
-#                            fin = i + coordword + avap
-#                        txt += '<TT>' + sp + content[deb:fin].replace(forme, '<font color=red>' + forme + '</font>') + '</TT><br>'
-#                        i += coordword + len(forme)
-#                        sp = ''                   
-#                    else:
-#                        i = len(content)
-#                        sp = ''
         win.HtmlPage.SetPage(txt)
         win.Show(True)
 
     def OnPopupThree(self, event) :
         win.HtmlPage.SetPage(txt)
         win.Show(True)
 
     def OnPopupThree(self, event) :
-        datas = [self.dlist[self.list.GetItemData(self.list.GetFirstSelected())]]
-        last = self.list.GetFirstSelected()
-        while self.list.GetNextSelected(last) != -1:
-            last = self.list.GetNextSelected(last)
-            data = self.dlist[self.list.GetItemData(last)]
+        print self.GetFirstSelected()
+        datas = [self.GetItemData(self.GetFirstSelected())]
+        print datas
+        last = self.GetFirstSelected()
+        while self.GetNextSelected(last) != -1:
+            last = self.GetNextSelected(last)
+            data = self.GetItemData(last)
             datas += [data]
         colnames = self.first[1:]
         table = [[str(val) for val in line[1:]] for line in datas]
             datas += [data]
         colnames = self.first[1:]
         table = [[str(val) for val in line[1:]] for line in datas]
@@ -298,12 +259,12 @@ class ListForSpec(wx.Panel, listmix.ColumnSorterMixin):
         win.HtmlPage.SetPage(txt)
         win.Show(True)
 
         win.HtmlPage.SetPage(txt)
         win.Show(True)
 
-    def OnSize(self, event):
-        w,h = self.GetClientSizeTuple()
-        self.list.SetDimensions(0, 0, w, h)
-        
-    def OnColClick(self,event):
-        self.do_greyline()
+    def SortItems(self,sorter=cmp):
+        items = list(self.itemDataMap.keys())
+        items.sort(sorter)
+        self.itemIndexMap = items
+        # redraw the list
+        self.Refresh()
 
 class message(wx.Frame):
     def __init__(self, *args, **kwds):
 
 class message(wx.Frame):
     def __init__(self, *args, **kwds):
@@ -340,37 +301,3 @@ class message(wx.Frame):
 
     def OnCloseWindow(self, event):
         self.Destroy()
 
     def OnCloseWindow(self, event):
         self.Destroy()
-
-
-def getSmallUpArrowData():
-    return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
-\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
-\x00\x00<IDAT8\x8dcddbf\xa0\x040Q\xa4{h\x18\xf0\xff\xdf\xdf\xffd\x1b\x00\xd3\
-\x8c\xcf\x10\x9c\x06\xa0k\xc2e\x08m\xc2\x00\x97m\xd8\xc41\x0c \x14h\xe8\xf2\
-\x8c\xa3)q\x10\x18\x00\x00R\xd8#\xec\xb2\xcd\xc1Y\x00\x00\x00\x00IEND\xaeB`\
-\x82' 
-
-def getSmallUpArrowBitmap():
-    return wx.BitmapFromImage(getSmallUpArrowImage())
-
-def getSmallUpArrowImage():
-    stream = cStringIO.StringIO(getSmallUpArrowData())
-    return wx.ImageFromStream(stream)
-
-#----------------------------------------------------------------------
-def getSmallDnArrowData():
-    return \
-"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
-\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
-\x00\x00HIDAT8\x8dcddbf\xa0\x040Q\xa4{\xd4\x00\x06\x06\x06\x06\x06\x16t\x81\
-\xff\xff\xfe\xfe'\xa4\x89\x91\x89\x99\x11\xa7\x0b\x90%\ti\xc6j\x00>C\xb0\x89\
-\xd3.\x10\xd1m\xc3\xe5*\xbc.\x80i\xc2\x17.\x8c\xa3y\x81\x01\x00\xa1\x0e\x04e\
-?\x84B\xef\x00\x00\x00\x00IEND\xaeB`\x82" 
-
-def getSmallDnArrowBitmap():
-    return wx.BitmapFromImage(getSmallDnArrowImage())
-
-def getSmallDnArrowImage():
-    stream = cStringIO.StringIO(getSmallDnArrowData())
-    return wx.ImageFromStream(stream)
index fb7e9f9..7b1034a 100644 (file)
@@ -8,42 +8,78 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-16 16:27+0200\n"
+"POT-Creation-Date: 2012-11-14 15:17+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
 "MIME-Version: 1.0\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
+"Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
 "Content-Transfer-Encoding: 8bit\n"
 
-#: iramuteq.py:134
-msgid "&Open a questionnaire\tCtrl+O"
+#: iramuteq.py:244
+msgid "Edition"
 msgstr ""
 
 msgstr ""
 
-#: iramuteq.py:184
-msgid "Edition"
+#: iramuteq.py:202
+msgid "Exit"
 msgstr ""
 
 msgstr ""
 
-#: iramuteq.py:183
+#: iramuteq.py:243
 msgid "File"
 msgstr ""
 
 msgid "File"
 msgstr ""
 
-#: iramuteq.py:188
+#: iramuteq.py:248
 msgid "Help"
 msgstr ""
 
 msgid "Help"
 msgstr ""
 
-#: iramuteq.py:134
-msgid "Open a questionnaire"
+#: iramuteq.py:208
+msgid "Home page"
+msgstr ""
+
+#: iramuteq.py:192
+msgid "Import a factiva corpora..."
+msgstr ""
+
+#: iramuteq.py:180
+msgid "Open a matrix"
+msgstr ""
+
+#: iramuteq.py:184
+msgid "Open a text corpora"
+msgstr ""
+
+#: iramuteq.py:188
+msgid "Open an analysis"
+msgstr ""
+
+#: iramuteq.py:205
+msgid "Preferences"
+msgstr ""
+
+#: iramuteq.py:197
+msgid "Save tab as..."
+msgstr ""
+
+#: iramuteq.py:209
+msgid "Show data"
+msgstr ""
+
+#: iramuteq.py:210
+msgid "Show results"
 msgstr ""
 
 msgstr ""
 
-#: iramuteq.py:186
+#: iramuteq.py:246 iramuteq.py:457 iramuteq.py:608 tableau.py:178
 msgid "Spreadsheet analysis"
 msgstr ""
 
 msgid "Spreadsheet analysis"
 msgstr ""
 
-#: iramuteq.py:187
+#: iramuteq.py:247 iramuteq.py:458 iramuteq.py:607 openanalyse.py:94
+#: openanalyse.py:97 openanalyse.py:100 openanalyse.py:103 openanalyse.py:106
+#: openanalyse.py:109 tableau.py:179
 msgid "Text analysis"
 msgstr ""
 
 msgid "Text analysis"
 msgstr ""
 
-#: iramuteq.py:185
+#: iramuteq.py:245 iramuteq.py:456 iramuteq.py:535 iramuteq.py:606
+#: tableau.py:177
 msgid "View"
 msgstr ""
 msgid "View"
 msgstr ""
index d3b3f46..3def4b8 100644 (file)
@@ -13,9 +13,11 @@ from dialog import PrefSegProf, PrefProfTypes
 from time import sleep
 
 class ProfileSegment() :
 from time import sleep
 
 class ProfileSegment() :
-    def __init__(self, parent, corpus) :
+    def __init__(self, parent, pathout, parametres, corpus) :
         self.parent = parent
         self.corpus = corpus
         self.parent = parent
         self.corpus = corpus
+        self.dictpathout = pathout
+        self.parametres = parametres
         dial = PrefSegProf(self.parent)
         dial.CenterOnParent()
         if dial.ShowModal() == wx.ID_OK :
         dial = PrefSegProf(self.parent)
         dial.CenterOnParent()
         if dial.ShowModal() == wx.ID_OK :
@@ -37,19 +39,19 @@ class ProfileSegment() :
            self.dlg.Destroy()
     
     def make_table(self) :
            self.dlg.Destroy()
     
     def make_table(self) :
-        self.corpus.make_segments_profile(self.corpus.dictpathout['segments_classes'], lenmin = self.mini, lenmax = self.maxi, effmin = self.eff, lem = self.lem)
+        self.corpus.make_segments_profile(self.dictpathout['segments_classes'], lenmin = self.mini, lenmax = self.maxi, effmin = self.eff, lem = self.lem)
 
     def make_prof(self) :
         txt = """
         load("%s")
         source("%s")
 
     def make_prof(self) :
         txt = """
         load("%s")
         source("%s")
-        """ % (self.corpus.dictpathout['RData'], self.parent.RscriptsPath['chdfunct'])
+        """ % (self.dictpathout['RData'], self.parent.RscriptsPath['chdfunct'])
 
         txt += """
         dt <- read.csv2("%s", row.names = 1)
         to <- build.pond.prof(dt)
         PrintProfile(n1,to[4],NULL,to[5],NULL,clnb,"%s","%s")
 
         txt += """
         dt <- read.csv2("%s", row.names = 1)
         to <- build.pond.prof(dt)
         PrintProfile(n1,to[4],NULL,to[5],NULL,clnb,"%s","%s")
-        """ % (self.corpus.dictpathout['segments_classes'], self.corpus.dictpathout['prof_seg'], self.corpus.dictpathout['antiprof_seg'])
+        """ % (self.corpus.dictpathout['segments_classes'], self.dictpathout['prof_seg'], self.dictpathout['antiprof_seg'])
         fo = tempfile.mktemp(dir=self.parent.TEMPDIR)
         with open(fo, 'w') as f :
             f.write(txt)
         fo = tempfile.mktemp(dir=self.parent.TEMPDIR)
         with open(fo, 'w') as f :
             f.write(txt)
@@ -63,7 +65,7 @@ class ProfileSegment() :
         SelectTab = self.parent.nb.GetSelection()
         page = self.parent.nb.GetPage(SelectTab).TabChdSim
         print page
         SelectTab = self.parent.nb.GetSelection()
         page = self.parent.nb.GetPage(SelectTab).TabChdSim
         print page
-        prof_seg = ReadProfileAsDico(self, self.corpus.dictpathout['prof_seg'], True, self.corpus.parametre['syscoding'])
+        prof_seg = ReadProfileAsDico(self, self.dictpathout['prof_seg'], True, self.parent.syscoding)
         prof_seg_nb = aui.AuiNotebook(self.parent, -1, wx.DefaultPosition)
         for i in range(0,len(self.corpus.lc)) :
             ntab = ProfListctrlPanel(self.parent, self, prof_seg[str(i + 1)], False, i + 1)
         prof_seg_nb = aui.AuiNotebook(self.parent, -1, wx.DefaultPosition)
         for i in range(0,len(self.corpus.lc)) :
             ntab = ProfListctrlPanel(self.parent, self, prof_seg[str(i + 1)], False, i + 1)
index 816660c..9502f84 100644 (file)
@@ -23,14 +23,15 @@ from chemins import ffr
 from PrintRScript import barplot, dendroandbarplot
 #---------------------------------------------------------------------------
 
 from PrintRScript import barplot, dendroandbarplot
 #---------------------------------------------------------------------------
 
-class List(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin):
-    def __init__(self, parent, ID, pos=wx.DefaultPosition,
-                 size=wx.DefaultSize, style=0):
-        wx.ListCtrl.__init__(self, parent, ID, pos, size, style)
-        listmix.ListCtrlAutoWidthMixin.__init__(self)
+#class List(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin):
+#    def __init__(self, parent, ID, pos=wx.DefaultPosition,
+#                 size=wx.DefaultSize, style=0):
+#        wx.ListCtrl.__init__(self, parent, ID, pos, size, style)
+#        listmix.ListCtrlAutoWidthMixin.__init__(self)
 
 
-class SearchList(wx.Panel, listmix.ColumnSorterMixin):
+class SearchList(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.ColumnSorterMixin): #wx.Panel, listmix.ColumnSorterMixin):
     def __init__(self, parent,gparent, dlist,first, nbactives, nbetoiles, add_dendro=True):
     def __init__(self, parent,gparent, dlist,first, nbactives, nbetoiles, add_dendro=True):
+        wx.ListCtrl.__init__( self, parent, -1, style=wx.LC_REPORT|wx.LC_VIRTUAL|wx.LC_HRULES|wx.LC_VRULES)
         self.parent=parent
         self.gparent=gparent
         self.dlist=dlist
         self.parent=parent
         self.gparent=gparent
         self.dlist=dlist
@@ -38,7 +39,7 @@ class SearchList(wx.Panel, listmix.ColumnSorterMixin):
         self.first = ['id','formes'] + first
         self.nbactives = nbactives
         self.nbetoiles = nbetoiles
         self.first = ['id','formes'] + first
         self.nbactives = nbactives
         self.nbetoiles = nbetoiles
-        wx.Panel.__init__(self, parent, -1, style=wx.WANTS_CHARS)
+        #wx.Panel.__init__(self, parent, -1, style=wx.WANTS_CHARS)
 
 
         self.il = wx.ImageList(16, 16)
 
 
         self.il = wx.ImageList(16, 16)
@@ -48,31 +49,34 @@ class SearchList(wx.Panel, listmix.ColumnSorterMixin):
 
         tID = wx.NewId()
 
 
         tID = wx.NewId()
 
-        self.list = List(self, tID,
-                                 style=wx.LC_REPORT 
-                                 | wx.BORDER_NONE
-                                 | wx.LC_EDIT_LABELS
-                                 | wx.LC_SORT_ASCENDING
-                                 )
+        #self.list = List(self, tID,
+        #                         style=wx.LC_REPORT 
+        #                         | wx.BORDER_NONE
+        #                         | wx.LC_EDIT_LABELS
+        #                         | wx.LC_SORT_ASCENDING
+        #                         )
         
         
-        self.list.SetImageList(self.il, wx.IMAGE_LIST_SMALL)
+        #self.list.SetImageList(self.il, wx.IMAGE_LIST_SMALL)
         
         self.dlist = dlist 
         
         self.dlist = dlist 
-        self.PopulateList(dlist,first)
         self.Bind(wx.EVT_SIZE, self.OnSize)
 
         self.Bind(wx.EVT_SIZE, self.OnSize)
 
-        self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected, self.list)
+        self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected, self)
         self.Bind(wx.EVT_LIST_COL_CLICK, self.OnColClick)
         
         # for wxMSW
         self.Bind(wx.EVT_LIST_COL_CLICK, self.OnColClick)
         
         # for wxMSW
-        self.list.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.OnRightClick)
+        self.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.OnRightClick)
 
         # for wxGTK
 
         # for wxGTK
-        self.list.Bind(wx.EVT_RIGHT_UP, self.OnRightClick)
+        self.Bind(wx.EVT_RIGHT_UP, self.OnRightClick)
         
         
         self.itemDataMap = dlist
         
         
         self.itemDataMap = dlist
+        self.itemIndexMap = dlist.keys()
+        self.SetItemCount(len(dlist))
         listmix.ColumnSorterMixin.__init__(self, len(first)+2)
         listmix.ColumnSorterMixin.__init__(self, len(first)+2)
+
+        self.PopulateList(dlist,first)
         self.SortListItems(1, False)
         self.do_greyline()
         
         self.SortListItems(1, False)
         self.do_greyline()
         
@@ -81,40 +85,40 @@ class SearchList(wx.Panel, listmix.ColumnSorterMixin):
     def PopulateList(self, dlist,first):
         first = ['id','formes']+first
         for i, name in enumerate(first) :
     def PopulateList(self, dlist,first):
         first = ['id','formes']+first
         for i, name in enumerate(first) :
-            self.list.InsertColumn(i, name, wx.LIST_FORMAT_LEFT)
-
-        for key in dlist :
-            index = self.list.InsertStringItem(sys.maxint, '%5i' % key)
-            for i, val in enumerate(dlist[key][1:]) :
-                self.list.SetStringItem(index, i+1, str(dlist[key][i+1]))
-            self.list.SetItemData(index, key)
+            self.InsertColumn(i, name, wx.LIST_FORMAT_LEFT)
+        
+        #for key in dlist :
+        #    index = self.list.InsertStringItem(sys.maxint, '%5i' % key)
+        #    for i, val in enumerate(dlist[key][1:]) :
+        #        self.list.SetStringItem(index, i+1, str(dlist[key][i+1]))
+        #    self.list.SetItemData(index, key)
 
 
-        self.list.SetColumnWidth(0, wx.LIST_AUTOSIZE)
+        self.SetColumnWidth(0, wx.LIST_AUTOSIZE)
         for i in range(1,len(first)-1):
         for i in range(1,len(first)-1):
-            self.list.SetColumnWidth(i, 130)
+            self.SetColumnWidth(i, 130)
         
         if self.nbactives +  self.nbetoiles != len(dlist) :
             #there is supp data
             for i in range(self.nbactives, (len(dlist) - self.nbetoiles)) :
         
         if self.nbactives +  self.nbetoiles != len(dlist) :
             #there is supp data
             for i in range(self.nbactives, (len(dlist) - self.nbetoiles)) :
-                item = self.list.GetItem(i)
+                item = self.GetItem(i)
                 item.SetTextColour(wx.RED)
                 item.SetTextColour(wx.RED)
-                self.list.SetItem(item)
+                self.SetItem(item)
         for i in range((len(dlist) - self.nbetoiles), len(dlist)) :
         for i in range((len(dlist) - self.nbetoiles), len(dlist)) :
-            item = self.list.GetItem(i)
+            item = self.GetItem(i)
             item.SetTextColour(wx.BLUE)
             item.SetTextColour(wx.BLUE)
-            self.list.SetItem(item)
+            self.SetItem(item)
         
     def do_greyline(self):
         
     def do_greyline(self):
-        for row in xrange(self.list.GetItemCount()):
+        for row in xrange(self.GetItemCount()):
             if row % 2 :
             if row % 2 :
-                self.list.SetItemBackgroundColour(row,(230,230,230))
+                self.SetItemBackgroundColour(row,(230,230,230))
             else :
             else :
-                self.list.SetItemBackgroundColour(row,wx.WHITE)
+                self.SetItemBackgroundColour(row,wx.WHITE)
 
 
     # Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py
     def GetListCtrl(self):
 
 
     # Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py
     def GetListCtrl(self):
-        return self.list
+        return self
 
     # Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py
     def GetSortImages(self):
 
     # Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py
     def GetSortImages(self):
@@ -124,18 +128,21 @@ class SearchList(wx.Panel, listmix.ColumnSorterMixin):
     def OnRightDown(self, event):
         x = event.GetX()
         y = event.GetY()
     def OnRightDown(self, event):
         x = event.GetX()
         y = event.GetY()
-        item, flags = self.list.HitTest((x, y))
+        item, flags = self.HitTest((x, y))
 
         if flags & wx.LIST_HITTEST_ONITEM:
 
         if flags & wx.LIST_HITTEST_ONITEM:
-            self.list.Select(item)
+            self.Select(item)
 
         event.Skip()
 
 
         event.Skip()
 
-
     def getColumnText(self, index, col):
     def getColumnText(self, index, col):
-        item = self.list.GetItem(index, col)
+        item = self.GetItem(index, col)
         return item.GetText()
 
         return item.GetText()
 
+    def OnGetItemText(self, item, col):
+        index=self.itemIndexMap[item]
+        s = self.itemDataMap[index][col]
+        return s
 
     def OnItemSelected(self, event):
         self.currentItem = event.m_itemIndex
 
     def OnItemSelected(self, event):
         self.currentItem = event.m_itemIndex
@@ -173,7 +180,7 @@ class SearchList(wx.Panel, listmix.ColumnSorterMixin):
         activenotebook = self.parent.nb.GetSelection()
         page = self.parent.nb.GetPage(activenotebook)
         corpus = page.corpus
         activenotebook = self.parent.nb.GetSelection()
         page = self.parent.nb.GetPage(activenotebook)
         corpus = page.corpus
-        word = self.getColumnText(self.list.GetFirstSelected(), 0)
+        word = self.getColumnText(self.GetFirstSelected(), 0)
         lems = corpus.lems
         rep = []
         for forme in lems[word] :
         lems = corpus.lems
         rep = []
         for forme in lems[word] :
@@ -186,7 +193,7 @@ class SearchList(wx.Panel, listmix.ColumnSorterMixin):
     def OnPopupTwo(self, event):
         activenotebook = self.parent.nb.GetSelection()
         page = self.parent.nb.GetPage(activenotebook)
     def OnPopupTwo(self, event):
         activenotebook = self.parent.nb.GetSelection()
         page = self.parent.nb.GetPage(activenotebook)
-        item=self.getColumnText(self.list.GetFirstSelected(), 0)
+        item=self.getColumnText(self.GetFirstSelected(), 0)
         corpus = page.corpus
         win = message(self, -1, u"Concordancier", size=(600, 200),style = wx.DEFAULT_FRAME_STYLE)
         avap=60
         corpus = page.corpus
         win = message(self, -1, u"Concordancier", size=(600, 200),style = wx.DEFAULT_FRAME_STYLE)
         avap=60
@@ -236,11 +243,11 @@ class SearchList(wx.Panel, listmix.ColumnSorterMixin):
         win.Show(True)
 
     def OnPopupThree(self, event) :
         win.Show(True)
 
     def OnPopupThree(self, event) :
-        datas = [self.dlist[self.list.GetItemData(self.list.GetFirstSelected())]]
-        last = self.list.GetFirstSelected()
-        while self.list.GetNextSelected(last) != -1:
-            last = self.list.GetNextSelected(last)
-            data = self.dlist[self.list.GetItemData(last)]
+        datas = [self.dlist[self.GetItemData(self.GetFirstSelected())]]
+        last = self.GetFirstSelected()
+        while self.GetNextSelected(last) != -1:
+            last = self.GetNextSelected(last)
+            data = self.dlist[self.GetItemData(last)]
             datas += [data]
         colnames = self.first[2:]
         rownames = [val[1] for val in datas]
             datas += [data]
         colnames = self.first[2:]
         rownames = [val[1] for val in datas]
@@ -259,11 +266,11 @@ class SearchList(wx.Panel, listmix.ColumnSorterMixin):
 
     def ongraphdendro(self, evt) :
         corpus = self.parent.corpus
 
     def ongraphdendro(self, evt) :
         corpus = self.parent.corpus
-        datas = [self.dlist[self.list.GetItemData(self.list.GetFirstSelected())]]
-        last = self.list.GetFirstSelected()
-        while self.list.GetNextSelected(last) != -1:
-            last = self.list.GetNextSelected(last)
-            data = self.dlist[self.list.GetItemData(last)]
+        datas = [self.dlist[self.GetItemData(self.GetFirstSelected())]]
+        last = self.GetFirstSelected()
+        while self.GetNextSelected(last) != -1:
+            last = self.GetNextSelected(last)
+            data = self.dlist[self.GetItemData(last)]
             datas += [data]
         colnames = self.first[2:]
         rownames = [val[1] for val in datas]
             datas += [data]
         colnames = self.first[2:]
         rownames = [val[1] for val in datas]
@@ -282,7 +289,7 @@ class SearchList(wx.Panel, listmix.ColumnSorterMixin):
 
     def OnSize(self, event):
         w,h = self.GetClientSizeTuple()
 
     def OnSize(self, event):
         w,h = self.GetClientSizeTuple()
-        self.list.SetDimensions(0, 0, w, h)
+        self.SetDimensions(0, 0, w, h)
         
     def OnColClick(self,event):
         self.do_greyline()
         
     def OnColClick(self,event):
         self.do_greyline()
index 18da495..c8d1d62 100644 (file)
@@ -31,10 +31,11 @@ class SimiTxt(AnalyseText):
         #FIXME
         self.actives = self.corpus.make_actives_limit(3)
         dictcol = dict([[i, [act, self.corpus.getlemeff(act)]] for i, act in enumerate(self.actives)]) 
         #FIXME
         self.actives = self.corpus.make_actives_limit(3)
         dictcol = dict([[i, [act, self.corpus.getlemeff(act)]] for i, act in enumerate(self.actives)]) 
-        SelectColumn(self.ira, dictcol, self.actives, self.pathout['selected.csv'])
+        SelectColumn(self.ira, dictcol, self.actives, self.pathout['selected.csv'], dlg = self.dlg)
         self.makefiles()
         self.makefiles()
-        prep = PrepSimi(self.ira, self.parametres, indices_simi)
-        self.parametres = prep.parametres
+        if self.dlg :
+            prep = PrepSimi(self.ira, self.parametres, indices_simi)
+            self.parametres = prep.parametres
         script = PrintSimiScript(self)
         script.make_script()
         self.doR(script.scriptout)
         script = PrintSimiScript(self)
         script.make_script()
         self.doR(script.scriptout)
index 9e35872..01ccf9a 100644 (file)
@@ -26,7 +26,13 @@ class WordCloud(AnalyseText):
     def doanalyse(self) :
         self.parametres['type'] = 'wordcloud'
         #FIXME
     def doanalyse(self) :
         self.parametres['type'] = 'wordcloud'
         #FIXME
-        self.actives = self.corpus.make_actives_limit(3)        
+        limit = 3
+        mode = 'both'
+        if mode == 'both' :
+            self.actives = self.corpus.make_actives_limit(limit, 1)
+            self.actives += self.corpus.make_actives_limit(limit, 2)
+        elif mode == 'act' :
+            self.actives = self.corpus.make_actives_limit(limit, 1)
         dictcol = dict([[i, [act, self.corpus.getlemeff(act)]] for i, act in enumerate(self.actives)]) 
         SelectColumn(self.ira, dictcol, self.actives, self.pathout['selected.csv'])
         self.make_option()
         dictcol = dict([[i, [act, self.corpus.getlemeff(act)]] for i, act in enumerate(self.actives)]) 
         SelectColumn(self.ira, dictcol, self.actives, self.pathout['selected.csv'])
         self.make_option()
@@ -43,6 +49,7 @@ class WordCloud(AnalyseText):
             self.parametres['width'] = dial.spin_L.GetValue()
             self.parametres['height'] = dial.spin_H.GetValue()
             #maxword = dial.spin_maxword.GetValue()
             self.parametres['width'] = dial.spin_L.GetValue()
             self.parametres['height'] = dial.spin_H.GetValue()
             #maxword = dial.spin_maxword.GetValue()
+            self.parametres['maxword'] = dial.spin_maxword.GetValue()
             self.parametres['mincex'] = float(dial.spin_mincex.GetValue())/float(10)
             self.parametres['maxcex'] = float(dial.spin_maxcex.GetValue())/float(10)
             self.parametres['col_text'] = dial.color_text.GetColour()
             self.parametres['mincex'] = float(dial.spin_mincex.GetValue())/float(10)
             self.parametres['maxcex'] = float(dial.spin_maxcex.GetValue())/float(10)
             self.parametres['col_text'] = dial.color_text.GetColour()
diff --git a/tree.py b/tree.py
index d856799..5e90eb0 100644 (file)
--- a/tree.py
+++ b/tree.py
@@ -15,6 +15,62 @@ from functions import DoConf
 log = logging.getLogger('iramuteq.tree')
 #from agw import customtreectrl as CT
 
 log = logging.getLogger('iramuteq.tree')
 #from agw import customtreectrl as CT
 
+class InfoDialog ( wx.Dialog ):
+    
+    def __init__( self, parent, txt, parametres ):
+        wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = u"Informations", pos = wx.DefaultPosition, size = wx.DefaultSize, style = wx.DEFAULT_DIALOG_STYLE )
+        
+        self.SetSizeHintsSz( wx.Size( 400,200 ), wx.DefaultSize )
+        
+        bSizer1 = wx.BoxSizer( wx.VERTICAL )
+        
+        self.m_panel2 = wx.Panel( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )
+        bSizer2 = wx.BoxSizer( wx.VERTICAL )
+        
+        self.m_staticText4 = wx.StaticText( self.m_panel2, wx.ID_ANY, txt, wx.DefaultPosition, wx.DefaultSize, 0 )
+        self.m_staticText4.Wrap( -1 )
+        bSizer2.Add( self.m_staticText4, 0, wx.ALL, 5 )
+        
+        
+        self.m_panel2.SetSizer( bSizer2 )
+        self.m_panel2.Layout()
+        bSizer2.Fit( self.m_panel2 )
+        bSizer1.Add( self.m_panel2, 0, wx.EXPAND |wx.ALL, 5 )
+        
+        self.m_panel1 = wx.Panel( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )
+        fgSizer1 = wx.FlexGridSizer( 0, 2, 0, 0 )
+        fgSizer1.SetFlexibleDirection( wx.BOTH )
+        fgSizer1.SetNonFlexibleGrowMode( wx.FLEX_GROWMODE_SPECIFIED )
+        
+        for val in parametres :
+            fgSizer1.Add( wx.StaticText( self.m_panel1, wx.ID_ANY, val[0], wx.DefaultPosition, wx.DefaultSize, 0 ), 0, wx.ALL, 0)
+            fgSizer1.Add( wx.StaticText( self.m_panel1, wx.ID_ANY, val[1], wx.DefaultPosition, wx.DefaultSize, 0 ), 0, wx.ALL, 0)
+            fgSizer1.Add( wx.StaticLine( self.m_panel1, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL ), 0, wx.EXPAND |wx.ALL, 0)
+            fgSizer1.Add( wx.StaticLine( self.m_panel1, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL ), 0, wx.EXPAND|wx.ALL, 0)
+
+        self.m_panel1.SetSizer( fgSizer1 )
+        self.m_panel1.Layout()
+        fgSizer1.Fit( self.m_panel1 )
+        bSizer1.Add( self.m_panel1, 0, wx.EXPAND |wx.ALL, 3 )
+        
+        m_sdbSizer1 = wx.StdDialogButtonSizer()
+        self.m_sdbSizer1OK = wx.Button( self, wx.ID_OK )
+        m_sdbSizer1.AddButton( self.m_sdbSizer1OK )
+        m_sdbSizer1.Realize();
+        
+        bSizer1.Add( m_sdbSizer1, 0, wx.EXPAND, 5 )
+        
+        
+        self.SetSizer( bSizer1 )
+        self.Layout()
+        bSizer1.Fit( self )
+        
+        self.Centre( wx.BOTH )
+    
+    def __del__( self ):
+        pass
+
+
 class LeftTree(CT.CustomTreeCtrl):
 
     def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition,
 class LeftTree(CT.CustomTreeCtrl):
 
     def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition,
@@ -467,11 +523,14 @@ class LeftTree(CT.CustomTreeCtrl):
         numchildren = str(self.itemdict["children"])
         itemtype = self.itemdict["itemtype"]
         pydata = self.itemdict['pydata']
         numchildren = str(self.itemdict["children"])
         itemtype = self.itemdict["itemtype"]
         pydata = self.itemdict['pydata']
-        if 'analyses' in pydata :
-            toshow = dict([[val, pydata[val]] for val in pydata if val not in['analyses', 'isload']])
-        else :
-            toshow = pydata
-        pydata = DoConf().totext(toshow)
+        #if 'analyses' in pydata :
+        #    toshow = dict([[val, pydata[val]] for val in pydata if val not in['analyses', 'isload']])
+        #else :
+        toshow = pydata['ira']
+        toshow = DoConf(toshow).getoptions()
+        txt = DoConf().totext(toshow)
+        parametres = [val.split('\t\t:') for val in txt.splitlines()]
+        parametres.sort()
 
         if itemtype == 0:
             itemtype = "Normal"
 
         if itemtype == 0:
             itemtype = "Normal"
@@ -480,12 +539,7 @@ class LeftTree(CT.CustomTreeCtrl):
         else:
             itemtype = "RadioButton"
 
         else:
             itemtype = "RadioButton"
 
-        strs = "Information On Selected Item:\n\n" + "Text: " + itemtext + "\n" \
-               "Number Of Children: " + numchildren + "\n" \
-               "Item Type: " + itemtype + "\n" \
-               "Item Data Type: " + pydata + "\n"
-
-        dlg = wx.MessageDialog(self, strs, "CustomTreeCtrlDemo Info", wx.OK | wx.ICON_INFORMATION)
+        dlg = InfoDialog(self, itemtext, parametres)
         dlg.ShowModal()
         dlg.Destroy()
                 
         dlg.ShowModal()
         dlg.Destroy()