...
[iramuteq] / dialog.py
index 3805c46..64b993a 100755 (executable)
--- a/dialog.py
+++ b/dialog.py
@@ -8,8 +8,11 @@ import  wx.lib.colourselect as csel
 import wx.lib.sized_controls as sc
 import wx.lib.filebrowsebutton as filebrowse
 import locale
-from functions import DoConf
+from functions import DoConf, exec_rcode
 import os
+from shutil import copyfile
+from PrintRScript import barplot
+import tempfile
 import sys
 from KeyFrame import AlcOptFrame
 #---------------------------------------------------------------------------
@@ -76,7 +79,7 @@ class FileOptionDialog(wx.Dialog):
             grid_sizer.Add(self.choice4, 1, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 5)
             self.choice3.SetSelection(0)
             self.choice4.SetSelection(0)
-            self.text = wx.StaticText(self, -1, _(u"Character set").decode('utf8'))
+            self.text = wx.StaticText(self, -1, _(u"Characters set").decode('utf8'))
             grid_sizer.Add(self.text, 1, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 5)
             self.le = [enc[0].lower() for enc in encodages] 
             self.list_encodages = wx.Choice(self, -1, (25, 30), choices=[' - '.join(encodage) for encodage in encodages])
@@ -590,7 +593,7 @@ class PrefGraph(wx.Dialog):
         self.spin_f2 = wx.SpinCtrl(self, -1, '',size = (100,30), min=1, max=self.paramgraph['clnb']-1)
         self.label_f3 = wx.StaticText(self, -1, _(u"Factor z : ").decode('utf8'))
         self.spin_f3 = wx.SpinCtrl(self, -1, '',size = (100,30), min=1, max=self.paramgraph['clnb']-1)
-        self.label_sphere = wx.StaticText(self, -1, _(u"Sphere transparency").decode('utf8'))
+        self.label_sphere = wx.StaticText(self, -1, _(u"Spheres transparency").decode('utf8'))
         self.slider_sphere = wx.Slider(self, -1, 10, 1, 100, size = (255,-1), style = wx.SL_HORIZONTAL | wx.SL_AUTOTICKS | wx.SL_LABELS)
 
         self.label_film = wx.StaticText(self, -1, _(u"Make a movie").decode('utf8'))
@@ -913,7 +916,7 @@ class PrefExport(wx.Dialog):
         sizer = wx.BoxSizer(wx.VERTICAL)
         box = wx.BoxSizer(wx.HORIZONTAL)
         box3 = wx.BoxSizer(wx.HORIZONTAL)
-        self.label_lem = wx.StaticText(self, -1, _(u"Lemmatised corpora").decode('utf8'))
+        self.label_lem = wx.StaticText(self, -1, _(u"Lemmatised corpus").decode('utf8'))
         box3.Add(self.label_lem, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT, 5)
         self.radio_lem = wx.RadioBox(self, -1, u"", choices= [ _(u"yes").decode('utf8'), _(u"no").decode('utf8') ], majorDimension=0, style=wx.RA_SPECIFY_ROWS)
         box3.Add(self.radio_lem, 0, wx.ALIGN_RIGHT, 5)
@@ -1241,7 +1244,7 @@ class PrefSegProf(wx.Dialog) :
         
         self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
         bSizer1 = wx.BoxSizer( wx.VERTICAL )
-        txt = _(u"Be carefull : computation of repeated segments profiles can be very long on large corpora").decode('utf8')
+        txt = _(u"Be carefull : computation of repeated segments profiles can be very long on large corpus").decode('utf8')
         self.label = wx.StaticText( self, wx.ID_ANY, txt, wx.DefaultPosition, wx.DefaultSize, 0 ) 
         bSizer1.Add( self.label, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5 )
 
@@ -1249,7 +1252,7 @@ class PrefSegProf(wx.Dialog) :
         fgSizer1.SetFlexibleDirection( wx.BOTH )
         fgSizer1.SetNonFlexibleGrowMode( wx.FLEX_GROWMODE_SPECIFIED )
         
-        self.m_staticText1 = wx.StaticText( self, wx.ID_ANY, _(u"Lemmatised corpora").decode('utf8'), wx.DefaultPosition, wx.DefaultSize, 0 )
+        self.m_staticText1 = wx.StaticText( self, wx.ID_ANY, _(u"Lemmatised corpus").decode('utf8'), wx.DefaultPosition, wx.DefaultSize, 0 )
         self.m_staticText1.Wrap( -1 )
         fgSizer1.Add( self.m_staticText1, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )
         
@@ -1267,7 +1270,7 @@ class PrefSegProf(wx.Dialog) :
         self.spin_min.SetValue(2)
         fgSizer1.Add( self.spin_min, 0, wx.ALL, 5 )
         
-        self.m_staticText4 = wx.StaticText( self, wx.ID_ANY, _(u"Minimum size of segments").decode('utf8'), wx.DefaultPosition, wx.DefaultSize, 0 )
+        self.m_staticText4 = wx.StaticText( self, wx.ID_ANY, _(u"Maxmum size of segments").decode('utf8'), wx.DefaultPosition, wx.DefaultSize, 0 )
         self.m_staticText4.Wrap( -1 )
         fgSizer1.Add( self.m_staticText4, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )
         
@@ -1355,7 +1358,7 @@ class PrefQuestAlc ( wx.Dialog ):
         fgSizer1.Add( self.but_prec, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )
         
         if not sim :
-            self.lab_nbcl = wx.StaticText( self, wx.ID_ANY, _(u"Number of terminal clusters in phase 1").decode('utf8'), wx.DefaultPosition, wx.DefaultSize, 0 )
+            self.lab_nbcl = wx.StaticText( self, wx.ID_ANY, _(u"Number of terminal clusters on phase 1").decode('utf8'), wx.DefaultPosition, wx.DefaultSize, 0 )
             self.lab_nbcl.Wrap( -1 )
             fgSizer1.Add( self.lab_nbcl, 0, wx.ALL, 5 )
             
@@ -2263,7 +2266,7 @@ class CorpusPref ( wx.Dialog ):
         fgSizer1.SetFlexibleDirection( wx.BOTH )
         fgSizer1.SetNonFlexibleGrowMode( wx.FLEX_GROWMODE_SPECIFIED )
         
-        self.m_staticText7 = wx.StaticText( self.m_panel1, wx.ID_ANY, _(u"Corpora").decode('utf8'), wx.DefaultPosition, wx.DefaultSize, 0 )
+        self.m_staticText7 = wx.StaticText( self.m_panel1, wx.ID_ANY, _(u"corpus").decode('utf8'), wx.DefaultPosition, wx.DefaultSize, 0 )
         self.m_staticText7.Wrap( -1 )
         fgSizer1.Add( self.m_staticText7, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT|wx.ALL, 5 )
         
@@ -2271,7 +2274,7 @@ class CorpusPref ( wx.Dialog ):
         self.txtpath.Wrap( -1 )
         fgSizer1.Add( self.txtpath, 0, wx.ALL, 5 )
 
-        self.m_staticText18 = wx.StaticText( self.m_panel1, wx.ID_ANY, u"Corpus' name", wx.DefaultPosition, wx.DefaultSize, 0 )
+        self.m_staticText18 = wx.StaticText( self.m_panel1, wx.ID_ANY, _(u"Corpus' name").decode('utf8'), wx.DefaultPosition, wx.DefaultSize, 0 )
         self.m_staticText18.Wrap( -1 )
         fgSizer1.Add( self.m_staticText18, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT|wx.ALL, 5 )
         
@@ -2296,7 +2299,7 @@ class CorpusPref ( wx.Dialog ):
         self.lang_choices.SetSelection( 0 )
         fgSizer1.Add( self.lang_choices, 0, wx.ALL, 5 )
 
-        self.m_staticText19 = wx.StaticText( self.m_panel1, wx.ID_ANY, u"Dictionary", wx.DefaultPosition, wx.DefaultSize, 0 )
+        self.m_staticText19 = wx.StaticText( self.m_panel1, wx.ID_ANY, _(u"Dictionary").decode('utf8'), wx.DefaultPosition, wx.DefaultSize, 0 )
         self.m_staticText19.Wrap( -1 )
         fgSizer1.Add( self.m_staticText19, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT|wx.ALL, 5 )
         
@@ -2306,7 +2309,7 @@ class CorpusPref ( wx.Dialog ):
         fgSizer5.SetFlexibleDirection( wx.BOTH )
         fgSizer5.SetNonFlexibleGrowMode( wx.FLEX_GROWMODE_SPECIFIED )
         
-        self.radio_default_dict = wx.RadioButton( self.m_panel1, wx.ID_ANY, u"Default", wx.DefaultPosition, wx.DefaultSize, 0 )
+        self.radio_default_dict = wx.RadioButton( self.m_panel1, wx.ID_ANY, _(u"Default").decode('utf8'), wx.DefaultPosition, wx.DefaultSize, 0 )
         fgSizer5.Add( self.radio_default_dict, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )
         
         self.defaultdictpath = wx.TextCtrl( self.m_panel1, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size( 300,-1 ), wx.TE_READONLY )
@@ -2314,10 +2317,10 @@ class CorpusPref ( wx.Dialog ):
         
         fgSizer5.Add( self.defaultdictpath, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )
         
-        self.radio_other_dict = wx.RadioButton( self.m_panel1, wx.ID_ANY, u"Other", wx.DefaultPosition, wx.DefaultSize, 0 )
+        self.radio_other_dict = wx.RadioButton( self.m_panel1, wx.ID_ANY, _(u"Other").decode('utf8'), wx.DefaultPosition, wx.DefaultSize, 0 )
         fgSizer5.Add( self.radio_other_dict, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )
         
-        self.otherdictpath = wx.FilePickerCtrl( self.m_panel1, wx.ID_ANY, wx.EmptyString, u"Select a file", u"*.*", wx.DefaultPosition, wx.Size( 300,-1 ), wx.FLP_DEFAULT_STYLE )
+        self.otherdictpath = wx.FilePickerCtrl( self.m_panel1, wx.ID_ANY, wx.EmptyString, _(u"Select a file").decode('utf8'), u"*.*", wx.DefaultPosition, wx.Size( 300,-1 ), wx.FLP_DEFAULT_STYLE )
         fgSizer5.Add( self.otherdictpath, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )
         
         
@@ -2502,6 +2505,7 @@ class CorpusPref ( wx.Dialog ):
         self.encodage_choices.SetSelection(enc)
         self.lang_choices.SetSelection(0)
         self.repout_choices.SetValue(parametres['pathout'])
+        self.corpusname.SetValue(parametres['corpus_name'])
         self.ucimark_choices.SetSelection(parametres['ucimark'])
         self.check_expressions.SetValue(parametres['expressions'])
         self.check_makeuce.SetValue(parametres['douce'])
@@ -2520,6 +2524,7 @@ class CorpusPref ( wx.Dialog ):
         parametres['encoding'] = encodages[self.encodage_choices.GetSelection()][0]
         parametres['lang'] = self.langues[self.lang_choices.GetSelection()]
         parametres['pathout'] = self.repout_choices.GetValue()
+        parametres['corpus_name'] = self.corpusname.GetValue()
         parametres['ucimark'] = self.ucimark_choices.GetSelection()
         parametres['expressions'] = self.check_expressions.GetValue()
         parametres['douce'] =  self.check_makeuce.GetValue()
@@ -2557,12 +2562,14 @@ class ConcordList(wx.HtmlListBox):
         #self.Bind(wx.EVT_LISTBOX_DCLICK, self.Download)
   
     def OnGetItem(self, index):
-        return self.concord[index] + '<br>'
-
-class message(wx.Dialog):
-    def __init__(self, parent, items, title, size, save = True):
-        wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = title, pos = wx.DefaultPosition, size = size, style = wx.DEFAULT_DIALOG_STYLE|wx.STAY_ON_TOP )
-        self.save = save    
+        return self.concord[index] #+ '<br>'
+
+class message(wx.Frame):
+    def __init__(self, parent, items, title, size, save = True, uceids = None):
+        wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = title, pos = wx.DefaultPosition, size = size, style = wx.DEFAULT_FRAME_STYLE )
+        self.save = save
+        self.uceids = uceids
+        self.ira = wx.GetApp().GetTopWindow() 
         self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
 
         self.html = ""
@@ -2579,18 +2586,24 @@ class message(wx.Dialog):
         if self.save :
             self.button_2 = wx.Button(self, wx.ID_SAVE)
             self.Bind(wx.EVT_BUTTON, self.OnSavePage, self.button_2)
+        if self.uceids is not None :
+            self.butsub = wx.Button(self, -1, _(u"Build sub corpus").decode('utf8'))
+            self.Bind(wx.EVT_BUTTON, self.OnSub, self.butsub)
         self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
         self.__do_layout()
 
     def __do_layout(self):
         sizer_2 = wx.BoxSizer(wx.VERTICAL)
-        sizer_2.Add(self.HtmlPage, 0, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
-        m_sdbSizer1 = wx.StdDialogButtonSizer()
-        m_sdbSizer1.AddButton(  self.button_1 )
+        sizer_2.Add(self.HtmlPage, 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
+        #m_sdbSizer1 = wx.StdDialogButtonSizer()
+        m_sdbSizer1 = wx.BoxSizer(wx.HORIZONTAL)
+        m_sdbSizer1.Add(  self.button_1 , 0, wx.RIGHT | wx.EXPAND)
         if self.save :
-            m_sdbSizer1.AddButton(  self.button_2 )
-        m_sdbSizer1.Realize()
-        sizer_2.Add(m_sdbSizer1, 1, wx.EXPAND, 5)
+            m_sdbSizer1.Add(  self.button_2 , 0, wx.RIGHT | wx.EXPAND)
+        if self.uceids is not None :
+            m_sdbSizer1.Add(  self.butsub , 0, wx.RIGHT | wx.EXPAND)
+        #m_sdbSizer1.Realize()
+        sizer_2.Add(m_sdbSizer1, 0, wx.RIGHT | wx.EXPAND, 5)
         self.SetSizer(sizer_2)
         self.Layout()
         sizer_2.Fit( self )
@@ -2612,6 +2625,10 @@ class message(wx.Dialog):
 
     def OnCloseWindow(self, event):
         self.Destroy()
+    
+    def OnSub(self ,evt):
+        parametres = {'fromuceids' : True, 'uceids' : self.uceids}
+        self.ira.OnSubText(None, parametres)
 
 
 
@@ -2628,7 +2645,7 @@ class ExtractDialog ( wx.Dialog ):
         fgSizer1.SetFlexibleDirection( wx.BOTH )
         fgSizer1.SetNonFlexibleGrowMode( wx.FLEX_GROWMODE_SPECIFIED )
         
-        self.m_staticText1 = wx.StaticText( self, wx.ID_ANY, _(u"Corpora").decode('utf8'), wx.DefaultPosition, wx.DefaultSize, 0 )
+        self.m_staticText1 = wx.StaticText( self, wx.ID_ANY, _(u"corpus").decode('utf8'), wx.DefaultPosition, wx.DefaultSize, 0 )
         self.m_staticText1.Wrap( -1 )
         fgSizer1.Add( self.m_staticText1, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT|wx.ALL, 5 )
         
@@ -2704,7 +2721,7 @@ class ExtractDialog ( wx.Dialog ):
         m_sdbSizer1.AddButton( self.m_sdbSizer1OK )
         self.m_sdbSizer1Cancel = wx.Button( self, wx.ID_CANCEL )
         m_sdbSizer1.AddButton( self.m_sdbSizer1Cancel )
-        m_sdbSizer1.Realize();
+        m_sdbSizer1.Realize()
         
         fgSizer1.Add( m_sdbSizer1, 1, wx.EXPAND, 5 )
         
@@ -2741,49 +2758,101 @@ class ExtractDialog ( wx.Dialog ):
     def __del__( self ):
         pass
 
-class FreqDialog(wx.Dialog):
-    def __init__(self, parent, ID, listcol, title, size) :
-        wx.Dialog.__init__(self, parent, ID, title, size=size, pos=wx.DefaultPosition,style=wx.DEFAULT_DIALOG_STYLE | wx.CANCEL | wx.OK )
-        pre = wx.PreDialog()
-        pre.SetExtraStyle(wx.DIALOG_EX_CONTEXTHELP)
-        pre.Create(parent, ID, title, wx.DefaultPosition, size, wx.DEFAULT_DIALOG_STYLE | wx.CANCEL | wx.OK)
-        self.PostCreate(pre)
-        self.parent = parent 
-        sizer = wx.BoxSizer(wx.VERTICAL)
-        #self.content = parent.content
+# class FreqDialog(wx.Dialog):
+#     def __init__(self, parent, ID, listcol, title, size) :
+#         wx.Dialog.__init__(self, parent, ID, title, size=size, pos=wx.DefaultPosition,style=wx.DEFAULT_DIALOG_STYLE | wx.CANCEL | wx.OK )
+#         pre = wx.PreDialog()
+#         pre.SetExtraStyle(wx.DIALOG_EX_CONTEXTHELP)
+#         pre.Create(parent, ID, title, wx.DefaultPosition, size, wx.DEFAULT_DIALOG_STYLE | wx.CANCEL | wx.OK)
+#         self.PostCreate(pre)
+#         self.parent = parent 
+#         sizer = wx.BoxSizer(wx.VERTICAL)
+#         #self.content = parent.content
+#         self.header = listcol
+#         #LABELLIST = []
+#         #for i in self.header:
+#         #    forme = i
+#         #    if len(forme) > 60 :
+#         #        LABELLIST.append(i[0:60])
+#         #    else:
+#         #        LABELLIST.append(i)
+#         self.list_box_1 = wx.ListBox(self, -1, choices=self.header, style=wx.LB_EXTENDED | wx.LB_HSCROLL)
+#         sizer.Add(self.list_box_1, 0, 5)
+#         
+#         btnsizer = wx.BoxSizer(wx.HORIZONTAL)
+#         
+#         btn = wx.Button(self, wx.ID_CANCEL)
+#         btnsizer.Add(btn)
+#         
+#         btn = wx.Button(self, wx.ID_OK)
+#         btn.SetDefault()
+#         btnsizer.Add(btn)
+#         
+#         sizer.Add(btnsizer, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER_HORIZONTAL, 5)
+#         self.SetSizer(sizer)
+#         sizer.Fit(self)
+#         self.SetTitle(_(u"Selection").decode('utf8'))
+#   
+        # end wxGlade
+
+
+class FreqDialog ( wx.Dialog ):
+    
+    def __init__( self, parent, listcol, title, size =  wx.Size( -1,-1 ), showNA = True):
+        wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( -1,-1 ), style = wx.DEFAULT_DIALOG_STYLE )
+        
         self.header = listcol
-        #LABELLIST = []
-        #for i in self.header:
-        #    forme = i
-        #    if len(forme) > 60 :
-        #        LABELLIST.append(i[0:60])
-        #    else:
-        #        LABELLIST.append(i)
-        self.list_box_1 = wx.ListBox(self, -1, choices=self.header, style=wx.LB_EXTENDED | wx.LB_HSCROLL)
-        sizer.Add(self.list_box_1, 0, 5)
-        
-        btnsizer = wx.BoxSizer(wx.HORIZONTAL)
         
-        btn = wx.Button(self, wx.ID_CANCEL)
-        btnsizer.Add(btn)
+        self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
         
-        btn = wx.Button(self, wx.ID_OK)
-        btn.SetDefault()
-        btnsizer.Add(btn)
+        bSizer1 = wx.BoxSizer( wx.VERTICAL )
         
-        sizer.Add(btnsizer, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER_HORIZONTAL, 5)
-        self.SetSizer(sizer)
-        sizer.Fit(self)
-        self.SetTitle(_(u"Selection").decode('utf8'))
-  
-        # end wxGlade
+        m_listBox1Choices = self.header
+        self.m_listBox1 = wx.ListBox( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, m_listBox1Choices, wx.LB_EXTENDED|wx.LB_HSCROLL|wx.LB_MULTIPLE )
+        self.m_listBox1.SetMinSize( wx.Size( 500,-1 ) )
+        bSizer1.Add( self.m_listBox1, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )
+        
+        if showNA :
+            fgSizer1 = wx.FlexGridSizer( 0, 2, 0, 0 )
+            fgSizer1.SetFlexibleDirection( wx.BOTH )
+            fgSizer1.SetNonFlexibleGrowMode( wx.FLEX_GROWMODE_SPECIFIED )
+        
+            self.m_staticText1 = wx.StaticText( self, wx.ID_ANY, _(u"Include empty cells (NA)").decode('utf8'), wx.DefaultPosition, wx.DefaultSize, 0 )
+            self.m_staticText1.Wrap( -1 )
+            fgSizer1.Add( self.m_staticText1, 0, wx.ALL, 5 )
+        
+            self.includeNA = wx.CheckBox( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
+            fgSizer1.Add( self.includeNA, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )
+        
+            bSizer1.Add( fgSizer1, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 5 )
+        
+        m_sdbSizer1 = wx.StdDialogButtonSizer()
+        self.m_sdbSizer1OK = wx.Button( self, wx.ID_OK )
+        m_sdbSizer1.AddButton( self.m_sdbSizer1OK )
+        self.m_sdbSizer1Cancel = wx.Button( self, wx.ID_CANCEL )
+        m_sdbSizer1.AddButton( self.m_sdbSizer1Cancel )
+        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 ProtoDial ( wx.Dialog ):
     
     def __init__( self, parent, headers ):
         wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = _(u"Settings").decode('utf8'), pos = wx.DefaultPosition, size = wx.DefaultSize, style = wx.DEFAULT_DIALOG_STYLE )
         
-        self.SetSizeHintsSz( wx.Size( 200,300 ), wx.DefaultSize )
+        self.SetSizeHintsSz( wx.Size( -1,-1 ), wx.DefaultSize )
         
         bSizer1 = wx.BoxSizer( wx.VERTICAL )
         
@@ -2800,19 +2869,19 @@ class ProtoDial ( wx.Dialog ):
         fgSizer1.Add( self.m_staticText2, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALL, 5 )
         
         variablesChoices = headers
-        self.variables = wx.ListBox( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, variablesChoices, wx.LB_MULTIPLE )
-        self.variables.SetMinSize( wx.Size( 150,-1 ) )
+        self.variables = wx.ListBox( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, variablesChoices, wx.LB_HSCROLL|wx.LB_MULTIPLE )
+        self.variables.SetMinSize( wx.Size( 350,-1 ) )
         
-        fgSizer1.Add( self.variables, 0, wx.ALL|wx.EXPAND, 5 )
+        fgSizer1.Add( self.variables, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL|wx.ALL|wx.EXPAND, 5 )
         
         rangsChoices = headers
-        self.rangs = wx.ListBox( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, rangsChoices, wx.LB_MULTIPLE )
-        self.rangs.SetMinSize( wx.Size( 150,-1 ) )
+        self.rangs = wx.ListBox( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, rangsChoices, wx.LB_HSCROLL|wx.LB_MULTIPLE )
+        self.rangs.SetMinSize( wx.Size( 350,-1 ) )
         
-        fgSizer1.Add( self.rangs, 0, wx.ALL|wx.EXPAND, 5 )
+        fgSizer1.Add( self.rangs, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL|wx.ALL|wx.EXPAND, 5 )
         
         
-        bSizer1.Add( fgSizer1, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 5 )
+        bSizer1.Add( fgSizer1, 1, wx.ALIGN_CENTER_HORIZONTAL, 5 )
         
         fgSizer3 = wx.FlexGridSizer( 0, 2, 0, 0 )
         fgSizer3.SetFlexibleDirection( wx.BOTH )
@@ -2865,8 +2934,16 @@ class ProtoDial ( wx.Dialog ):
         self.m_textCtrl4 = wx.TextCtrl( self, wx.ID_ANY, u"2", wx.DefaultPosition, wx.DefaultSize, wx.TE_CENTRE )
         fgSizer3.Add( self.m_textCtrl4, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALL, 5 )
         
+        self.m_staticText6 = wx.StaticText( self, wx.ID_ANY, u"Type de représentation", wx.DefaultPosition, wx.DefaultSize, 0 )
+        self.m_staticText6.Wrap( -1 )
+        fgSizer3.Add( self.m_staticText6, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )
+        
+        m_choice3Choices = [ u"Classical - List", u"Classical - Cloud", u"Plan" ]
+        self.typegraph = wx.Choice( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, m_choice3Choices, 0 )
+        self.typegraph.SetSelection( 0 )
+        fgSizer3.Add( self.typegraph, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALL, 5 )
         
-        bSizer1.Add( fgSizer3, 1, wx.EXPAND, 5 )
+        bSizer1.Add( fgSizer3, 0, wx.ALIGN_CENTER_HORIZONTAL, 5 )
         
         m_sdbSizer1 = wx.StdDialogButtonSizer()
         self.m_sdbSizer1OK = wx.Button( self, wx.ID_OK )
@@ -2991,7 +3068,194 @@ class SubTextFromMetaDial ( wx.Dialog ):
     def __del__( self ):
         pass
 
+class BarGraphDialog ( wx.Dialog ):
+    
+    def __init__( self, parent, width, height ):
+        wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = u"Preferences", pos = wx.DefaultPosition, size = wx.DefaultSize, style = wx.DEFAULT_DIALOG_STYLE )
+        
+        self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
+        
+        bSizer1 = wx.BoxSizer( wx.VERTICAL )
+        
+        bSizer2 = wx.BoxSizer( wx.HORIZONTAL )
+        
+        self.m_staticText1 = wx.StaticText( self, wx.ID_ANY, u"Size", wx.DefaultPosition, wx.DefaultSize, 0 )
+        self.m_staticText1.Wrap( -1 )
+        bSizer2.Add( self.m_staticText1, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )
+        
+        sizeradioChoices = [ u"automatic", u"manual" ]
+        self.sizeradio = wx.RadioBox( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, sizeradioChoices, 1, wx.RA_SPECIFY_COLS )
+        self.sizeradio.SetSelection( 0 )
+        bSizer2.Add( self.sizeradio, 0, wx.ALIGN_TOP|wx.ALL, 5 )
+        
+        fgSizer1 = wx.FlexGridSizer( 0, 2, 0, 0 )
+        fgSizer1.SetFlexibleDirection( wx.BOTH )
+        fgSizer1.SetNonFlexibleGrowMode( wx.FLEX_GROWMODE_SPECIFIED )
+        
+        self.m_staticText2 = wx.StaticText( self, wx.ID_ANY, u"width", wx.DefaultPosition, wx.DefaultSize, 0 )
+        self.m_staticText2.Wrap( -1 )
+        fgSizer1.Add( self.m_staticText2, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )
+        
+        self.widthsp = wx.SpinCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.SP_ARROW_KEYS, 0, 1000000, 600 )
+        fgSizer1.Add( self.widthsp, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )
+        
+        self.m_staticText3 = wx.StaticText( self, wx.ID_ANY, u"height", wx.DefaultPosition, wx.DefaultSize, 0 )
+        self.m_staticText3.Wrap( -1 )
+        fgSizer1.Add( self.m_staticText3, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )
+        
+        self.heightsp = wx.SpinCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.SP_ARROW_KEYS, 1, 10000000, 400 )
+        fgSizer1.Add( self.heightsp, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )
+        
+        
+        bSizer2.Add( fgSizer1, 1, wx.EXPAND, 5 )
+        
+        
+        bSizer1.Add( bSizer2, 1, wx.EXPAND, 5 )
+        
+        bSizer3 = wx.BoxSizer( wx.HORIZONTAL )
+        
+        self.m_staticText4 = wx.StaticText( self, wx.ID_ANY, u"Image format", wx.DefaultPosition, wx.DefaultSize, 0 )
+        self.m_staticText4.Wrap( -1 )
+        bSizer3.Add( self.m_staticText4, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )
+        
+        formatChoices = [ u"png", u"svg" ]
+        self.format = wx.Choice( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, formatChoices, 0 )
+        self.format.SetSelection( 0 )
+        bSizer3.Add( self.format, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )
+        
+        
+        bSizer1.Add( bSizer3, 1, wx.EXPAND, 5 )
+        
+        m_sdbSizer1 = wx.StdDialogButtonSizer()
+        self.m_sdbSizer1OK = wx.Button( self, wx.ID_OK )
+        m_sdbSizer1.AddButton( self.m_sdbSizer1OK )
+        self.m_sdbSizer1Cancel = wx.Button( self, wx.ID_CANCEL )
+        m_sdbSizer1.AddButton( self.m_sdbSizer1Cancel )
+        m_sdbSizer1.Realize();
+        
+        bSizer1.Add( m_sdbSizer1, 0, wx.EXPAND, 5 )
+        
+        
+        self.SetSizer( bSizer1 )
+        self.Layout()
+        bSizer1.Fit( self )
+        
+        self.Centre( wx.BOTH )
+        
+        # Connect Events
+        self.sizeradio.Bind( wx.EVT_RADIOBOX, self.OnSizeRadio )
+        
+        self.widthsp.SetValue(width)
+        self.heightsp.SetValue(height)
+        self.widthsp.Enable(False)
+        self.heightsp.Enable(False)
+        self.m_sdbSizer1OK.SetFocus()
+    
+    def __del__( self ):
+        pass
+    
+    
+    # Virtual event handlers, overide them in your derived class
+    def OnSizeRadio( self, event ):
+        if self.sizeradio.GetSelection() == 0 :
+            self.widthsp.Enable(False)
+            self.heightsp.Enable(False)
+        else :
+            self.widthsp.Enable(True)
+            self.heightsp.Enable(True)         
+        event.Skip()
 
+class MessageImage(wx.Frame):
+    def __init__(self, parent, parametres, title, size):
+        wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = title, pos = wx.DefaultPosition, size = size, style = wx.DEFAULT_FRAME_STYLE )
+        self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
+        self.parametres = parametres
+        self.imageFile = self.parametres['tmpgraph']
+        if parametres['svg'] == 'TRUE' :
+            self.imagename = u"image.svg"
+        else :
+            self.imagename = u"iamge.png"
+        self.HtmlPage = wx.html.HtmlWindow(self, -1)
+        self.HtmlPage.SetMinSize(size)
+        if "gtk2" in wx.PlatformInfo:
+            self.HtmlPage.SetStandardFonts()
+        self.HtmlPage.SetFonts('Courier', 'Courier')
+        
+        self.button_1 = wx.Button(self, wx.ID_CANCEL)
+        self.button_2 = wx.Button(self, wx.ID_SAVE)
+        self.Bind(wx.EVT_BUTTON, self.OnCloseMe, self.button_1)
+        self.Bind(wx.EVT_BUTTON, self.OnSaveImage, self.button_2)
+        self.do_layout()
+
+    def do_layout(self):
+        self.sizer_1 = wx.BoxSizer(wx.VERTICAL)
+        self.sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
+        self.sizer_1.Add(self.HtmlPage, 2, wx.EXPAND, 0)
+
+        self.m_sdbSizer1 = wx.StdDialogButtonSizer()
+        self.m_sdbSizer1.AddButton(  self.button_2 )
+        self.m_sdbSizer1.AddButton(  self.button_1 )
+        self.m_sdbSizer1.Realize()
+        self.sizer_1.Add(self.m_sdbSizer1, 0, wx.EXPAND, 5)
+        self.SetSizer(self.sizer_1)
+        self.Layout()
+        self.sizer_1.Fit( self )
 
+    def OnCloseMe(self, event):
+        self.Destroy()
 
-
+    def OnSaveImage(self, event) :
+        dlg = wx.FileDialog(
+            self, message="Enregistrer sous...", defaultDir=os.getcwd(),
+            defaultFile= self.imagename, wildcard=self.parametres['wildcard'], style=wx.SAVE | wx.OVERWRITE_PROMPT
+            )
+        dlg.SetFilterIndex(2)
+        dlg.CenterOnParent()
+        if dlg.ShowModal() == wx.ID_OK:
+            path = dlg.GetPath()
+            copyfile(self.imageFile, path)
+
+class BarFrame :
+    def __init__(self, ira, table, colnames, rownames, tree = False):
+        if not tree :
+            width = 100 + (10*len(rownames)) + (100 * len(colnames))
+            height = len(rownames) * 15
+            if height < 400 : 
+                height = 400
+        else :
+            width = 500
+            height = (35 * len(colnames)) + (15 * len(rownames))
+        dial = BarGraphDialog(ira, width, height)
+        val = dial.ShowModal()
+        if val == wx.ID_OK :
+            tmpgraph = tempfile.mktemp(dir=ira.TEMPDIR)        
+            if dial.format.GetSelection() == 0 :
+                svg = 'FALSE'
+                wildcard = "png|*.png"
+            else :
+                svg = 'TRUE'
+                wildcard = "svg|*.svg"
+            parametres = {'width' : dial.widthsp.GetValue(),
+                          'height': dial.heightsp.GetValue(),
+                          'colnames' : colnames,
+                          'rownames' : rownames,
+                          'tmpgraph' : tmpgraph,
+                          'rgraph' : ira.RscriptsPath['Rgraph'],
+                          'svg' : svg,
+                          'wildcard' : wildcard}
+            if tree :
+                parametres['tree'] = tree
+            txt = barplot(table, parametres)
+            tmpscript = tempfile.mktemp(dir=ira.TEMPDIR)
+            with open(tmpscript,'w') as f :
+                f.write(txt)
+            exec_rcode(ira.RPath, tmpscript, wait = True)
+            win = MessageImage(ira, parametres, u"Graphique", size=(700, 500))
+            if svg == 'FALSE' :
+                txt = "<img src='%s'>" % tmpgraph
+            else :
+                txt = """Copiez ce lien dans votre navigateur : <br>
+                        <a href="%s">%s</a>""" % (tmpgraph, tmpgraph)
+            win.HtmlPage.SetPage(txt)
+            win.Show(True)
+        dial.Destroy()           
\ No newline at end of file