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()
20 from random import randint
21 from ConfigParser import ConfigParser, RawConfigParser
25 #------------------------------------
27 import wx.lib.agw.aui as aui
30 import wx.lib.hyperlink as hl
31 #------------------------------------
32 from functions import BugReport, PlaySound, History
33 from checkversion import NewVersion
34 from guifunct import *
35 from tableau import Tableau
36 from dialog import PrefDialog
37 from tabfrequence import Frequences, FreqMultiple
38 from tabchi2 import ChiSquare
39 #from tabstudent import MakeStudent
40 from tabchddist import ChdCluster
41 from tabafcm import DoAFCM
42 from tabchdalc import AnalyseQuest
43 from tabsimi import DoSimi
44 from tabrsimple import InputText
45 from tabverges import Prototypical
46 from tabsplitvar import SplitMatrixFromVar
47 #from textdist import AnalysePam
48 from textstat import Stat
49 from textaslexico import Lexico
50 from textsimi import SimiTxt, SimiFromCluster
51 from textwordcloud import WordCloud, ClusterCloud
52 from textreinert import Reinert
53 #from textcheckcorpus import checkcorpus
54 from openanalyse import OpenAnalyse
55 from corpus import Builder, SubBuilder
56 from checkinstall import CreateIraDirectory, CheckRPath, FindRPAthWin32, FindRPathNix, CheckRPackages, IsNew, UpgradeConf, CopyConf, RLibsAreInstalled
57 from chemins import RscriptsPath, ConstructConfigPath, ConstructDicoPath, ConstructGlobalPath, PathOut
58 from parse_factiva_xml import ImportFactiva
59 from tools import Extract
61 from tree import LeftTree
62 ##########################################################
63 ID_OpenData = wx.NewId()
64 ID_Import = wx.NewId()
65 ID_OpenText = wx.NewId()
66 ID_OnOpenAnalyse = wx.NewId()
69 ID_Student = wx.NewId()
70 ID_CHDSIM = wx.NewId()
71 ID_CHDReinert = wx.NewId()
72 ID_TEXTAFCM = wx.NewId()
73 ID_TEXTSTAT = wx.NewId()
75 ID_TEXTREINERT = wx.NewId()
76 ID_TEXTPAM = wx.NewId()
77 ID_CHECKCORPUS = wx.NewId()
78 ID_Tabcontent = wx.NewId()
81 ID_CloseTab = wx.NewId()
82 ID_SaveTab = wx.NewId()
83 ID_CreateText = wx.NewId()
84 ID_ACCEUIL = wx.NewId()
85 ID_RESULT = wx.NewId()
86 ID_VIEWDATA = wx.NewId()
87 ID_HTMLcontent = wx.NewId()
88 ID_SimiTxt = wx.NewId()
90 ID_ImportTXM = wx.NewId()
91 ID_FreqMulti = wx.NewId()
92 ID_Splitfromvar = wx.NewId()
93 ID_Subtxtfrommeta = wx.NewId()
94 ID_Subtxtfromthem = wx.NewId()
96 ID_ImportEuro = wx.NewId()
97 ##########################################################
98 #elements de configuration
99 ##########################################################
101 if sys.platform == 'darwin' :
102 sys.setdefaultencoding('UTF-8')
103 wx.SetDefaultPyEncoding('UTF-8')
105 sys.setdefaultencoding(locale.getpreferredencoding())
107 #chemin de l'application
108 AppliPath = os.path.abspath(os.path.dirname(os.path.realpath(sys.argv[0])))
110 ImagePath = os.path.join(AppliPath, 'images')
111 #configuration generale
112 DictConfigPath = ConstructGlobalPath(AppliPath)
113 ConfigGlob = ConfigParser()
114 ConfigGlob.read(DictConfigPath['global'])
115 DefaultConf = ConfigParser()
116 DefaultConf.read(DictConfigPath['preferences'])
117 #repertoire de l'utilisateur
118 if os.getenv('HOME') != None:
119 user_home = os.getenv('HOME')
121 user_home = os.getenv('HOMEPATH')
122 UserConfigPath = os.path.abspath(os.path.join(user_home, '.iramuteq'))
123 #Si pas de fichiers de config utilisateur, on cree le repertoire
124 CreateIraDirectory(UserConfigPath, AppliPath)
125 #fichiers log pour windows (py2exe)
126 log = logging.getLogger('iramuteq')
127 fh = logging.FileHandler(os.path.join(UserConfigPath,'stdout.log'))
128 formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
129 fh.setFormatter(formatter)
131 if sys.platform != 'win32' and sys.platform != 'darwin':
132 ch = logging.StreamHandler()
133 ch.setFormatter(formatter)
135 log.setLevel(logging.INFO)
137 class writer(object):
138 def write(self, data):
139 if data.strip() != '' :
140 log.info('ERROR : %s' % data)
142 class printer(object) :
143 def write(self, data) :
144 if data.strip() != '' :
145 log.info('Print : %s' % data)
147 sys.stderr = writer()
148 sys.stdout = printer()
150 ConfigPath = ConstructConfigPath(UserConfigPath)
152 langues = {'french' : wx.LANGUAGE_FRENCH,
153 'english' : wx.LANGUAGE_ENGLISH,
154 'portuguese' : wx.LANGUAGE_PORTUGUESE,
155 'italian' : wx.LANGUAGE_ITALIAN,
156 'spanish' : wx.LANGUAGE_SPANISH
159 code_langues = {'french' : 'fr_FR',
161 'portuguese' : 'pt_PT',
167 'textroot' : 'textroot.png',
168 'alceste' : 'reinert.png',
169 'corpus' : 'textcorpus.png',
170 'wordcloud' :'wordcloud.png',
172 'simitxt' : 'simitxt.png',
173 'clustersimitxt' :'clustersimitxt.png',
174 'clustercloud' : 'clustercloud.png',
176 'matroot' : 'matroot.png',
177 'matrix' : 'matrix.png',
178 'freq' : 'frequences.png',
179 'freqmulti' : 'frequences.png',
181 'reinertmatrix' : 'reinertmatrix.png',
182 'simimatrix' : 'simimatrix.png',
183 'simiclustermatrix' : 'simimatrix.png',
184 'proto' : 'proto.png',
186 #####################################################################
188 class IraFrame(wx.Frame):
189 def __init__(self, parent, id= -1, title="", pos=wx.DefaultPosition,
190 size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE |
193 log.info('Starting...')
194 wx.Frame.__init__(self, parent, id, title, pos, size, style)
196 self.AppliPath = AppliPath
197 self.images_path = os.path.join(AppliPath,'images')
198 self.UserConfigPath = UserConfigPath
199 #self.RscriptsPath = ConstructRscriptsPath(AppliPath)
200 self.RscriptsPath = PathOut(dirout=os.path.join(AppliPath, 'Rscripts'))
201 self.RscriptsPath.basefiles(RscriptsPath)
202 #self.DictPath = ConstructDicoPath(AppliPath)
203 self.DictPath = ConstructDicoPath(UserConfigPath)
204 self.ConfigGlob = ConfigGlob
205 self.ConfigPath = ConstructConfigPath(UserConfigPath)
206 self.pref = RawConfigParser()
207 #workaround for import problem
208 self.SimiFromCluster = SimiFromCluster
210 gettext.install('iramuteq', os.path.join(AppliPath,'locale'), unicode=True)
211 #langues = ['fr_FR', 'en', 'pt_PT']
215 for langue in code_langues :
216 self.preslangue[langue] = gettext.translation("iramuteq", os.path.join(AppliPath,'locale'), languages=[code_langues[langue]])
218 #self.presLan_fr = gettext.translation("iramuteq", os.path.join(AppliPath,'locale'), languages=['fr_FR'])
219 #self.presLan_en = gettext.translation("iramuteq", os.path.join(AppliPath,'locale'), languages=['en'])
220 # tell FrameManager to manage this frame
221 #self._mgr = wx.aui.AuiManager()
222 self._mgr = aui.AuiManager()
223 self._mgr.SetManagedWindow(self)
226 #--------------------------------------------------------------------------------
227 self.images_analyses = images_analyses
228 for img in images_analyses :
229 self.images_analyses[img] = wx.Image(os.path.join(self.images_path, self.images_analyses[img]), wx.BITMAP_TYPE_PNG).Scale(16,16).ConvertToBitmap()
230 self.mb = wx.MenuBar()
232 file_menu = wx.Menu()
233 item = wx.MenuItem(file_menu, ID_OpenData, _(u"Open a matrix").decode('utf8'), _(u"Open a matrix").decode('utf8'))
234 #item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN))
235 item.SetBitmap(self.images_analyses['matroot'])
236 file_menu.AppendItem(item)
238 item = wx.MenuItem(file_menu, ID_OpenText, _(u"Open a text corpus").decode('utf8'), _(u"Open a text corpus").decode('utf8'))
239 item.SetBitmap(self.images_analyses['textroot'])
240 file_menu.AppendItem(item)
242 item = wx.MenuItem(file_menu, ID_OnOpenAnalyse, _(u"Open an analysis").decode('utf8'), _(u"Open an analysis").decode('utf8'))
243 item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN))
244 file_menu.AppendItem(item)
247 menuFactiva = wx.Menu()
248 fact_from_xml = wx.MenuItem(menuFactiva, wx.ID_ANY, _(u"from xml").decode('utf8'))
249 fact_from_mail = wx.MenuItem(menuFactiva, wx.ID_ANY, _(u"from mail").decode('utf8'))
250 fact_from_txt = wx.MenuItem(menuFactiva, wx.ID_ANY, _(u"from copy/paste").decode('utf8'))
251 menuFactiva.AppendItem(fact_from_xml)
252 menuFactiva.AppendItem(fact_from_mail)
253 menuFactiva.AppendItem(fact_from_txt)
254 file_menu.AppendMenu(-1, _(u"Import from factiva").decode('utf8'), menuFactiva)
256 item = wx.MenuItem(file_menu, ID_ImportTXM, _(u"Import from TXM").decode('utf8'), _(u"Import from TXM").decode('utf8'))
257 item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN))
258 file_menu.AppendItem(item)
260 item = wx.MenuItem(file_menu, ID_ImportEuro, _(u"Import from Europress").decode('utf8'), _(u"Import from Europress").decode('utf8'))
261 item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN))
262 file_menu.AppendItem(item)
264 menuTools = wx.Menu()
265 splitvar = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Split from variable").decode('utf8'))
266 extractmod = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Extract mods").decode('utf8'))
267 extractthem = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Extract thematics").decode('utf8'))
268 menuTools.AppendItem(splitvar)
269 menuTools.AppendItem(extractmod)
270 menuTools.AppendItem(extractthem)
271 self.ID_splitvar = splitvar.GetId()
272 self.ID_extractmod = extractmod.GetId()
273 self.ID_extractthem = extractthem.GetId()
274 file_menu.AppendMenu(-1, _(u"Tools").decode('utf8'), menuTools)
277 #item = wx.MenuItem(file_menu, ID_SaveTab, _(u"Save tab as...").decode('utf8'), _(u"Save tab as...").decode('utf8'))
278 #item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_SAVE_AS))
279 #file_menu.AppendItem(item)
281 file_menu.Append(wx.ID_EXIT, _(u"Exit").decode('utf8'))
283 edit_menu = wx.Menu()
284 edit_menu.Append(wx.ID_PREFERENCES, _(u'Preferences').decode('utf8'))
286 view_menu = wx.Menu()
287 view_menu.Append(ID_ACCEUIL, _(u"Home page").decode('utf8'))
288 view_menu.Append(ID_VIEWDATA, _(u"Show data").decode('utf8'))
289 view_menu.Append(ID_RESULT, _(u'Show results').decode('utf8'))
290 #view_menu.AppendSeparator()
291 matrix_menu = wx.Menu()
292 matanalyses = [[ID_Freq, _(u"Frequencies").decode('utf8'), 'freq'],
293 [ID_Freq, _(u"Multiple Frequencies").decode('utf8'), 'freqmulti'],
294 [ID_Chi2, _(u"Chi2").decode('utf8'), 'chi2'],
295 {'name' : _(u"Clustering").decode('utf8'),
296 'content' : [[ID_CHDReinert, _(u"Reinert's Method").decode('utf8'), 'reinertmatrix']]},
297 [ID_SIMI, _(u"Similarities Analysis").decode('utf8'), 'simimatrix'],
298 [ID_proto, _(u"Prototypical Analysis").decode('utf8'), 'proto'],
299 [ID_Splitfromvar, _(u"Split from variable").decode('utf8'), '']]
301 for analyse in matanalyses :
302 if not isinstance(analyse, dict) :
303 item = wx.MenuItem(matrix_menu, analyse[0], analyse[1])
304 item.SetBitmap(self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16)))
305 matrix_menu.AppendItem(item)
308 for subana in analyse['content'] :
309 item = wx.MenuItem(nmenu, subana[0], subana[1])
310 item.SetBitmap(self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)))
311 nmenu.AppendItem(item)
312 matrix_menu.AppendMenu(-1, analyse['name'], nmenu)
313 #item = wx.MenuItem(matrix_menu, ID_Freq, _(u"Frequencies").decode('utf8'))
314 #item.SetBitmap(self.images_analyses['freq'])
315 #matrix_menu.AppendItem(item)
316 #matrix_menu.Append(ID_Freq, _(u"Frequencies").decode('utf8'))
317 #item = wx.MenuItem(matrix_menu, ID_Freq, _(u"Multiple Frequencies").decode('utf8'))
318 #item.SetBitmap(self.images_analyses['freqmulti'])
319 #matrix_menu.Append(ID_FreqMulti, _(u'Multiple frequencies').decode('utf8'))
320 #matrix_menu.AppendItem(item)
321 #matrix_menu.Append(ID_Chi2, _(u"Chi2").decode('utf8'))
322 #matrix_menu.Append(ID_Student, u"t de Student")
323 #menu_classif = wx.Menu()
324 #menu_classif.Append(ID_CHDReinert, _(u"Reinert's Method").decode('utf8'))
325 #menu_classif.Append(ID_CHDSIM, u"Par matrice des distances")
326 #matrix_menu.AppendMenu(-1, _(u"Clustering").decode('utf8'), menu_classif)
327 #matrix_menu.Append(ID_AFCM, u"AFCM")
328 #matrix_menu.Append(ID_SIMI, _(u"Similarities Analysis").decode('utf8'))
329 #matrix_menu.Append(ID_proto, _(u"Prototypical Analysis").decode('utf8'))
330 ID_RCODE = wx.NewId()
331 #matrix_menu.Append(ID_RCODE, u"Code R...")
332 #menu_splittab = wx.Menu()
333 #ID_SPLITVAR = wx.NewId()
334 #splitvar = wx.MenuItem(menu_splittab, ID_SPLITVAR, _(u"Split from variable").decode('utf8'))
335 #menu_splittab.AppendItem(splitvar)
336 #matrix_menu.AppendMenu(-1, _(u"Split matrix").decode('utf8'), menu_splittab)
337 self.matrix_menu = matrix_menu
339 text_menu = wx.Menu()
340 analyses_text = [[ID_TEXTSTAT, _(u"Statistics").decode('utf8'), 'stat'],
341 [ID_ASLEX, _(u"Specificities and CA").decode('utf8'), 'spec'],
342 {'name' : _(u"Clustering").decode('utf8'),
343 'content' : [[ID_TEXTREINERT, _(u"Reinert's Method").decode('utf8'), 'alceste']]},
344 [ID_SimiTxt, _(u"Similarities Analysis").decode('utf8'), 'simitxt'],
345 [ID_WC, _(u"WordCloud").decode('utf8'), 'wordcloud'],
346 {'name' : _(u"Sub corpus").decode('utf8'),
347 'content' : [[ID_Subtxtfrommeta, _(u'Sub corpus from metadata').decode('utf8'), None],
348 [ID_Subtxtfromthem, _(u'Sub corpus from thematic').decode('utf8'), None]]},
351 for analyse in analyses_text :
352 if not isinstance(analyse, dict) :
353 item = wx.MenuItem(text_menu, analyse[0], analyse[1])
354 item.SetBitmap(self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16)))
355 text_menu.AppendItem(item)
358 for subana in analyse['content'] :
359 item = wx.MenuItem(nmenu, subana[0], subana[1])
360 item.SetBitmap(self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)))
361 nmenu.AppendItem(item)
362 text_menu.AppendMenu(-1, analyse['name'], nmenu)
363 #text_menu.Append(ID_CHECKCORPUS, u"Vérifier le corpus")
364 # text_menu.Append(ID_TEXTSTAT, _(u"Statistics").decode('utf8'))
365 # text_menu.Append(ID_ASLEX, _(u"Specificities and CA").decode('utf8'))
366 # #text_menu.Append(ID_TEXTAFCM, u"AFC sur UCI / Vocabulaire")
367 # menu_classiftxt = wx.Menu()
368 # menu_classiftxt.Append(ID_TEXTREINERT, _(u"Reinert's Method").decode('utf8'))
369 # #menu_classiftxt.Append(ID_TEXTPAM, u"Par matrice des distances")
370 # text_menu.AppendMenu(-1, _(u"Clustering").decode('utf8'), menu_classiftxt)
371 # text_menu.Append(ID_SimiTxt, _(u"Similarities Analysis").decode('utf8'))
373 # text_menu.Append(ID_WC, _(u"WordCloud").decode('utf8'))
374 self.text_menu = text_menu
376 help_menu = wx.Menu()
377 help_menu.Append(wx.ID_ABOUT, _(u"About...").decode('utf8'))
378 help_menu.Append(wx.ID_HELP, _(u"Online help...").decode('utf8'))
380 self.mb.Append(file_menu, _(u"File").decode('utf8'))
381 self.mb.Append(edit_menu, _(u"Edition").decode('utf8'))
382 self.mb.Append(view_menu, _(u"View").decode('utf8'))
383 self.mb.Append(matrix_menu, _(u"Matrix analysis").decode('utf8'))
384 self.mb.Append(text_menu, _(u"Text analysis").decode('utf8'))
385 self.mb.Append(help_menu, _(u"Help").decode('utf8'))
387 self.SetMenuBar(self.mb)
388 #--------------------------------------------------------------------
389 self.statusbar = self.CreateStatusBar(2, wx.ST_SIZEGRIP)
390 self.statusbar.SetStatusWidths([-2, -3])
391 self.statusbar.SetStatusText(_(u"Ready").decode('utf8'), 0)
392 self.statusbar.SetStatusText(_(u"Welcome").decode('utf8'), 1)
394 # min size for the frame itself isn't completely done.
395 # see the end up FrameManager::Update() for the test
396 # code. For now, just hard code a frame minimum size
397 self.SetMinSize(wx.Size(400, 400))
399 # create some toolbars
400 tb1 = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
401 wx.TB_FLAT | wx.TB_NODIVIDER)
402 tb1.SetToolBitmapSize(wx.Size(16, 16))
403 tb1.AddLabelTool(ID_OpenData, "OpenData", self.images_analyses['matroot'], shortHelp=_(u"Matrix").decode('utf8'), longHelp=_(u"Open a matrix").decode('utf8'))
405 tb1.AddLabelTool(ID_OpenText, "OpenText", self.images_analyses['textroot'], shortHelp=_(u"Text").decode('utf8'), longHelp=_(u"Open a text corpus").decode('utf8'))
409 tb_text = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
410 wx.TB_FLAT | wx.TB_NODIVIDER)
411 for analyse in analyses_text :
412 if not isinstance(analyse, dict) :
413 tb_text.AddLabelTool(analyse[0], analyse[1], self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16)), shortHelp = analyse[1], longHelp = analyse[1])
415 for subana in analyse['content'] :
416 tb_text.AddLabelTool(subana[0], subana[1], self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)), shortHelp = subana[1], longHelp = subana[1])
419 tb_mat = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
420 wx.TB_FLAT | wx.TB_NODIVIDER)
421 for analyse in matanalyses :
422 if not isinstance(analyse, dict) :
423 tb_mat.AddLabelTool(analyse[0], analyse[1], self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16)), shortHelp = analyse[1], longHelp = analyse[1])
425 for subana in analyse['content'] :
426 tb_mat.AddLabelTool(subana[0], subana[1], self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)), shortHelp = subana[1], longHelp = subana[1])
428 #------------------------------------------------------------------------------------------------
430 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)
432 #self._mgr.AddPane(self.text_ctrl_txt, wx.aui.AuiPaneInfo().
433 # Name("Text").CenterPane())
434 self._mgr.AddPane(self.text_ctrl_txt, aui.AuiPaneInfo().
435 Name("Text").CenterPane())
436 #self._mgr.AddPane(IntroPanel(self), wx.aui.AuiPaneInfo().Name("Intro_Text").
438 self._mgr.AddPane(IntroPanel(self), aui.AuiPaneInfo().Name("Intro_Text").
440 #if not os.path.exists(os.path.join(UserConfigPath, 'history.db')) :
441 # with open(os.path.join(UserConfigPath, 'history.db'), 'w') as f :
443 self.history = History(os.path.join(UserConfigPath, 'history.db'))
444 self.tree = LeftTree(self)
445 self._mgr.AddPane(self.tree, aui.AuiPaneInfo().Name("lefttree").Caption(_(u"Historic").decode('utf8')).
446 Left().MinSize(wx.Size(200,500)).Layer(1).Position(1).CloseButton(False).MaximizeButton(True).
447 MinimizeButton(True))
449 #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)
450 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)
451 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
452 self.nb.SetAGWWindowStyleFlag(notebook_flags)
453 self.nb.SetArtProvider(aui.ChromeTabArt())
454 #self.nb.SetArtProvider(aui.VC8TabArt())
455 #self.nb.parent = self
456 #self._notebook_style = aui.AUI_NB_DEFAULT_STYLE | aui.AUI_NB_TAB_EXTERNAL_MOVE | wx.NO_BORDER
457 #self._mgr.AddPane(self.nb, wx.aui.AuiPaneInfo().
458 # Name("Tab_content").
460 self._mgr.AddPane(self.nb, aui.AuiPaneInfo().
464 #self._mgr.AddPane(self.Sheet, wx.aui.AuiPaneInfo().Name("Data").CenterPane())
465 #self._mgr.AddPane(self.Sheet, aui.AuiPaneInfo().Name("Data").CenterPane())
466 self.nb.Bind(aui.EVT_AUINOTEBOOK_PAGE_CLOSE, self.OnCloseTab)
467 self.nb.Bind(aui.EVT_AUINOTEBOOK_PAGE_CHANGED, self.OnPageChanged)
468 # add the toolbars to the manager
470 #self._mgr.AddPane(tb1, wx.aui.AuiPaneInfo().
471 # Name("tb1").Caption("Fichiers").
472 # ToolbarPane().Top().
473 # LeftDockable(False).RightDockable(False))
474 self._mgr.AddPane(tb1, aui.AuiPaneInfo().
475 Name("tb1").Caption("Fichiers").
477 LeftDockable(True).RightDockable(False))
479 self._mgr.AddPane(tb_text, aui.AuiPaneInfo().
480 Name("tb_text").Caption("analyse_text").
482 LeftDockable(True).RightDockable(False))
484 self._mgr.AddPane(tb_mat, aui.AuiPaneInfo().
485 Name("tb_mat").Caption("analyse_matrix").
487 LeftDockable(True).RightDockable(False))
489 self._mgr.GetPane('tb_text').Hide()
490 self._mgr.GetPane('tb_mat').Hide()
492 self.ShowAPane("Intro_Text")
493 self._mgr.GetPane("lefttree").Show()
494 self._mgr.GetPane("classif_tb").Hide()
495 # "commit" all changes made to FrameManager
498 # Show How To Use The Closing Panes Event
499 ##################################################################
500 self.Bind(wx.EVT_MENU, self.OnAcceuil, id=ID_ACCEUIL)
501 self.Bind(wx.EVT_MENU, self.OnViewData, id=ID_VIEWDATA)
502 self.Bind(wx.EVT_MENU, self.ShowTab, id=ID_RESULT)
503 self.Bind(wx.EVT_MENU, self.OnOpenData, id=ID_OpenData)
504 self.Bind(wx.EVT_MENU, self.OnOpenText, id=ID_OpenText)
505 self.Bind(wx.EVT_MENU, self.OnOpenAnalyse, id=ID_OnOpenAnalyse)
506 self.Bind(wx.EVT_MENU, self.import_factiva_xml, fact_from_xml)
507 self.Bind(wx.EVT_MENU, self.import_factiva_mail, fact_from_mail)
508 self.Bind(wx.EVT_MENU, self.import_factiva_txt, fact_from_txt)
509 self.Bind(wx.EVT_MENU, self.ExtractTools, splitvar)
510 self.Bind(wx.EVT_MENU, self.ExtractTools, extractmod)
511 self.Bind(wx.EVT_MENU, self.ExtractTools, extractthem)
512 self.Bind(wx.EVT_MENU, self.OnFreq, id=ID_Freq)
513 self.Bind(wx.EVT_MENU, self.OnFreqMulti, id=ID_FreqMulti)
514 self.Bind(wx.EVT_MENU, self.OnChi2, id=ID_Chi2)
515 self.Bind(wx.EVT_MENU, self.OnStudent, id=ID_Student)
516 self.Bind(wx.EVT_MENU, self.OnCHDSIM, id=ID_CHDSIM)
517 self.Bind(wx.EVT_MENU, self.OnCHDReinert, id=ID_CHDReinert)
518 self.Bind(wx.EVT_MENU, self.OnAFCM, id=ID_AFCM)
519 self.Bind(wx.EVT_MENU, self.OnProto, id=ID_proto)
520 self.Bind(wx.EVT_MENU, self.OnSplitVar, id = ID_Splitfromvar)
521 #self.Bind(wx.EVT_MENU, self.OnRCode, id=ID_RCODE)
522 #self.Bind(wx.EVT_MENU, self.OnSplitVar, id=ID_SPLITVAR)
523 #self.Bind(wx.EVT_MENU, self.OnCheckcorpus, id = ID_CHECKCORPUS)
524 self.Bind(wx.EVT_MENU, self.OnTextStat, id=ID_TEXTSTAT)
525 self.Bind(wx.EVT_MENU, self.OnTextSpec, id=ID_ASLEX)
526 self.Bind(wx.EVT_MENU, self.OnTextAfcm, id=ID_TEXTAFCM)
527 self.Bind(wx.EVT_MENU, self.OnTextReinert, id=ID_TEXTREINERT)
528 self.Bind(wx.EVT_MENU, self.OnPamSimple, id=ID_TEXTPAM)
529 self.Bind(wx.EVT_MENU, self.OnSimiTxt, id=ID_SimiTxt)
530 self.Bind(wx.EVT_MENU, self.OnWordCloud, id=ID_WC)
531 self.Bind(wx.EVT_MENU, self.OnSubText, id = ID_Subtxtfrommeta)
532 self.Bind(wx.EVT_MENU, self.OnSubText, id = ID_Subtxtfromthem)
533 self.Bind(wx.EVT_MENU, self.OnSimiTab, id=ID_SIMI)
534 self.Bind(wx.EVT_MENU, self.OnExit, id=wx.ID_EXIT)
535 #self.Bind(wx.EVT_MENU, self.OnSaveTabAs, id=ID_SaveTab)
536 self.Bind(wx.EVT_MENU, self.OnAbout, id=wx.ID_ABOUT)
537 self.Bind(wx.EVT_MENU, self.OnHelp, id=wx.ID_HELP)
538 self.Bind(wx.EVT_MENU, self.OnPref, id=wx.ID_PREFERENCES)
539 self.Bind(wx.EVT_MENU, self.OnImportTXM, id=ID_ImportTXM)
540 self.Bind(wx.EVT_MENU, self.OnImportEuropress, id=ID_ImportEuro)
541 self.Bind(wx.EVT_CLOSE, self.OnClose)
542 ##################################################################
543 flags = self._mgr.GetAGWFlags()
544 #flags &= ~wx.aui.AUI_MGR_TRANSPARENT_HINT
545 #flags &= ~wx.aui.AUI_MGR_VENETIAN_BLINDS_HINT
546 #flags &= ~wx.aui.AUI_MGR_RECTANGLE_HINT
547 flags &= ~(aui.AUI_MGR_RECTANGLE_HINT | aui.AUI_MGR_ALLOW_FLOATING)
548 self._mgr.SetAGWFlags(self._mgr.GetAGWFlags() ^ (aui.AUI_MGR_RECTANGLE_HINT | aui.AUI_MGR_ALLOW_FLOATING))
549 self._mgr.GetArtProvider().SetMetric(aui.AUI_DOCKART_GRADIENT_TYPE, aui.AUI_GRADIENT_HORIZONTAL)
550 self.GetDockArt().SetColor(aui.AUI_DOCKART_ACTIVE_CAPTION_GRADIENT_COLOUR, "#00FFF9")
553 self._icon = wx.Icon(os.path.join(ImagePath, "iraicone.ico"), wx.BITMAP_TYPE_ICO)
554 self.SetIcon(self._icon)
555 ##########################
557 self.input_path = [False]
558 self.TEMPDIR = tempfile.mkdtemp('iramuteq')
559 self.FileTabList = []
565 self.g_header = False
572 self.SysEncoding = sys.getdefaultencoding()
573 self.syscoding = sys.getdefaultencoding()
574 #print 'SysEncoding',self.SysEncoding
575 if self.SysEncoding == 'mac-roman' : self.SysEncoding = 'MacRoman'
578 ##############################################################@
579 self.DisEnSaveTabAs(False)
580 self.ShowMenu('view', False)
581 self.ShowMenu('matrix', False)
582 self.ShowMenu('text', False)
593 def finish_init(self) :
595 self.pref.read(self.ConfigPath['preferences'])
598 self.pref.read(self.ConfigPath['preferences'])
605 self.pref.read(self.ConfigPath['preferences'])
607 self.sound = self.pref.getboolean('iramuteq', 'sound')
608 self.check_update = self.pref.getboolean('iramuteq', 'checkupdate')
609 self.version = ConfigGlob.get('DEFAULT', 'version')
610 #configuration des chemins de R
611 self.PathPath = ConfigParser()
612 self.PathPath.read(ConfigPath['path'])
614 if not CheckRPath(self.PathPath) :
615 if sys.platform == 'win32':
616 BestRPath = FindRPAthWin32()
618 BestRPath = FindRPathNix()
620 self.PathPath.set('PATHS', 'rpath', BestRPath)
621 with open(ConfigPath['path'], 'w') as f :
622 self.PathPath.write(f)
626 self.RPath = self.PathPath.get('PATHS', 'rpath')
629 if not RLibsAreInstalled(self) :
632 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'),
633 _(u"If R is installed, report its path in Preferences.").decode('utf8'),
634 _(u"IRaMuTeQ does not work without R.").decode('utf8')])
635 dlg = wx.MessageDialog(self, msg, _(u"Problem").decode('utf8'), wx.OK | wx.NO_DEFAULT | wx.ICON_WARNING)
637 if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
641 def setlangue(self) :
642 self.pref.read(self.ConfigPath['preferences'])
644 guilangue = self.pref.get('iramuteq', 'guilanguage')
646 guilangue = DefaultConf.get('iramuteq', 'guilanguage')
647 self.preslangue.get(guilangue, 'english').install()
649 def OnVerif(self, evt) :
650 pack = CheckRPackages(self)
652 dlg = wx.MessageDialog(self, _(u"Installation OK").decode('utf8'), _(u"Installation").decode('utf8'), wx.OK | wx.ICON_INFORMATION | wx.STAY_ON_TOP)
654 if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
657 def DisEnSaveTabAs(self, DISEN):
659 file_menu = self.mb.GetMenu(0)
660 items = file_menu.GetMenuItems()
662 if item.GetId() == ID_SaveTab :
665 def ShowMenu(self, menu, Show=True):
669 self._mgr.GetPane('tb_text').Show()
671 self._mgr.GetPane('tb_text').Hide()
672 elif menu == 'matrix' :
675 self._mgr.GetPane('tb_mat').Show()
677 self._mgr.GetPane('tb_mat').Hide()
678 elif menu == 'view' :
683 #menu_pos = self.mb.FindMenu(menu)
684 if not menu_pos is None :
685 self.mb.EnableTop(menu_pos, Show)
686 self.mb.UpdateMenus()
689 #--------------------------------------------------------------------
690 def OnClose(self, event):
692 with open(self.ConfigPath['path'], 'w') as f :
693 self.PathPath.write(f)
698 def OnOpenData(self, event):
699 inputname, self.input_path = OnOpen(self, "Data")
701 #filename = self.input_path[0]
702 self.tableau = Tableau(self,os.path.abspath(self.input_path[0]))
703 val = get_table_param(self, self.input_path[0])
705 busy = wx.BusyInfo(_("Please wait...").decode('utf8'), self)
708 self.tableau.make_content()
709 OpenAnalyse(self, self.tableau.parametres)
710 self.tree.OnItemAppend(self.tableau.parametres)
715 #self.tableau.show_tab()
717 def OnOpenAnalyse(self, event):
718 self.AnalysePath = OnOpen(self, "Analyse")
719 OpenAnalyse(self, self.AnalysePath[1][0], True)
720 self.ShowMenu('view')
722 def OnOpenText(self, event):
723 inputname, self.input_path = OnOpen(self, "Texte")
724 self.filename = self.input_path[0]
728 def OnViewData(self, event):
729 if self.type == "Data":
730 if not self.DataPop :
731 self.Sheet.Populate(self.content)
734 self.ShowAPane(u"Data")
735 elif self.type == "Texte" or self.type == 'Analyse' :
736 if not self.DataTxt :
737 self.text_ctrl_txt.Clear()
738 self.text_ctrl_txt.write(self.content)
739 self.text_ctrl_txt.ShowPosition(0)
742 self.ShowAPane(u"Text")
745 def OnSubText(self, evt, corpus = None, parametres = None):
747 corpus = self.tree.getcorpus()
748 if evt.GetId() == ID_Subtxtfrommeta :
749 parametres = {'frommeta' : True}
750 elif evt.GetId() == ID_Subtxtfromthem :
751 parametres = {'fromtheme' : True}
752 builder = SubBuilder(self, corpus, parametres)
753 if builder.res == wx.ID_OK :
754 busy = wx.BusyInfo(_("Please wait...").decode('utf8'), self)
756 corpus = builder.doanalyse()
757 self.history.add(corpus.parametres)
758 self.tree.OnItemAppend(corpus.parametres)
759 OpenAnalyse(self, corpus.parametres)
763 dlg = wx.ProgressDialog("Ouverture...",
764 "Veuillez patienter...",
767 style=wx.PD_APP_MODAL | wx.PD_AUTO_HIDE | wx.PD_ELAPSED_TIME | wx.PD_CAN_ABORT
770 builder = Builder(self, dlg)
771 if builder.res == wx.ID_OK :
773 corpus = builder.doanalyse()
774 self.history.add(corpus.parametres)
775 self.tree.OnItemAppend(corpus.parametres)
776 OpenAnalyse(self, corpus.parametres)
782 keepGoing = dlg.Update(count, u"Lecture du fichier")
783 self.ShowMenu('view')
784 self.ShowMenu('text')
785 self.ShowMenu('matrix', False)
790 keepGoing = dlg.Update(count, u"Chargement du dictionnaire")
792 #self.OnViewData(wx.EVT_BUTTON)
794 def OnExit(self, event):
797 def OnAbout(self, event):
798 info = wx.AboutDialogInfo()
799 info.Name = ConfigGlob.get('DEFAULT', 'name')
800 info.Version = ConfigGlob.get('DEFAULT', 'version')
801 info.Copyright = ConfigGlob.get('DEFAULT', 'copyright')
802 info.Translators = ConfigGlob.get('DEFAULT', 'translators').decode('utf8').split(';')
803 info.Description = u"""
804 Interface de R pour les Analyses Multidimensionnelles
805 de Textes et de Questionnaires
808 construit avec des logiciels libres.
814 info.WebSite = ("http://www.iramuteq.org", u"Site web IRaMuTeQ")
815 dev = ConfigGlob.get('DEFAULT', 'dev').decode('utf8').split(';')
816 info.Developers = dev
817 info.License = u"""Iramuteq est un logiciel libre ; vous pouvez le diffuser et/ou le modifier
818 suivant les termes de la Licence Publique Générale GNU telle que publiée
819 par la Free Software Foundation ; soit la version 2 de cette licence,
820 soit (à votre convenance) une version ultérieure.
822 Iramuteq est diffusé dans l'espoir qu'il sera utile,
823 mais SANS AUCUNE GARANTIE ; sans même une garantie implicite
824 de COMMERCIALISATION ou d'ADÉQUATION À UN USAGE PARTICULIER.
825 Voyez la Licence Publique Générale GNU pour plus de détails.
827 Vous devriez avoir reçu une copie de la Licence Publique Générale GNU
828 avec Iramuteq ; sinon, veuillez écrire à la Free Software Foundation,
829 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
832 def GetDockArt(self):
833 return self._mgr.GetArtProvider()
838 def OnPageChanged(self, event) :
839 new = event.GetSelection()
840 nobject = event.GetEventObject()
841 parent = nobject.GetParent()
842 if isinstance(parent, IraFrame) :
843 npage = self.nb.GetPage(new)
844 if 'parametres' in dir(npage) :
845 self.tree.GiveFocus(uuid=npage.parametres['uuid'])
846 if npage.parametres.get('matrix', False) :
847 self.ShowMenu('text', False)
848 self.ShowMenu('matrix', True)
849 elif npage.parametres.get('corpus', False) :
850 self.ShowMenu('text')
851 self.ShowMenu('matrix', False)
853 def OnCloseTab(self, evt):
854 #log.info('Closing tab %s' % str(evt.GetEventObject()))
855 ctrl = evt.GetEventObject()
856 if isinstance(ctrl.GetParent(), aui.AuiNotebook) or isinstance(ctrl.GetParent(), wx.Panel):
860 page = self.nb.GetPage(self.nb.GetSelection())
861 if 'parametres' in dir(page) and isinstance(ctrl.GetParent(), IraFrame) :
862 self.history.rmtab(page.parametres)
863 self.tree.CloseItem(uuid = page.parametres['uuid'])
864 TabTitle = self.nb.GetPageText(self.nb.GetSelection())
866 if self.nb.GetPageCount() == 1 and not notebook :
869 def LastTabClose(self) :
870 if self.nb.GetPageCount() == 1 :
871 #self.DisEnSaveTabAs(False)
873 self.ShowAPane("Text")
875 self.ShowAPane("Data")
877 self.ShowAPane("Intro_Text")
879 def GetStartPosition(self):
883 pt = self.ClientToScreen(wx.Point(0, 0))
885 return wx.Point(pt.x + x, pt.y + x)
887 def ShowAPane(self, panel):
888 for pane in self._mgr.GetAllPanes() :
889 if not pane.IsToolbar() and pane.name != 'lefttree':
891 self._mgr.GetPane(panel).Show()
894 def OnAcceuil(self, event):
895 self.ShowAPane(u"Intro_Text")
898 def CreateHTMLCtrl(self):
899 ctrl = wx.html.HtmlWindow(self, -1, wx.DefaultPosition, wx.Size(400, 300))
900 if "gtk2" in wx.PlatformInfo:
901 ctrl.SetStandardFonts()
902 ctrl.SetPage(u"text")
905 def ShowTab(self, evt):
906 self.ShowAPane("Tab_content")
908 ################################################################
910 ################################################################
911 def analyse_matrix(self, analyse, analyse_type = '', matrix = None, parametres = None, dlgnb = 1):
913 matrix = self.tree.getmatrix()
914 if parametres is not None :
915 parametres['type'] = analyse_type
917 parametres = {'type' : analyse_type}
919 #print 'plus de bug@@@@@@@@@@@@@@@@@@@@@@'
920 analyse(self, matrix, parametres = parametres, dlg = dlgnb)
924 def OnFreq(self, event, matrix = None):
925 self.analyse_matrix(Frequences, analyse_type = 'freq', matrix = matrix, dlgnb = 3)
927 def OnFreqMulti(self, event, matrix = None):
928 self.analyse_matrix(FreqMultiple, analyse_type = 'freqmulti', matrix = matrix, dlgnb = 3)
930 def OnChi2(self, event, matrix = None):
931 self.analyse_matrix(ChiSquare, matrix = matrix, analyse_type = 'chi2', dlgnb = 3)
933 def OnSimiTab(self, event, matrix = None):
934 self.analyse_matrix(DoSimi, matrix = matrix, analyse_type = 'simimatrix', dlgnb = 5)
936 def OnCHDReinert(self, event, matrix = None):
938 # matrix = self.tree.getmatrix()
939 #AnalyseQuest(self, matrix, parametres = {'type' : 'reinertmatrix'}, dlg = 3)
940 self.analyse_matrix(AnalyseQuest, matrix = matrix, analyse_type = 'reinertmatrix', dlgnb = 5)
942 def OnStudent(self, event):
948 def OnRCode(self, event):
954 def OnCHDSIM(self, event):
956 # print 'ATTENTION!!!!'
957 chdsim = ChdCluster(self)
958 if chdsim.val == wx.ID_OK:
963 # def OnCHDReinert(self, event):
965 # # print('PLUS DE BUG SUR ALCESTE QUESTIONNAIRE')
966 # self.quest = AnalyseQuest(self)
967 # if self.quest.val == wx.ID_OK:
972 def OnProto(self, evt, matrix = None) :
973 self.analyse_matrix(Prototypical, matrix = matrix, analyse_type = 'proto', dlgnb = 3)
974 #Prototypical(self, {'type' : 'proto'})
976 def OnSplitVar(self, evt, matrix = None):
978 matrix = self.tree.getmatrix()
979 self.analyse_matrix(SplitMatrixFromVar, matrix = matrix, analyse_type = 'splitvar', parametres = {'pathout': matrix.pathout.dirout}, dlgnb = 3)
980 #matrix = self.tree.getmatrix()
983 def OnSimiTxt(self, evt, corpus = None) :
984 # print 'PLUS DE BUG SUR SIMITXT'
986 #self.Text = SimiTxt(self)
988 corpus = self.tree.getcorpus()
989 self.Text = SimiTxt(self, corpus, parametres = {'type': 'simitxt'}, dlg = 3)
990 if self.Text.val == wx.ID_OK :
995 def OnWordCloud(self, evt, corpus = None) :
996 # print 'PLUS DE BUG SUR WORDCLOUD'
999 corpus = self.tree.getcorpus()
1000 self.Text = WordCloud(self, corpus, parametres = {'type' : 'wordcloud'}, dlg = 3)
1001 if self.Text.val == wx.ID_OK :
1006 def OnClusterCloud(self, corpus, parametres = None) :
1007 self.Text = ClusterCloud(self, corpus, parametres = parametres, dlg = 3)
1009 def OnAFCM(self, event):
1015 def OnTextStat(self, event, corpus = None):
1016 #print 'PAS DE BUG SUR TEXT STAT'
1019 corpus = self.tree.getcorpus()
1020 self.Text = Stat(self, corpus, parametres = {'type': 'stat'}, dlg = 7)
1022 if self.Text.val == wx.ID_OK :
1027 def OnTextSpec(self, event, corpus = None):
1029 #self.Text = AsLexico(self)
1030 #print('ATTENTION : PLUS DE BUG SUR LEXICO')
1032 corpus = self.tree.getcorpus()
1033 self.Text = Lexico(self, corpus, parametres = {'type' : 'spec'}, dlg = 3)
1034 if self.Text.val == wx.ID_OK :
1039 def OnTextAfcm(self, event):
1046 def import_factiva_xml(self,event):
1048 ImportFactiva(self, 'xml')
1052 def import_factiva_mail(self, evt) :
1054 ImportFactiva(self, 'mail')
1058 def import_factiva_txt(self, evt) :
1060 ImportFactiva(self, 'txt')
1064 def OnImportTXM(self, evt) :
1066 ImportFactiva(self, 'txm')
1070 def OnImportEuropress(self, evt) :
1072 ImportFactiva(self, 'euro')
1076 def ExtractTools(self, evt) :
1078 if ID == self.ID_splitvar :
1079 Extract(self, 'splitvar')
1080 elif ID == self.ID_extractmod :
1081 Extract(self, 'mods')
1082 elif ID == self.ID_extractthem :
1083 Extract(self, 'them')
1085 def OnTextReinert(self, event, corpus = None):
1087 #print('ATTENTION : PLUS DE BUG SUR ALCESTE')
1088 #RunAnalyse(self, corpus, Alceste, OptAlceste)
1090 corpus = self.tree.getcorpus()
1091 self.Text = Reinert(self, corpus, parametres = {'type': 'alceste'}, dlg = 6)
1092 if self.Text.val == wx.ID_OK:
1097 def OnPamSimple(self, event, corpus = None):
1100 corpus = self.tree.getcorpus()
1101 self.Text = AnalysePam(self, corpus, parametres = {'type' : 'pamtxt'}, dlg = 6)
1102 if self.Text.val == wx.ID_OK:
1107 def SimiCluster(self, parametres = {}, fromprof = False, tableau = None) :
1108 self.analyse_matrix(DoSimi, parametres = parametres, analyse_type = 'simiclustermatrix', matrix = tableau, dlgnb = 5)
1110 # def OnSimi(self,evt):
1112 #print 'ATTENTION !!!! VERGES'
1113 #print 'PLUS DE BUG SUR SIMI'
1114 # self.res = DoSimi(self, param = None)
1115 #self.res = Verges(self)
1116 # if self.res.val == wx.ID_OK :
1120 #################################################################
1122 def OnHelp(self, event):
1123 webbrowser.open('http://www.iramuteq.org/documentation')
1125 def OnPref(self, event):
1126 dlg = PrefDialog(self)
1127 dlg.CenterOnParent()
1128 self.val = dlg.ShowModal()
1131 if self.check_update:
1134 print 'pas de verif'
1136 #CheckRPackages(self)
1138 def OnOpenFromCmdl(self):
1140 if options.filename :
1141 if os.path.exists(options.filename):
1142 self.filename = os.path.abspath(options.filename)
1146 if os.path.exists(os.path.realpath(args[0])):
1147 self.filename = os.path.abspath(os.path.realpath(args[0]))
1153 if os.path.splitext(self.filename)[1] in ['.csv', '.xls', '.ods']:
1154 self.tableau = Tableau(self, self.filename)
1155 val = get_table_param(self, self.filename)
1156 if val == wx.ID_OK :
1157 self.tableau.make_content()
1158 OpenAnalyse(self, self.tableau.parametres)
1159 self.tree.OnItemAppend(self.tableau.parametres)
1160 #get_table_param(self, self.filename)
1161 #self.tableau.make_content()
1162 #self.tableau.show_tab()
1163 #open_data(self, self.filename)
1164 elif os.path.splitext(self.filename)[1] == '.txt':
1166 elif os.path.splitext(self.filename)[1] == '.ira' :
1167 #self.corpus = Corpus(self)
1168 #self.Text = OpenAnalyse(self, self.filename)
1169 OpenAnalyse(self, self.filename)
1171 print 'ce fichier n\'existe pas'
1175 class IntroPanel(wx.Panel):
1176 def __init__(self, parent):
1177 wx.Panel.__init__(self, parent)
1178 col = randint(0, 255)
1179 col1 = randint(0,255)
1180 col2 = randint(0,255)
1182 bckgrdcolor = wx.Colour(col, col1, col2)
1183 self.SetBackgroundColour(bckgrdcolor)
1184 txtcolour = wx.Colour(250, 250, 250)
1185 linkcolor = wx.Colour(255, 0, 0)
1186 sizer1 = wx.BoxSizer(wx.VERTICAL)
1187 sizer2 = wx.BoxSizer(wx.VERTICAL)
1188 sizer3 = wx.BoxSizer(wx.HORIZONTAL)
1189 sizer4 = wx.BoxSizer(wx.VERTICAL)
1190 sizer5 = wx.BoxSizer(wx.HORIZONTAL)
1191 grid_sizer_1 = wx.FlexGridSizer(1, 4, 0, 0)
1192 grid_sizer_3 = wx.FlexGridSizer(1, 4, 0, 0)
1193 grid_sizer_2 = wx.FlexGridSizer(1, 3, 0, 0)
1194 PanelPres = wx.Panel(self)
1195 PanelPres.SetBackgroundColour(bckgrdcolor)
1196 label_1 = wx.StaticText(self, -1, u"IRaMuTeQ", size=(-1, -1))
1197 label_1.SetFont(wx.Font(46, wx.TELETYPE, wx.NORMAL, wx.BOLD, 0, "Purisa"))
1198 label_1.SetForegroundColour(wx.RED)
1199 label2 = wx.StaticText(PanelPres, -1 , u'\nVersion ' + ConfigGlob.get('DEFAULT', 'version') + '\n')
1200 label2.SetForegroundColour(txtcolour)
1201 label2.SetBackgroundColour(bckgrdcolor)
1202 #label3 = wx.StaticText(PanelPres, -1 , u'Equipe ')
1203 #label3.SetForegroundColour(txtcolour)
1204 #label3.SetBackgroundColour(bckgrdcolor)
1205 self.hyper2 = hl.HyperLinkCtrl(PanelPres, wx.ID_ANY, u"REPERE", URL="http://repere.no-ip.org/")
1206 self.hyper2.SetColours(linkcolor, linkcolor, "RED")
1207 self.hyper2.SetBackgroundColour(bckgrdcolor)
1208 self.hyper2.EnableRollover(True)
1209 self.hyper2.SetUnderlines(False, False, True)
1210 self.hyper2.SetBold(True)
1211 self.hyper2.UpdateLink()
1212 label_lerass = wx.StaticText(PanelPres, -1, u'Laboratoire ')
1213 label_lerass.SetForegroundColour(txtcolour)
1214 label_lerass.SetBackgroundColour(bckgrdcolor)
1215 self.hyper_lerass = hl.HyperLinkCtrl(PanelPres, -1, u'LERASS', URL="http://www.lerass.com")
1216 self.hyper_lerass.SetColours(linkcolor, linkcolor, "RED")
1217 self.hyper_lerass.SetBackgroundColour(bckgrdcolor)
1218 self.hyper_lerass.EnableRollover(True)
1219 self.hyper_lerass.SetUnderlines(False, False, True)
1220 self.hyper_lerass.SetBold(True)
1221 self.hyper_lerass.UpdateLink()
1222 blank = wx.StaticText(PanelPres, -1, u'\n')
1223 blank1 = wx.StaticText(PanelPres, -1, u'\n')
1224 labellicence = wx.StaticText(PanelPres, -1, _(u"License GNU GPL").decode('utf8'))
1225 labellicence.SetForegroundColour(txtcolour)
1226 labellicence.SetBackgroundColour(bckgrdcolor)
1227 labelcopy = wx.StaticText(PanelPres, -1, ConfigGlob.get('DEFAULT', 'copyright'))
1228 labelcopy.SetForegroundColour(txtcolour)
1229 labelcopy.SetBackgroundColour(bckgrdcolor)
1230 python_img = wx.Image(os.path.join(ImagePath,'python-logo.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
1231 r_img = wx.Image(os.path.join(ImagePath,'Rlogo.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
1232 lexique_img = wx.Image(os.path.join(ImagePath,'LexTexte4.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
1233 but_python = wx.BitmapButton(self, -1, python_img)
1234 but_lexique = wx.BitmapButton(self, -1, lexique_img)
1235 but_r = wx.BitmapButton(self, -1, r_img)
1236 self.Bind(wx.EVT_BUTTON, self.OnPython, but_python)
1237 self.Bind(wx.EVT_BUTTON, self.OnLexique, but_lexique)
1238 self.Bind(wx.EVT_BUTTON, self.OnR, but_r)
1241 #grid_sizer_1.Add(label3, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1242 grid_sizer_1.Add(self.hyper2, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1243 grid_sizer_3.Add(label_lerass, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1244 grid_sizer_3.Add(self.hyper_lerass, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1245 sizer4.Add(label_1, 0, wx.ALIGN_CENTER, 5)
1246 sizer2.Add(label2, 0, wx.ALIGN_CENTER, 5)
1247 #sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1248 sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1249 sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1250 sizer2.Add(grid_sizer_3, 0, wx.ALIGN_CENTER, 5)
1251 sizer2.Add(wx.StaticText(PanelPres, -1, u' '), 0, wx.ALIGN_CENTER, 5)
1252 #sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1253 #sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1254 sizer2.Add(grid_sizer_1, 0, wx.ALIGN_CENTER, 5)
1255 sizer2.Add(labellicence, 0, wx.ALIGN_CENTER, 5)
1256 sizer2.Add(labelcopy, 0, wx.ALIGN_CENTER, 5)
1257 sizer1.Add(sizer4, 1, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1258 PanelPres.SetSizer(sizer2)
1259 sizer5.Add(blank, 1, wx.EXPAND | wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 2)
1260 sizer5.Add(PanelPres, 1, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1261 sizer5.Add(blank1, 1, wx.ALIGN_CENTER_HORIZONTAL,2)
1262 grid_sizer_2.Add(but_python, 1, wx.ALIGN_CENTER_HORIZONTAL| wx.ALIGN_CENTER_VERTICAL)
1263 grid_sizer_2.Add(but_lexique, 1,wx.ALIGN_CENTER_HORIZONTAL| wx.ALIGN_CENTER_VERTICAL)
1264 grid_sizer_2.Add(but_r, 1, wx.ALIGN_CENTER_HORIZONTAL| wx.ALIGN_CENTER_VERTICAL)
1266 sizer1.Add(sizer5, 3, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 1)
1267 sizer1.Add(grid_sizer_2, 1, wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL)
1268 self.SetSizer(sizer1)
1271 def OnPython(self,evt):
1272 webbrowser.open('http://www.python.org')
1274 def OnLexique(self,evt):
1275 webbrowser.open('http://www.lexique.org')
1278 webbrowser.open('http://www.r-project.org')
1280 class MySplashScreen(wx.SplashScreen):
1282 bmp = wx.Image(os.path.join(ImagePath, 'splash.png')).ConvertToBitmap()
1283 wx.SplashScreen.__init__(self, bmp,
1284 wx.SPLASH_CENTRE_ON_SCREEN | wx.SPLASH_TIMEOUT,
1286 self.Bind(wx.EVT_CLOSE, self.OnClose)
1287 self.fc = wx.FutureCall(1, self.ShowMain)
1289 def OnClose(self, evt):
1293 if self.fc.IsRunning():
1298 displaySize = wx.DisplaySize()
1299 w = displaySize[0]/1.2
1300 h = displaySize[1]/1.2
1301 frame = IraFrame(None, -1, "IRaMuTeQ " + ConfigGlob.get('DEFAULT', 'version'), size=(w, h))
1305 frame.OnOpenFromCmdl()
1306 # if self.fc.IsRunning():
1308 #wx.CallAfter(frame.ShowTip)
1310 class MyApp(wx.App):
1313 Create and show the splash screen. It will then create and show
1314 the main frame when it is time to do so.
1316 wx.SystemOptions.SetOptionInt("mac.window-plain-transition", 1)
1317 self.SetAppName("Iramuteq")
1318 splash = MySplashScreen()
1326 if __name__ == '__main__':