corrections...
[iramuteq] / layout.py
index 6550ced..0211668 100644 (file)
--- a/layout.py
+++ b/layout.py
@@ -8,18 +8,19 @@ import os
 import wx
 #import wx.lib.agw.aui as aui
 import agw.aui as aui
-from chemins import ConstructPathOut, ChdTxtPathOut, FFF, ffr, PathOut, StatTxtPathOut
+from chemins import ConstructPathOut, ChdTxtPathOut, FFF, ffr, PathOut, StatTxtPathOut, simipath
 from ConfigParser import ConfigParser
-from functions import ReadProfileAsDico, GetTxtProfile, read_list_file, ReadList, exec_rcode, print_liste, BugReport, DoConf
+from functions import ReadProfileAsDico, GetTxtProfile, read_list_file, ReadList, exec_rcode, print_liste, BugReport, DoConf, indices_simi
 from ProfList import *
 from guiparam3d import param3d, simi3d
-from PrintRScript import write_afc_graph, print_simi3d
+from PrintRScript import write_afc_graph, print_simi3d, PrintSimiScript
 from profile_segment import *
 from functions import ReadList
 from listlex import *
 from Liste import *
 from search_tools import SearchFrame
 from dialog import PrefGraph, PrefExport, PrefSimpleFile, PrefDendro
+from guifunct import SelectColumn, PrepSimi
 from corpusNG import Corpus
 import datetime
 import sys
@@ -27,6 +28,10 @@ import tempfile
 import shutil
 import webbrowser
 import codecs
+import logging
+
+log = logging.getLogger('iramuteq.layout')
+
 
 class GraphPanelAfc(wx.Panel):
     def __init__(self, parent, dico, list_graph, clnb, itempath = 'liste_graph_afc', coding = sys.getdefaultencoding()):
@@ -222,6 +227,7 @@ class OpenCHDS():
        self.pathout.basefiles(ChdTxtPathOut)
        DictPathOut = self.pathout 
        self.DictPathOut = DictPathOut
+       self.dictpathout = DictPathOut
        self.parent = parent
 
        Profile = DictPathOut['PROFILE_OUT']
@@ -336,7 +342,7 @@ class OpenCHDS():
        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)
@@ -346,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)
-            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.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))
@@ -363,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)
-               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_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)
@@ -382,7 +388,7 @@ class OpenCHDS():
            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')
@@ -451,11 +457,13 @@ class OpenCHDS():
             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
-            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 :
@@ -607,7 +615,7 @@ class dolexlayout :
 
 class StatLayout:
     def __init__(self, ira, corpus, parametres):
-        self.pathout = PathOut(dirout = os.path.dirname(parametres['pathout']))
+        self.pathout = PathOut(dirout = parametres['pathout'])
         self.corpus = corpus
         self.ira = ira
         self.read_result()
@@ -753,21 +761,7 @@ class GraphPanelDendro(wx.Panel):
             self.make_param(dial)
             self.make_dendro()
 
-class WordCloudLayout:
-    def __init__(self, ira, parent, filename):
-        self.dictpathout = parent.corpus.dictpathout
-        self.pathout = os.path.dirname(filename)
-        self.corpus = parent.corpus
-    #    self.read_result()
-        self.Tab = aui.AuiNotebook(ira.nb, -1, wx.DefaultPosition)
-        list_graph = [['nuage_1.png', 'Nuage']]
-        self.TabStatTot = GraphPanel(ira.nb, self.dictpathout, list_graph)
-        #self.TabStatTot.write(self.result['glob'])
-        self.Tab.AddPage(self.TabStatTot, 'Nuage')
-        self.Tab.corpus = parent.corpus
-        ira.nb.AddPage(self.Tab, 'WordCloud %s' % parent.conf.get('wordcloud','corpus_name'))
-        ira.nb.SetSelection(ira.nb.GetPageCount() - 1)
-        ira.ShowAPane("Tab_content")
+
 
 class OpenCorpus :
     def __init__(self, ira, parametres) :
@@ -849,6 +843,141 @@ class CopusPanel(wx.Panel) :
             text.Wrap( -1 )
             self.fgSizer5.Add( text, 0, wx.ALL, 5 )
 
+class GraphPanelSimi(wx.Panel):
+    def __init__(self, parent, dico, list_graph):
+        wx.Panel.__init__(self,parent)
+        self.afcnb = 1
+        self.Dict = dico
+        self.dirout = os.path.dirname(self.Dict['ira'])
+        self.parent = self.GetParent()#parent
+        self.SetFont(wx.Font(10, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, "courier"))
+        self.labels = []
+        self.listimg = []
+        self.tabsimi = self.parent.GetParent()
+        self.ira = self.tabsimi.GetParent()
+        self.panel_1 = wx.ScrolledWindow(self, -1, style=wx.TAB_TRAVERSAL)
+        afc_img = wx.Image(os.path.join(self.ira.images_path,'button_simi.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
+        self.butafc = wx.BitmapButton(self, -1, afc_img)
+        export_img = wx.Image(os.path.join(self.ira.images_path,'button_export.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
+        self.butexport = wx.BitmapButton(self, -1, export_img)
+        
+        for i in range(0,len(list_graph)):
+            if os.path.exists(os.path.join(self.dirout,list_graph[i][0])) and list_graph[i][0] != '' :
+                self.listimg.append(wx.StaticBitmap(self.panel_1, -1, wx.Bitmap(os.path.join(self.dirout,list_graph[i][0]), wx.BITMAP_TYPE_ANY)))
+                self.labels.append(wx.StaticText(self.panel_1, -1, list_graph[i][1]))
+                
+        self.__set_properties()
+        self.__do_layout()
+
+    def __set_properties(self):
+        self.panel_1.EnableScrolling(True,True)
+        #self.panel_1.SetSize((1000,1000))
+        self.panel_1.SetScrollRate(20, 20)
+
+    def __do_layout(self):    
+        self.sizer_1 = wx.BoxSizer(wx.HORIZONTAL)
+        self.sizer_2 = wx.BoxSizer(wx.VERTICAL)
+        self.sizer_3 = wx.BoxSizer(wx.VERTICAL)
+        self.sizer_2.Add(self.butafc, 0, 0, 0)
+        self.sizer_2.Add(self.butexport, 0, 0, 0)
+        for i in range(0, len(self.listimg)):
+            self.sizer_3.Add(self.listimg[i], 0, wx.ALIGN_CENTER_HORIZONTAL, 0)
+            self.sizer_3.Add(self.labels[i], 0, wx.ALIGN_CENTER_HORIZONTAL, 0)
+        self.panel_1.SetSizer(self.sizer_3)
+        self.sizer_1.Add(self.sizer_2, 0, wx.EXPAND, 0)
+        self.sizer_1.Add(self.panel_1, 1, wx.EXPAND, 0)
+        self.SetSizer(self.sizer_1)
+
+class DefaultTextLayout :
+    def __init__(self, ira, corpus, parametres) :
+        self.pathout = PathOut(dirout = parametres['pathout'])
+        self.ira = ira
+        self.parent = ira
+        self.parametres = parametres
+        self.corpus = corpus
+        self.dolayout()
+    
+    def dolayout(self) :
+        log.info('no layout yet')
+
+class WordCloudLayout(DefaultTextLayout):
+    def dolayout(self):
+        #self.dictpathout = parent.corpus.dictpathout
+        #self.pathout = os.path.dirname(filename)
+        #self.corpus = parent.corpus
+    #    self.read_result()
+        self.pathout.basefiles(simipath)
+        self.Tab = aui.AuiNotebook(self.ira.nb, -1, wx.DefaultPosition)
+#        if os.path.exists(self.pathout['liste_graph']) :
+#            list_graph = read_list_file(self.pathout['liste_graph'])
+#        else : 
+#            list_graph = [['','']]
+        list_graph = [['nuage_1.png', 'Nuage']]
+        self.TabStatTot = GraphPanel(self.ira.nb, self.pathout, list_graph)
+        #self.TabStatTot.write(self.result['glob'])
+        self.Tab.AddPage(self.TabStatTot, 'Nuage')
+        self.Tab.corpus = self.corpus
+        self.Tab.parametres = self.parametres
+        self.ira.nb.AddPage(self.Tab, 'WordCloud %s' % self.parametres.get('corpus_name','corpus_name'))
+        self.ira.nb.SetSelection(self.ira.nb.GetPageCount() - 1)
+        self.ira.ShowAPane("Tab_content")
+
+class SimiLayout(DefaultTextLayout) :
+    def dolayout(self) :
+        self.pathout.basefiles(simipath)
+        self.actives = None
+        self.indices = indices_simi
+        if os.path.exists(self.pathout['liste_graph']) :
+            list_graph = read_list_file(self.pathout['liste_graph'])
+        else : 
+            list_graph = [['','']]
+        notebook_flags =  aui.AUI_NB_DEFAULT_STYLE | aui.AUI_NB_TAB_EXTERNAL_MOVE | aui.AUI_NB_TAB_MOVE | aui.AUI_NB_TAB_FLOAT
+        self.tabsimi = aui.AuiNotebook(self.ira.nb, -1, wx.DefaultPosition)
+        self.tabsimi.SetAGWWindowStyleFlag(notebook_flags)
+        self.tabsimi.SetArtProvider(aui.ChromeTabArt())
+        self.tabsimi.corpus = self.corpus
+        self.tabsimi.parametres = self.parametres
+        self.graphpan = GraphPanelSimi(self.tabsimi, self.pathout, list_graph)
+        self.graphpan.Bind(wx.EVT_BUTTON, self.redosimi, self.graphpan.butafc)
+        self.graphpan.Bind(wx.EVT_BUTTON, self.export, self.graphpan.butexport)
+        self.tabsimi.AddPage(self.graphpan, 'Graph')
+        self.ira.nb.AddPage(self.tabsimi, 'Analyse de graph')
+        self.ira.ShowTab(True)
+        self.ira.nb.SetSelection(self.ira.nb.GetPageCount() - 1)
+        
+    def redosimi(self, evt) :
+        with open(self.pathout['selected.csv'],'r') as f :
+            selected = f.read()
+        selected = [int(val) for val in selected.splitlines()]
+        if self.actives is None :
+            with codecs.open(self.pathout['actives.csv'], 'r', self.parametres['encoding']) as f :
+                self.actives = f.read()
+            self.actives = self.actives.splitlines()#[act for act in self.actives.splitlines()]
+        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'], selected = selected) 
+        prep = PrepSimi(self.ira, self.parametres, indices_simi)
+        self.parametres = prep.parametres
+        script = PrintSimiScript(self)
+        script.make_script()
+        pid = exec_rcode(self.ira.RPath, script.scriptout, wait = True)
+        check_Rresult(self.ira, pid)
+        if self.parametres['type_graph'] == 1:
+            if os.path.exists(self.pathout['liste_graph']):
+                graph_simi = read_list_file(self.pathout['liste_graph'])
+                graph_simi.append([os.path.basename(script.filename), script.txtgraph])
+            else :
+                graph_simi = [[os.path.basename(script.filename), script.txtgraph]]
+            print_liste(self.pathout['liste_graph'], graph_simi)
+        DoConf().makeoptions([self.parametres['type']], [self.parametres], self.pathout['Analyse.ira'])
+        if self.parametres['type_graph'] == 1:
+            self.graphpan.sizer_3.Add(wx.StaticBitmap(self.graphpan.panel_1, -1, wx.Bitmap(script.filename, wx.BITMAP_TYPE_ANY)), 0, wx.ALIGN_CENTER_HORIZONTAL, 0)
+            self.graphpan.sizer_3.Add(wx.StaticText(self.graphpan.panel_1,-1, script.txtgraph), 0, wx.ALIGN_CENTER_HORIZONTAL, 0)
+            self.graphpan.sizer_3.Fit(self.graphpan.panel_1)
+            self.graphpan.Layout()
+            self.graphpan.panel_1.Scroll(0,self.graphpan.panel_1.GetScrollRange(wx.VERTICAL))
+
+    def export(self, evt) :
+        pass
    # def read_result(self) :
    #     #self.corpus.read_corpus_from_shelves(self.corpus.dictpathout['db'])
    #     #self.corpus.make_et_table()