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 'europress' : 'europress.png',
188 #####################################################################
190 class IraFrame(wx.Frame):
191 def __init__(self, parent, id= -1, title="", pos=wx.DefaultPosition,
192 size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE |
195 log.info('Starting...')
196 wx.Frame.__init__(self, parent, id, title, pos, size, style)
198 self.AppliPath = AppliPath
199 self.images_path = os.path.join(AppliPath,'images')
200 self.UserConfigPath = UserConfigPath
201 #self.RscriptsPath = ConstructRscriptsPath(AppliPath)
202 self.RscriptsPath = PathOut(dirout=os.path.join(AppliPath, 'Rscripts'))
203 self.RscriptsPath.basefiles(RscriptsPath)
204 #self.DictPath = ConstructDicoPath(AppliPath)
205 self.DictPath = ConstructDicoPath(UserConfigPath)
206 self.ConfigGlob = ConfigGlob
207 self.ConfigPath = ConstructConfigPath(UserConfigPath)
208 self.pref = RawConfigParser()
209 #workaround for import problem
210 self.SimiFromCluster = SimiFromCluster
212 gettext.install('iramuteq', os.path.join(AppliPath,'locale'), unicode=True)
213 #langues = ['fr_FR', 'en', 'pt_PT']
217 for langue in code_langues :
218 self.preslangue[langue] = gettext.translation("iramuteq", os.path.join(AppliPath,'locale'), languages=[code_langues[langue]])
220 #self.presLan_fr = gettext.translation("iramuteq", os.path.join(AppliPath,'locale'), languages=['fr_FR'])
221 #self.presLan_en = gettext.translation("iramuteq", os.path.join(AppliPath,'locale'), languages=['en'])
222 # tell FrameManager to manage this frame
223 #self._mgr = wx.aui.AuiManager()
224 self._mgr = aui.AuiManager()
225 self._mgr.SetManagedWindow(self)
228 #--------------------------------------------------------------------------------
229 self.images_analyses = images_analyses
230 for img in images_analyses :
231 self.images_analyses[img] = wx.Image(os.path.join(self.images_path, self.images_analyses[img]), wx.BITMAP_TYPE_PNG).Scale(16,16).ConvertToBitmap()
232 self.mb = wx.MenuBar()
234 file_menu = wx.Menu()
235 item = wx.MenuItem(file_menu, ID_OpenData, _(u"Open a matrix").decode('utf8'), _(u"Open a matrix").decode('utf8'))
236 #item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN))
237 item.SetBitmap(self.images_analyses['matroot'])
238 file_menu.AppendItem(item)
240 item = wx.MenuItem(file_menu, ID_OpenText, _(u"Open a text corpus").decode('utf8'), _(u"Open a text corpus").decode('utf8'))
241 item.SetBitmap(self.images_analyses['textroot'])
242 file_menu.AppendItem(item)
244 item = wx.MenuItem(file_menu, ID_OnOpenAnalyse, _(u"Open an analysis").decode('utf8'), _(u"Open an analysis").decode('utf8'))
245 item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN))
246 file_menu.AppendItem(item)
249 menuFactiva = wx.Menu()
250 fact_from_xml = wx.MenuItem(menuFactiva, wx.ID_ANY, _(u"from xml").decode('utf8'))
251 fact_from_mail = wx.MenuItem(menuFactiva, wx.ID_ANY, _(u"from mail").decode('utf8'))
252 fact_from_txt = wx.MenuItem(menuFactiva, wx.ID_ANY, _(u"from copy/paste").decode('utf8'))
253 menuFactiva.AppendItem(fact_from_xml)
254 menuFactiva.AppendItem(fact_from_mail)
255 menuFactiva.AppendItem(fact_from_txt)
256 file_menu.AppendMenu(-1, _(u"Import from factiva").decode('utf8'), menuFactiva)
258 item = wx.MenuItem(file_menu, ID_ImportTXM, _(u"Import from TXM").decode('utf8'), _(u"Import from TXM").decode('utf8'))
259 item.SetBitmap(self.images_analyses['TXM'])
260 file_menu.AppendItem(item)
262 item = wx.MenuItem(file_menu, ID_ImportEuro, _(u"Import from Europress").decode('utf8'), _(u"Import from Europress").decode('utf8'))
263 item.SetBitmap(self.images_analyses['europress'])
264 file_menu.AppendItem(item)
266 menuTools = wx.Menu()
267 splitvar = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Split from variable").decode('utf8'))
268 extractmod = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Extract mods").decode('utf8'))
269 extractthem = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Extract thematics").decode('utf8'))
270 menuTools.AppendItem(splitvar)
271 menuTools.AppendItem(extractmod)
272 menuTools.AppendItem(extractthem)
273 self.ID_splitvar = splitvar.GetId()
274 self.ID_extractmod = extractmod.GetId()
275 self.ID_extractthem = extractthem.GetId()
276 file_menu.AppendMenu(-1, _(u"Tools").decode('utf8'), menuTools)
279 #item = wx.MenuItem(file_menu, ID_SaveTab, _(u"Save tab as...").decode('utf8'), _(u"Save tab as...").decode('utf8'))
280 #item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_SAVE_AS))
281 #file_menu.AppendItem(item)
283 file_menu.Append(wx.ID_EXIT, _(u"Exit").decode('utf8'))
285 edit_menu = wx.Menu()
286 edit_menu.Append(wx.ID_PREFERENCES, _(u'Preferences').decode('utf8'))
288 view_menu = wx.Menu()
289 view_menu.Append(ID_ACCEUIL, _(u"Home page").decode('utf8'))
290 view_menu.Append(ID_VIEWDATA, _(u"Show data").decode('utf8'))
291 view_menu.Append(ID_RESULT, _(u'Show results').decode('utf8'))
292 #view_menu.AppendSeparator()
293 matrix_menu = wx.Menu()
294 matanalyses = [[ID_Freq, _(u"Frequencies").decode('utf8'), 'freq'],
295 [ID_Freq, _(u"Multiple Frequencies").decode('utf8'), 'freqmulti'],
296 [ID_Chi2, _(u"Chi2").decode('utf8'), 'chi2'],
297 {'name' : _(u"Clustering").decode('utf8'),
298 'content' : [[ID_CHDReinert, _(u"Reinert's Method").decode('utf8'), 'reinertmatrix']]},
299 [ID_SIMI, _(u"Similarities Analysis").decode('utf8'), 'simimatrix'],
300 [ID_proto, _(u"Prototypical Analysis").decode('utf8'), 'proto'],
301 [ID_Splitfromvar, _(u"Split from variable").decode('utf8'), '']]
303 for analyse in matanalyses :
304 if not isinstance(analyse, dict) :
305 item = wx.MenuItem(matrix_menu, analyse[0], analyse[1])
306 item.SetBitmap(self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16)))
307 matrix_menu.AppendItem(item)
310 for subana in analyse['content'] :
311 item = wx.MenuItem(nmenu, subana[0], subana[1])
312 item.SetBitmap(self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)))
313 nmenu.AppendItem(item)
314 matrix_menu.AppendMenu(-1, analyse['name'], nmenu)
315 #item = wx.MenuItem(matrix_menu, ID_Freq, _(u"Frequencies").decode('utf8'))
316 #item.SetBitmap(self.images_analyses['freq'])
317 #matrix_menu.AppendItem(item)
318 #matrix_menu.Append(ID_Freq, _(u"Frequencies").decode('utf8'))
319 #item = wx.MenuItem(matrix_menu, ID_Freq, _(u"Multiple Frequencies").decode('utf8'))
320 #item.SetBitmap(self.images_analyses['freqmulti'])
321 #matrix_menu.Append(ID_FreqMulti, _(u'Multiple frequencies').decode('utf8'))
322 #matrix_menu.AppendItem(item)
323 #matrix_menu.Append(ID_Chi2, _(u"Chi2").decode('utf8'))
324 #matrix_menu.Append(ID_Student, u"t de Student")
325 #menu_classif = wx.Menu()
326 #menu_classif.Append(ID_CHDReinert, _(u"Reinert's Method").decode('utf8'))
327 #menu_classif.Append(ID_CHDSIM, u"Par matrice des distances")
328 #matrix_menu.AppendMenu(-1, _(u"Clustering").decode('utf8'), menu_classif)
329 #matrix_menu.Append(ID_AFCM, u"AFCM")
330 #matrix_menu.Append(ID_SIMI, _(u"Similarities Analysis").decode('utf8'))
331 #matrix_menu.Append(ID_proto, _(u"Prototypical Analysis").decode('utf8'))
332 ID_RCODE = wx.NewId()
333 #matrix_menu.Append(ID_RCODE, u"Code R...")
334 #menu_splittab = wx.Menu()
335 #ID_SPLITVAR = wx.NewId()
336 #splitvar = wx.MenuItem(menu_splittab, ID_SPLITVAR, _(u"Split from variable").decode('utf8'))
337 #menu_splittab.AppendItem(splitvar)
338 #matrix_menu.AppendMenu(-1, _(u"Split matrix").decode('utf8'), menu_splittab)
339 self.matrix_menu = matrix_menu
341 text_menu = wx.Menu()
342 analyses_text = [[ID_TEXTSTAT, _(u"Statistics").decode('utf8'), 'stat'],
343 [ID_ASLEX, _(u"Specificities and CA").decode('utf8'), 'spec'],
344 {'name' : _(u"Clustering").decode('utf8'),
345 'content' : [[ID_TEXTREINERT, _(u"Reinert's Method").decode('utf8'), 'alceste']]},
346 [ID_SimiTxt, _(u"Similarities Analysis").decode('utf8'), 'simitxt'],
347 [ID_WC, _(u"WordCloud").decode('utf8'), 'wordcloud'],
348 {'name' : _(u"Sub corpus").decode('utf8'),
349 'content' : [[ID_Subtxtfrommeta, _(u'Sub corpus from metadata').decode('utf8'), None],
350 [ID_Subtxtfromthem, _(u'Sub corpus from thematic').decode('utf8'), None]]},
353 for analyse in analyses_text :
354 if not isinstance(analyse, dict) :
355 item = wx.MenuItem(text_menu, analyse[0], analyse[1])
356 item.SetBitmap(self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16)))
357 text_menu.AppendItem(item)
360 for subana in analyse['content'] :
361 item = wx.MenuItem(nmenu, subana[0], subana[1])
362 item.SetBitmap(self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)))
363 nmenu.AppendItem(item)
364 text_menu.AppendMenu(-1, analyse['name'], nmenu)
365 #text_menu.Append(ID_CHECKCORPUS, u"Vérifier le corpus")
366 # text_menu.Append(ID_TEXTSTAT, _(u"Statistics").decode('utf8'))
367 # text_menu.Append(ID_ASLEX, _(u"Specificities and CA").decode('utf8'))
368 # #text_menu.Append(ID_TEXTAFCM, u"AFC sur UCI / Vocabulaire")
369 # menu_classiftxt = wx.Menu()
370 # menu_classiftxt.Append(ID_TEXTREINERT, _(u"Reinert's Method").decode('utf8'))
371 # #menu_classiftxt.Append(ID_TEXTPAM, u"Par matrice des distances")
372 # text_menu.AppendMenu(-1, _(u"Clustering").decode('utf8'), menu_classiftxt)
373 # text_menu.Append(ID_SimiTxt, _(u"Similarities Analysis").decode('utf8'))
375 # text_menu.Append(ID_WC, _(u"WordCloud").decode('utf8'))
376 self.text_menu = text_menu
378 help_menu = wx.Menu()
379 help_menu.Append(wx.ID_ABOUT, _(u"About...").decode('utf8'))
380 help_menu.Append(wx.ID_HELP, _(u"Online help...").decode('utf8'))
382 self.mb.Append(file_menu, _(u"File").decode('utf8'))
383 self.mb.Append(edit_menu, _(u"Edition").decode('utf8'))
384 self.mb.Append(view_menu, _(u"View").decode('utf8'))
385 self.mb.Append(matrix_menu, _(u"Matrix analysis").decode('utf8'))
386 self.mb.Append(text_menu, _(u"Text analysis").decode('utf8'))
387 self.mb.Append(help_menu, _(u"Help").decode('utf8'))
389 self.SetMenuBar(self.mb)
390 #--------------------------------------------------------------------
391 self.statusbar = self.CreateStatusBar(2, wx.ST_SIZEGRIP)
392 self.statusbar.SetStatusWidths([-2, -3])
393 self.statusbar.SetStatusText(_(u"Ready").decode('utf8'), 0)
394 self.statusbar.SetStatusText(_(u"Welcome").decode('utf8'), 1)
396 # min size for the frame itself isn't completely done.
397 # see the end up FrameManager::Update() for the test
398 # code. For now, just hard code a frame minimum size
399 self.SetMinSize(wx.Size(400, 400))
401 # create some toolbars
402 tb1 = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
403 wx.TB_FLAT | wx.TB_NODIVIDER)
404 tb1.SetToolBitmapSize(wx.Size(16, 16))
405 tb1.AddLabelTool(ID_OpenData, "OpenData", self.images_analyses['matroot'], shortHelp=_(u"Matrix").decode('utf8'), longHelp=_(u"Open a matrix").decode('utf8'))
407 tb1.AddLabelTool(ID_OpenText, "OpenText", self.images_analyses['textroot'], shortHelp=_(u"Text").decode('utf8'), longHelp=_(u"Open a text corpus").decode('utf8'))
411 tb_text = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
412 wx.TB_FLAT | wx.TB_NODIVIDER)
413 for analyse in analyses_text :
414 if not isinstance(analyse, dict) :
415 tb_text.AddLabelTool(analyse[0], analyse[1], self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16)), shortHelp = analyse[1], longHelp = analyse[1])
417 for subana in analyse['content'] :
418 tb_text.AddLabelTool(subana[0], subana[1], self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)), shortHelp = subana[1], longHelp = subana[1])
421 tb_mat = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
422 wx.TB_FLAT | wx.TB_NODIVIDER)
423 for analyse in matanalyses :
424 if not isinstance(analyse, dict) :
425 tb_mat.AddLabelTool(analyse[0], analyse[1], self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16)), shortHelp = analyse[1], longHelp = analyse[1])
427 for subana in analyse['content'] :
428 tb_mat.AddLabelTool(subana[0], subana[1], self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)), shortHelp = subana[1], longHelp = subana[1])
430 #------------------------------------------------------------------------------------------------
432 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)
434 #self._mgr.AddPane(self.text_ctrl_txt, wx.aui.AuiPaneInfo().
435 # Name("Text").CenterPane())
436 self._mgr.AddPane(self.text_ctrl_txt, aui.AuiPaneInfo().
437 Name("Text").CenterPane())
438 #self._mgr.AddPane(IntroPanel(self), wx.aui.AuiPaneInfo().Name("Intro_Text").
440 self._mgr.AddPane(IntroPanel(self), aui.AuiPaneInfo().Name("Intro_Text").
442 #if not os.path.exists(os.path.join(UserConfigPath, 'history.db')) :
443 # with open(os.path.join(UserConfigPath, 'history.db'), 'w') as f :
445 self.history = History(os.path.join(UserConfigPath, 'history.db'))
446 self.tree = LeftTree(self)
447 self._mgr.AddPane(self.tree, aui.AuiPaneInfo().Name("lefttree").Caption(_(u"Historic").decode('utf8')).
448 Left().MinSize(wx.Size(200,500)).Layer(1).Position(1).CloseButton(False).MaximizeButton(True).
449 MinimizeButton(True))
451 #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)
452 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)
453 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
454 self.nb.SetAGWWindowStyleFlag(notebook_flags)
455 self.nb.SetArtProvider(aui.ChromeTabArt())
456 #self.nb.SetArtProvider(aui.VC8TabArt())
457 #self.nb.parent = self
458 #self._notebook_style = aui.AUI_NB_DEFAULT_STYLE | aui.AUI_NB_TAB_EXTERNAL_MOVE | wx.NO_BORDER
459 #self._mgr.AddPane(self.nb, wx.aui.AuiPaneInfo().
460 # Name("Tab_content").
462 self._mgr.AddPane(self.nb, aui.AuiPaneInfo().
466 #self._mgr.AddPane(self.Sheet, wx.aui.AuiPaneInfo().Name("Data").CenterPane())
467 #self._mgr.AddPane(self.Sheet, aui.AuiPaneInfo().Name("Data").CenterPane())
468 self.nb.Bind(aui.EVT_AUINOTEBOOK_PAGE_CLOSE, self.OnCloseTab)
469 self.nb.Bind(aui.EVT_AUINOTEBOOK_PAGE_CHANGED, self.OnPageChanged)
470 # add the toolbars to the manager
472 #self._mgr.AddPane(tb1, wx.aui.AuiPaneInfo().
473 # Name("tb1").Caption("Fichiers").
474 # ToolbarPane().Top().
475 # LeftDockable(False).RightDockable(False))
476 self._mgr.AddPane(tb1, aui.AuiPaneInfo().
477 Name("tb1").Caption("Fichiers").
479 LeftDockable(True).RightDockable(False))
481 self._mgr.AddPane(tb_text, aui.AuiPaneInfo().
482 Name("tb_text").Caption("analyse_text").
484 LeftDockable(True).RightDockable(False))
486 self._mgr.AddPane(tb_mat, aui.AuiPaneInfo().
487 Name("tb_mat").Caption("analyse_matrix").
489 LeftDockable(True).RightDockable(False))
491 self._mgr.GetPane('tb_text').Hide()
492 self._mgr.GetPane('tb_mat').Hide()
494 self.ShowAPane("Intro_Text")
495 self._mgr.GetPane("lefttree").Show()
496 self._mgr.GetPane("classif_tb").Hide()
497 # "commit" all changes made to FrameManager
500 # Show How To Use The Closing Panes Event
501 ##################################################################
502 self.Bind(wx.EVT_MENU, self.OnAcceuil, id=ID_ACCEUIL)
503 self.Bind(wx.EVT_MENU, self.OnViewData, id=ID_VIEWDATA)
504 self.Bind(wx.EVT_MENU, self.ShowTab, id=ID_RESULT)
505 self.Bind(wx.EVT_MENU, self.OnOpenData, id=ID_OpenData)
506 self.Bind(wx.EVT_MENU, self.OnOpenText, id=ID_OpenText)
507 self.Bind(wx.EVT_MENU, self.OnOpenAnalyse, id=ID_OnOpenAnalyse)
508 self.Bind(wx.EVT_MENU, self.import_factiva_xml, fact_from_xml)
509 self.Bind(wx.EVT_MENU, self.import_factiva_mail, fact_from_mail)
510 self.Bind(wx.EVT_MENU, self.import_factiva_txt, fact_from_txt)
511 self.Bind(wx.EVT_MENU, self.ExtractTools, splitvar)
512 self.Bind(wx.EVT_MENU, self.ExtractTools, extractmod)
513 self.Bind(wx.EVT_MENU, self.ExtractTools, extractthem)
514 self.Bind(wx.EVT_MENU, self.OnFreq, id=ID_Freq)
515 self.Bind(wx.EVT_MENU, self.OnFreqMulti, id=ID_FreqMulti)
516 self.Bind(wx.EVT_MENU, self.OnChi2, id=ID_Chi2)
517 self.Bind(wx.EVT_MENU, self.OnStudent, id=ID_Student)
518 self.Bind(wx.EVT_MENU, self.OnCHDSIM, id=ID_CHDSIM)
519 self.Bind(wx.EVT_MENU, self.OnCHDReinert, id=ID_CHDReinert)
520 self.Bind(wx.EVT_MENU, self.OnAFCM, id=ID_AFCM)
521 self.Bind(wx.EVT_MENU, self.OnProto, id=ID_proto)
522 self.Bind(wx.EVT_MENU, self.OnSplitVar, id = ID_Splitfromvar)
523 #self.Bind(wx.EVT_MENU, self.OnRCode, id=ID_RCODE)
524 #self.Bind(wx.EVT_MENU, self.OnSplitVar, id=ID_SPLITVAR)
525 #self.Bind(wx.EVT_MENU, self.OnCheckcorpus, id = ID_CHECKCORPUS)
526 self.Bind(wx.EVT_MENU, self.OnTextStat, id=ID_TEXTSTAT)
527 self.Bind(wx.EVT_MENU, self.OnTextSpec, id=ID_ASLEX)
528 self.Bind(wx.EVT_MENU, self.OnTextAfcm, id=ID_TEXTAFCM)
529 self.Bind(wx.EVT_MENU, self.OnTextReinert, id=ID_TEXTREINERT)
530 self.Bind(wx.EVT_MENU, self.OnPamSimple, id=ID_TEXTPAM)
531 self.Bind(wx.EVT_MENU, self.OnSimiTxt, id=ID_SimiTxt)
532 self.Bind(wx.EVT_MENU, self.OnWordCloud, id=ID_WC)
533 self.Bind(wx.EVT_MENU, self.OnSubText, id = ID_Subtxtfrommeta)
534 self.Bind(wx.EVT_MENU, self.OnSubText, id = ID_Subtxtfromthem)
535 self.Bind(wx.EVT_MENU, self.OnSimiTab, id=ID_SIMI)
536 self.Bind(wx.EVT_MENU, self.OnExit, id=wx.ID_EXIT)
537 #self.Bind(wx.EVT_MENU, self.OnSaveTabAs, id=ID_SaveTab)
538 self.Bind(wx.EVT_MENU, self.OnAbout, id=wx.ID_ABOUT)
539 self.Bind(wx.EVT_MENU, self.OnHelp, id=wx.ID_HELP)
540 self.Bind(wx.EVT_MENU, self.OnPref, id=wx.ID_PREFERENCES)
541 self.Bind(wx.EVT_MENU, self.OnImportTXM, id=ID_ImportTXM)
542 self.Bind(wx.EVT_MENU, self.OnImportEuropress, id=ID_ImportEuro)
543 self.Bind(wx.EVT_CLOSE, self.OnClose)
544 ##################################################################
545 flags = self._mgr.GetAGWFlags()
546 #flags &= ~wx.aui.AUI_MGR_TRANSPARENT_HINT
547 #flags &= ~wx.aui.AUI_MGR_VENETIAN_BLINDS_HINT
548 #flags &= ~wx.aui.AUI_MGR_RECTANGLE_HINT
549 flags &= ~(aui.AUI_MGR_RECTANGLE_HINT | aui.AUI_MGR_ALLOW_FLOATING)
550 self._mgr.SetAGWFlags(self._mgr.GetAGWFlags() ^ (aui.AUI_MGR_RECTANGLE_HINT | aui.AUI_MGR_ALLOW_FLOATING))
551 self._mgr.GetArtProvider().SetMetric(aui.AUI_DOCKART_GRADIENT_TYPE, aui.AUI_GRADIENT_HORIZONTAL)
552 self.GetDockArt().SetColor(aui.AUI_DOCKART_ACTIVE_CAPTION_GRADIENT_COLOUR, "#00FFF9")
555 self._icon = wx.Icon(os.path.join(ImagePath, "iraicone.ico"), wx.BITMAP_TYPE_ICO)
556 self.SetIcon(self._icon)
557 ##########################
559 self.input_path = [False]
560 self.TEMPDIR = tempfile.mkdtemp('iramuteq')
561 self.FileTabList = []
567 self.g_header = False
574 self.SysEncoding = sys.getdefaultencoding()
575 self.syscoding = sys.getdefaultencoding()
576 #print 'SysEncoding',self.SysEncoding
577 if self.SysEncoding == 'mac-roman' : self.SysEncoding = 'MacRoman'
580 ##############################################################@
581 self.DisEnSaveTabAs(False)
582 self.ShowMenu('view', False)
583 self.ShowMenu('matrix', False)
584 self.ShowMenu('text', False)
595 def finish_init(self) :
597 self.pref.read(self.ConfigPath['preferences'])
600 self.pref.read(self.ConfigPath['preferences'])
607 self.pref.read(self.ConfigPath['preferences'])
609 self.sound = self.pref.getboolean('iramuteq', 'sound')
610 self.check_update = self.pref.getboolean('iramuteq', 'checkupdate')
611 self.version = ConfigGlob.get('DEFAULT', 'version')
612 #configuration des chemins de R
613 self.PathPath = ConfigParser()
614 self.PathPath.read(ConfigPath['path'])
616 if not CheckRPath(self.PathPath) :
617 if sys.platform == 'win32':
618 BestRPath = FindRPAthWin32()
620 BestRPath = FindRPathNix()
622 self.PathPath.set('PATHS', 'rpath', BestRPath)
623 with open(ConfigPath['path'], 'w') as f :
624 self.PathPath.write(f)
628 self.RPath = self.PathPath.get('PATHS', 'rpath')
631 if not RLibsAreInstalled(self) :
634 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'),
635 _(u"If R is installed, report its path in Preferences.").decode('utf8'),
636 _(u"IRaMuTeQ does not work without R.").decode('utf8')])
637 dlg = wx.MessageDialog(self, msg, _(u"Problem").decode('utf8'), wx.OK | wx.NO_DEFAULT | wx.ICON_WARNING)
639 if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
643 def setlangue(self) :
644 self.pref.read(self.ConfigPath['preferences'])
646 guilangue = self.pref.get('iramuteq', 'guilanguage')
648 guilangue = DefaultConf.get('iramuteq', 'guilanguage')
649 self.preslangue.get(guilangue, 'english').install()
651 def OnVerif(self, evt) :
652 pack = CheckRPackages(self)
654 dlg = wx.MessageDialog(self, _(u"Installation OK").decode('utf8'), _(u"Installation").decode('utf8'), wx.OK | wx.ICON_INFORMATION | wx.STAY_ON_TOP)
656 if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
659 def DisEnSaveTabAs(self, DISEN):
661 file_menu = self.mb.GetMenu(0)
662 items = file_menu.GetMenuItems()
664 if item.GetId() == ID_SaveTab :
667 def ShowMenu(self, menu, Show=True):
671 self._mgr.GetPane('tb_text').Show()
673 self._mgr.GetPane('tb_text').Hide()
674 elif menu == 'matrix' :
677 self._mgr.GetPane('tb_mat').Show()
679 self._mgr.GetPane('tb_mat').Hide()
680 elif menu == 'view' :
685 #menu_pos = self.mb.FindMenu(menu)
686 if not menu_pos is None :
687 self.mb.EnableTop(menu_pos, Show)
688 self.mb.UpdateMenus()
691 #--------------------------------------------------------------------
692 def OnClose(self, event):
694 with open(self.ConfigPath['path'], 'w') as f :
695 self.PathPath.write(f)
700 def OnOpenData(self, event):
701 inputname, self.input_path = OnOpen(self, "Data")
703 #filename = self.input_path[0]
704 self.tableau = Tableau(self,os.path.abspath(self.input_path[0]))
705 val = get_table_param(self, self.input_path[0])
707 busy = wx.BusyInfo(_("Please wait...").decode('utf8'), self)
710 self.tableau.make_content()
711 OpenAnalyse(self, self.tableau.parametres)
712 self.tree.OnItemAppend(self.tableau.parametres)
717 #self.tableau.show_tab()
719 def OnOpenAnalyse(self, event):
720 self.AnalysePath = OnOpen(self, "Analyse")
721 if self.AnalysePath :
722 OpenAnalyse(self, self.AnalysePath[1][0], True)
723 self.ShowMenu('view')
725 def OnOpenText(self, event):
726 inputname, self.input_path = OnOpen(self, "Texte")
727 self.filename = self.input_path[0]
731 def OnViewData(self, event):
732 if self.type == "Data":
733 if not self.DataPop :
734 self.Sheet.Populate(self.content)
737 self.ShowAPane(u"Data")
738 elif self.type == "Texte" or self.type == 'Analyse' :
739 if not self.DataTxt :
740 self.text_ctrl_txt.Clear()
741 self.text_ctrl_txt.write(self.content)
742 self.text_ctrl_txt.ShowPosition(0)
745 self.ShowAPane(u"Text")
748 def OnSubText(self, evt, corpus = None, parametres = None):
750 corpus = self.tree.getcorpus()
751 if evt.GetId() == ID_Subtxtfrommeta :
752 parametres = {'frommeta' : True}
753 elif evt.GetId() == ID_Subtxtfromthem :
754 parametres = {'fromtheme' : True}
755 builder = SubBuilder(self, corpus, parametres)
756 if builder.res == wx.ID_OK :
757 busy = wx.BusyInfo(_("Please wait...").decode('utf8'), self)
759 corpus = builder.doanalyse()
760 self.history.add(corpus.parametres)
761 self.tree.OnItemAppend(corpus.parametres)
762 OpenAnalyse(self, corpus.parametres)
766 dlg = wx.ProgressDialog("Ouverture...",
767 "Veuillez patienter...",
770 style=wx.PD_APP_MODAL | wx.PD_AUTO_HIDE | wx.PD_ELAPSED_TIME | wx.PD_CAN_ABORT
773 builder = Builder(self, dlg)
774 if builder.res == wx.ID_OK :
776 corpus = builder.doanalyse()
777 self.history.add(corpus.parametres)
778 self.tree.OnItemAppend(corpus.parametres)
779 OpenAnalyse(self, corpus.parametres)
785 keepGoing = dlg.Update(count, u"Lecture du fichier")
786 self.ShowMenu('view')
787 self.ShowMenu('text')
788 self.ShowMenu('matrix', False)
793 keepGoing = dlg.Update(count, u"Chargement du dictionnaire")
795 #self.OnViewData(wx.EVT_BUTTON)
797 def OnExit(self, event):
800 def OnAbout(self, event):
801 info = wx.AboutDialogInfo()
802 info.Name = ConfigGlob.get('DEFAULT', 'name')
803 info.Version = ConfigGlob.get('DEFAULT', 'version')
804 info.Copyright = ConfigGlob.get('DEFAULT', 'copyright')
805 info.Translators = ConfigGlob.get('DEFAULT', 'translators').decode('utf8').split(';')
806 info.Description = u"""
807 Interface de R pour les Analyses Multidimensionnelles
808 de Textes et de Questionnaires
811 construit avec des logiciels libres.
817 info.WebSite = ("http://www.iramuteq.org", u"Site web IRaMuTeQ")
818 dev = ConfigGlob.get('DEFAULT', 'dev').decode('utf8').split(';')
819 info.Developers = dev
820 info.License = u"""Iramuteq est un logiciel libre ; vous pouvez le diffuser et/ou le modifier
821 suivant les termes de la Licence Publique Générale GNU telle que publiée
822 par la Free Software Foundation ; soit la version 2 de cette licence,
823 soit (à votre convenance) une version ultérieure.
825 Iramuteq est diffusé dans l'espoir qu'il sera utile,
826 mais SANS AUCUNE GARANTIE ; sans même une garantie implicite
827 de COMMERCIALISATION ou d'ADÉQUATION À UN USAGE PARTICULIER.
828 Voyez la Licence Publique Générale GNU pour plus de détails.
830 Vous devriez avoir reçu une copie de la Licence Publique Générale GNU
831 avec Iramuteq ; sinon, veuillez écrire à la Free Software Foundation,
832 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
835 def GetDockArt(self):
836 return self._mgr.GetArtProvider()
841 def OnPageChanged(self, event) :
842 new = event.GetSelection()
843 nobject = event.GetEventObject()
844 parent = nobject.GetParent()
845 if isinstance(parent, IraFrame) :
846 npage = self.nb.GetPage(new)
847 if 'parametres' in dir(npage) :
848 self.tree.GiveFocus(uuid=npage.parametres['uuid'])
849 if npage.parametres.get('matrix', False) :
850 self.ShowMenu('text', False)
851 self.ShowMenu('matrix', True)
852 elif npage.parametres.get('corpus', False) :
853 self.ShowMenu('text')
854 self.ShowMenu('matrix', False)
856 def OnCloseTab(self, evt):
857 #log.info('Closing tab %s' % str(evt.GetEventObject()))
858 ctrl = evt.GetEventObject()
859 if isinstance(ctrl.GetParent(), aui.AuiNotebook) or isinstance(ctrl.GetParent(), wx.Panel):
863 page = self.nb.GetPage(self.nb.GetSelection())
864 if 'parametres' in dir(page) and isinstance(ctrl.GetParent(), IraFrame) :
865 self.history.rmtab(page.parametres)
866 self.tree.CloseItem(uuid = page.parametres['uuid'])
867 TabTitle = self.nb.GetPageText(self.nb.GetSelection())
869 if self.nb.GetPageCount() == 1 and not notebook :
872 def LastTabClose(self) :
873 if self.nb.GetPageCount() == 1 :
874 #self.DisEnSaveTabAs(False)
876 self.ShowAPane("Text")
878 self.ShowAPane("Data")
880 self.ShowAPane("Intro_Text")
882 def GetStartPosition(self):
886 pt = self.ClientToScreen(wx.Point(0, 0))
888 return wx.Point(pt.x + x, pt.y + x)
890 def ShowAPane(self, panel):
891 for pane in self._mgr.GetAllPanes() :
892 if not pane.IsToolbar() and pane.name != 'lefttree':
894 self._mgr.GetPane(panel).Show()
897 def OnAcceuil(self, event):
898 self.ShowAPane(u"Intro_Text")
901 def CreateHTMLCtrl(self):
902 ctrl = wx.html.HtmlWindow(self, -1, wx.DefaultPosition, wx.Size(400, 300))
903 if "gtk2" in wx.PlatformInfo:
904 ctrl.SetStandardFonts()
905 ctrl.SetPage(u"text")
908 def ShowTab(self, evt):
909 self.ShowAPane("Tab_content")
911 ################################################################
913 ################################################################
914 def analyse_matrix(self, analyse, analyse_type = '', matrix = None, parametres = None, dlgnb = 1):
916 matrix = self.tree.getmatrix()
917 if parametres is not None :
918 parametres['type'] = analyse_type
920 parametres = {'type' : analyse_type}
922 #print 'plus de bug@@@@@@@@@@@@@@@@@@@@@@'
923 analyse(self, matrix, parametres = parametres, dlg = dlgnb)
927 def OnFreq(self, event, matrix = None):
928 self.analyse_matrix(Frequences, analyse_type = 'freq', matrix = matrix, dlgnb = 3)
930 def OnFreqMulti(self, event, matrix = None):
931 self.analyse_matrix(FreqMultiple, analyse_type = 'freqmulti', matrix = matrix, dlgnb = 3)
933 def OnChi2(self, event, matrix = None):
934 self.analyse_matrix(ChiSquare, matrix = matrix, analyse_type = 'chi2', dlgnb = 3)
936 def OnSimiTab(self, event, matrix = None):
937 self.analyse_matrix(DoSimi, matrix = matrix, analyse_type = 'simimatrix', dlgnb = 5)
939 def OnCHDReinert(self, event, matrix = None):
941 # matrix = self.tree.getmatrix()
942 #AnalyseQuest(self, matrix, parametres = {'type' : 'reinertmatrix'}, dlg = 3)
943 self.analyse_matrix(AnalyseQuest, matrix = matrix, analyse_type = 'reinertmatrix', dlgnb = 5)
945 def OnStudent(self, event):
951 def OnRCode(self, event):
957 def OnCHDSIM(self, event):
959 # print 'ATTENTION!!!!'
960 chdsim = ChdCluster(self)
961 if chdsim.val == wx.ID_OK:
966 # def OnCHDReinert(self, event):
968 # # print('PLUS DE BUG SUR ALCESTE QUESTIONNAIRE')
969 # self.quest = AnalyseQuest(self)
970 # if self.quest.val == wx.ID_OK:
975 def OnProto(self, evt, matrix = None) :
976 self.analyse_matrix(Prototypical, matrix = matrix, analyse_type = 'proto', dlgnb = 3)
977 #Prototypical(self, {'type' : 'proto'})
979 def OnSplitVar(self, evt, matrix = None):
981 matrix = self.tree.getmatrix()
982 self.analyse_matrix(SplitMatrixFromVar, matrix = matrix, analyse_type = 'splitvar', parametres = {'pathout': matrix.pathout.dirout}, dlgnb = 3)
983 #matrix = self.tree.getmatrix()
986 def OnSimiTxt(self, evt, corpus = None) :
987 # print 'PLUS DE BUG SUR SIMITXT'
989 #self.Text = SimiTxt(self)
991 corpus = self.tree.getcorpus()
992 self.Text = SimiTxt(self, corpus, parametres = {'type': 'simitxt'}, dlg = 3)
993 if self.Text.val == wx.ID_OK :
998 def OnWordCloud(self, evt, corpus = None) :
999 # print 'PLUS DE BUG SUR WORDCLOUD'
1002 corpus = self.tree.getcorpus()
1003 self.Text = WordCloud(self, corpus, parametres = {'type' : 'wordcloud'}, dlg = 3)
1004 if self.Text.val == wx.ID_OK :
1009 def OnClusterCloud(self, corpus, parametres = None) :
1010 self.Text = ClusterCloud(self, corpus, parametres = parametres, dlg = 3)
1012 def OnAFCM(self, event):
1018 def OnTextStat(self, event, corpus = None):
1019 #print 'PAS DE BUG SUR TEXT STAT'
1022 corpus = self.tree.getcorpus()
1023 self.Text = Stat(self, corpus, parametres = {'type': 'stat'}, dlg = 7)
1025 if self.Text.val == wx.ID_OK :
1030 def OnTextSpec(self, event, corpus = None):
1032 #self.Text = AsLexico(self)
1033 #print('ATTENTION : PLUS DE BUG SUR LEXICO')
1035 corpus = self.tree.getcorpus()
1036 self.Text = Lexico(self, corpus, parametres = {'type' : 'spec'}, dlg = 3)
1037 if self.Text.val == wx.ID_OK :
1042 def OnTextAfcm(self, event):
1049 def import_factiva_xml(self,event):
1051 ImportFactiva(self, 'xml')
1055 def import_factiva_mail(self, evt) :
1057 ImportFactiva(self, 'mail')
1061 def import_factiva_txt(self, evt) :
1063 ImportFactiva(self, 'txt')
1067 def OnImportTXM(self, evt) :
1069 ImportFactiva(self, 'txm')
1073 def OnImportEuropress(self, evt) :
1075 ImportFactiva(self, 'euro')
1079 def ExtractTools(self, evt) :
1081 if ID == self.ID_splitvar :
1082 Extract(self, 'splitvar')
1083 elif ID == self.ID_extractmod :
1084 Extract(self, 'mods')
1085 elif ID == self.ID_extractthem :
1086 Extract(self, 'them')
1088 def OnTextReinert(self, event, corpus = None):
1090 #print('ATTENTION : PLUS DE BUG SUR ALCESTE')
1091 #RunAnalyse(self, corpus, Alceste, OptAlceste)
1093 corpus = self.tree.getcorpus()
1094 self.Text = Reinert(self, corpus, parametres = {'type': 'alceste'}, dlg = 6)
1095 if self.Text.val == wx.ID_OK:
1100 def OnPamSimple(self, event, corpus = None):
1103 corpus = self.tree.getcorpus()
1104 self.Text = AnalysePam(self, corpus, parametres = {'type' : 'pamtxt'}, dlg = 6)
1105 if self.Text.val == wx.ID_OK:
1110 def SimiCluster(self, parametres = {}, fromprof = False, tableau = None) :
1111 self.analyse_matrix(DoSimi, parametres = parametres, analyse_type = 'simiclustermatrix', matrix = tableau, dlgnb = 5)
1113 # def OnSimi(self,evt):
1115 #print 'ATTENTION !!!! VERGES'
1116 #print 'PLUS DE BUG SUR SIMI'
1117 # self.res = DoSimi(self, param = None)
1118 #self.res = Verges(self)
1119 # if self.res.val == wx.ID_OK :
1123 #################################################################
1125 def OnHelp(self, event):
1126 webbrowser.open('http://www.iramuteq.org/documentation')
1128 def OnPref(self, event):
1129 dlg = PrefDialog(self)
1130 dlg.CenterOnParent()
1131 self.val = dlg.ShowModal()
1134 if self.check_update:
1137 print 'pas de verif'
1139 #CheckRPackages(self)
1141 def OnOpenFromCmdl(self):
1143 if options.filename :
1144 if os.path.exists(options.filename):
1145 self.filename = os.path.abspath(options.filename)
1149 if os.path.exists(os.path.realpath(args[0])):
1150 self.filename = os.path.abspath(os.path.realpath(args[0]))
1156 if os.path.splitext(self.filename)[1] in ['.csv', '.xls', '.ods']:
1157 self.tableau = Tableau(self, self.filename)
1158 val = get_table_param(self, self.filename)
1159 if val == wx.ID_OK :
1160 self.tableau.make_content()
1161 OpenAnalyse(self, self.tableau.parametres)
1162 self.tree.OnItemAppend(self.tableau.parametres)
1163 #get_table_param(self, self.filename)
1164 #self.tableau.make_content()
1165 #self.tableau.show_tab()
1166 #open_data(self, self.filename)
1167 elif os.path.splitext(self.filename)[1] == '.txt':
1169 elif os.path.splitext(self.filename)[1] == '.ira' :
1170 #self.corpus = Corpus(self)
1171 #self.Text = OpenAnalyse(self, self.filename)
1172 OpenAnalyse(self, self.filename)
1174 print 'ce fichier n\'existe pas'
1178 class IntroPanel(wx.Panel):
1179 def __init__(self, parent):
1180 wx.Panel.__init__(self, parent)
1181 col = randint(0, 255)
1182 col1 = randint(0,255)
1183 col2 = randint(0,255)
1185 bckgrdcolor = wx.Colour(col, col1, col2)
1186 self.SetBackgroundColour(bckgrdcolor)
1187 txtcolour = wx.Colour(250, 250, 250)
1188 linkcolor = wx.Colour(255, 0, 0)
1189 sizer1 = wx.BoxSizer(wx.VERTICAL)
1190 sizer2 = wx.BoxSizer(wx.VERTICAL)
1191 sizer3 = wx.BoxSizer(wx.HORIZONTAL)
1192 sizer4 = wx.BoxSizer(wx.VERTICAL)
1193 sizer5 = wx.BoxSizer(wx.HORIZONTAL)
1194 grid_sizer_1 = wx.FlexGridSizer(1, 4, 0, 0)
1195 grid_sizer_3 = wx.FlexGridSizer(1, 4, 0, 0)
1196 grid_sizer_2 = wx.FlexGridSizer(1, 3, 0, 0)
1197 PanelPres = wx.Panel(self)
1198 PanelPres.SetBackgroundColour(bckgrdcolor)
1199 label_1 = wx.StaticText(self, -1, u"IRaMuTeQ", size=(-1, -1))
1200 label_1.SetFont(wx.Font(46, wx.TELETYPE, wx.NORMAL, wx.BOLD, 0, "Purisa"))
1201 label_1.SetForegroundColour(wx.RED)
1202 label2 = wx.StaticText(PanelPres, -1 , u'\nVersion ' + ConfigGlob.get('DEFAULT', 'version') + '\n')
1203 label2.SetForegroundColour(txtcolour)
1204 label2.SetBackgroundColour(bckgrdcolor)
1205 #label3 = wx.StaticText(PanelPres, -1 , u'Equipe ')
1206 #label3.SetForegroundColour(txtcolour)
1207 #label3.SetBackgroundColour(bckgrdcolor)
1208 self.hyper2 = hl.HyperLinkCtrl(PanelPres, wx.ID_ANY, u"REPERE", URL="http://repere.no-ip.org/")
1209 self.hyper2.SetColours(linkcolor, linkcolor, "RED")
1210 self.hyper2.SetBackgroundColour(bckgrdcolor)
1211 self.hyper2.EnableRollover(True)
1212 self.hyper2.SetUnderlines(False, False, True)
1213 self.hyper2.SetBold(True)
1214 self.hyper2.UpdateLink()
1215 label_lerass = wx.StaticText(PanelPres, -1, u'Laboratoire ')
1216 label_lerass.SetForegroundColour(txtcolour)
1217 label_lerass.SetBackgroundColour(bckgrdcolor)
1218 self.hyper_lerass = hl.HyperLinkCtrl(PanelPres, -1, u'LERASS', URL="http://www.lerass.com")
1219 self.hyper_lerass.SetColours(linkcolor, linkcolor, "RED")
1220 self.hyper_lerass.SetBackgroundColour(bckgrdcolor)
1221 self.hyper_lerass.EnableRollover(True)
1222 self.hyper_lerass.SetUnderlines(False, False, True)
1223 self.hyper_lerass.SetBold(True)
1224 self.hyper_lerass.UpdateLink()
1225 blank = wx.StaticText(PanelPres, -1, u'\n')
1226 blank1 = wx.StaticText(PanelPres, -1, u'\n')
1227 labellicence = wx.StaticText(PanelPres, -1, _(u"License GNU GPL").decode('utf8'))
1228 labellicence.SetForegroundColour(txtcolour)
1229 labellicence.SetBackgroundColour(bckgrdcolor)
1230 labelcopy = wx.StaticText(PanelPres, -1, ConfigGlob.get('DEFAULT', 'copyright'))
1231 labelcopy.SetForegroundColour(txtcolour)
1232 labelcopy.SetBackgroundColour(bckgrdcolor)
1233 python_img = wx.Image(os.path.join(ImagePath,'python-logo.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
1234 r_img = wx.Image(os.path.join(ImagePath,'Rlogo.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
1235 lexique_img = wx.Image(os.path.join(ImagePath,'LexTexte4.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
1236 but_python = wx.BitmapButton(self, -1, python_img)
1237 but_lexique = wx.BitmapButton(self, -1, lexique_img)
1238 but_r = wx.BitmapButton(self, -1, r_img)
1239 self.Bind(wx.EVT_BUTTON, self.OnPython, but_python)
1240 self.Bind(wx.EVT_BUTTON, self.OnLexique, but_lexique)
1241 self.Bind(wx.EVT_BUTTON, self.OnR, but_r)
1244 #grid_sizer_1.Add(label3, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1245 grid_sizer_1.Add(self.hyper2, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1246 grid_sizer_3.Add(label_lerass, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1247 grid_sizer_3.Add(self.hyper_lerass, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1248 sizer4.Add(label_1, 0, wx.ALIGN_CENTER, 5)
1249 sizer2.Add(label2, 0, wx.ALIGN_CENTER, 5)
1250 #sizer2.Add(wx.StaticText(PanelPres, -1, u''), 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(grid_sizer_3, 0, wx.ALIGN_CENTER, 5)
1254 sizer2.Add(wx.StaticText(PanelPres, -1, u' '), 0, wx.ALIGN_CENTER, 5)
1255 #sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1256 #sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1257 sizer2.Add(grid_sizer_1, 0, wx.ALIGN_CENTER, 5)
1258 sizer2.Add(labellicence, 0, wx.ALIGN_CENTER, 5)
1259 sizer2.Add(labelcopy, 0, wx.ALIGN_CENTER, 5)
1260 sizer1.Add(sizer4, 1, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1261 PanelPres.SetSizer(sizer2)
1262 sizer5.Add(blank, 1, wx.EXPAND | wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 2)
1263 sizer5.Add(PanelPres, 1, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1264 sizer5.Add(blank1, 1, wx.ALIGN_CENTER_HORIZONTAL,2)
1265 grid_sizer_2.Add(but_python, 1, wx.ALIGN_CENTER_HORIZONTAL| wx.ALIGN_CENTER_VERTICAL)
1266 grid_sizer_2.Add(but_lexique, 1,wx.ALIGN_CENTER_HORIZONTAL| wx.ALIGN_CENTER_VERTICAL)
1267 grid_sizer_2.Add(but_r, 1, wx.ALIGN_CENTER_HORIZONTAL| wx.ALIGN_CENTER_VERTICAL)
1269 sizer1.Add(sizer5, 3, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 1)
1270 sizer1.Add(grid_sizer_2, 1, wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL)
1271 self.SetSizer(sizer1)
1274 def OnPython(self,evt):
1275 webbrowser.open('http://www.python.org')
1277 def OnLexique(self,evt):
1278 webbrowser.open('http://www.lexique.org')
1281 webbrowser.open('http://www.r-project.org')
1283 class MySplashScreen(wx.SplashScreen):
1285 bmp = wx.Image(os.path.join(ImagePath, 'splash.png')).ConvertToBitmap()
1286 wx.SplashScreen.__init__(self, bmp,
1287 wx.SPLASH_CENTRE_ON_SCREEN | wx.SPLASH_TIMEOUT,
1289 self.Bind(wx.EVT_CLOSE, self.OnClose)
1290 self.fc = wx.FutureCall(1, self.ShowMain)
1292 def OnClose(self, evt):
1296 if self.fc.IsRunning():
1301 displaySize = wx.DisplaySize()
1302 w = displaySize[0]/1.2
1303 h = displaySize[1]/1.2
1304 frame = IraFrame(None, -1, "IRaMuTeQ " + ConfigGlob.get('DEFAULT', 'version'), size=(w, h))
1308 frame.OnOpenFromCmdl()
1309 # if self.fc.IsRunning():
1311 #wx.CallAfter(frame.ShowTip)
1313 class MyApp(wx.App):
1316 Create and show the splash screen. It will then create and show
1317 the main frame when it is time to do so.
1319 wx.SystemOptions.SetOptionInt("mac.window-plain-transition", 1)
1320 self.SetAppName("Iramuteq")
1321 splash = MySplashScreen()
1329 if __name__ == '__main__':