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 busy = wx.BusyInfo(_("Please wait...").decode('utf8'), self)
606 builder = SubBuilder(self, corpus, parametres)
608 if builder.res == wx.ID_OK :
609 corpus = builder.doanalyse()
610 print corpus.parametres['uuid']
611 self.history.add(corpus.parametres)
612 self.tree.OnItemAppend(corpus.parametres)
613 OpenAnalyse(self, corpus.parametres)
616 dlg = wx.ProgressDialog("Ouverture...",
617 "Veuillez patienter...",
620 style=wx.PD_APP_MODAL | wx.PD_AUTO_HIDE | wx.PD_ELAPSED_TIME | wx.PD_CAN_ABORT
623 builder = Builder(self, dlg)
624 if builder.res == wx.ID_OK :
626 corpus = builder.doanalyse()
627 self.history.add(corpus.parametres)
628 self.tree.OnItemAppend(corpus.parametres)
629 OpenAnalyse(self, corpus.parametres)
634 keepGoing = dlg.Update(count, u"Lecture du fichier")
635 self.ShowMenu(_(u"View").decode('utf8'))
636 self.ShowMenu(_(u"Text analysis").decode('utf8'))
637 self.ShowMenu(_(u"Matrix analysis").decode('utf8'), False)
642 keepGoing = dlg.Update(count, u"Chargement du dictionnaire")
644 #self.OnViewData(wx.EVT_BUTTON)
646 def OnExit(self, event):
649 def OnAbout(self, event):
650 info = wx.AboutDialogInfo()
651 info.Name = ConfigGlob.get('DEFAULT', 'name')
652 info.Version = ConfigGlob.get('DEFAULT', 'version')
653 info.Copyright = ConfigGlob.get('DEFAULT', 'copyright')
654 info.Description = u"""
655 Interface de R pour les Analyses Multidimensionnelles
656 de Textes et de Questionnaires
659 construit avec des logiciels libres.
665 info.WebSite = ("http://www.iramuteq.org", u"Site web IRaMuTeQ")
666 dev = ConfigGlob.get('DEFAULT', 'dev').decode('utf8').split(';')
667 info.Developers = dev
668 info.License = u"""Iramuteq est un logiciel libre ; vous pouvez le diffuser et/ou le modifier
669 suivant les termes de la Licence Publique Générale GNU telle que publiée
670 par la Free Software Foundation ; soit la version 2 de cette licence,
671 soit (à votre convenance) une version ultérieure.
673 Iramuteq est diffusé dans l'espoir qu'il sera utile,
674 mais SANS AUCUNE GARANTIEÂ ; sans mĂŞme une garantie implicite
675 de COMMERCIALISATION ou d'ADÉQUATION À UN USAGE PARTICULIER.
676 Voyez la Licence Publique Générale GNU pour plus de détails.
678 Vous devriez avoir reçu une copie de la Licence Publique Générale GNU
679 avec Iramuteq ; sinon, veuillez écrire à la Free Software Foundation,
680 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
683 def GetDockArt(self):
684 return self._mgr.GetArtProvider()
689 def OnPageChanged(self, event) :
690 new = event.GetSelection()
691 nobject = event.GetEventObject()
692 parent = nobject.GetParent()
693 if isinstance(parent, IraFrame) :
694 npage = self.nb.GetPage(new)
695 if 'parametres' in dir(npage) :
696 self.tree.GiveFocus(uuid=npage.parametres['uuid'])
697 if npage.parametres.get('matrix', False) :
698 self.ShowMenu(_(u"Text analysis").decode('utf8'), False)
699 self.ShowMenu(_(u"Matrix analysis").decode('utf8'), True)
700 elif npage.parametres.get('corpus', False) :
701 self.ShowMenu(_(u"Text analysis").decode('utf8'))
702 self.ShowMenu(_(u"Matrix analysis").decode('utf8'), False)
704 def OnCloseTab(self, evt):
705 #log.info('Closing tab %s' % str(evt.GetEventObject()))
706 ctrl = evt.GetEventObject()
707 if isinstance(ctrl.GetParent(), aui.AuiNotebook) or isinstance(ctrl.GetParent(), wx.Panel):
711 page = self.nb.GetPage(self.nb.GetSelection())
712 if 'parametres' in dir(page) and isinstance(ctrl.GetParent(), IraFrame) :
713 self.history.rmtab(page.parametres)
714 self.tree.CloseItem(uuid = page.parametres['uuid'])
715 TabTitle = self.nb.GetPageText(self.nb.GetSelection())
716 # if self.DictTab != {} :
717 # if TabTitle in self.DictTab :
718 # ListFile=self.DictTab[TabTitle]
719 # if False in ListFile:
721 # Certains résultats ne sont pas enregistrer.
722 # Voulez-vous fermer quand mĂŞme ?"""
723 # dlg = wx.MessageDialog(self, msg, "Sauvegarde",wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
725 # dlg.CenterOnParent()
726 # if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
731 # for f in ListFile[1:] :
736 # elif True in ListFile :
739 # del self.DictTab[TabTitle]
741 # self.LastTabClose()
744 if self.nb.GetPageCount() == 1 and not notebook :
747 def LastTabClose(self) :
748 if self.nb.GetPageCount() == 1 :
749 #self.DisEnSaveTabAs(False)
751 self.ShowAPane("Text")
753 self.ShowAPane("Data")
755 self.ShowAPane("Intro_Text")
757 # def OnSaveTabAs(self, event):
758 # SelectTab = self.nb.GetSelection()
759 # TabTitle = self.nb.GetPageText(SelectTab)
760 # FileToSave = self.DictTab[TabTitle]
762 # dlg = wx.FileDialog(
763 # self, message="Enregistrer sous...", defaultDir=os.getcwd(),
764 # defaultFile="resultat.html", wildcard="Tous les fichiers|*", style=wx.SAVE | wx.OVERWRITE_PROMPT
766 # dlg.SetFilterIndex(2)
767 # dlg.CenterOnParent()
769 # if dlg.ShowModal() == wx.ID_OK:
770 # Path = dlg.GetPath()
771 # Dirname = os.path.dirname(Path)
772 # Filename = dlg.GetFilename()
777 # shutil.copyfile(FileToSave[-1], Path)
778 # os.remove(FileToSave[len(FileToSave) - 1])
779 # NewListFile.append(True)
780 # NewListFile.append(Path)
781 # for f in FileToSave[1:-1] :
782 # Fileout = os.path.join(Dirname, os.path.basename(f))
783 # shutil.copyfile(f, Fileout)
784 # NewListFile.append(Fileout)
787 # self.DictTab[TabText] = NewListFile
788 # del self.DictTab[TabTitle]
789 # self.nb.SetPageText(SelectTab, TabText)
791 def GetStartPosition(self):
795 pt = self.ClientToScreen(wx.Point(0, 0))
797 return wx.Point(pt.x + x, pt.y + x)
799 def ShowAPane(self, panel):
800 for pane in self._mgr.GetAllPanes() :
801 if not pane.IsToolbar() and pane.name != 'lefttree':
803 self._mgr.GetPane(panel).Show()
806 def OnAcceuil(self, event):
807 self.ShowAPane(u"Intro_Text")
810 def CreateHTMLCtrl(self):
811 ctrl = wx.html.HtmlWindow(self, -1, wx.DefaultPosition, wx.Size(400, 300))
812 if "gtk2" in wx.PlatformInfo:
813 ctrl.SetStandardFonts()
814 ctrl.SetPage(u"text")
817 def ShowTab(self, evt):
818 self.ShowAPane("Tab_content")
820 ################################################################
822 ################################################################
823 def analyse_matrix(self, analyse, analyse_type = '', matrix = None, dlgnb = 1):
825 matrix = self.tree.getmatrix()
827 analyse(self, matrix, parametres = {'type' : analyse_type}, dlg = progressbar(self, dlgnb))
831 def OnFreq(self, event, matrix = None):
832 self.analyse_matrix(Frequences, analyse_type = 'freq', matrix = matrix, dlgnb = 3)
834 # matrix = self.tree.getmatrix()
836 # Frequences(self, matrix, parametres = {'type' : 'freq'}, dlg = progressbar(self, 3))
840 def OnChi2(self, event, matrix = None):
842 self.analyse_matrix(ChiSquare, matrix = matrix, analyse_type = 'chi2', dlgnb = 3)
846 def OnSimiTab(self, event, matrix = None):
848 matrix = self.tree.getmatrix()
850 DoSimi(self, matrix, parametres = {'type' : 'simimatrix'}, dlg = progressbar(self, 3))
854 def OnCHDReinert(self, event, matrix = None):
856 matrix = self.tree.getmatrix()
857 AnalyseQuest(self, matrix, parametres = {'type' : 'reinertmatrix'}, dlg = progressbar(self, 3))
859 def OnStudent(self, event):
865 def OnRCode(self, event):
871 def OnCHDSIM(self, event):
873 # print 'ATTENTION!!!!'
874 chdsim = ChdCluster(self)
875 if chdsim.val == wx.ID_OK:
880 # def OnCHDReinert(self, event):
882 # # print('PLUS DE BUG SUR ALCESTE QUESTIONNAIRE')
883 # self.quest = AnalyseQuest(self)
884 # if self.quest.val == wx.ID_OK:
889 def OnProto(self, evt, matrix = None) :
890 self.analyse_matrix(Prototypical, matrix = matrix, analyse_type = 'proto', dlgnb = 3)
891 #Prototypical(self, {'type' : 'proto'})
893 def OnSplitVar(self, evt, matrix = None):
894 self.analyse_matrix(SplitMatrixFromVar, matrix = matrix, analyse_type = 'splitvar', dlgnb = 3)
895 matrix = self.tree.getmatrix()
898 def OnSimiTxt(self, evt, corpus = None) :
899 # print 'PLUS DE BUG SUR SIMITXT'
901 #self.Text = SimiTxt(self)
903 corpus = self.tree.getcorpus()
904 self.Text = SimiTxt(self, corpus, parametres = {'type': 'simitxt'}, dlg = progressbar(self, 3))
905 if self.Text.val == wx.ID_OK :
910 def OnWordCloud(self, evt, corpus = None) :
911 # print 'PLUS DE BUG SUR WORDCLOUD'
914 corpus = self.tree.getcorpus()
915 self.Text = WordCloud(self, corpus, parametres = {'type' : 'wordcloud'}, dlg = progressbar(self, 3))
916 if self.Text.val == wx.ID_OK :
921 def OnClusterCloud(self, corpus, parametres = None) :
922 self.Text = ClusterCloud(self, corpus, parametres = parametres, dlg = progressbar(self, 3))
924 def OnAFCM(self, event):
930 def OnTextStat(self, event, corpus = None):
931 #print 'PAS DE BUG SUR TEXT STAT'
934 corpus = self.tree.getcorpus()
935 self.Text = Stat(self, corpus, parametres = {'type': 'stat'}, dlg = progressbar(self, 7))
937 if self.Text.val == wx.ID_OK :
942 def OnTextSpec(self, event, corpus = None):
944 #self.Text = AsLexico(self)
945 #print('ATTENTION : PLUS DE BUG SUR LEXICO')
947 corpus = self.tree.getcorpus()
948 self.Text = Lexico(self, corpus, parametres = {'type' : 'spec'}, dlg = progressbar(self, 3))
949 if self.Text.val == wx.ID_OK :
954 def OnTextAfcm(self, event):
961 def import_factiva_xml(self,event):
963 ImportFactiva(self, 'xml')
967 def import_factiva_mail(self, evt) :
969 ImportFactiva(self, 'mail')
973 def import_factiva_txt(self, evt) :
975 ImportFactiva(self, 'txt')
979 def OnImportTXM(self, evt) :
981 ImportFactiva(self, 'txm')
985 def ExtractTools(self, evt) :
987 if ID == self.ID_splitvar :
988 Extract(self, 'splitvar')
989 elif ID == self.ID_extractmod :
990 Extract(self, 'mods')
991 elif ID == self.ID_extractthem :
992 Extract(self, 'them')
994 def OnTextReinert(self, event, corpus = None):
996 #print('ATTENTION : PLUS DE BUG SUR ALCESTE')
997 #RunAnalyse(self, corpus, Alceste, OptAlceste)
999 corpus = self.tree.getcorpus()
1000 self.Text = Reinert(self, corpus, parametres = {'type': 'alceste'}, dlg = progressbar(self,6))
1001 if self.Text.val == wx.ID_OK:
1006 def OnPamSimple(self, event, corpus = None):
1009 corpus = self.tree.getcorpus()
1010 self.Text = AnalysePam(self, corpus, parametres = {'type' : 'pamtxt'}, dlg = progressbar(self,6))
1011 if self.Text.val == wx.ID_OK:
1016 def SimiCluster(self, parametres = {}, fromprof = False, pathout = '', listactives = [], actives = [], tableau = None) :
1017 DoSimi(self, param = parametres, fromprof = fromprof, listactives = listactives, actives = actives, tableau = tableau)
1019 # def OnSimi(self,evt):
1021 #print 'ATTENTION !!!! VERGES'
1022 #print 'PLUS DE BUG SUR SIMI'
1023 # self.res = DoSimi(self, param = None)
1024 #self.res = Verges(self)
1025 # if self.res.val == wx.ID_OK :
1029 #################################################################
1031 def OnHelp(self, event):
1032 webbrowser.open('http://www.iramuteq.org/documentation')
1034 def OnPref(self, event):
1035 dlg = PrefDialog(self)
1036 dlg.CenterOnParent()
1037 self.val = dlg.ShowModal()
1040 if self.check_update:
1043 print 'pas de verif'
1045 #CheckRPackages(self)
1047 def OnOpenFromCmdl(self):
1049 if options.filename :
1050 if os.path.exists(options.filename):
1051 self.filename = os.path.abspath(options.filename)
1055 if os.path.exists(os.path.realpath(args[0])):
1056 self.filename = os.path.abspath(os.path.realpath(args[0]))
1062 if os.path.splitext(self.filename)[1] in ['.csv', '.xls', '.ods']:
1063 self.tableau = Tableau(self, self.filename)
1064 val = get_table_param(self, self.filename)
1065 if val == wx.ID_OK :
1066 self.tableau.make_content()
1067 OpenAnalyse(self, self.tableau.parametres)
1068 self.tree.OnItemAppend(self.tableau.parametres)
1069 #get_table_param(self, self.filename)
1070 #self.tableau.make_content()
1071 #self.tableau.show_tab()
1072 #open_data(self, self.filename)
1073 elif os.path.splitext(self.filename)[1] == '.txt':
1075 elif os.path.splitext(self.filename)[1] == '.ira' :
1076 #self.corpus = Corpus(self)
1077 #self.Text = OpenAnalyse(self, self.filename)
1078 OpenAnalyse(self, self.filename)
1080 print 'ce fichier n\'existe pas'
1084 class IntroPanel(wx.Panel):
1085 def __init__(self, parent):
1086 wx.Panel.__init__(self, parent)
1087 col = randint(0, 255)
1088 col1 = randint(0,255)
1089 col2 = randint(0,255)
1091 bckgrdcolor = wx.Colour(col, col1, col2)
1092 self.SetBackgroundColour(bckgrdcolor)
1093 txtcolour = wx.Colour(250, 250, 250)
1094 linkcolor = wx.Colour(255, 0, 0)
1095 sizer1 = wx.BoxSizer(wx.VERTICAL)
1096 sizer2 = wx.BoxSizer(wx.VERTICAL)
1097 sizer3 = wx.BoxSizer(wx.HORIZONTAL)
1098 sizer4 = wx.BoxSizer(wx.VERTICAL)
1099 sizer5 = wx.BoxSizer(wx.HORIZONTAL)
1100 grid_sizer_1 = wx.FlexGridSizer(1, 4, 0, 0)
1101 grid_sizer_3 = wx.FlexGridSizer(1, 4, 0, 0)
1102 grid_sizer_2 = wx.FlexGridSizer(1, 3, 0, 0)
1103 PanelPres = wx.Panel(self)
1104 PanelPres.SetBackgroundColour(bckgrdcolor)
1105 label_1 = wx.StaticText(self, -1, u"IRaMuTeQ", size=(-1, -1))
1106 label_1.SetFont(wx.Font(46, wx.TELETYPE, wx.NORMAL, wx.BOLD, 0, "Purisa"))
1107 label_1.SetForegroundColour(wx.RED)
1108 label2 = wx.StaticText(PanelPres, -1 , u'\nVersion ' + ConfigGlob.get('DEFAULT', 'version') + '\n')
1109 label2.SetForegroundColour(txtcolour)
1110 label2.SetBackgroundColour(bckgrdcolor)
1111 #label3 = wx.StaticText(PanelPres, -1 , u'Equipe ')
1112 #label3.SetForegroundColour(txtcolour)
1113 #label3.SetBackgroundColour(bckgrdcolor)
1114 self.hyper2 = hl.HyperLinkCtrl(PanelPres, wx.ID_ANY, u"REPERE", URL="http://repere.no-ip.org/")
1115 self.hyper2.SetColours(linkcolor, linkcolor, "RED")
1116 self.hyper2.SetBackgroundColour(bckgrdcolor)
1117 self.hyper2.EnableRollover(True)
1118 self.hyper2.SetUnderlines(False, False, True)
1119 self.hyper2.SetBold(True)
1120 self.hyper2.UpdateLink()
1121 label_lerass = wx.StaticText(PanelPres, -1, u'Laboratoire ')
1122 label_lerass.SetForegroundColour(txtcolour)
1123 label_lerass.SetBackgroundColour(bckgrdcolor)
1124 self.hyper_lerass = hl.HyperLinkCtrl(PanelPres, -1, u'LERASS', URL="http://www.lerass.com")
1125 self.hyper_lerass.SetColours(linkcolor, linkcolor, "RED")
1126 self.hyper_lerass.SetBackgroundColour(bckgrdcolor)
1127 self.hyper_lerass.EnableRollover(True)
1128 self.hyper_lerass.SetUnderlines(False, False, True)
1129 self.hyper_lerass.SetBold(True)
1130 self.hyper_lerass.UpdateLink()
1131 blank = wx.StaticText(PanelPres, -1, u'\n')
1132 blank1 = wx.StaticText(PanelPres, -1, u'\n')
1133 labellicence = wx.StaticText(PanelPres, -1, _(u"License GNU GPL").decode('utf8'))
1134 labellicence.SetForegroundColour(txtcolour)
1135 labellicence.SetBackgroundColour(bckgrdcolor)
1136 labelcopy = wx.StaticText(PanelPres, -1, ConfigGlob.get('DEFAULT', 'copyright'))
1137 labelcopy.SetForegroundColour(txtcolour)
1138 labelcopy.SetBackgroundColour(bckgrdcolor)
1139 python_img = wx.Image(os.path.join(ImagePath,'python-logo.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
1140 r_img = wx.Image(os.path.join(ImagePath,'Rlogo.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
1141 lexique_img = wx.Image(os.path.join(ImagePath,'LexTexte4.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
1142 but_python = wx.BitmapButton(self, -1, python_img)
1143 but_lexique = wx.BitmapButton(self, -1, lexique_img)
1144 but_r = wx.BitmapButton(self, -1, r_img)
1145 self.Bind(wx.EVT_BUTTON, self.OnPython, but_python)
1146 self.Bind(wx.EVT_BUTTON, self.OnLexique, but_lexique)
1147 self.Bind(wx.EVT_BUTTON, self.OnR, but_r)
1150 #grid_sizer_1.Add(label3, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1151 grid_sizer_1.Add(self.hyper2, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1152 grid_sizer_3.Add(label_lerass, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1153 grid_sizer_3.Add(self.hyper_lerass, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1154 sizer4.Add(label_1, 0, wx.ALIGN_CENTER, 5)
1155 sizer2.Add(label2, 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(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1159 sizer2.Add(grid_sizer_3, 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(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1163 sizer2.Add(grid_sizer_1, 0, wx.ALIGN_CENTER, 5)
1164 sizer2.Add(labellicence, 0, wx.ALIGN_CENTER, 5)
1165 sizer2.Add(labelcopy, 0, wx.ALIGN_CENTER, 5)
1166 sizer1.Add(sizer4, 1, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1167 PanelPres.SetSizer(sizer2)
1168 sizer5.Add(blank, 1, wx.EXPAND | wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 2)
1169 sizer5.Add(PanelPres, 1, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1170 sizer5.Add(blank1, 1, wx.ALIGN_CENTER_HORIZONTAL,2)
1171 grid_sizer_2.Add(but_python, 1, wx.ALIGN_CENTER_HORIZONTAL| wx.ALIGN_CENTER_VERTICAL)
1172 grid_sizer_2.Add(but_lexique, 1,wx.ALIGN_CENTER_HORIZONTAL| wx.ALIGN_CENTER_VERTICAL)
1173 grid_sizer_2.Add(but_r, 1, wx.ALIGN_CENTER_HORIZONTAL| wx.ALIGN_CENTER_VERTICAL)
1175 sizer1.Add(sizer5, 3, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 1)
1176 sizer1.Add(grid_sizer_2, 1, wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL)
1177 self.SetSizer(sizer1)
1180 def OnPython(self,evt):
1181 webbrowser.open('http://www.python.org')
1183 def OnLexique(self,evt):
1184 webbrowser.open('http://www.lexique.org')
1187 webbrowser.open('http://www.r-project.org')
1189 class MySplashScreen(wx.SplashScreen):
1191 bmp = wx.Image(os.path.join(ImagePath, 'splash.png')).ConvertToBitmap()
1192 wx.SplashScreen.__init__(self, bmp,
1193 wx.SPLASH_CENTRE_ON_SCREEN | wx.SPLASH_TIMEOUT,
1195 self.Bind(wx.EVT_CLOSE, self.OnClose)
1196 self.fc = wx.FutureCall(1, self.ShowMain)
1198 def OnClose(self, evt):
1202 if self.fc.IsRunning():
1207 displaySize = wx.DisplaySize()
1208 w = displaySize[0]/1.2
1209 h = displaySize[1]/1.2
1210 frame = IraFrame(None, -1, "IRaMuTeQ " + ConfigGlob.get('DEFAULT', 'version'), size=(w, h))
1214 frame.OnOpenFromCmdl()
1215 # if self.fc.IsRunning():
1217 #wx.CallAfter(frame.ShowTip)
1219 class MyApp(wx.App):
1222 Create and show the splash screen. It will then create and show
1223 the main frame when it is time to do so.
1225 wx.SystemOptions.SetOptionInt("mac.window-plain-transition", 1)
1226 self.SetAppName("Iramuteq")
1227 splash = MySplashScreen()
1235 if __name__ == '__main__':