...
[iramuteq] / tree.py
diff --git a/tree.py b/tree.py
index 41769f5..9540271 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
 
+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,
@@ -50,10 +106,6 @@ class LeftTree(CT.CustomTreeCtrl):
         self.count = 0
         self.log = log
 
-        # NOTE:  For some reason tree items have to have a data object in
-        #        order to be sorted.  Since our compare just uses the labels
-        #        we don't need any real data, so we'll just use None below for
-        #        the item data.
         self.history = parent.history
         self.h = self.history.history
         self.root = self.AddRoot("Iramuteq")
@@ -71,18 +123,18 @@ class LeftTree(CT.CustomTreeCtrl):
         #textctrl.Bind(wx.EVT_CHAR, self.OnTextCtrl)
         #combobox.Bind(wx.EVT_COMBOBOX, self.OnComboBox)
         #lenArtIds = len(ArtIDs) - 2
-        for x in range(len(self.h)) :
-            if 'corpus_name' in self.h[self.history.order[x]] :
-                key = 'corpus_name'
-            else :
-                key = 'name'
-            child = self.AppendItem(self.root, self.h[self.history.order[x]][key])
+        for corpus in self.h :
+            #if 'corpus_name' in self.h[self.history.order[x]] :
+            #    key = 'corpus_name'
+            #else :
+            #    key = 'name'
+            child = self.AppendItem(self.root, corpus['corpus_name'])
             #if x == 1:
             #    child = self.AppendItem(self.root, "Item %d" % x + "\nHello World\nHappy wxPython-ing!")
             #    self.SetItemBold(child, True)
             #else:
             #    child = self.AppendItem(self.root, "Item %d" % x)
-            self.SetPyData(child, self.h[self.history.order[x]])
+            self.SetPyData(child, corpus)
             self.SetItemImage(child, 24, CT.TreeItemIcon_Normal)
             self.SetItemImage(child, 13, CT.TreeItemIcon_Expanded)
 
@@ -102,14 +154,14 @@ class LeftTree(CT.CustomTreeCtrl):
             #    elif y == 4 and x == 1:
             #        last = self.AppendItem(child, "item %d-%s" % (x, chr(ord("a")+y)), wnd=combobox)
             #    else:
-            if 'corpus_name' in self.h[self.history.order[x]] :
-                if 'analyses' in self.h[self.history.order[x]] :
-                    for y in self.h[self.history.order[x]]['analyses'] :
-                        last = self.AppendItem(child, y['name'], ct_type=0)
-                            
-                        self.SetPyData(last, y)
-                        self.SetItemImage(last, 24, CT.TreeItemIcon_Normal)
-                        self.SetItemImage(last, 13, CT.TreeItemIcon_Expanded)
+           # if 'corpus_name' in self.h[self.history.order[x]] :
+            if 'analyses' in corpus :
+                for y in corpus['analyses'] :
+                    last = self.AppendItem(child, y['name'], ct_type=0)
+                        
+                    self.SetPyData(last, y)
+                    self.SetItemImage(last, 24, CT.TreeItemIcon_Normal)
+                    self.SetItemImage(last, 13, CT.TreeItemIcon_Expanded)
     
             #    if random.randint(0, 3) == 0:
             #        self.SetItemLeftImage(last, random.randint(0, lenArtIds))
@@ -319,15 +371,19 @@ class LeftTree(CT.CustomTreeCtrl):
             alceste = classification.Append(wx.ID_ANY, u"Méthode ALCESTE")
             pam = classification.Append(wx.ID_ANY, u"Par matrice des distances")
             menu.AppendMenu(-1, u"Classification", classification)
+            simi = menu.Append(wx.ID_ANY, u"Analyse de similitude")
+            wdc = menu.Append(wx.ID_ANY, u"Nuage de mots")
             menu.AppendSeparator()
             self.Bind(wx.EVT_MENU, self.OnAlceste, alceste)
             self.Bind(wx.EVT_MENU, self.OnPam, pam)
             self.Bind(wx.EVT_MENU, self.OnStat, stat)
             self.Bind(wx.EVT_MENU, self.OnSpec, spec)
+            self.Bind(wx.EVT_MENU, self.OnSimiTxt, simi)
+            self.Bind(wx.EVT_MENU, self.OnWordCloud, wdc)
 
-        item10 = menu.Append(wx.ID_ANY, "Supprimer de l'historique")
+        itemdelete = menu.Append(wx.ID_ANY, "Supprimer de l'historique")
         if item == self.GetRootItem():
-            item10.Enable(False)
+            itemdelete.Enable(False)
         #item11 = menu.Append(wx.ID_ANY, "Prepend An Item")
         #item12 = menu.Append(wx.ID_ANY, "Append An Item")
 
@@ -340,7 +396,7 @@ class LeftTree(CT.CustomTreeCtrl):
         #self.Bind(wx.EVT_MENU, self.OnDisableItem, item7)
         #self.Bind(wx.EVT_MENU, self.OnItemIcons, item8)
         self.Bind(wx.EVT_MENU, self.OnItemInfo, info)
-        #self.Bind(wx.EVT_MENU, self.OnItemDelete, item10)
+        self.Bind(wx.EVT_MENU, self.OnItemDelete, itemdelete)
         #self.Bind(wx.EVT_MENU, self.OnItemPrepend, item11)
         #self.Bind(wx.EVT_MENU, self.OnItemAppend, item12)
         
@@ -365,6 +421,12 @@ class LeftTree(CT.CustomTreeCtrl):
     def OnPam(self, evt) :
         print 'rien'
 
+    def OnSimiTxt(self, evt) :
+        self.parent.OnSimiTxt(evt, self.getcorpus(self.itemdict))
+
+    def OnWordCloud(self, evt) :
+        self.parent.OnWordCloud(evt, self.getcorpus(self.itemdict))
+
     def OnItemBackground(self, event):
 
         colourdata = wx.ColourData()
@@ -461,11 +523,14 @@ class LeftTree(CT.CustomTreeCtrl):
         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"
@@ -474,12 +539,7 @@ class LeftTree(CT.CustomTreeCtrl):
         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()
                 
@@ -495,7 +555,12 @@ class LeftTree(CT.CustomTreeCtrl):
             return
 
         dlg.Destroy()
-
+        
+        pydata = self.itemdict['pydata']
+        if 'corpus_name' in pydata :
+            self.history.delete(pydata, True)
+        else :
+            self.history.delete(pydata)
         self.DeleteChildren(self.current)
         self.Delete(self.current)
         self.current = None
@@ -513,11 +578,12 @@ class LeftTree(CT.CustomTreeCtrl):
 
         dlg.Destroy()
 
-    def AddAnalyse(self, parametres, itemParent = None) :
+    def AddAnalyse(self, parametres, itemParent = None, bold = True) :
         uuid = parametres['corpus']
         if itemParent is None :
             itemParent = self.root
         child, cookie = self.GetFirstChild(itemParent)
+        corpus = None
         while child :
             pydata = self.GetPyData(child)
             if pydata['uuid'] == uuid :
@@ -525,11 +591,15 @@ class LeftTree(CT.CustomTreeCtrl):
                 break
             self.GiveFocus(child, uuid)
             child, cookie = self.GetNextChild(itemParent, cookie)
-        item = self.AppendItem(corpus, parametres['name'])
+        #item = self.AppendItem(child, parametres['name'])
+        if corpus is not None : 
+            item = self.AppendItem(corpus, parametres['name'])
+        else :
+            item = self.AppendItem(self.root, parametres['name'])
         self.SetPyData(item, parametres)
         self.SetItemImage(item, 24, CT.TreeItemIcon_Normal)
         self.SetItemImage(item, 13, CT.TreeItemIcon_Expanded)
-        self.SetItemBold(item, True)
+        self.SetItemBold(item, bold)
         
     def OnItemAppend(self, item):
         child = self.AppendItem(self.root, item['corpus_name'])
@@ -647,13 +717,14 @@ class LeftTree(CT.CustomTreeCtrl):
     def OnSelChanged(self, event):
         item = event.GetItem()
         pydata = self.GetPyData(item)
-        if pydata['uuid'] in self.parent.history.opened :
-            for i in range(self.parent.nb.GetPageCount()) :
-                page = self.parent.nb.GetPage(i)
-                if 'parametres' in dir(page) :
-                    if page.parametres['uuid'] == pydata['uuid'] :
-                        self.parent.nb.SetSelection(i)
-                        break
+        if pydata is not None :
+            if pydata['uuid'] in self.parent.history.opened :
+                for i in range(self.parent.nb.GetPageCount()) :
+                    page = self.parent.nb.GetPage(i)
+                    if 'parametres' in dir(page) :
+                        if page.parametres['uuid'] == pydata['uuid'] :
+                            self.parent.nb.SetSelection(i)
+                            break
 
         #self.item = event.GetItem()
         #if self.item: