2 # -*- coding: utf-8 -*-
3 #Author: Pierre Ratinaud
4 #Copyright (c) 2008-2012, Pierre Ratinaud
7 from optparse import OptionParser
9 parser = OptionParser()
10 parser.add_option("-f", "--file", dest="filename",
11 help="open FILE", metavar="FILE", default=False)
12 (options, args) = parser.parse_args()
23 from random import randint
24 from ConfigParser import *
28 #------------------------------------
31 import wx.lib.agw.aui as aui
34 import wx.lib.hyperlink as hl
35 #------------------------------------
36 from functions import BugReport, PlaySound, ReadLexique, History, DoConf, ReadDicoAsDico, progressbar
37 from checkversion import NewVersion
38 from guifunct import *
39 from tableau import Tableau
40 from dialog import PrefDialog, CorpusPref
41 from tabfrequence import Frequences
42 from tabchi2 import ChiSquare
43 #from tabstudent import MakeStudent
44 from tabchddist import ChdCluster
45 from tabafcm import DoAFCM
46 from tabchdalc import AnalyseQuest
47 from tabsimi import DoSimi
48 from tabrsimple import InputText
49 from tabverges import Prototypical
50 from tabsplitvar import SplitMatrixFromVar
51 #from textafcuci import AfcUci
52 from textdist import AnalysePam
53 from textstat import Stat
54 from textaslexico import Lexico
55 from textsimi import SimiTxt, SimiFromCluster
56 from textwordcloud import WordCloud, ClusterCloud
57 from textreinert import Reinert
58 #from profile_segment import ProfileSegment
59 #from textcheckcorpus import checkcorpus
60 from openanalyse import OpenAnalyse
61 from corpus import Builder, SubBuilder
62 #from sheet import MySheet
63 from checkinstall import CreateIraDirectory, CheckRPath, FindRPAthWin32, FindRPathNix, CheckRPackages, IsNew, UpgradeConf, CopyConf, RLibsAreInstalled
64 from chemins import RscriptsPath, ConstructConfigPath, ConstructDicoPath, ConstructGlobalPath, PathOut
65 from parse_factiva_xml import ImportFactiva
66 from tools import Extract
68 from tree import LeftTree
69 ##########################################################
70 ID_OpenData = wx.NewId()
71 ID_Import = wx.NewId()
72 ID_OpenText = wx.NewId()
73 ID_OnOpenAnalyse = wx.NewId()
76 ID_Student = wx.NewId()
77 ID_CHDSIM = wx.NewId()
78 ID_CHDReinert = wx.NewId()
79 ID_TEXTAFCM = wx.NewId()
80 ID_TEXTSTAT = wx.NewId()
82 ID_TEXTREINERT = wx.NewId()
83 ID_TEXTPAM = wx.NewId()
84 ID_CHECKCORPUS = wx.NewId()
85 ID_Tabcontent = wx.NewId()
88 ID_CloseTab = wx.NewId()
89 ID_SaveTab = wx.NewId()
90 ID_CreateText = wx.NewId()
91 ID_ACCEUIL = wx.NewId()
92 ID_RESULT = wx.NewId()
93 ID_VIEWDATA = wx.NewId()
94 ID_HTMLcontent = wx.NewId()
95 ID_SimiTxt = wx.NewId()
97 ID_ImportTXM = wx.NewId()
98 ##########################################################
99 #elements de configuration
100 ##########################################################
102 if sys.platform == 'darwin' :
103 sys.setdefaultencoding('UTF-8')
104 wx.SetDefaultPyEncoding('UTF-8')
106 sys.setdefaultencoding(locale.getpreferredencoding())
108 #chemin de l'application
109 AppliPath = os.path.abspath(os.path.dirname(os.path.realpath(sys.argv[0])))
111 ImagePath = os.path.join(AppliPath, 'images')
112 #configuration generale
113 DictConfigPath = ConstructGlobalPath(AppliPath)
114 ConfigGlob = ConfigParser()
115 ConfigGlob.read(DictConfigPath['global'])
116 #repertoire de l'utilisateur
117 if os.getenv('HOME') != None:
118 user_home = os.getenv('HOME')
120 user_home = os.getenv('HOMEPATH')
121 UserConfigPath = os.path.abspath(os.path.join(user_home, '.iramuteq'))
122 #Si pas de fichiers de config utilisateur, on cree le repertoire
123 CreateIraDirectory(UserConfigPath, AppliPath)
124 #fichiers log pour windows (py2exe)
125 log = logging.getLogger('iramuteq')
126 fh = logging.FileHandler(os.path.join(UserConfigPath,'stdout.log'))
127 formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
128 fh.setFormatter(formatter)
130 if sys.platform != 'win32' and sys.platform != 'darwin':
131 ch = logging.StreamHandler()
132 ch.setFormatter(formatter)
134 log.setLevel(logging.INFO)
136 class writer(object):
137 def write(self, data):
138 if data.strip() != '' :
139 log.info('ERROR : %s' % data)
141 class printer(object) :
142 def write(self, data) :
143 if data.strip() != '' :
144 log.info('Print : %s' % data)
146 sys.stderr = writer()
147 sys.stdout = printer()
149 ConfigPath = ConstructConfigPath(UserConfigPath)
151 langues = {'french' : wx.LANGUAGE_FRENCH,
152 'english' : wx.LANGUAGE_ENGLISH,}
153 #####################################################################
155 class IraFrame(wx.Frame):
156 def __init__(self, parent, id= -1, title="", pos=wx.DefaultPosition,
157 size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE |
160 log.info('Starting...')
161 wx.Frame.__init__(self, parent, id, title, pos, size, style)
163 self.AppliPath = AppliPath
164 self.images_path = os.path.join(AppliPath,'images')
165 self.UserConfigPath = UserConfigPath
166 #self.RscriptsPath = ConstructRscriptsPath(AppliPath)
167 self.RscriptsPath = PathOut(dirout=os.path.join(AppliPath, 'Rscripts'))
168 self.RscriptsPath.basefiles(RscriptsPath)
169 #self.DictPath = ConstructDicoPath(AppliPath)
170 self.DictPath = ConstructDicoPath(UserConfigPath)
171 self.ConfigGlob = ConfigGlob
172 self.ConfigPath = ConstructConfigPath(UserConfigPath)
173 self.pref = RawConfigParser()
174 #workaround for import problem
175 self.SimiFromCluster = SimiFromCluster
177 gettext.install('iramuteq', os.path.join(AppliPath,'locale'), unicode=True)
178 self.presLan_fr = gettext.translation("iramuteq", os.path.join(AppliPath,'locale'), languages=['fr_FR'])
179 self.presLan_en = gettext.translation("iramuteq", os.path.join(AppliPath,'locale'), languages=['en'])
181 # tell FrameManager to manage this frame
182 #self._mgr = wx.aui.AuiManager()
183 self._mgr = aui.AuiManager()
184 self._mgr.SetManagedWindow(self)
187 #--------------------------------------------------------------------------------
188 self.mb = wx.MenuBar()
190 file_menu = wx.Menu()
191 item = wx.MenuItem(file_menu, ID_OpenData, _(u"Open a matrix").decode('utf8'), _(u"Open a matrix").decode('utf8'))
192 item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN))
193 file_menu.AppendItem(item)
195 item = wx.MenuItem(file_menu, ID_OpenText, _(u"Open a text corpus").decode('utf8'), _(u"Open a text corpus").decode('utf8'))
196 item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN))
197 file_menu.AppendItem(item)
199 item = wx.MenuItem(file_menu, ID_OnOpenAnalyse, _(u"Open an analysis").decode('utf8'), _(u"Open an analysis").decode('utf8'))
200 item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN))
201 file_menu.AppendItem(item)
204 menuFactiva = wx.Menu()
205 fact_from_xml = wx.MenuItem(menuFactiva, wx.ID_ANY, _(u"from xml").decode('utf8'))
206 fact_from_mail = wx.MenuItem(menuFactiva, wx.ID_ANY, _(u"from mail").decode('utf8'))
207 fact_from_txt = wx.MenuItem(menuFactiva, wx.ID_ANY, _(u"from copy/paste").decode('utf8'))
208 menuFactiva.AppendItem(fact_from_xml)
209 menuFactiva.AppendItem(fact_from_mail)
210 menuFactiva.AppendItem(fact_from_txt)
211 file_menu.AppendMenu(-1, _(u"Import from factiva").decode('utf8'), menuFactiva)
213 item = wx.MenuItem(file_menu, ID_ImportTXM, _(u"Import from TXM").decode('utf8'), _(u"Import from TXM").decode('utf8'))
214 item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN))
215 file_menu.AppendItem(item)
217 menuTools = wx.Menu()
218 splitvar = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Split from variable").decode('utf8'))
219 extractmod = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Extract mods").decode('utf8'))
220 extractthem = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Extract thematics").decode('utf8'))
221 menuTools.AppendItem(splitvar)
222 menuTools.AppendItem(extractmod)
223 menuTools.AppendItem(extractthem)
224 self.ID_splitvar = splitvar.GetId()
225 self.ID_extractmod = extractmod.GetId()
226 self.ID_extractthem = extractthem.GetId()
227 file_menu.AppendMenu(-1, _(u"Tools").decode('utf8'), menuTools)
230 #item = wx.MenuItem(file_menu, ID_SaveTab, _(u"Save tab as...").decode('utf8'), _(u"Save tab as...").decode('utf8'))
231 #item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_SAVE_AS))
232 #file_menu.AppendItem(item)
234 file_menu.Append(wx.ID_EXIT, _(u"Exit").decode('utf8'))
236 edit_menu = wx.Menu()
237 edit_menu.Append(wx.ID_PREFERENCES, '', _(u'Preferences').decode('utf8'))
239 view_menu = wx.Menu()
240 view_menu.Append(ID_ACCEUIL, _(u"Home page").decode('utf8'))
241 view_menu.Append(ID_VIEWDATA, _(u"Show data").decode('utf8'))
242 view_menu.Append(ID_RESULT, _(u'Show results').decode('utf8'))
243 #view_menu.AppendSeparator()
244 matrix_menu = wx.Menu()
245 matrix_menu.Append(ID_Freq, _(u"Frequencies").decode('utf8'))
246 matrix_menu.Append(ID_Chi2, _(u"Chi2").decode('utf8'))
247 #matrix_menu.Append(ID_Student, u"t de Student")
248 menu_classif = wx.Menu()
249 menu_classif.Append(ID_CHDReinert, _(u"Reinert's Method").decode('utf8'))
250 #menu_classif.Append(ID_CHDSIM, u"Par matrice des distances")
251 matrix_menu.AppendMenu(-1, _(u"Clustering").decode('utf8'), menu_classif)
252 #matrix_menu.Append(ID_AFCM, u"AFCM")
253 matrix_menu.Append(ID_SIMI, _(u"Similarities Analysis").decode('utf8'))
254 matrix_menu.Append(ID_proto, _(u"Prototypical Analysis").decode('utf8'))
255 ID_RCODE = wx.NewId()
256 matrix_menu.Append(ID_RCODE, u"Code R...")
257 #menu_splittab = wx.Menu()
258 #ID_SPLITVAR = wx.NewId()
259 #splitvar = wx.MenuItem(menu_splittab, ID_SPLITVAR, _(u"Split from variable").decode('utf8'))
260 #menu_splittab.AppendItem(splitvar)
261 #matrix_menu.AppendMenu(-1, _(u"Split matrix").decode('utf8'), menu_splittab)
262 self.matrix_menu = matrix_menu
264 text_menu = wx.Menu()
265 #text_menu.Append(ID_CHECKCORPUS, u"VĂ©rifier le corpus")
266 text_menu.Append(ID_TEXTSTAT, _(u"Statistics").decode('utf8'))
267 text_menu.Append(ID_ASLEX, _(u"Specificities and CA").decode('utf8'))
268 #text_menu.Append(ID_TEXTAFCM, u"AFC sur UCI / Vocabulaire")
269 menu_classiftxt = wx.Menu()
270 menu_classiftxt.Append(ID_TEXTREINERT, _(u"Reinert's Method").decode('utf8'))
271 #menu_classiftxt.Append(ID_TEXTPAM, u"Par matrice des distances")
272 text_menu.AppendMenu(-1, _(u"Clustering").decode('utf8'), menu_classiftxt)
273 text_menu.Append(ID_SimiTxt, _(u"Similarities Analysis").decode('utf8'))
275 text_menu.Append(ID_WC, _(u"WordCloud").decode('utf8'))
276 self.text_menu = text_menu
278 help_menu = wx.Menu()
279 help_menu.Append(wx.ID_ABOUT, _(u"About...").decode('utf8'))
280 help_menu.Append(wx.ID_HELP, _(u"Online help...").decode('utf8'))
282 self.mb.Append(file_menu, _(u"File").decode('utf8'))
283 self.mb.Append(edit_menu, _(u"Edition").decode('utf8'))
284 self.mb.Append(view_menu, _(u"View").decode('utf8'))
285 self.mb.Append(matrix_menu, _(u"Matrix analysis").decode('utf8'))
286 self.mb.Append(text_menu, _(u"Text analysis").decode('utf8'))
287 self.mb.Append(help_menu, _(u"Help").decode('utf8'))
289 self.SetMenuBar(self.mb)
290 #--------------------------------------------------------------------
291 self.statusbar = self.CreateStatusBar(2, wx.ST_SIZEGRIP)
292 self.statusbar.SetStatusWidths([-2, -3])
293 self.statusbar.SetStatusText(u"PrĂŞt", 0)
294 self.statusbar.SetStatusText(u"Bienvenue", 1)
296 # min size for the frame itself isn't completely done.
297 # see the end up FrameManager::Update() for the test
298 # code. For now, just hard code a frame minimum size
299 self.SetMinSize(wx.Size(400, 400))
301 # create some toolbars
302 tb1 = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
303 wx.TB_FLAT | wx.TB_NODIVIDER)
304 tb1.SetToolBitmapSize(wx.Size(16, 16))
305 tb1.AddLabelTool(ID_OpenData, "OpenData", wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN, wx.ART_OTHER, wx.Size(16, 16)), shortHelp="Questionnaire", longHelp="Ouvrir un questionnaire")
307 tb1.AddLabelTool(ID_OpenText, "OpenText", wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN, wx.ART_OTHER, wx.Size(16, 16)), shortHelp="Texte", longHelp="Ouvrir un corpus texte")
311 #------------------------------------------------------------------------------------------------
313 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)
315 #self._mgr.AddPane(self.text_ctrl_txt, wx.aui.AuiPaneInfo().
316 # Name("Text").CenterPane())
317 self._mgr.AddPane(self.text_ctrl_txt, aui.AuiPaneInfo().
318 Name("Text").CenterPane())
319 #self._mgr.AddPane(IntroPanel(self), wx.aui.AuiPaneInfo().Name("Intro_Text").
321 self._mgr.AddPane(IntroPanel(self), aui.AuiPaneInfo().Name("Intro_Text").
323 #if not os.path.exists(os.path.join(UserConfigPath, 'history.db')) :
324 # with open(os.path.join(UserConfigPath, 'history.db'), 'w') as f :
326 self.history = History(os.path.join(UserConfigPath, 'history.db'))
327 self.tree = LeftTree(self)
328 self._mgr.AddPane(self.tree, aui.AuiPaneInfo().Name("lefttree").Caption(_(u"Navigator").decode('utf8')).
329 Left().MinSize(wx.Size(200,500)).Layer(1).Position(1).CloseButton(False).MaximizeButton(True).
330 MinimizeButton(True))
332 #self.nb = wx.aui.AuiNotebook(self, -1, wx.DefaultPosition, wx.DefaultSize, wx.aui.AUI_NB_DEFAULT_STYLE | wx.aui.AUI_NB_TAB_EXTERNAL_MOVE | wx.aui.AUI_NB_TAB_MOVE | wx.aui.AUI_NB_TAB_FLOAT| wx.NO_BORDER)
333 self.nb = aui.AuiNotebook(self, -1, wx.DefaultPosition, wx.DefaultSize, aui.AUI_NB_DEFAULT_STYLE | aui.AUI_NB_TAB_EXTERNAL_MOVE | aui.AUI_NB_TAB_MOVE | aui.AUI_NB_TAB_FLOAT| wx.NO_BORDER)
334 notebook_flags = aui.AUI_NB_DEFAULT_STYLE | aui.AUI_NB_TAB_EXTERNAL_MOVE | aui.AUI_NB_TAB_MOVE | aui.AUI_NB_TAB_FLOAT| wx.NO_BORDER
335 self.nb.SetAGWWindowStyleFlag(notebook_flags)
336 self.nb.SetArtProvider(aui.ChromeTabArt())
337 #self.nb.SetArtProvider(aui.VC8TabArt())
338 #self.nb.parent = self
339 #self._notebook_style = aui.AUI_NB_DEFAULT_STYLE | aui.AUI_NB_TAB_EXTERNAL_MOVE | wx.NO_BORDER
340 #self._mgr.AddPane(self.nb, wx.aui.AuiPaneInfo().
341 # Name("Tab_content").
343 self._mgr.AddPane(self.nb, aui.AuiPaneInfo().
347 #self._mgr.AddPane(self.Sheet, wx.aui.AuiPaneInfo().Name("Data").CenterPane())
348 #self._mgr.AddPane(self.Sheet, aui.AuiPaneInfo().Name("Data").CenterPane())
349 self.nb.Bind(aui.EVT_AUINOTEBOOK_PAGE_CLOSE, self.OnCloseTab)
350 self.nb.Bind(aui.EVT_AUINOTEBOOK_PAGE_CHANGED, self.OnPageChanged)
351 # add the toolbars to the manager
353 #self._mgr.AddPane(tb1, wx.aui.AuiPaneInfo().
354 # Name("tb1").Caption("Fichiers").
355 # ToolbarPane().Top().
356 # LeftDockable(False).RightDockable(False))
357 self._mgr.AddPane(tb1, aui.AuiPaneInfo().
358 Name("tb1").Caption("Fichiers").
360 LeftDockable(True).RightDockable(False))
362 self.ShowAPane("Intro_Text")
363 self._mgr.GetPane("lefttree").Show()
364 self._mgr.GetPane("classif_tb").Hide()
365 # "commit" all changes made to FrameManager
368 # Show How To Use The Closing Panes Event
369 ##################################################################
370 self.Bind(wx.EVT_MENU, self.OnAcceuil, id=ID_ACCEUIL)
371 self.Bind(wx.EVT_MENU, self.OnViewData, id=ID_VIEWDATA)
372 self.Bind(wx.EVT_MENU, self.ShowTab, id=ID_RESULT)
373 self.Bind(wx.EVT_MENU, self.OnOpenData, id=ID_OpenData)
374 self.Bind(wx.EVT_MENU, self.OnOpenText, id=ID_OpenText)
375 self.Bind(wx.EVT_MENU, self.OnOpenAnalyse, id=ID_OnOpenAnalyse)
376 self.Bind(wx.EVT_MENU, self.import_factiva_xml, fact_from_xml)
377 self.Bind(wx.EVT_MENU, self.import_factiva_mail, fact_from_mail)
378 self.Bind(wx.EVT_MENU, self.import_factiva_txt, fact_from_txt)
379 self.Bind(wx.EVT_MENU, self.ExtractTools, splitvar)
380 self.Bind(wx.EVT_MENU, self.ExtractTools, extractmod)
381 self.Bind(wx.EVT_MENU, self.ExtractTools, extractthem)
382 self.Bind(wx.EVT_MENU, self.OnFreq, id=ID_Freq)
383 self.Bind(wx.EVT_MENU, self.OnChi2, id=ID_Chi2)
384 self.Bind(wx.EVT_MENU, self.OnStudent, id=ID_Student)
385 self.Bind(wx.EVT_MENU, self.OnCHDSIM, id=ID_CHDSIM)
386 self.Bind(wx.EVT_MENU, self.OnCHDReinert, id=ID_CHDReinert)
387 self.Bind(wx.EVT_MENU, self.OnAFCM, id=ID_AFCM)
388 self.Bind(wx.EVT_MENU, self.OnProto, id=ID_proto)
389 self.Bind(wx.EVT_MENU, self.OnRCode, id=ID_RCODE)
390 #self.Bind(wx.EVT_MENU, self.OnSplitVar, id=ID_SPLITVAR)
391 #self.Bind(wx.EVT_MENU, self.OnCheckcorpus, id = ID_CHECKCORPUS)
392 self.Bind(wx.EVT_MENU, self.OnTextStat, id=ID_TEXTSTAT)
393 self.Bind(wx.EVT_MENU, self.OnTextSpec, id=ID_ASLEX)
394 self.Bind(wx.EVT_MENU, self.OnTextAfcm, id=ID_TEXTAFCM)
395 self.Bind(wx.EVT_MENU, self.OnTextReinert, id=ID_TEXTREINERT)
396 self.Bind(wx.EVT_MENU, self.OnPamSimple, id=ID_TEXTPAM)
397 self.Bind(wx.EVT_MENU, self.OnSimiTxt, id=ID_SimiTxt)
398 self.Bind(wx.EVT_MENU, self.OnWordCloud, id=ID_WC)
399 self.Bind(wx.EVT_MENU, self.OnSimiTab, id=ID_SIMI)
400 self.Bind(wx.EVT_MENU, self.OnExit, id=wx.ID_EXIT)
401 #self.Bind(wx.EVT_MENU, self.OnSaveTabAs, id=ID_SaveTab)
402 self.Bind(wx.EVT_MENU, self.OnAbout, id=wx.ID_ABOUT)
403 self.Bind(wx.EVT_MENU, self.OnHelp, id=wx.ID_HELP)
404 self.Bind(wx.EVT_MENU, self.OnPref, id=wx.ID_PREFERENCES)
405 self.Bind(wx.EVT_MENU, self.OnImportTXM, id=ID_ImportTXM)
406 self.Bind(wx.EVT_CLOSE, self.OnClose)
407 ##################################################################
408 flags = self._mgr.GetAGWFlags()
409 #flags &= ~wx.aui.AUI_MGR_TRANSPARENT_HINT
410 #flags &= ~wx.aui.AUI_MGR_VENETIAN_BLINDS_HINT
411 #flags &= ~wx.aui.AUI_MGR_RECTANGLE_HINT
412 flags &= ~(aui.AUI_MGR_RECTANGLE_HINT | aui.AUI_MGR_ALLOW_FLOATING)
413 self._mgr.SetAGWFlags(self._mgr.GetAGWFlags() ^ (aui.AUI_MGR_RECTANGLE_HINT | aui.AUI_MGR_ALLOW_FLOATING))
414 self._mgr.GetArtProvider().SetMetric(aui.AUI_DOCKART_GRADIENT_TYPE, aui.AUI_GRADIENT_HORIZONTAL)
415 self.GetDockArt().SetColor(aui.AUI_DOCKART_ACTIVE_CAPTION_GRADIENT_COLOUR, "#00FFF9")
418 self._icon = wx.Icon(os.path.join(ImagePath, "iraicone.ico"), wx.BITMAP_TYPE_ICO)
419 self.SetIcon(self._icon)
420 ##########################
422 self.input_path = [False]
423 self.TEMPDIR = tempfile.mkdtemp('iramuteq')
424 self.FileTabList = []
430 self.g_header = False
437 self.SysEncoding = sys.getdefaultencoding()
438 self.syscoding = sys.getdefaultencoding()
439 #print 'SysEncoding',self.SysEncoding
440 if self.SysEncoding == 'mac-roman' : self.SysEncoding = 'MacRoman'
443 ##############################################################@
444 self.DisEnSaveTabAs(False)
445 self.ShowMenu(_("View").decode('utf8'), False)
446 self.ShowMenu(_("Matrix analysis").decode('utf8'), False)
447 self.ShowMenu(_("Text analysis").decode('utf8'), False)
458 def finish_init(self) :
460 self.pref.read(self.ConfigPath['preferences'])
463 self.pref.read(self.ConfigPath['preferences'])
470 self.pref.read(self.ConfigPath['preferences'])
472 self.sound = self.pref.getboolean('iramuteq', 'sound')
473 self.check_update = self.pref.getboolean('iramuteq', 'checkupdate')
474 self.version = ConfigGlob.get('DEFAULT', 'version')
475 #configuration des chemins de R
476 self.PathPath = ConfigParser()
477 self.PathPath.read(ConfigPath['path'])
479 if not CheckRPath(self.PathPath) :
480 if sys.platform == 'win32':
481 BestRPath = FindRPAthWin32()
483 BestRPath = FindRPathNix()
485 self.PathPath.set('PATHS', 'rpath', BestRPath)
486 with open(ConfigPath['path'], 'w') as f :
487 self.PathPath.write(f)
491 self.RPath = self.PathPath.get('PATHS', 'rpath')
494 if not RLibsAreInstalled(self) :
498 Le chemin de l'executable de R n'a pas été trouvé.
499 Si R n'est pas installé, vous devez l'installer (http://www.r-project.org/).
500 Si R n'est pas installé dans le répertoire par défaut
501 (souvent C:\Program Files\R\R-2.x.x\R.exe sous windows ou /usr/bin/R sous linux ou Mac Os X)
502 vous devez signaler le chemin de l'éxecutable de R dans les préférences."""
503 dlg = wx.MessageDialog(self, msg, u"Problème de configuration", wx.OK | wx.NO_DEFAULT | wx.ICON_WARNING)
505 if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
510 def setlangue(self) :
512 self.pref.read(self.ConfigPath['preferences'])
513 guilangue = self.pref.get('iramuteq', 'guilanguage')
514 if guilangue == 'french' :
515 self.presLan_fr.install()
517 self.presLan_en.install()
518 mylocale = wx.Locale(langues[guilangue])
519 mylocale.AddCatalogLookupPathPrefix(os.path.join(AppliPath,'locale'))
520 mylocale.AddCatalog('iramuteq')
522 self.presLan_fr.install()
523 mylocale = wx.Locale(langues['french'])
524 mylocale.AddCatalogLookupPathPrefix(os.path.join(AppliPath,'locale'))
525 mylocale.AddCatalog('iramuteq')
528 def OnVerif(self, evt) :
529 pack = CheckRPackages(self)
531 dlg = wx.MessageDialog(self, u"Installation OK", u"Installation", wx.OK | wx.ICON_INFORMATION)
533 if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
536 def DisEnSaveTabAs(self, DISEN):
538 file_menu = self.mb.GetMenu(0)
539 items = file_menu.GetMenuItems()
541 if item.GetId() == ID_SaveTab :
544 def ShowMenu(self, menu, Show=True):
545 menu_pos = self.mb.FindMenu(menu)
546 self.mb.EnableTop(menu_pos, Show)
547 self.mb.UpdateMenus()
550 #--------------------------------------------------------------------
551 def OnClose(self, event):
553 with open(self.ConfigPath['path'], 'w') as f :
554 self.PathPath.write(f)
559 def OnOpenData(self, event):
560 inputname, self.input_path = OnOpen(self, "Data")
562 #filename = self.input_path[0]
563 self.tableau = Tableau(self,os.path.abspath(self.input_path[0]))
564 val = get_table_param(self, self.input_path[0])
566 self.tableau.make_content()
567 OpenAnalyse(self, self.tableau.parametres)
568 self.tree.OnItemAppend(self.tableau.parametres)
569 #self.tableau.show_tab()
571 def OnOpenAnalyse(self, event):
572 self.AnalysePath = OnOpen(self, "Analyse")
573 OpenAnalyse(self, self.AnalysePath[1][0], True)
574 self.ShowMenu(_("View"))
576 def OnOpenText(self, event):
577 inputname, self.input_path = OnOpen(self, "Texte")
578 self.filename = self.input_path[0]
582 def OnViewData(self, event):
585 if self.type == "Data":
586 if not self.DataPop :
587 self.Sheet.Populate(self.content)
590 self.ShowAPane(u"Data")
591 elif self.type == "Texte" or self.type == 'Analyse' :
592 if not self.DataTxt :
593 self.text_ctrl_txt.Clear()
594 self.text_ctrl_txt.write(self.content)
595 self.text_ctrl_txt.ShowPosition(0)
598 self.ShowAPane(u"Text")
601 def OnSubText(self, corpus, parametres = None):
603 corpus = self.tree.getcorpus()
604 builder = SubBuilder(self, corpus, parametres)
605 if builder.res == wx.ID_OK :
606 busy = wx.BusyInfo(_("Please wait...").decode('utf8'), self)
608 corpus = builder.doanalyse()
609 self.history.add(corpus.parametres)
610 self.tree.OnItemAppend(corpus.parametres)
611 OpenAnalyse(self, corpus.parametres)
615 dlg = wx.ProgressDialog("Ouverture...",
616 "Veuillez patienter...",
619 style=wx.PD_APP_MODAL | wx.PD_AUTO_HIDE | wx.PD_ELAPSED_TIME | wx.PD_CAN_ABORT
622 builder = Builder(self, dlg)
623 if builder.res == wx.ID_OK :
625 corpus = builder.doanalyse()
626 self.history.add(corpus.parametres)
627 self.tree.OnItemAppend(corpus.parametres)
628 OpenAnalyse(self, corpus.parametres)
633 keepGoing = dlg.Update(count, u"Lecture du fichier")
634 self.ShowMenu(_(u"View").decode('utf8'))
635 self.ShowMenu(_(u"Text analysis").decode('utf8'))
636 self.ShowMenu(_(u"Matrix analysis").decode('utf8'), False)
641 keepGoing = dlg.Update(count, u"Chargement du dictionnaire")
643 #self.OnViewData(wx.EVT_BUTTON)
645 def OnExit(self, event):
648 def OnAbout(self, event):
649 info = wx.AboutDialogInfo()
650 info.Name = ConfigGlob.get('DEFAULT', 'name')
651 info.Version = ConfigGlob.get('DEFAULT', 'version')
652 info.Copyright = ConfigGlob.get('DEFAULT', 'copyright')
653 info.Description = u"""
654 Interface de R pour les Analyses Multidimensionnelles
655 de Textes et de Questionnaires
658 construit avec des logiciels libres.
664 info.WebSite = ("http://www.iramuteq.org", u"Site web IRaMuTeQ")
665 dev = ConfigGlob.get('DEFAULT', 'dev').decode('utf8').split(';')
666 info.Developers = dev
667 info.License = u"""Iramuteq est un logiciel libre ; vous pouvez le diffuser et/ou le modifier
668 suivant les termes de la Licence Publique Générale GNU telle que publiée
669 par la Free Software Foundation ; soit la version 2 de cette licence,
670 soit (à votre convenance) une version ultérieure.
672 Iramuteq est diffusé dans l'espoir qu'il sera utile,
673 mais SANS AUCUNE GARANTIEÂ ; sans mĂŞme une garantie implicite
674 de COMMERCIALISATION ou d'ADÉQUATION À UN USAGE PARTICULIER.
675 Voyez la Licence Publique Générale GNU pour plus de détails.
677 Vous devriez avoir reçu une copie de la Licence Publique Générale GNU
678 avec Iramuteq ; sinon, veuillez écrire à la Free Software Foundation,
679 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
682 def GetDockArt(self):
683 return self._mgr.GetArtProvider()
688 def OnPageChanged(self, event) :
689 new = event.GetSelection()
690 nobject = event.GetEventObject()
691 parent = nobject.GetParent()
692 if isinstance(parent, IraFrame) :
693 npage = self.nb.GetPage(new)
694 if 'parametres' in dir(npage) :
695 self.tree.GiveFocus(uuid=npage.parametres['uuid'])
696 if npage.parametres.get('matrix', False) :
697 self.ShowMenu(_(u"Text analysis").decode('utf8'), False)
698 self.ShowMenu(_(u"Matrix analysis").decode('utf8'), True)
699 elif npage.parametres.get('corpus', False) :
700 self.ShowMenu(_(u"Text analysis").decode('utf8'))
701 self.ShowMenu(_(u"Matrix analysis").decode('utf8'), False)
703 def OnCloseTab(self, evt):
704 #log.info('Closing tab %s' % str(evt.GetEventObject()))
705 ctrl = evt.GetEventObject()
706 if isinstance(ctrl.GetParent(), aui.AuiNotebook) or isinstance(ctrl.GetParent(), wx.Panel):
710 page = self.nb.GetPage(self.nb.GetSelection())
711 if 'parametres' in dir(page) and isinstance(ctrl.GetParent(), IraFrame) :
712 self.history.rmtab(page.parametres)
713 self.tree.CloseItem(uuid = page.parametres['uuid'])
714 TabTitle = self.nb.GetPageText(self.nb.GetSelection())
715 # if self.DictTab != {} :
716 # if TabTitle in self.DictTab :
717 # ListFile=self.DictTab[TabTitle]
718 # if False in ListFile:
720 # Certains résultats ne sont pas enregistrer.
721 # Voulez-vous fermer quand mĂŞme ?"""
722 # dlg = wx.MessageDialog(self, msg, "Sauvegarde",wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
724 # dlg.CenterOnParent()
725 # if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
730 # for f in ListFile[1:] :
735 # elif True in ListFile :
738 # del self.DictTab[TabTitle]
740 # self.LastTabClose()
743 if self.nb.GetPageCount() == 1 and not notebook :
746 def LastTabClose(self) :
747 if self.nb.GetPageCount() == 1 :
748 #self.DisEnSaveTabAs(False)
750 self.ShowAPane("Text")
752 self.ShowAPane("Data")
754 self.ShowAPane("Intro_Text")
756 # def OnSaveTabAs(self, event):
757 # SelectTab = self.nb.GetSelection()
758 # TabTitle = self.nb.GetPageText(SelectTab)
759 # FileToSave = self.DictTab[TabTitle]
761 # dlg = wx.FileDialog(
762 # self, message="Enregistrer sous...", defaultDir=os.getcwd(),
763 # defaultFile="resultat.html", wildcard="Tous les fichiers|*", style=wx.SAVE | wx.OVERWRITE_PROMPT
765 # dlg.SetFilterIndex(2)
766 # dlg.CenterOnParent()
768 # if dlg.ShowModal() == wx.ID_OK:
769 # Path = dlg.GetPath()
770 # Dirname = os.path.dirname(Path)
771 # Filename = dlg.GetFilename()
776 # shutil.copyfile(FileToSave[-1], Path)
777 # os.remove(FileToSave[len(FileToSave) - 1])
778 # NewListFile.append(True)
779 # NewListFile.append(Path)
780 # for f in FileToSave[1:-1] :
781 # Fileout = os.path.join(Dirname, os.path.basename(f))
782 # shutil.copyfile(f, Fileout)
783 # NewListFile.append(Fileout)
786 # self.DictTab[TabText] = NewListFile
787 # del self.DictTab[TabTitle]
788 # self.nb.SetPageText(SelectTab, TabText)
790 def GetStartPosition(self):
794 pt = self.ClientToScreen(wx.Point(0, 0))
796 return wx.Point(pt.x + x, pt.y + x)
798 def ShowAPane(self, panel):
799 for pane in self._mgr.GetAllPanes() :
800 if not pane.IsToolbar() and pane.name != 'lefttree':
802 self._mgr.GetPane(panel).Show()
805 def OnAcceuil(self, event):
806 self.ShowAPane(u"Intro_Text")
809 def CreateHTMLCtrl(self):
810 ctrl = wx.html.HtmlWindow(self, -1, wx.DefaultPosition, wx.Size(400, 300))
811 if "gtk2" in wx.PlatformInfo:
812 ctrl.SetStandardFonts()
813 ctrl.SetPage(u"text")
816 def ShowTab(self, evt):
817 self.ShowAPane("Tab_content")
819 ################################################################
821 ################################################################
822 def analyse_matrix(self, analyse, analyse_type = '', matrix = None, dlgnb = 1):
824 matrix = self.tree.getmatrix()
826 analyse(self, matrix, parametres = {'type' : analyse_type}, dlg = progressbar(self, dlgnb))
830 def OnFreq(self, event, matrix = None):
831 self.analyse_matrix(Frequences, analyse_type = 'freq', matrix = matrix, dlgnb = 3)
833 # matrix = self.tree.getmatrix()
835 # Frequences(self, matrix, parametres = {'type' : 'freq'}, dlg = progressbar(self, 3))
839 def OnChi2(self, event, matrix = None):
841 self.analyse_matrix(ChiSquare, matrix = matrix, analyse_type = 'chi2', dlgnb = 3)
845 def OnSimiTab(self, event, matrix = None):
847 matrix = self.tree.getmatrix()
849 DoSimi(self, matrix, parametres = {'type' : 'simimatrix'}, dlg = progressbar(self, 3))
853 def OnCHDReinert(self, event, matrix = None):
855 matrix = self.tree.getmatrix()
856 AnalyseQuest(self, matrix, parametres = {'type' : 'reinertmatrix'}, dlg = progressbar(self, 3))
858 def OnStudent(self, event):
864 def OnRCode(self, event):
870 def OnCHDSIM(self, event):
872 # print 'ATTENTION!!!!'
873 chdsim = ChdCluster(self)
874 if chdsim.val == wx.ID_OK:
879 # def OnCHDReinert(self, event):
881 # # print('PLUS DE BUG SUR ALCESTE QUESTIONNAIRE')
882 # self.quest = AnalyseQuest(self)
883 # if self.quest.val == wx.ID_OK:
888 def OnProto(self, evt, matrix = None) :
889 self.analyse_matrix(Prototypical, matrix = matrix, analyse_type = 'proto', dlgnb = 3)
890 #Prototypical(self, {'type' : 'proto'})
892 def OnSplitVar(self, evt, matrix = None):
893 self.analyse_matrix(SplitMatrixFromVar, matrix = matrix, analyse_type = 'splitvar', dlgnb = 3)
894 matrix = self.tree.getmatrix()
897 def OnSimiTxt(self, evt, corpus = None) :
898 # print 'PLUS DE BUG SUR SIMITXT'
900 #self.Text = SimiTxt(self)
902 corpus = self.tree.getcorpus()
903 self.Text = SimiTxt(self, corpus, parametres = {'type': 'simitxt'}, dlg = 3)
904 if self.Text.val == wx.ID_OK :
909 def OnWordCloud(self, evt, corpus = None) :
910 # print 'PLUS DE BUG SUR WORDCLOUD'
913 corpus = self.tree.getcorpus()
914 self.Text = WordCloud(self, corpus, parametres = {'type' : 'wordcloud'}, dlg = 3)
915 if self.Text.val == wx.ID_OK :
920 def OnClusterCloud(self, corpus, parametres = None) :
921 self.Text = ClusterCloud(self, corpus, parametres = parametres, dlg = 3)
923 def OnAFCM(self, event):
929 def OnTextStat(self, event, corpus = None):
930 #print 'PAS DE BUG SUR TEXT STAT'
933 corpus = self.tree.getcorpus()
934 self.Text = Stat(self, corpus, parametres = {'type': 'stat'}, dlg = 7)
936 if self.Text.val == wx.ID_OK :
941 def OnTextSpec(self, event, corpus = None):
943 #self.Text = AsLexico(self)
944 #print('ATTENTION : PLUS DE BUG SUR LEXICO')
946 corpus = self.tree.getcorpus()
947 self.Text = Lexico(self, corpus, parametres = {'type' : 'spec'}, dlg = 3)
948 if self.Text.val == wx.ID_OK :
953 def OnTextAfcm(self, event):
960 def import_factiva_xml(self,event):
962 ImportFactiva(self, 'xml')
966 def import_factiva_mail(self, evt) :
968 ImportFactiva(self, 'mail')
972 def import_factiva_txt(self, evt) :
974 ImportFactiva(self, 'txt')
978 def OnImportTXM(self, evt) :
980 ImportFactiva(self, 'txm')
984 def ExtractTools(self, evt) :
986 if ID == self.ID_splitvar :
987 Extract(self, 'splitvar')
988 elif ID == self.ID_extractmod :
989 Extract(self, 'mods')
990 elif ID == self.ID_extractthem :
991 Extract(self, 'them')
993 def OnTextReinert(self, event, corpus = None):
995 #print('ATTENTION : PLUS DE BUG SUR ALCESTE')
996 #RunAnalyse(self, corpus, Alceste, OptAlceste)
998 corpus = self.tree.getcorpus()
999 self.Text = Reinert(self, corpus, parametres = {'type': 'alceste'}, dlg = 6)
1000 if self.Text.val == wx.ID_OK:
1005 def OnPamSimple(self, event, corpus = None):
1008 corpus = self.tree.getcorpus()
1009 self.Text = AnalysePam(self, corpus, parametres = {'type' : 'pamtxt'}, dlg = 6)
1010 if self.Text.val == wx.ID_OK:
1015 def SimiCluster(self, parametres = {}, fromprof = False, pathout = '', listactives = [], actives = [], tableau = None) :
1016 DoSimi(self, param = parametres, fromprof = fromprof, listactives = listactives, actives = actives, tableau = tableau)
1018 # def OnSimi(self,evt):
1020 #print 'ATTENTION !!!! VERGES'
1021 #print 'PLUS DE BUG SUR SIMI'
1022 # self.res = DoSimi(self, param = None)
1023 #self.res = Verges(self)
1024 # if self.res.val == wx.ID_OK :
1028 #################################################################
1030 def OnHelp(self, event):
1031 webbrowser.open('http://www.iramuteq.org/documentation')
1033 def OnPref(self, event):
1034 dlg = PrefDialog(self)
1035 dlg.CenterOnParent()
1036 self.val = dlg.ShowModal()
1039 if self.check_update:
1042 print 'pas de verif'
1044 #CheckRPackages(self)
1046 def OnOpenFromCmdl(self):
1048 if options.filename :
1049 if os.path.exists(options.filename):
1050 self.filename = os.path.abspath(options.filename)
1054 if os.path.exists(os.path.realpath(args[0])):
1055 self.filename = os.path.abspath(os.path.realpath(args[0]))
1061 if os.path.splitext(self.filename)[1] in ['.csv', '.xls', '.ods']:
1062 self.tableau = Tableau(self, self.filename)
1063 val = get_table_param(self, self.filename)
1064 if val == wx.ID_OK :
1065 self.tableau.make_content()
1066 OpenAnalyse(self, self.tableau.parametres)
1067 self.tree.OnItemAppend(self.tableau.parametres)
1068 #get_table_param(self, self.filename)
1069 #self.tableau.make_content()
1070 #self.tableau.show_tab()
1071 #open_data(self, self.filename)
1072 elif os.path.splitext(self.filename)[1] == '.txt':
1074 elif os.path.splitext(self.filename)[1] == '.ira' :
1075 #self.corpus = Corpus(self)
1076 #self.Text = OpenAnalyse(self, self.filename)
1077 OpenAnalyse(self, self.filename)
1079 print 'ce fichier n\'existe pas'
1083 class IntroPanel(wx.Panel):
1084 def __init__(self, parent):
1085 wx.Panel.__init__(self, parent)
1086 col = randint(0, 255)
1087 col1 = randint(0,255)
1088 col2 = randint(0,255)
1090 bckgrdcolor = wx.Colour(col, col1, col2)
1091 self.SetBackgroundColour(bckgrdcolor)
1092 txtcolour = wx.Colour(250, 250, 250)
1093 linkcolor = wx.Colour(255, 0, 0)
1094 sizer1 = wx.BoxSizer(wx.VERTICAL)
1095 sizer2 = wx.BoxSizer(wx.VERTICAL)
1096 sizer3 = wx.BoxSizer(wx.HORIZONTAL)
1097 sizer4 = wx.BoxSizer(wx.VERTICAL)
1098 sizer5 = wx.BoxSizer(wx.HORIZONTAL)
1099 grid_sizer_1 = wx.FlexGridSizer(1, 4, 0, 0)
1100 grid_sizer_3 = wx.FlexGridSizer(1, 4, 0, 0)
1101 grid_sizer_2 = wx.FlexGridSizer(1, 3, 0, 0)
1102 PanelPres = wx.Panel(self)
1103 PanelPres.SetBackgroundColour(bckgrdcolor)
1104 label_1 = wx.StaticText(self, -1, u"IRaMuTeQ", size=(-1, -1))
1105 label_1.SetFont(wx.Font(46, wx.TELETYPE, wx.NORMAL, wx.BOLD, 0, "Purisa"))
1106 label_1.SetForegroundColour(wx.RED)
1107 label2 = wx.StaticText(PanelPres, -1 , u'\nVersion ' + ConfigGlob.get('DEFAULT', 'version') + '\n')
1108 label2.SetForegroundColour(txtcolour)
1109 label2.SetBackgroundColour(bckgrdcolor)
1110 #label3 = wx.StaticText(PanelPres, -1 , u'Equipe ')
1111 #label3.SetForegroundColour(txtcolour)
1112 #label3.SetBackgroundColour(bckgrdcolor)
1113 self.hyper2 = hl.HyperLinkCtrl(PanelPres, wx.ID_ANY, u"REPERE", URL="http://repere.no-ip.org/")
1114 self.hyper2.SetColours(linkcolor, linkcolor, "RED")
1115 self.hyper2.SetBackgroundColour(bckgrdcolor)
1116 self.hyper2.EnableRollover(True)
1117 self.hyper2.SetUnderlines(False, False, True)
1118 self.hyper2.SetBold(True)
1119 self.hyper2.UpdateLink()
1120 label_lerass = wx.StaticText(PanelPres, -1, u'Laboratoire ')
1121 label_lerass.SetForegroundColour(txtcolour)
1122 label_lerass.SetBackgroundColour(bckgrdcolor)
1123 self.hyper_lerass = hl.HyperLinkCtrl(PanelPres, -1, u'LERASS', URL="http://www.lerass.com")
1124 self.hyper_lerass.SetColours(linkcolor, linkcolor, "RED")
1125 self.hyper_lerass.SetBackgroundColour(bckgrdcolor)
1126 self.hyper_lerass.EnableRollover(True)
1127 self.hyper_lerass.SetUnderlines(False, False, True)
1128 self.hyper_lerass.SetBold(True)
1129 self.hyper_lerass.UpdateLink()
1130 blank = wx.StaticText(PanelPres, -1, u'\n')
1131 blank1 = wx.StaticText(PanelPres, -1, u'\n')
1132 labellicence = wx.StaticText(PanelPres, -1, _(u"License GNU GPL").decode('utf8'))
1133 labellicence.SetForegroundColour(txtcolour)
1134 labellicence.SetBackgroundColour(bckgrdcolor)
1135 labelcopy = wx.StaticText(PanelPres, -1, ConfigGlob.get('DEFAULT', 'copyright'))
1136 labelcopy.SetForegroundColour(txtcolour)
1137 labelcopy.SetBackgroundColour(bckgrdcolor)
1138 python_img = wx.Image(os.path.join(ImagePath,'python-logo.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
1139 r_img = wx.Image(os.path.join(ImagePath,'Rlogo.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
1140 lexique_img = wx.Image(os.path.join(ImagePath,'LexTexte4.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
1141 but_python = wx.BitmapButton(self, -1, python_img)
1142 but_lexique = wx.BitmapButton(self, -1, lexique_img)
1143 but_r = wx.BitmapButton(self, -1, r_img)
1144 self.Bind(wx.EVT_BUTTON, self.OnPython, but_python)
1145 self.Bind(wx.EVT_BUTTON, self.OnLexique, but_lexique)
1146 self.Bind(wx.EVT_BUTTON, self.OnR, but_r)
1149 #grid_sizer_1.Add(label3, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1150 grid_sizer_1.Add(self.hyper2, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1151 grid_sizer_3.Add(label_lerass, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1152 grid_sizer_3.Add(self.hyper_lerass, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1153 sizer4.Add(label_1, 0, wx.ALIGN_CENTER, 5)
1154 sizer2.Add(label2, 0, wx.ALIGN_CENTER, 5)
1155 #sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1156 sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1157 sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1158 sizer2.Add(grid_sizer_3, 0, wx.ALIGN_CENTER, 5)
1159 sizer2.Add(wx.StaticText(PanelPres, -1, u' '), 0, wx.ALIGN_CENTER, 5)
1160 #sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1161 #sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1162 sizer2.Add(grid_sizer_1, 0, wx.ALIGN_CENTER, 5)
1163 sizer2.Add(labellicence, 0, wx.ALIGN_CENTER, 5)
1164 sizer2.Add(labelcopy, 0, wx.ALIGN_CENTER, 5)
1165 sizer1.Add(sizer4, 1, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1166 PanelPres.SetSizer(sizer2)
1167 sizer5.Add(blank, 1, wx.EXPAND | wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 2)
1168 sizer5.Add(PanelPres, 1, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1169 sizer5.Add(blank1, 1, wx.ALIGN_CENTER_HORIZONTAL,2)
1170 grid_sizer_2.Add(but_python, 1, wx.ALIGN_CENTER_HORIZONTAL| wx.ALIGN_CENTER_VERTICAL)
1171 grid_sizer_2.Add(but_lexique, 1,wx.ALIGN_CENTER_HORIZONTAL| wx.ALIGN_CENTER_VERTICAL)
1172 grid_sizer_2.Add(but_r, 1, wx.ALIGN_CENTER_HORIZONTAL| wx.ALIGN_CENTER_VERTICAL)
1174 sizer1.Add(sizer5, 3, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 1)
1175 sizer1.Add(grid_sizer_2, 1, wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL)
1176 self.SetSizer(sizer1)
1179 def OnPython(self,evt):
1180 webbrowser.open('http://www.python.org')
1182 def OnLexique(self,evt):
1183 webbrowser.open('http://www.lexique.org')
1186 webbrowser.open('http://www.r-project.org')
1188 class MySplashScreen(wx.SplashScreen):
1190 bmp = wx.Image(os.path.join(ImagePath, 'splash.png')).ConvertToBitmap()
1191 wx.SplashScreen.__init__(self, bmp,
1192 wx.SPLASH_CENTRE_ON_SCREEN | wx.SPLASH_TIMEOUT,
1194 self.Bind(wx.EVT_CLOSE, self.OnClose)
1195 self.fc = wx.FutureCall(1, self.ShowMain)
1197 def OnClose(self, evt):
1201 if self.fc.IsRunning():
1206 displaySize = wx.DisplaySize()
1207 w = displaySize[0]/1.2
1208 h = displaySize[1]/1.2
1209 frame = IraFrame(None, -1, "IRaMuTeQ " + ConfigGlob.get('DEFAULT', 'version'), size=(w, h))
1213 frame.OnOpenFromCmdl()
1214 # if self.fc.IsRunning():
1216 #wx.CallAfter(frame.ShowTip)
1218 class MyApp(wx.App):
1221 Create and show the splash screen. It will then create and show
1222 the main frame when it is time to do so.
1224 wx.SystemOptions.SetOptionInt("mac.window-plain-transition", 1)
1225 self.SetAppName("Iramuteq")
1226 splash = MySplashScreen()
1234 if __name__ == '__main__':