...
[iramuteq] / iramuteq.py
index ea92ad5..7060820 100644 (file)
@@ -29,7 +29,7 @@ import wx.html
 import wx.grid
 import wx.lib.hyperlink as hl
 #------------------------------------
-from functions import BugReport, PlaySound, History
+from functions import BugReport, PlaySound, History, progressbar
 from checkversion import NewVersion
 from guifunct import *
 from tableau import Tableau
@@ -83,7 +83,6 @@ ID_SaveTab = wx.NewId()
 ID_CreateText = wx.NewId()
 ID_ACCEUIL = wx.NewId()
 ID_RESULT = wx.NewId()
-ID_VIEWDATA = wx.NewId()
 ID_HTMLcontent = wx.NewId()
 ID_SimiTxt = wx.NewId()
 ID_proto = wx.NewId()
@@ -94,6 +93,10 @@ ID_Subtxtfrommeta = wx.NewId()
 ID_Subtxtfromthem = wx.NewId()
 ID_WC = wx.NewId()
 ID_ImportEuro = wx.NewId()
+ID_Fact_xml = wx.NewId()
+ID_Fact_mail = wx.NewId()
+ID_Fact_copy = wx.NewId()
+ID_exportmeta = wx.NewId()
 ##########################################################
 #elements de configuration
 ##########################################################
@@ -182,6 +185,16 @@ images_analyses = {
         'simimatrix' : 'simimatrix.png',
         'simiclustermatrix' : 'simimatrix.png',
         'proto' : 'proto.png',
+        'TXM' : 'TXM.png',
+        'europress' : 'europress.png',
+        'factiva_xml' : 'factiva_xml.png',
+        'factiva_copy' : 'factiva_copy.png',
+        'factiva_mail': 'factiva_mail.png',
+        'iramuteq' : 'iraicone.png',
+        'subcorpusmeta' : 'subcorpusmeta.png',
+        'subcorpusthema' : 'subcorpusthema.png',
+        'preferences' : 'preferences.png',
+        'exportmetatable' : 'exportmetatable.png',
          }
 #####################################################################
 
@@ -240,27 +253,29 @@ class IraFrame(wx.Frame):
         file_menu.AppendItem(item)
         
         item = wx.MenuItem(file_menu, ID_OnOpenAnalyse, _(u"Open an analysis").decode('utf8'), _(u"Open an analysis").decode('utf8'))
-        item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN))
+        item.SetBitmap(self.images_analyses['iramuteq'])
         file_menu.AppendItem(item)
 
+        item = wx.MenuItem(file_menu, ID_ImportTXM, _(u"Import from TXM").decode('utf8'), _(u"Import from TXM").decode('utf8'))
+        item.SetBitmap(self.images_analyses['TXM'])
+        file_menu.AppendItem(item)
+        
+        item = wx.MenuItem(file_menu, ID_ImportEuro, _(u"Import from Europress").decode('utf8'), _(u"Import from Europress").decode('utf8'))
+        item.SetBitmap(self.images_analyses['europress'])
+        file_menu.AppendItem(item)        
         
         menuFactiva = wx.Menu()
-        fact_from_xml = wx.MenuItem(menuFactiva, wx.ID_ANY, _(u"from xml").decode('utf8'))
-        fact_from_mail = wx.MenuItem(menuFactiva, wx.ID_ANY, _(u"from mail").decode('utf8'))
-        fact_from_txt = wx.MenuItem(menuFactiva, wx.ID_ANY, _(u"from copy/paste").decode('utf8'))
+        fact_from_xml = wx.MenuItem(menuFactiva, ID_Fact_xml, _(u"from xml").decode('utf8'))
+        fact_from_xml.SetBitmap(self.images_analyses['factiva_xml'])
+        fact_from_mail = wx.MenuItem(menuFactiva, ID_Fact_mail, _(u"from mail").decode('utf8'))
+        fact_from_mail.SetBitmap(self.images_analyses['factiva_mail'])
+        fact_from_txt = wx.MenuItem(menuFactiva, ID_Fact_copy, _(u"from copy/paste").decode('utf8'))
+        fact_from_txt.SetBitmap(self.images_analyses['factiva_copy'])
         menuFactiva.AppendItem(fact_from_xml)
         menuFactiva.AppendItem(fact_from_mail)
         menuFactiva.AppendItem(fact_from_txt)
         file_menu.AppendMenu(-1, _(u"Import from factiva").decode('utf8'), menuFactiva)
 
-        item = wx.MenuItem(file_menu, ID_ImportTXM, _(u"Import from TXM").decode('utf8'), _(u"Import from TXM").decode('utf8'))
-        item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN))
-        file_menu.AppendItem(item)
-        
-        item = wx.MenuItem(file_menu, ID_ImportEuro, _(u"Import from Europress").decode('utf8'), _(u"Import from Europress").decode('utf8'))
-        item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN))
-        file_menu.AppendItem(item)        
-
         menuTools = wx.Menu()
         splitvar = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Split from variable").decode('utf8'))
         extractmod = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Extract mods").decode('utf8'))
@@ -281,22 +296,31 @@ class IraFrame(wx.Frame):
         file_menu.Append(wx.ID_EXIT, _(u"Exit").decode('utf8'))
         
         edit_menu = wx.Menu()
-        edit_menu.Append(wx.ID_PREFERENCES, _(u'Preferences').decode('utf8'))
+        pref = wx.MenuItem(edit_menu, wx.ID_PREFERENCES, _(u'Preferences').decode('utf8'))
+        pref.SetBitmap(self.images_analyses['preferences'])
+        edit_menu.AppendItem(pref)
+        #edit_menu.Append(wx.ID_PREFERENCES, _(u'Preferences').decode('utf8'))
         
         view_menu = wx.Menu()
-        view_menu.Append(ID_ACCEUIL, _(u"Home page").decode('utf8'))
-        view_menu.Append(ID_VIEWDATA, _(u"Show data").decode('utf8'))
-        view_menu.Append(ID_RESULT, _(u'Show results').decode('utf8'))
+        home = wx.MenuItem(view_menu, ID_ACCEUIL, _(u"Home page").decode('utf8'))
+        home.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_GO_HOME, size = (16,16)))
+        view_menu.AppendItem(home)
+        #view_menu.Append(ID_ACCEUIL, _(u"Home page").decode('utf8'))
+        results = wx.MenuItem(view_menu, ID_RESULT, _(u'Show results').decode('utf8'))
+        results.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_LIST_VIEW, size = (16,16)))
+        view_menu.AppendItem(results)
+        #view_menu.Append(ID_RESULT, _(u'Show results').decode('utf8'))
         #view_menu.AppendSeparator()
         matrix_menu = wx.Menu()
         matanalyses = [[ID_Freq, _(u"Frequencies").decode('utf8'), 'freq'],
-                       [ID_Freq, _(u"Multiple  Frequencies").decode('utf8'), 'freqmulti'],
+                       [ID_FreqMulti, _(u"Multiple  Frequencies").decode('utf8'), 'freqmulti'],
                        [ID_Chi2, _(u"Chi2").decode('utf8'), 'chi2'],
                        {'name' : _(u"Clustering").decode('utf8'),
                         'content' : [[ID_CHDReinert, _(u"Reinert's Method").decode('utf8'), 'reinertmatrix']]},
                        [ID_SIMI, _(u"Similarities Analysis").decode('utf8'), 'simimatrix'],
                        [ID_proto, _(u"Prototypical Analysis").decode('utf8'), 'proto'],
-                       [ID_Splitfromvar, _(u"Split from variable").decode('utf8'), '']]
+                       [ID_Splitfromvar, _(u"Split from variable").decode('utf8'), 'subcorpusmeta'],
+                        ]
         
         for analyse in matanalyses :
             if not isinstance(analyse, dict) :
@@ -344,8 +368,9 @@ class IraFrame(wx.Frame):
                          [ID_SimiTxt, _(u"Similarities Analysis").decode('utf8'), 'simitxt'],
                          [ID_WC, _(u"WordCloud").decode('utf8'), 'wordcloud'],
                          {'name' : _(u"Sub corpus").decode('utf8'),
-                          'content' : [[ID_Subtxtfrommeta, _(u'Sub corpus from metadata').decode('utf8'), None],
-                                       [ID_Subtxtfromthem, _(u'Sub corpus from thematic').decode('utf8'), None]]},
+                          'content' : [[ID_Subtxtfrommeta, _(u'Sub corpus from metadata').decode('utf8'), 'subcorpusmeta'],
+                                       [ID_Subtxtfromthem, _(u'Sub corpus from thematic').decode('utf8'), 'subcorpusthema']]},
+                         [ID_exportmeta, _(u"Export metadata table").decode('utf8'), 'exportmetatable'],
                          ]
         
         for analyse in analyses_text :
@@ -374,8 +399,14 @@ class IraFrame(wx.Frame):
         self.text_menu = text_menu
         
         help_menu = wx.Menu()
-        help_menu.Append(wx.ID_ABOUT, _(u"About...").decode('utf8'))
-        help_menu.Append(wx.ID_HELP, _(u"Online help...").decode('utf8'))
+        about = wx.MenuItem(help_menu, wx.ID_ABOUT, _(u"About...").decode('utf8'))
+        about.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_INFORMATION, size = (16,16)))
+        help_menu.AppendItem(about)
+        #help_menu.Append(wx.ID_ABOUT, _(u"About...").decode('utf8'))
+        help = wx.MenuItem(help_menu, wx.ID_HELP, _(u"Online help...").decode('utf8'))
+        help.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_HELP, size = (16,16)))
+        help_menu.AppendItem(help)
+        #help_menu.Append(wx.ID_HELP, _(u"Online help...").decode('utf8'))
         
         self.mb.Append(file_menu, _(u"File").decode('utf8'))
         self.mb.Append(edit_menu, _(u"Edition").decode('utf8'))
@@ -403,7 +434,21 @@ class IraFrame(wx.Frame):
         tb1.AddLabelTool(ID_OpenData, "OpenData", self.images_analyses['matroot'], shortHelp=_(u"Matrix").decode('utf8'), longHelp=_(u"Open a matrix").decode('utf8'))
         tb1.AddSeparator()
         tb1.AddLabelTool(ID_OpenText, "OpenText", self.images_analyses['textroot'], shortHelp=_(u"Text").decode('utf8'), longHelp=_(u"Open a text corpus").decode('utf8'))
-        
+        tb1.AddSeparator()
+        tb1.AddLabelTool(ID_OnOpenAnalyse, "OpenAnalyse", self.images_analyses['iramuteq'], shortHelp= _(u"Open an analysis").decode('utf8'), longHelp=_(u"Open an analysis").decode('utf8'))
+        tb1.AddSeparator()
+        tb1.AddLabelTool(ID_ImportTXM, "ImportTXM", self.images_analyses['TXM'], shortHelp= _(u"Import from TXM").decode('utf8'), longHelp=_(u"Import from TXM").decode('utf8'))
+        tb1.AddSeparator()
+        tb1.AddLabelTool(ID_ImportEuro, "ImportEuro", self.images_analyses['europress'], shortHelp= _(u"Import from Europress").decode('utf8'), longHelp=_(u"Import from Europress").decode('utf8'))
+        tb1.AddSeparator()
+        tb1.AddLabelTool(ID_Fact_xml, "ImportFactxml", self.images_analyses['factiva_xml'], shortHelp= _(u"Factiva from xml").decode('utf8'), longHelp=_(u"Factiva from xml").decode('utf8'))
+        tb1.AddLabelTool(ID_Fact_mail, "ImportFactmail", self.images_analyses['factiva_mail'], shortHelp= _(u"Factiva from mail").decode('utf8'), longHelp=_(u"Factiva from mail").decode('utf8'))
+        tb1.AddLabelTool(ID_Fact_copy, "ImportFactcopy", self.images_analyses['factiva_copy'], shortHelp= _(u"Factiva from copy/paste").decode('utf8'), longHelp=_(u"Factiva from copy/paste").decode('utf8'))
+        tb1.AddSeparator()
+        tb1.AddLabelTool(wx.ID_PREFERENCES, "Preferences", self.images_analyses['preferences'], shortHelp= _(u"Preferences").decode('utf8'), longHelp=_(u"Preferences").decode('utf8'))
+        tb1.AddSeparator()
+        tb1.AddLabelTool(ID_ACCEUIL, "Home", wx.ArtProvider_GetBitmap(wx.ART_GO_HOME, size = (16,16)), shortHelp= _(u"Home page").decode('utf8'), longHelp=_(u"Home page").decode('utf8'))
+        tb1.AddLabelTool(ID_RESULT, "Results", wx.ArtProvider_GetBitmap(wx.ART_LIST_VIEW, size = (16,16)), shortHelp= _(u'Show results').decode('utf8'), longHelp=_(u'Show results').decode('utf8'))
         tb1.Realize()
         
         tb_text = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
@@ -425,6 +470,12 @@ class IraFrame(wx.Frame):
                 for subana in analyse['content'] :
                     tb_mat.AddLabelTool(subana[0], subana[1], self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)), shortHelp = subana[1], longHelp = subana[1])        
         tb_mat.Realize()
+        
+        tb_help = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
+                         wx.TB_FLAT | wx.TB_NODIVIDER)
+        tb_help.AddLabelTool(wx.ID_ABOUT, "About", wx.ArtProvider_GetBitmap(wx.ART_INFORMATION, size=(16,16)), shortHelp=_(u"About...").decode('utf8'), longHelp=_(u"About...").decode('utf8'))
+        tb_help.AddLabelTool(wx.ID_HELP, "Help", wx.ArtProvider_GetBitmap(wx.ART_HELP, size=(16,16)), shortHelp=_(u"Online help...").decode('utf8'), longHelp=_(u"Online help...").decode('utf8'))
+        tb_help.Realize()
 #------------------------------------------------------------------------------------------------
 
         self.text_ctrl_txt = wx.TextCtrl(self, -1, "", wx.Point(0, 0), wx.Size(200, 200), wx.NO_BORDER | wx.TE_MULTILINE | wx.TE_RICH2 | wx.TE_READONLY)
@@ -484,8 +535,13 @@ class IraFrame(wx.Frame):
         self._mgr.AddPane(tb_mat, aui.AuiPaneInfo().
                           Name("tb_mat").Caption("analyse_matrix").
                           ToolbarPane().Top().
-                          LeftDockable(True).RightDockable(False))           
-        
+                          LeftDockable(True).RightDockable(False))
+                
+        self._mgr.AddPane(tb_help, aui.AuiPaneInfo().
+                          Name("tb_help").Caption("help").
+                          ToolbarPane().Top().
+                          LeftDockable(True).RightDockable(False))
+                
         self._mgr.GetPane('tb_text').Hide()
         self._mgr.GetPane('tb_mat').Hide()
         
@@ -498,7 +554,6 @@ class IraFrame(wx.Frame):
         # Show How To Use The Closing Panes Event
 ##################################################################        
         self.Bind(wx.EVT_MENU, self.OnAcceuil, id=ID_ACCEUIL)
-        self.Bind(wx.EVT_MENU, self.OnViewData, id=ID_VIEWDATA)
         self.Bind(wx.EVT_MENU, self.ShowTab, id=ID_RESULT)
         self.Bind(wx.EVT_MENU, self.OnOpenData, id=ID_OpenData)
         self.Bind(wx.EVT_MENU, self.OnOpenText, id=ID_OpenText)
@@ -538,6 +593,7 @@ class IraFrame(wx.Frame):
         self.Bind(wx.EVT_MENU, self.OnPref, id=wx.ID_PREFERENCES)
         self.Bind(wx.EVT_MENU, self.OnImportTXM, id=ID_ImportTXM)
         self.Bind(wx.EVT_MENU, self.OnImportEuropress, id=ID_ImportEuro)
+        self.Bind(wx.EVT_MENU, self.OnExportMeta, id=ID_exportmeta)
         self.Bind(wx.EVT_CLOSE, self.OnClose)
 ##################################################################
         flags = self._mgr.GetAGWFlags()
@@ -576,8 +632,7 @@ class IraFrame(wx.Frame):
         self.type = ''
 
 ##############################################################@
-        self.DisEnSaveTabAs(False)
-        self.ShowMenu('view', False)
+        self.ShowMenu('view', True)
         self.ShowMenu('matrix', False)
         self.ShowMenu('text', False)
    
@@ -629,10 +684,10 @@ class IraFrame(wx.Frame):
             if not RLibsAreInstalled(self) :
                 CheckRPackages(self)
         else :
-            msg = '\n'.join([_(u"Can't find R executable"), _(u"If R is not installed, get it from http://www.r-project.org.").decode('utf8'),
+            msg = '\n'.join([_(u"Can't find R executable").decode('utf8'), _(u"If R is not installed, get it from http://www.r-project.org.").decode('utf8'),
                              _(u"If R is installed, report its path in Preferences.").decode('utf8'),
                              _(u"IRaMuTeQ does not work without R.").decode('utf8')])
-            dlg = wx.MessageDialog(self, msg, _(u"Problem").decode('utf8'), wx.OK | wx.NO_DEFAULT | wx.ICON_WARNING)
+            dlg = wx.MessageDialog(self, msg, _(u"Problem").decode('utf8'), wx.OK | wx.ICON_WARNING)
             dlg.CenterOnParent()
             if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
                 pass
@@ -654,14 +709,6 @@ class IraFrame(wx.Frame):
             if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
                 evt.Veto()
 
-    def DisEnSaveTabAs(self, DISEN):
-    #Disable SaveTabAs
-        file_menu = self.mb.GetMenu(0)
-        items = file_menu.GetMenuItems()
-        for item in items :
-            if item.GetId() == ID_SaveTab :
-                item.Enable(DISEN)
-    
     def ShowMenu(self, menu, Show=True):
         if menu == 'text' :
             menu_pos = 4
@@ -716,8 +763,9 @@ class IraFrame(wx.Frame):
 
     def OnOpenAnalyse(self, event):
         self.AnalysePath = OnOpen(self, "Analyse")
-        OpenAnalyse(self, self.AnalysePath[1][0], True)
-        self.ShowMenu('view')
+        if self.AnalysePath :
+            OpenAnalyse(self, self.AnalysePath[1][0], True)
+            self.ShowMenu('view')
 
     def OnOpenText(self, event):
         inputname, self.input_path = OnOpen(self, "Texte")
@@ -725,23 +773,6 @@ class IraFrame(wx.Frame):
         if inputname:
             self.OpenText()
    
-    def OnViewData(self, event):
-        if self.type == "Data":
-            if not self.DataPop :
-                self.Sheet.Populate(self.content)
-                self.DataPop = True
-                self.DataTxt = False
-            self.ShowAPane(u"Data")
-        elif self.type == "Texte" or self.type == 'Analyse' :
-            if not self.DataTxt :
-                self.text_ctrl_txt.Clear()
-                self.text_ctrl_txt.write(self.content)
-                self.text_ctrl_txt.ShowPosition(0)
-                self.DataTxt = True
-                self.DataPop = False
-            self.ShowAPane(u"Text")
-        self._mgr.Update()
-    
     def OnSubText(self, evt, corpus = None, parametres = None):
         if corpus is None :
             corpus = self.tree.getcorpus()
@@ -755,17 +786,12 @@ class IraFrame(wx.Frame):
             wx.SafeYield()
             corpus = builder.doanalyse()
             self.history.add(corpus.parametres)
-            self.tree.OnItemAppend(corpus.parametres)
             OpenAnalyse(self, corpus.parametres)
+            self.tree.OnItemAppend(corpus.parametres)
             del busy
             
     def OpenText(self):
-        dlg = wx.ProgressDialog("Ouverture...",
-                                   "Veuillez patienter...",
-                                   maximum=2,
-                                   parent=self,
-                                   style=wx.PD_APP_MODAL | wx.PD_AUTO_HIDE | wx.PD_ELAPSED_TIME | wx.PD_CAN_ABORT
-                                   )
+        dlg = progressbar(self, 5) 
         
         builder =  Builder(self, dlg)
         if builder.res == wx.ID_OK :
@@ -789,7 +815,6 @@ class IraFrame(wx.Frame):
                 count += 1
                 keepGoing = dlg.Update(count, u"Chargement du dictionnaire")
                 dlg.Destroy()
-        #self.OnViewData(wx.EVT_BUTTON)
         
     def OnExit(self, event):
         self.Close()
@@ -868,7 +893,6 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
     
     def LastTabClose(self) :
         if self.nb.GetPageCount() == 1 :
-            #self.DisEnSaveTabAs(False)
             if self.DataTxt :
                 self.ShowAPane("Text")
             elif self.DataPop :
@@ -1072,6 +1096,14 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
             ImportFactiva(self, 'euro')
         except :
             BugReport(self)
+    
+    def OnExportMeta(self, evt, corpus = None):
+        if corpus is None :
+            corpus = self.tree.getcorpus()
+        try :
+            ExportMetaTable(self, corpus)
+        except :
+            BugReport(self) 
 
     def ExtractTools(self, evt) :
         ID = evt.GetId()
@@ -1126,6 +1158,7 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
         dlg = PrefDialog(self)
         dlg.CenterOnParent()
         self.val = dlg.ShowModal()
+        dlg.Destroy()
 
     def Upgrade(self) :
         if self.check_update:
@@ -1168,40 +1201,54 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
                 #self.Text = OpenAnalyse(self, self.filename)
                 OpenAnalyse(self, self.filename)
         if not truepath:
-            print 'ce fichier n\'existe pas'
+            print 'This file does not exist'
             
         
 
 class IntroPanel(wx.Panel):
     def __init__(self, parent):
         wx.Panel.__init__(self, parent)
-        col = randint(0, 255)
-        col1 = randint(0,255)
-        col2 = randint(0,255)
-        col = 57
+        #col = randint(0, 255)
+        #col1 = randint(0,255)
+        #col2 = randint(0,255)
+        #col = 57
+        col = 161
+        col1 = 198
+        col2 = 224
         bckgrdcolor = wx.Colour(col, col1, col2)
         self.SetBackgroundColour(bckgrdcolor)
         txtcolour = wx.Colour(250, 250, 250)
         linkcolor = wx.Colour(255, 0, 0)
         sizer1 = wx.BoxSizer(wx.VERTICAL)
         sizer2 = wx.BoxSizer(wx.VERTICAL)
-        sizer3 = wx.BoxSizer(wx.HORIZONTAL)
-        sizer4 = wx.BoxSizer(wx.VERTICAL)
-        sizer5 = wx.BoxSizer(wx.HORIZONTAL)
+        sizer4 = wx.BoxSizer(wx.HORIZONTAL)
         grid_sizer_1 = wx.FlexGridSizer(1, 4, 0, 0)
         grid_sizer_3 = wx.FlexGridSizer(1, 4, 0, 0)
-        grid_sizer_2 = wx.FlexGridSizer(1, 3, 0, 0)
+        grid_sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
+        
+        iralink = hl.HyperLinkCtrl(self, wx.ID_ANY, u"http://www.iramuteq.org", URL="http://www.iramuteq.org")
+        iralink.SetColours(linkcolor, linkcolor, "RED")
+        iralink.SetBackgroundColour(bckgrdcolor)
+        iralink.EnableRollover(True)
+        iralink.SetUnderlines(False, False, True)
+        iralink.SetBold(True)
+        iralink.UpdateLink()
+        
         PanelPres = wx.Panel(self)
+        bckgrdcolor = wx.Colour(randint(0, 255), randint(0, 255), randint(0, 255))
         PanelPres.SetBackgroundColour(bckgrdcolor)
+        
         label_1 = wx.StaticText(self, -1, u"IRaMuTeQ", size=(-1, -1))
         label_1.SetFont(wx.Font(46, wx.TELETYPE, wx.NORMAL, wx.BOLD, 0, "Purisa"))
         label_1.SetForegroundColour(wx.RED)
+        
+        iraicone = wx.Image(os.path.join(ImagePath,'iraicone100x100.png'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
+        but_ira = wx.StaticBitmap(self, -1, bitmap = iraicone)
+
+        
         label2 = wx.StaticText(PanelPres, -1 , u'\nVersion ' + ConfigGlob.get('DEFAULT', 'version') + '\n')
         label2.SetForegroundColour(txtcolour)
         label2.SetBackgroundColour(bckgrdcolor)
-        #label3 = wx.StaticText(PanelPres, -1 , u'Equipe ')
-        #label3.SetForegroundColour(txtcolour)
-        #label3.SetBackgroundColour(bckgrdcolor)
         self.hyper2 = hl.HyperLinkCtrl(PanelPres, wx.ID_ANY, u"REPERE", URL="http://repere.no-ip.org/")
         self.hyper2.SetColours(linkcolor, linkcolor, "RED")
         self.hyper2.SetBackgroundColour(bckgrdcolor)
@@ -1209,9 +1256,11 @@ class IntroPanel(wx.Panel):
         self.hyper2.SetUnderlines(False, False, True)
         self.hyper2.SetBold(True)
         self.hyper2.UpdateLink()
+        
         label_lerass = wx.StaticText(PanelPres, -1, u'Laboratoire ')
         label_lerass.SetForegroundColour(txtcolour)
         label_lerass.SetBackgroundColour(bckgrdcolor)
+        
         self.hyper_lerass = hl.HyperLinkCtrl(PanelPres, -1, u'LERASS', URL="http://www.lerass.com")
         self.hyper_lerass.SetColours(linkcolor, linkcolor, "RED")
         self.hyper_lerass.SetBackgroundColour(bckgrdcolor)
@@ -1219,14 +1268,18 @@ class IntroPanel(wx.Panel):
         self.hyper_lerass.SetUnderlines(False, False, True)
         self.hyper_lerass.SetBold(True)
         self.hyper_lerass.UpdateLink()
+        
         blank = wx.StaticText(PanelPres, -1, u'\n')
         blank1 = wx.StaticText(PanelPres, -1, u'\n')
+        
         labellicence = wx.StaticText(PanelPres, -1, _(u"License GNU GPL").decode('utf8'))
         labellicence.SetForegroundColour(txtcolour)
         labellicence.SetBackgroundColour(bckgrdcolor)
+        
         labelcopy = wx.StaticText(PanelPres, -1, ConfigGlob.get('DEFAULT', 'copyright'))
         labelcopy.SetForegroundColour(txtcolour)
         labelcopy.SetBackgroundColour(bckgrdcolor)
+        
         python_img = wx.Image(os.path.join(ImagePath,'python-logo.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
         r_img = wx.Image(os.path.join(ImagePath,'Rlogo.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
         lexique_img = wx.Image(os.path.join(ImagePath,'LexTexte4.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
@@ -1238,33 +1291,30 @@ class IntroPanel(wx.Panel):
         self.Bind(wx.EVT_BUTTON, self.OnR, but_r)
         
         
-        #grid_sizer_1.Add(label3, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
         grid_sizer_1.Add(self.hyper2, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
         grid_sizer_3.Add(label_lerass, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
         grid_sizer_3.Add(self.hyper_lerass, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
-        sizer4.Add(label_1, 0, wx.ALIGN_CENTER, 5)
+        sizer4.Add(label_1, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 5)
+        
         sizer2.Add(label2, 0, wx.ALIGN_CENTER, 5)
-        #sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
         sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
         sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
         sizer2.Add(grid_sizer_3, 0, wx.ALIGN_CENTER, 5)
         sizer2.Add(wx.StaticText(PanelPres, -1, u' '), 0, wx.ALIGN_CENTER, 5)
-        #sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
-        #sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
         sizer2.Add(grid_sizer_1, 0, wx.ALIGN_CENTER, 5)
         sizer2.Add(labellicence, 0, wx.ALIGN_CENTER, 5)
         sizer2.Add(labelcopy, 0, wx.ALIGN_CENTER, 5)
-        sizer1.Add(sizer4, 1, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
+        sizer1.Add(sizer4, 2, wx.ALIGN_CENTER_HORIZONTAL, 0)
+        sizer1.Add(but_ira, 1, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 5)
+        sizer1.Add(iralink, 1, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_TOP, 5)
+        sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 10)
         PanelPres.SetSizer(sizer2)
-        sizer5.Add(blank, 1, wx.EXPAND | wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 2)
-        sizer5.Add(PanelPres, 1, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
-        sizer5.Add(blank1, 1, wx.ALIGN_CENTER_HORIZONTAL,2)
-        grid_sizer_2.Add(but_python, 1, wx.ALIGN_CENTER_HORIZONTAL| wx.ALIGN_CENTER_VERTICAL)
-        grid_sizer_2.Add(but_lexique, 1,wx.ALIGN_CENTER_HORIZONTAL| wx.ALIGN_CENTER_VERTICAL)
-        grid_sizer_2.Add(but_r, 1, wx.ALIGN_CENTER_HORIZONTAL| wx.ALIGN_CENTER_VERTICAL)
+        grid_sizer_2.Add(but_python, 1, wx.ALIGN_BOTTOM)
+        grid_sizer_2.Add(but_lexique, 1, wx.ALIGN_BOTTOM)
+        grid_sizer_2.Add(but_r, 1,  wx.ALIGN_BOTTOM)
         
-        sizer1.Add(sizer5, 3, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 1)
-        sizer1.Add(grid_sizer_2, 1, wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL)
+        sizer1.Add(PanelPres, 0, wx.EXPAND |wx.ALL, 10)
+        sizer1.Add(grid_sizer_2, 2, wx.ALIGN_CENTER_HORIZONTAL|wx.ALL, 1)
         self.SetSizer(sizer1)
         sizer1.Fit(self)