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_HTMLcontent = wx.NewId()
87 ID_SimiTxt = wx.NewId()
89 ID_ImportTXM = wx.NewId()
90 ID_FreqMulti = wx.NewId()
91 ID_Splitfromvar = wx.NewId()
92 ID_Subtxtfrommeta = wx.NewId()
93 ID_Subtxtfromthem = wx.NewId()
95 ID_ImportEuro = wx.NewId()
96 ID_Fact_xml = wx.NewId()
97 ID_Fact_mail = wx.NewId()
98 ID_Fact_copy = wx.NewId()
99 ID_exportmeta = wx.NewId()
100 ##########################################################
101 #elements de configuration
102 ##########################################################
104 if sys.platform == 'darwin' :
105 sys.setdefaultencoding('UTF-8')
106 wx.SetDefaultPyEncoding('UTF-8')
108 sys.setdefaultencoding(locale.getpreferredencoding())
110 #chemin de l'application
111 AppliPath = os.path.abspath(os.path.dirname(os.path.realpath(sys.argv[0])))
113 ImagePath = os.path.join(AppliPath, 'images')
114 #configuration generale
115 DictConfigPath = ConstructGlobalPath(AppliPath)
116 ConfigGlob = ConfigParser()
117 ConfigGlob.read(DictConfigPath['global'])
118 DefaultConf = ConfigParser()
119 DefaultConf.read(DictConfigPath['preferences'])
120 #repertoire de l'utilisateur
121 if os.getenv('HOME') != None:
122 user_home = os.getenv('HOME')
124 user_home = os.getenv('HOMEPATH')
125 UserConfigPath = os.path.abspath(os.path.join(user_home, '.iramuteq'))
126 #Si pas de fichiers de config utilisateur, on cree le repertoire
127 CreateIraDirectory(UserConfigPath, AppliPath)
128 #fichiers log pour windows (py2exe)
129 log = logging.getLogger('iramuteq')
130 fh = logging.FileHandler(os.path.join(UserConfigPath,'stdout.log'))
131 formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
132 fh.setFormatter(formatter)
134 if sys.platform != 'win32' and sys.platform != 'darwin':
135 ch = logging.StreamHandler()
136 ch.setFormatter(formatter)
138 log.setLevel(logging.INFO)
140 class writer(object):
141 def write(self, data):
142 if data.strip() != '' :
143 log.info('ERROR : %s' % data)
145 class printer(object) :
146 def write(self, data) :
147 if data.strip() != '' :
148 log.info('Print : %s' % data)
150 sys.stderr = writer()
151 sys.stdout = printer()
153 ConfigPath = ConstructConfigPath(UserConfigPath)
155 langues = {'french' : wx.LANGUAGE_FRENCH,
156 'english' : wx.LANGUAGE_ENGLISH,
157 'portuguese' : wx.LANGUAGE_PORTUGUESE,
158 'italian' : wx.LANGUAGE_ITALIAN,
159 'spanish' : wx.LANGUAGE_SPANISH
162 code_langues = {'french' : 'fr_FR',
164 'portuguese' : 'pt_PT',
170 'textroot' : 'textroot.png',
171 'alceste' : 'reinert.png',
172 'corpus' : 'textcorpus.png',
173 'wordcloud' :'wordcloud.png',
175 'simitxt' : 'simitxt.png',
176 'clustersimitxt' :'clustersimitxt.png',
177 'clustercloud' : 'clustercloud.png',
179 'matroot' : 'matroot.png',
180 'matrix' : 'matrix.png',
181 'freq' : 'frequences.png',
182 'freqmulti' : 'frequences.png',
184 'reinertmatrix' : 'reinertmatrix.png',
185 'simimatrix' : 'simimatrix.png',
186 'simiclustermatrix' : 'simimatrix.png',
187 'proto' : 'proto.png',
189 'europress' : 'europress.png',
190 'factiva_xml' : 'factiva_xml.png',
191 'factiva_copy' : 'factiva_copy.png',
192 'factiva_mail': 'factiva_mail.png',
193 'iramuteq' : 'iraicone.png',
194 'subcorpusmeta' : 'subcorpusmeta.png',
195 'subcorpusthema' : 'subcorpusthema.png',
196 'preferences' : 'preferences.png'
198 #####################################################################
200 class IraFrame(wx.Frame):
201 def __init__(self, parent, id= -1, title="", pos=wx.DefaultPosition,
202 size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE |
205 log.info('Starting...')
206 wx.Frame.__init__(self, parent, id, title, pos, size, style)
208 self.AppliPath = AppliPath
209 self.images_path = os.path.join(AppliPath,'images')
210 self.UserConfigPath = UserConfigPath
211 #self.RscriptsPath = ConstructRscriptsPath(AppliPath)
212 self.RscriptsPath = PathOut(dirout=os.path.join(AppliPath, 'Rscripts'))
213 self.RscriptsPath.basefiles(RscriptsPath)
214 #self.DictPath = ConstructDicoPath(AppliPath)
215 self.DictPath = ConstructDicoPath(UserConfigPath)
216 self.ConfigGlob = ConfigGlob
217 self.ConfigPath = ConstructConfigPath(UserConfigPath)
218 self.pref = RawConfigParser()
219 #workaround for import problem
220 self.SimiFromCluster = SimiFromCluster
222 gettext.install('iramuteq', os.path.join(AppliPath,'locale'), unicode=True)
223 #langues = ['fr_FR', 'en', 'pt_PT']
227 for langue in code_langues :
228 self.preslangue[langue] = gettext.translation("iramuteq", os.path.join(AppliPath,'locale'), languages=[code_langues[langue]])
230 #self.presLan_fr = gettext.translation("iramuteq", os.path.join(AppliPath,'locale'), languages=['fr_FR'])
231 #self.presLan_en = gettext.translation("iramuteq", os.path.join(AppliPath,'locale'), languages=['en'])
232 # tell FrameManager to manage this frame
233 #self._mgr = wx.aui.AuiManager()
234 self._mgr = aui.AuiManager()
235 self._mgr.SetManagedWindow(self)
238 #--------------------------------------------------------------------------------
239 self.images_analyses = images_analyses
240 for img in images_analyses :
241 self.images_analyses[img] = wx.Image(os.path.join(self.images_path, self.images_analyses[img]), wx.BITMAP_TYPE_PNG).Scale(16,16).ConvertToBitmap()
242 self.mb = wx.MenuBar()
244 file_menu = wx.Menu()
245 item = wx.MenuItem(file_menu, ID_OpenData, _(u"Open a matrix").decode('utf8'), _(u"Open a matrix").decode('utf8'))
246 #item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN))
247 item.SetBitmap(self.images_analyses['matroot'])
248 file_menu.AppendItem(item)
250 item = wx.MenuItem(file_menu, ID_OpenText, _(u"Open a text corpus").decode('utf8'), _(u"Open a text corpus").decode('utf8'))
251 item.SetBitmap(self.images_analyses['textroot'])
252 file_menu.AppendItem(item)
254 item = wx.MenuItem(file_menu, ID_OnOpenAnalyse, _(u"Open an analysis").decode('utf8'), _(u"Open an analysis").decode('utf8'))
255 item.SetBitmap(self.images_analyses['iramuteq'])
256 file_menu.AppendItem(item)
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 menuFactiva = wx.Menu()
267 fact_from_xml = wx.MenuItem(menuFactiva, ID_Fact_xml, _(u"from xml").decode('utf8'))
268 fact_from_xml.SetBitmap(self.images_analyses['factiva_xml'])
269 fact_from_mail = wx.MenuItem(menuFactiva, ID_Fact_mail, _(u"from mail").decode('utf8'))
270 fact_from_mail.SetBitmap(self.images_analyses['factiva_mail'])
271 fact_from_txt = wx.MenuItem(menuFactiva, ID_Fact_copy, _(u"from copy/paste").decode('utf8'))
272 fact_from_txt.SetBitmap(self.images_analyses['factiva_copy'])
273 menuFactiva.AppendItem(fact_from_xml)
274 menuFactiva.AppendItem(fact_from_mail)
275 menuFactiva.AppendItem(fact_from_txt)
276 file_menu.AppendMenu(-1, _(u"Import from factiva").decode('utf8'), menuFactiva)
278 menuTools = wx.Menu()
279 splitvar = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Split from variable").decode('utf8'))
280 extractmod = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Extract mods").decode('utf8'))
281 extractthem = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Extract thematics").decode('utf8'))
282 menuTools.AppendItem(splitvar)
283 menuTools.AppendItem(extractmod)
284 menuTools.AppendItem(extractthem)
285 self.ID_splitvar = splitvar.GetId()
286 self.ID_extractmod = extractmod.GetId()
287 self.ID_extractthem = extractthem.GetId()
288 file_menu.AppendMenu(-1, _(u"Tools").decode('utf8'), menuTools)
291 #item = wx.MenuItem(file_menu, ID_SaveTab, _(u"Save tab as...").decode('utf8'), _(u"Save tab as...").decode('utf8'))
292 #item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_SAVE_AS))
293 #file_menu.AppendItem(item)
295 file_menu.Append(wx.ID_EXIT, _(u"Exit").decode('utf8'))
297 edit_menu = wx.Menu()
298 pref = wx.MenuItem(edit_menu, wx.ID_PREFERENCES, _(u'Preferences').decode('utf8'))
299 pref.SetBitmap(self.images_analyses['preferences'])
300 edit_menu.AppendItem(pref)
301 #edit_menu.Append(wx.ID_PREFERENCES, _(u'Preferences').decode('utf8'))
303 view_menu = wx.Menu()
304 home = wx.MenuItem(view_menu, ID_ACCEUIL, _(u"Home page").decode('utf8'))
305 home.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_GO_HOME, size = (16,16)))
306 view_menu.AppendItem(home)
307 #view_menu.Append(ID_ACCEUIL, _(u"Home page").decode('utf8'))
308 results = wx.MenuItem(view_menu, ID_RESULT, _(u'Show results').decode('utf8'))
309 results.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_LIST_VIEW, size = (16,16)))
310 view_menu.AppendItem(results)
311 #view_menu.Append(ID_RESULT, _(u'Show results').decode('utf8'))
312 #view_menu.AppendSeparator()
313 matrix_menu = wx.Menu()
314 matanalyses = [[ID_Freq, _(u"Frequencies").decode('utf8'), 'freq'],
315 [ID_Freq, _(u"Multiple Frequencies").decode('utf8'), 'freqmulti'],
316 [ID_Chi2, _(u"Chi2").decode('utf8'), 'chi2'],
317 {'name' : _(u"Clustering").decode('utf8'),
318 'content' : [[ID_CHDReinert, _(u"Reinert's Method").decode('utf8'), 'reinertmatrix']]},
319 [ID_SIMI, _(u"Similarities Analysis").decode('utf8'), 'simimatrix'],
320 [ID_proto, _(u"Prototypical Analysis").decode('utf8'), 'proto'],
321 [ID_Splitfromvar, _(u"Split from variable").decode('utf8'), 'subcorpusmeta'],
324 for analyse in matanalyses :
325 if not isinstance(analyse, dict) :
326 item = wx.MenuItem(matrix_menu, analyse[0], analyse[1])
327 item.SetBitmap(self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16)))
328 matrix_menu.AppendItem(item)
331 for subana in analyse['content'] :
332 item = wx.MenuItem(nmenu, subana[0], subana[1])
333 item.SetBitmap(self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)))
334 nmenu.AppendItem(item)
335 matrix_menu.AppendMenu(-1, analyse['name'], nmenu)
336 #item = wx.MenuItem(matrix_menu, ID_Freq, _(u"Frequencies").decode('utf8'))
337 #item.SetBitmap(self.images_analyses['freq'])
338 #matrix_menu.AppendItem(item)
339 #matrix_menu.Append(ID_Freq, _(u"Frequencies").decode('utf8'))
340 #item = wx.MenuItem(matrix_menu, ID_Freq, _(u"Multiple Frequencies").decode('utf8'))
341 #item.SetBitmap(self.images_analyses['freqmulti'])
342 #matrix_menu.Append(ID_FreqMulti, _(u'Multiple frequencies').decode('utf8'))
343 #matrix_menu.AppendItem(item)
344 #matrix_menu.Append(ID_Chi2, _(u"Chi2").decode('utf8'))
345 #matrix_menu.Append(ID_Student, u"t de Student")
346 #menu_classif = wx.Menu()
347 #menu_classif.Append(ID_CHDReinert, _(u"Reinert's Method").decode('utf8'))
348 #menu_classif.Append(ID_CHDSIM, u"Par matrice des distances")
349 #matrix_menu.AppendMenu(-1, _(u"Clustering").decode('utf8'), menu_classif)
350 #matrix_menu.Append(ID_AFCM, u"AFCM")
351 #matrix_menu.Append(ID_SIMI, _(u"Similarities Analysis").decode('utf8'))
352 #matrix_menu.Append(ID_proto, _(u"Prototypical Analysis").decode('utf8'))
353 ID_RCODE = wx.NewId()
354 #matrix_menu.Append(ID_RCODE, u"Code R...")
355 #menu_splittab = wx.Menu()
356 #ID_SPLITVAR = wx.NewId()
357 #splitvar = wx.MenuItem(menu_splittab, ID_SPLITVAR, _(u"Split from variable").decode('utf8'))
358 #menu_splittab.AppendItem(splitvar)
359 #matrix_menu.AppendMenu(-1, _(u"Split matrix").decode('utf8'), menu_splittab)
360 self.matrix_menu = matrix_menu
362 text_menu = wx.Menu()
363 analyses_text = [[ID_TEXTSTAT, _(u"Statistics").decode('utf8'), 'stat'],
364 [ID_ASLEX, _(u"Specificities and CA").decode('utf8'), 'spec'],
365 {'name' : _(u"Clustering").decode('utf8'),
366 'content' : [[ID_TEXTREINERT, _(u"Reinert's Method").decode('utf8'), 'alceste']]},
367 [ID_SimiTxt, _(u"Similarities Analysis").decode('utf8'), 'simitxt'],
368 [ID_WC, _(u"WordCloud").decode('utf8'), 'wordcloud'],
369 {'name' : _(u"Sub corpus").decode('utf8'),
370 'content' : [[ID_Subtxtfrommeta, _(u'Sub corpus from metadata').decode('utf8'), 'subcorpusmeta'],
371 [ID_Subtxtfromthem, _(u'Sub corpus from thematic').decode('utf8'), 'subcorpusthema']]},
372 [ID_exportmeta, _(u"Export meta-data table").decode('utf8'), None],
375 for analyse in analyses_text :
376 if not isinstance(analyse, dict) :
377 item = wx.MenuItem(text_menu, analyse[0], analyse[1])
378 item.SetBitmap(self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16)))
379 text_menu.AppendItem(item)
382 for subana in analyse['content'] :
383 item = wx.MenuItem(nmenu, subana[0], subana[1])
384 item.SetBitmap(self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)))
385 nmenu.AppendItem(item)
386 text_menu.AppendMenu(-1, analyse['name'], nmenu)
387 #text_menu.Append(ID_CHECKCORPUS, u"Vérifier le corpus")
388 # text_menu.Append(ID_TEXTSTAT, _(u"Statistics").decode('utf8'))
389 # text_menu.Append(ID_ASLEX, _(u"Specificities and CA").decode('utf8'))
390 # #text_menu.Append(ID_TEXTAFCM, u"AFC sur UCI / Vocabulaire")
391 # menu_classiftxt = wx.Menu()
392 # menu_classiftxt.Append(ID_TEXTREINERT, _(u"Reinert's Method").decode('utf8'))
393 # #menu_classiftxt.Append(ID_TEXTPAM, u"Par matrice des distances")
394 # text_menu.AppendMenu(-1, _(u"Clustering").decode('utf8'), menu_classiftxt)
395 # text_menu.Append(ID_SimiTxt, _(u"Similarities Analysis").decode('utf8'))
397 # text_menu.Append(ID_WC, _(u"WordCloud").decode('utf8'))
398 self.text_menu = text_menu
400 help_menu = wx.Menu()
401 about = wx.MenuItem(help_menu, wx.ID_ABOUT, _(u"About...").decode('utf8'))
402 about.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_INFORMATION, size = (16,16)))
403 help_menu.AppendItem(about)
404 #help_menu.Append(wx.ID_ABOUT, _(u"About...").decode('utf8'))
405 help = wx.MenuItem(help_menu, wx.ID_HELP, _(u"Online help...").decode('utf8'))
406 help.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_HELP, size = (16,16)))
407 help_menu.AppendItem(help)
408 #help_menu.Append(wx.ID_HELP, _(u"Online help...").decode('utf8'))
410 self.mb.Append(file_menu, _(u"File").decode('utf8'))
411 self.mb.Append(edit_menu, _(u"Edition").decode('utf8'))
412 self.mb.Append(view_menu, _(u"View").decode('utf8'))
413 self.mb.Append(matrix_menu, _(u"Matrix analysis").decode('utf8'))
414 self.mb.Append(text_menu, _(u"Text analysis").decode('utf8'))
415 self.mb.Append(help_menu, _(u"Help").decode('utf8'))
417 self.SetMenuBar(self.mb)
418 #--------------------------------------------------------------------
419 self.statusbar = self.CreateStatusBar(2, wx.ST_SIZEGRIP)
420 self.statusbar.SetStatusWidths([-2, -3])
421 self.statusbar.SetStatusText(_(u"Ready").decode('utf8'), 0)
422 self.statusbar.SetStatusText(_(u"Welcome").decode('utf8'), 1)
424 # min size for the frame itself isn't completely done.
425 # see the end up FrameManager::Update() for the test
426 # code. For now, just hard code a frame minimum size
427 self.SetMinSize(wx.Size(400, 400))
429 # create some toolbars
430 tb1 = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
431 wx.TB_FLAT | wx.TB_NODIVIDER)
432 tb1.SetToolBitmapSize(wx.Size(16, 16))
433 tb1.AddLabelTool(ID_OpenData, "OpenData", self.images_analyses['matroot'], shortHelp=_(u"Matrix").decode('utf8'), longHelp=_(u"Open a matrix").decode('utf8'))
435 tb1.AddLabelTool(ID_OpenText, "OpenText", self.images_analyses['textroot'], shortHelp=_(u"Text").decode('utf8'), longHelp=_(u"Open a text corpus").decode('utf8'))
437 tb1.AddLabelTool(ID_OnOpenAnalyse, "OpenAnalyse", self.images_analyses['iramuteq'], shortHelp= _(u"Open an analysis").decode('utf8'), longHelp=_(u"Open an analysis").decode('utf8'))
439 tb1.AddLabelTool(ID_ImportTXM, "ImportTXM", self.images_analyses['TXM'], shortHelp= _(u"Import from TXM").decode('utf8'), longHelp=_(u"Import from TXM").decode('utf8'))
441 tb1.AddLabelTool(ID_ImportEuro, "ImportEuro", self.images_analyses['europress'], shortHelp= _(u"Import from Europress").decode('utf8'), longHelp=_(u"Import from Europress").decode('utf8'))
443 tb1.AddLabelTool(ID_Fact_xml, "ImportFactxml", self.images_analyses['factiva_xml'], shortHelp= _(u"Factiva from xml").decode('utf8'), longHelp=_(u"Factiva from xml").decode('utf8'))
444 tb1.AddLabelTool(ID_Fact_mail, "ImportFactmail", self.images_analyses['factiva_mail'], shortHelp= _(u"Factiva from mail").decode('utf8'), longHelp=_(u"Factiva from mail").decode('utf8'))
445 tb1.AddLabelTool(ID_Fact_copy, "ImportFactcopy", self.images_analyses['factiva_copy'], shortHelp= _(u"Factiva from copy/paste").decode('utf8'), longHelp=_(u"Factiva from copy/paste").decode('utf8'))
447 tb1.AddLabelTool(wx.ID_PREFERENCES, "Preferences", self.images_analyses['preferences'], shortHelp= _(u"Preferences").decode('utf8'), longHelp=_(u"Preferences").decode('utf8'))
449 tb1.AddLabelTool(ID_ACCEUIL, "Home", wx.ArtProvider_GetBitmap(wx.ART_GO_HOME, size = (16,16)), shortHelp= _(u"Home page").decode('utf8'), longHelp=_(u"Home page").decode('utf8'))
450 tb1.AddLabelTool(ID_RESULT, "Results", wx.ArtProvider_GetBitmap(wx.ART_LIST_VIEW, size = (16,16)), shortHelp= _(u'Show results').decode('utf8'), longHelp=_(u'Show results').decode('utf8'))
453 tb_text = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
454 wx.TB_FLAT | wx.TB_NODIVIDER)
455 for analyse in analyses_text :
456 if not isinstance(analyse, dict) :
457 tb_text.AddLabelTool(analyse[0], analyse[1], self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16)), shortHelp = analyse[1], longHelp = analyse[1])
459 for subana in analyse['content'] :
460 tb_text.AddLabelTool(subana[0], subana[1], self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)), shortHelp = subana[1], longHelp = subana[1])
463 tb_mat = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
464 wx.TB_FLAT | wx.TB_NODIVIDER)
465 for analyse in matanalyses :
466 if not isinstance(analyse, dict) :
467 tb_mat.AddLabelTool(analyse[0], analyse[1], self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16)), shortHelp = analyse[1], longHelp = analyse[1])
469 for subana in analyse['content'] :
470 tb_mat.AddLabelTool(subana[0], subana[1], self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)), shortHelp = subana[1], longHelp = subana[1])
473 tb_help = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
474 wx.TB_FLAT | wx.TB_NODIVIDER)
475 tb_help.AddLabelTool(wx.ID_ABOUT, "About", wx.ArtProvider_GetBitmap(wx.ART_INFORMATION, size=(16,16)), shortHelp=_(u"About...").decode('utf8'), longHelp=_(u"About...").decode('utf8'))
476 tb_help.AddLabelTool(wx.ID_HELP, "Help", wx.ArtProvider_GetBitmap(wx.ART_HELP, size=(16,16)), shortHelp=_(u"Online help...").decode('utf8'), longHelp=_(u"Online help...").decode('utf8'))
478 #------------------------------------------------------------------------------------------------
480 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)
482 #self._mgr.AddPane(self.text_ctrl_txt, wx.aui.AuiPaneInfo().
483 # Name("Text").CenterPane())
484 self._mgr.AddPane(self.text_ctrl_txt, aui.AuiPaneInfo().
485 Name("Text").CenterPane())
486 #self._mgr.AddPane(IntroPanel(self), wx.aui.AuiPaneInfo().Name("Intro_Text").
488 self._mgr.AddPane(IntroPanel(self), aui.AuiPaneInfo().Name("Intro_Text").
490 #if not os.path.exists(os.path.join(UserConfigPath, 'history.db')) :
491 # with open(os.path.join(UserConfigPath, 'history.db'), 'w') as f :
493 self.history = History(os.path.join(UserConfigPath, 'history.db'))
494 self.tree = LeftTree(self)
495 self._mgr.AddPane(self.tree, aui.AuiPaneInfo().Name("lefttree").Caption(_(u"Historic").decode('utf8')).
496 Left().MinSize(wx.Size(200,500)).Layer(1).Position(1).CloseButton(False).MaximizeButton(True).
497 MinimizeButton(True))
499 #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)
500 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)
501 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
502 self.nb.SetAGWWindowStyleFlag(notebook_flags)
503 self.nb.SetArtProvider(aui.ChromeTabArt())
504 #self.nb.SetArtProvider(aui.VC8TabArt())
505 #self.nb.parent = self
506 #self._notebook_style = aui.AUI_NB_DEFAULT_STYLE | aui.AUI_NB_TAB_EXTERNAL_MOVE | wx.NO_BORDER
507 #self._mgr.AddPane(self.nb, wx.aui.AuiPaneInfo().
508 # Name("Tab_content").
510 self._mgr.AddPane(self.nb, aui.AuiPaneInfo().
514 #self._mgr.AddPane(self.Sheet, wx.aui.AuiPaneInfo().Name("Data").CenterPane())
515 #self._mgr.AddPane(self.Sheet, aui.AuiPaneInfo().Name("Data").CenterPane())
516 self.nb.Bind(aui.EVT_AUINOTEBOOK_PAGE_CLOSE, self.OnCloseTab)
517 self.nb.Bind(aui.EVT_AUINOTEBOOK_PAGE_CHANGED, self.OnPageChanged)
518 # add the toolbars to the manager
520 #self._mgr.AddPane(tb1, wx.aui.AuiPaneInfo().
521 # Name("tb1").Caption("Fichiers").
522 # ToolbarPane().Top().
523 # LeftDockable(False).RightDockable(False))
524 self._mgr.AddPane(tb1, aui.AuiPaneInfo().
525 Name("tb1").Caption("Fichiers").
527 LeftDockable(True).RightDockable(False))
529 self._mgr.AddPane(tb_text, aui.AuiPaneInfo().
530 Name("tb_text").Caption("analyse_text").
532 LeftDockable(True).RightDockable(False))
534 self._mgr.AddPane(tb_mat, aui.AuiPaneInfo().
535 Name("tb_mat").Caption("analyse_matrix").
537 LeftDockable(True).RightDockable(False))
539 self._mgr.AddPane(tb_help, aui.AuiPaneInfo().
540 Name("tb_help").Caption("help").
542 LeftDockable(True).RightDockable(False))
544 self._mgr.GetPane('tb_text').Hide()
545 self._mgr.GetPane('tb_mat').Hide()
547 self.ShowAPane("Intro_Text")
548 self._mgr.GetPane("lefttree").Show()
549 self._mgr.GetPane("classif_tb").Hide()
550 # "commit" all changes made to FrameManager
553 # Show How To Use The Closing Panes Event
554 ##################################################################
555 self.Bind(wx.EVT_MENU, self.OnAcceuil, id=ID_ACCEUIL)
556 self.Bind(wx.EVT_MENU, self.ShowTab, id=ID_RESULT)
557 self.Bind(wx.EVT_MENU, self.OnOpenData, id=ID_OpenData)
558 self.Bind(wx.EVT_MENU, self.OnOpenText, id=ID_OpenText)
559 self.Bind(wx.EVT_MENU, self.OnOpenAnalyse, id=ID_OnOpenAnalyse)
560 self.Bind(wx.EVT_MENU, self.import_factiva_xml, fact_from_xml)
561 self.Bind(wx.EVT_MENU, self.import_factiva_mail, fact_from_mail)
562 self.Bind(wx.EVT_MENU, self.import_factiva_txt, fact_from_txt)
563 self.Bind(wx.EVT_MENU, self.ExtractTools, splitvar)
564 self.Bind(wx.EVT_MENU, self.ExtractTools, extractmod)
565 self.Bind(wx.EVT_MENU, self.ExtractTools, extractthem)
566 self.Bind(wx.EVT_MENU, self.OnFreq, id=ID_Freq)
567 self.Bind(wx.EVT_MENU, self.OnFreqMulti, id=ID_FreqMulti)
568 self.Bind(wx.EVT_MENU, self.OnChi2, id=ID_Chi2)
569 self.Bind(wx.EVT_MENU, self.OnStudent, id=ID_Student)
570 self.Bind(wx.EVT_MENU, self.OnCHDSIM, id=ID_CHDSIM)
571 self.Bind(wx.EVT_MENU, self.OnCHDReinert, id=ID_CHDReinert)
572 self.Bind(wx.EVT_MENU, self.OnAFCM, id=ID_AFCM)
573 self.Bind(wx.EVT_MENU, self.OnProto, id=ID_proto)
574 self.Bind(wx.EVT_MENU, self.OnSplitVar, id = ID_Splitfromvar)
575 #self.Bind(wx.EVT_MENU, self.OnRCode, id=ID_RCODE)
576 #self.Bind(wx.EVT_MENU, self.OnSplitVar, id=ID_SPLITVAR)
577 #self.Bind(wx.EVT_MENU, self.OnCheckcorpus, id = ID_CHECKCORPUS)
578 self.Bind(wx.EVT_MENU, self.OnTextStat, id=ID_TEXTSTAT)
579 self.Bind(wx.EVT_MENU, self.OnTextSpec, id=ID_ASLEX)
580 self.Bind(wx.EVT_MENU, self.OnTextAfcm, id=ID_TEXTAFCM)
581 self.Bind(wx.EVT_MENU, self.OnTextReinert, id=ID_TEXTREINERT)
582 self.Bind(wx.EVT_MENU, self.OnPamSimple, id=ID_TEXTPAM)
583 self.Bind(wx.EVT_MENU, self.OnSimiTxt, id=ID_SimiTxt)
584 self.Bind(wx.EVT_MENU, self.OnWordCloud, id=ID_WC)
585 self.Bind(wx.EVT_MENU, self.OnSubText, id = ID_Subtxtfrommeta)
586 self.Bind(wx.EVT_MENU, self.OnSubText, id = ID_Subtxtfromthem)
587 self.Bind(wx.EVT_MENU, self.OnSimiTab, id=ID_SIMI)
588 self.Bind(wx.EVT_MENU, self.OnExit, id=wx.ID_EXIT)
589 #self.Bind(wx.EVT_MENU, self.OnSaveTabAs, id=ID_SaveTab)
590 self.Bind(wx.EVT_MENU, self.OnAbout, id=wx.ID_ABOUT)
591 self.Bind(wx.EVT_MENU, self.OnHelp, id=wx.ID_HELP)
592 self.Bind(wx.EVT_MENU, self.OnPref, id=wx.ID_PREFERENCES)
593 self.Bind(wx.EVT_MENU, self.OnImportTXM, id=ID_ImportTXM)
594 self.Bind(wx.EVT_MENU, self.OnImportEuropress, id=ID_ImportEuro)
595 self.Bind(wx.EVT_MENU, self.OnExportMeta, id=ID_exportmeta)
596 self.Bind(wx.EVT_CLOSE, self.OnClose)
597 ##################################################################
598 flags = self._mgr.GetAGWFlags()
599 #flags &= ~wx.aui.AUI_MGR_TRANSPARENT_HINT
600 #flags &= ~wx.aui.AUI_MGR_VENETIAN_BLINDS_HINT
601 #flags &= ~wx.aui.AUI_MGR_RECTANGLE_HINT
602 flags &= ~(aui.AUI_MGR_RECTANGLE_HINT | aui.AUI_MGR_ALLOW_FLOATING)
603 self._mgr.SetAGWFlags(self._mgr.GetAGWFlags() ^ (aui.AUI_MGR_RECTANGLE_HINT | aui.AUI_MGR_ALLOW_FLOATING))
604 self._mgr.GetArtProvider().SetMetric(aui.AUI_DOCKART_GRADIENT_TYPE, aui.AUI_GRADIENT_HORIZONTAL)
605 self.GetDockArt().SetColor(aui.AUI_DOCKART_ACTIVE_CAPTION_GRADIENT_COLOUR, "#00FFF9")
608 self._icon = wx.Icon(os.path.join(ImagePath, "iraicone.ico"), wx.BITMAP_TYPE_ICO)
609 self.SetIcon(self._icon)
610 ##########################
612 self.input_path = [False]
613 self.TEMPDIR = tempfile.mkdtemp('iramuteq')
614 self.FileTabList = []
620 self.g_header = False
627 self.SysEncoding = sys.getdefaultencoding()
628 self.syscoding = sys.getdefaultencoding()
629 #print 'SysEncoding',self.SysEncoding
630 if self.SysEncoding == 'mac-roman' : self.SysEncoding = 'MacRoman'
633 ##############################################################@
634 self.ShowMenu('view', True)
635 self.ShowMenu('matrix', False)
636 self.ShowMenu('text', False)
647 def finish_init(self) :
649 self.pref.read(self.ConfigPath['preferences'])
652 self.pref.read(self.ConfigPath['preferences'])
659 self.pref.read(self.ConfigPath['preferences'])
661 self.sound = self.pref.getboolean('iramuteq', 'sound')
662 self.check_update = self.pref.getboolean('iramuteq', 'checkupdate')
663 self.version = ConfigGlob.get('DEFAULT', 'version')
664 #configuration des chemins de R
665 self.PathPath = ConfigParser()
666 self.PathPath.read(ConfigPath['path'])
668 if not CheckRPath(self.PathPath) :
669 if sys.platform == 'win32':
670 BestRPath = FindRPAthWin32()
672 BestRPath = FindRPathNix()
674 self.PathPath.set('PATHS', 'rpath', BestRPath)
675 with open(ConfigPath['path'], 'w') as f :
676 self.PathPath.write(f)
680 self.RPath = self.PathPath.get('PATHS', 'rpath')
683 if not RLibsAreInstalled(self) :
686 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'),
687 _(u"If R is installed, report its path in Preferences.").decode('utf8'),
688 _(u"IRaMuTeQ does not work without R.").decode('utf8')])
689 dlg = wx.MessageDialog(self, msg, _(u"Problem").decode('utf8'), wx.OK | wx.NO_DEFAULT | wx.ICON_WARNING)
691 if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
695 def setlangue(self) :
696 self.pref.read(self.ConfigPath['preferences'])
698 guilangue = self.pref.get('iramuteq', 'guilanguage')
700 guilangue = DefaultConf.get('iramuteq', 'guilanguage')
701 self.preslangue.get(guilangue, 'english').install()
703 def OnVerif(self, evt) :
704 pack = CheckRPackages(self)
706 dlg = wx.MessageDialog(self, _(u"Installation OK").decode('utf8'), _(u"Installation").decode('utf8'), wx.OK | wx.ICON_INFORMATION | wx.STAY_ON_TOP)
708 if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
711 def ShowMenu(self, menu, Show=True):
715 self._mgr.GetPane('tb_text').Show()
717 self._mgr.GetPane('tb_text').Hide()
718 elif menu == 'matrix' :
721 self._mgr.GetPane('tb_mat').Show()
723 self._mgr.GetPane('tb_mat').Hide()
724 elif menu == 'view' :
729 #menu_pos = self.mb.FindMenu(menu)
730 if not menu_pos is None :
731 self.mb.EnableTop(menu_pos, Show)
732 self.mb.UpdateMenus()
735 #--------------------------------------------------------------------
736 def OnClose(self, event):
738 with open(self.ConfigPath['path'], 'w') as f :
739 self.PathPath.write(f)
744 def OnOpenData(self, event):
745 inputname, self.input_path = OnOpen(self, "Data")
747 #filename = self.input_path[0]
748 self.tableau = Tableau(self,os.path.abspath(self.input_path[0]))
749 val = get_table_param(self, self.input_path[0])
751 busy = wx.BusyInfo(_("Please wait...").decode('utf8'), self)
754 self.tableau.make_content()
755 OpenAnalyse(self, self.tableau.parametres)
756 self.tree.OnItemAppend(self.tableau.parametres)
761 #self.tableau.show_tab()
763 def OnOpenAnalyse(self, event):
764 self.AnalysePath = OnOpen(self, "Analyse")
765 if self.AnalysePath :
766 OpenAnalyse(self, self.AnalysePath[1][0], True)
767 self.ShowMenu('view')
769 def OnOpenText(self, event):
770 inputname, self.input_path = OnOpen(self, "Texte")
771 self.filename = self.input_path[0]
775 def OnSubText(self, evt, corpus = None, parametres = None):
777 corpus = self.tree.getcorpus()
778 if evt.GetId() == ID_Subtxtfrommeta :
779 parametres = {'frommeta' : True}
780 elif evt.GetId() == ID_Subtxtfromthem :
781 parametres = {'fromtheme' : True}
782 builder = SubBuilder(self, corpus, parametres)
783 if builder.res == wx.ID_OK :
784 busy = wx.BusyInfo(_("Please wait...").decode('utf8'), self)
786 corpus = builder.doanalyse()
787 self.history.add(corpus.parametres)
788 self.tree.OnItemAppend(corpus.parametres)
789 OpenAnalyse(self, corpus.parametres)
793 dlg = wx.ProgressDialog("Ouverture...",
794 "Veuillez patienter...",
797 style=wx.PD_APP_MODAL | wx.PD_AUTO_HIDE | wx.PD_ELAPSED_TIME | wx.PD_CAN_ABORT
800 builder = Builder(self, dlg)
801 if builder.res == wx.ID_OK :
803 corpus = builder.doanalyse()
804 self.history.add(corpus.parametres)
805 self.tree.OnItemAppend(corpus.parametres)
806 OpenAnalyse(self, corpus.parametres)
812 keepGoing = dlg.Update(count, u"Lecture du fichier")
813 self.ShowMenu('view')
814 self.ShowMenu('text')
815 self.ShowMenu('matrix', False)
820 keepGoing = dlg.Update(count, u"Chargement du dictionnaire")
823 def OnExit(self, event):
826 def OnAbout(self, event):
827 info = wx.AboutDialogInfo()
828 info.Name = ConfigGlob.get('DEFAULT', 'name')
829 info.Version = ConfigGlob.get('DEFAULT', 'version')
830 info.Copyright = ConfigGlob.get('DEFAULT', 'copyright')
831 info.Translators = ConfigGlob.get('DEFAULT', 'translators').decode('utf8').split(';')
832 info.Description = u"""
833 Interface de R pour les Analyses Multidimensionnelles
834 de Textes et de Questionnaires
837 construit avec des logiciels libres.
843 info.WebSite = ("http://www.iramuteq.org", u"Site web IRaMuTeQ")
844 dev = ConfigGlob.get('DEFAULT', 'dev').decode('utf8').split(';')
845 info.Developers = dev
846 info.License = u"""Iramuteq est un logiciel libre ; vous pouvez le diffuser et/ou le modifier
847 suivant les termes de la Licence Publique Générale GNU telle que publiée
848 par la Free Software Foundation ; soit la version 2 de cette licence,
849 soit (à votre convenance) une version ultérieure.
851 Iramuteq est diffusé dans l'espoir qu'il sera utile,
852 mais SANS AUCUNE GARANTIE ; sans même une garantie implicite
853 de COMMERCIALISATION ou d'ADÉQUATION À UN USAGE PARTICULIER.
854 Voyez la Licence Publique Générale GNU pour plus de détails.
856 Vous devriez avoir reçu une copie de la Licence Publique Générale GNU
857 avec Iramuteq ; sinon, veuillez écrire à la Free Software Foundation,
858 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
861 def GetDockArt(self):
862 return self._mgr.GetArtProvider()
867 def OnPageChanged(self, event) :
868 new = event.GetSelection()
869 nobject = event.GetEventObject()
870 parent = nobject.GetParent()
871 if isinstance(parent, IraFrame) :
872 npage = self.nb.GetPage(new)
873 if 'parametres' in dir(npage) :
874 self.tree.GiveFocus(uuid=npage.parametres['uuid'])
875 if npage.parametres.get('matrix', False) :
876 self.ShowMenu('text', False)
877 self.ShowMenu('matrix', True)
878 elif npage.parametres.get('corpus', False) :
879 self.ShowMenu('text')
880 self.ShowMenu('matrix', False)
882 def OnCloseTab(self, evt):
883 #log.info('Closing tab %s' % str(evt.GetEventObject()))
884 ctrl = evt.GetEventObject()
885 if isinstance(ctrl.GetParent(), aui.AuiNotebook) or isinstance(ctrl.GetParent(), wx.Panel):
889 page = self.nb.GetPage(self.nb.GetSelection())
890 if 'parametres' in dir(page) and isinstance(ctrl.GetParent(), IraFrame) :
891 self.history.rmtab(page.parametres)
892 self.tree.CloseItem(uuid = page.parametres['uuid'])
893 TabTitle = self.nb.GetPageText(self.nb.GetSelection())
895 if self.nb.GetPageCount() == 1 and not notebook :
898 def LastTabClose(self) :
899 if self.nb.GetPageCount() == 1 :
901 self.ShowAPane("Text")
903 self.ShowAPane("Data")
905 self.ShowAPane("Intro_Text")
907 def GetStartPosition(self):
911 pt = self.ClientToScreen(wx.Point(0, 0))
913 return wx.Point(pt.x + x, pt.y + x)
915 def ShowAPane(self, panel):
916 for pane in self._mgr.GetAllPanes() :
917 if not pane.IsToolbar() and pane.name != 'lefttree':
919 self._mgr.GetPane(panel).Show()
922 def OnAcceuil(self, event):
923 self.ShowAPane(u"Intro_Text")
926 def CreateHTMLCtrl(self):
927 ctrl = wx.html.HtmlWindow(self, -1, wx.DefaultPosition, wx.Size(400, 300))
928 if "gtk2" in wx.PlatformInfo:
929 ctrl.SetStandardFonts()
930 ctrl.SetPage(u"text")
933 def ShowTab(self, evt):
934 self.ShowAPane("Tab_content")
936 ################################################################
938 ################################################################
939 def analyse_matrix(self, analyse, analyse_type = '', matrix = None, parametres = None, dlgnb = 1):
941 matrix = self.tree.getmatrix()
942 if parametres is not None :
943 parametres['type'] = analyse_type
945 parametres = {'type' : analyse_type}
947 #print 'plus de bug@@@@@@@@@@@@@@@@@@@@@@'
948 analyse(self, matrix, parametres = parametres, dlg = dlgnb)
952 def OnFreq(self, event, matrix = None):
953 self.analyse_matrix(Frequences, analyse_type = 'freq', matrix = matrix, dlgnb = 3)
955 def OnFreqMulti(self, event, matrix = None):
956 self.analyse_matrix(FreqMultiple, analyse_type = 'freqmulti', matrix = matrix, dlgnb = 3)
958 def OnChi2(self, event, matrix = None):
959 self.analyse_matrix(ChiSquare, matrix = matrix, analyse_type = 'chi2', dlgnb = 3)
961 def OnSimiTab(self, event, matrix = None):
962 self.analyse_matrix(DoSimi, matrix = matrix, analyse_type = 'simimatrix', dlgnb = 5)
964 def OnCHDReinert(self, event, matrix = None):
966 # matrix = self.tree.getmatrix()
967 #AnalyseQuest(self, matrix, parametres = {'type' : 'reinertmatrix'}, dlg = 3)
968 self.analyse_matrix(AnalyseQuest, matrix = matrix, analyse_type = 'reinertmatrix', dlgnb = 5)
970 def OnStudent(self, event):
976 def OnRCode(self, event):
982 def OnCHDSIM(self, event):
984 # print 'ATTENTION!!!!'
985 chdsim = ChdCluster(self)
986 if chdsim.val == wx.ID_OK:
991 # def OnCHDReinert(self, event):
993 # # print('PLUS DE BUG SUR ALCESTE QUESTIONNAIRE')
994 # self.quest = AnalyseQuest(self)
995 # if self.quest.val == wx.ID_OK:
1000 def OnProto(self, evt, matrix = None) :
1001 self.analyse_matrix(Prototypical, matrix = matrix, analyse_type = 'proto', dlgnb = 3)
1002 #Prototypical(self, {'type' : 'proto'})
1004 def OnSplitVar(self, evt, matrix = None):
1006 matrix = self.tree.getmatrix()
1007 self.analyse_matrix(SplitMatrixFromVar, matrix = matrix, analyse_type = 'splitvar', parametres = {'pathout': matrix.pathout.dirout}, dlgnb = 3)
1008 #matrix = self.tree.getmatrix()
1011 def OnSimiTxt(self, evt, corpus = None) :
1012 # print 'PLUS DE BUG SUR SIMITXT'
1014 #self.Text = SimiTxt(self)
1016 corpus = self.tree.getcorpus()
1017 self.Text = SimiTxt(self, corpus, parametres = {'type': 'simitxt'}, dlg = 3)
1018 if self.Text.val == wx.ID_OK :
1023 def OnWordCloud(self, evt, corpus = None) :
1024 # print 'PLUS DE BUG SUR WORDCLOUD'
1027 corpus = self.tree.getcorpus()
1028 self.Text = WordCloud(self, corpus, parametres = {'type' : 'wordcloud'}, dlg = 3)
1029 if self.Text.val == wx.ID_OK :
1034 def OnClusterCloud(self, corpus, parametres = None) :
1035 self.Text = ClusterCloud(self, corpus, parametres = parametres, dlg = 3)
1037 def OnAFCM(self, event):
1043 def OnTextStat(self, event, corpus = None):
1044 #print 'PAS DE BUG SUR TEXT STAT'
1047 corpus = self.tree.getcorpus()
1048 self.Text = Stat(self, corpus, parametres = {'type': 'stat'}, dlg = 7)
1050 if self.Text.val == wx.ID_OK :
1055 def OnTextSpec(self, event, corpus = None):
1057 #self.Text = AsLexico(self)
1058 #print('ATTENTION : PLUS DE BUG SUR LEXICO')
1060 corpus = self.tree.getcorpus()
1061 self.Text = Lexico(self, corpus, parametres = {'type' : 'spec'}, dlg = 3)
1062 if self.Text.val == wx.ID_OK :
1067 def OnTextAfcm(self, event):
1074 def import_factiva_xml(self,event):
1076 ImportFactiva(self, 'xml')
1080 def import_factiva_mail(self, evt) :
1082 ImportFactiva(self, 'mail')
1086 def import_factiva_txt(self, evt) :
1088 ImportFactiva(self, 'txt')
1092 def OnImportTXM(self, evt) :
1094 ImportFactiva(self, 'txm')
1098 def OnImportEuropress(self, evt) :
1100 ImportFactiva(self, 'euro')
1104 def OnExportMeta(self, evt, corpus = None):
1106 corpus = self.tree.getcorpus()
1108 ExportMetaTable(self, corpus)
1112 def ExtractTools(self, evt) :
1114 if ID == self.ID_splitvar :
1115 Extract(self, 'splitvar')
1116 elif ID == self.ID_extractmod :
1117 Extract(self, 'mods')
1118 elif ID == self.ID_extractthem :
1119 Extract(self, 'them')
1121 def OnTextReinert(self, event, corpus = None):
1123 #print('ATTENTION : PLUS DE BUG SUR ALCESTE')
1124 #RunAnalyse(self, corpus, Alceste, OptAlceste)
1126 corpus = self.tree.getcorpus()
1127 self.Text = Reinert(self, corpus, parametres = {'type': 'alceste'}, dlg = 6)
1128 if self.Text.val == wx.ID_OK:
1133 def OnPamSimple(self, event, corpus = None):
1136 corpus = self.tree.getcorpus()
1137 self.Text = AnalysePam(self, corpus, parametres = {'type' : 'pamtxt'}, dlg = 6)
1138 if self.Text.val == wx.ID_OK:
1143 def SimiCluster(self, parametres = {}, fromprof = False, tableau = None) :
1144 self.analyse_matrix(DoSimi, parametres = parametres, analyse_type = 'simiclustermatrix', matrix = tableau, dlgnb = 5)
1146 # def OnSimi(self,evt):
1148 #print 'ATTENTION !!!! VERGES'
1149 #print 'PLUS DE BUG SUR SIMI'
1150 # self.res = DoSimi(self, param = None)
1151 #self.res = Verges(self)
1152 # if self.res.val == wx.ID_OK :
1156 #################################################################
1158 def OnHelp(self, event):
1159 webbrowser.open('http://www.iramuteq.org/documentation')
1161 def OnPref(self, event):
1162 dlg = PrefDialog(self)
1163 dlg.CenterOnParent()
1164 self.val = dlg.ShowModal()
1168 if self.check_update:
1171 print 'pas de verif'
1173 #CheckRPackages(self)
1175 def OnOpenFromCmdl(self):
1177 if options.filename :
1178 if os.path.exists(options.filename):
1179 self.filename = os.path.abspath(options.filename)
1183 if os.path.exists(os.path.realpath(args[0])):
1184 self.filename = os.path.abspath(os.path.realpath(args[0]))
1190 if os.path.splitext(self.filename)[1] in ['.csv', '.xls', '.ods']:
1191 self.tableau = Tableau(self, self.filename)
1192 val = get_table_param(self, self.filename)
1193 if val == wx.ID_OK :
1194 self.tableau.make_content()
1195 OpenAnalyse(self, self.tableau.parametres)
1196 self.tree.OnItemAppend(self.tableau.parametres)
1197 #get_table_param(self, self.filename)
1198 #self.tableau.make_content()
1199 #self.tableau.show_tab()
1200 #open_data(self, self.filename)
1201 elif os.path.splitext(self.filename)[1] == '.txt':
1203 elif os.path.splitext(self.filename)[1] == '.ira' :
1204 #self.corpus = Corpus(self)
1205 #self.Text = OpenAnalyse(self, self.filename)
1206 OpenAnalyse(self, self.filename)
1208 print 'ce fichier n\'existe pas'
1212 class IntroPanel(wx.Panel):
1213 def __init__(self, parent):
1214 wx.Panel.__init__(self, parent)
1215 col = randint(0, 255)
1216 col1 = randint(0,255)
1217 col2 = randint(0,255)
1219 bckgrdcolor = wx.Colour(col, col1, col2)
1220 self.SetBackgroundColour(bckgrdcolor)
1221 txtcolour = wx.Colour(250, 250, 250)
1222 linkcolor = wx.Colour(255, 0, 0)
1223 sizer1 = wx.BoxSizer(wx.VERTICAL)
1224 sizer2 = wx.BoxSizer(wx.VERTICAL)
1225 sizer3 = wx.BoxSizer(wx.HORIZONTAL)
1226 sizer4 = wx.BoxSizer(wx.HORIZONTAL)
1227 sizer5 = wx.BoxSizer(wx.HORIZONTAL)
1228 grid_sizer_1 = wx.FlexGridSizer(1, 4, 0, 0)
1229 grid_sizer_3 = wx.FlexGridSizer(1, 4, 0, 0)
1230 grid_sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
1231 PanelPres = wx.Panel(self)
1232 bckgrdcolor = wx.Colour(randint(0, 255), randint(0, 255), randint(0, 255))
1233 PanelPres.SetBackgroundColour(bckgrdcolor)
1234 label_1 = wx.StaticText(self, -1, u"IRaMuTeQ", size=(-1, -1))
1235 label_1.SetFont(wx.Font(46, wx.TELETYPE, wx.NORMAL, wx.BOLD, 0, "Purisa"))
1236 label_1.SetForegroundColour(wx.RED)
1237 iraicone = wx.Image(os.path.join(ImagePath,'iraicone248x248.png'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
1238 but_ira = wx.StaticBitmap(self, -1, bitmap = iraicone)
1239 label2 = wx.StaticText(PanelPres, -1 , u'\nVersion ' + ConfigGlob.get('DEFAULT', 'version') + '\n')
1240 label2.SetForegroundColour(txtcolour)
1241 label2.SetBackgroundColour(bckgrdcolor)
1242 #label3 = wx.StaticText(PanelPres, -1 , u'Equipe ')
1243 #label3.SetForegroundColour(txtcolour)
1244 #label3.SetBackgroundColour(bckgrdcolor)
1245 self.hyper2 = hl.HyperLinkCtrl(PanelPres, wx.ID_ANY, u"REPERE", URL="http://repere.no-ip.org/")
1246 self.hyper2.SetColours(linkcolor, linkcolor, "RED")
1247 self.hyper2.SetBackgroundColour(bckgrdcolor)
1248 self.hyper2.EnableRollover(True)
1249 self.hyper2.SetUnderlines(False, False, True)
1250 self.hyper2.SetBold(True)
1251 self.hyper2.UpdateLink()
1252 label_lerass = wx.StaticText(PanelPres, -1, u'Laboratoire ')
1253 label_lerass.SetForegroundColour(txtcolour)
1254 label_lerass.SetBackgroundColour(bckgrdcolor)
1255 self.hyper_lerass = hl.HyperLinkCtrl(PanelPres, -1, u'LERASS', URL="http://www.lerass.com")
1256 self.hyper_lerass.SetColours(linkcolor, linkcolor, "RED")
1257 self.hyper_lerass.SetBackgroundColour(bckgrdcolor)
1258 self.hyper_lerass.EnableRollover(True)
1259 self.hyper_lerass.SetUnderlines(False, False, True)
1260 self.hyper_lerass.SetBold(True)
1261 self.hyper_lerass.UpdateLink()
1262 blank = wx.StaticText(PanelPres, -1, u'\n')
1263 blank1 = wx.StaticText(PanelPres, -1, u'\n')
1264 labellicence = wx.StaticText(PanelPres, -1, _(u"License GNU GPL").decode('utf8'))
1265 labellicence.SetForegroundColour(txtcolour)
1266 labellicence.SetBackgroundColour(bckgrdcolor)
1267 labelcopy = wx.StaticText(PanelPres, -1, ConfigGlob.get('DEFAULT', 'copyright'))
1268 labelcopy.SetForegroundColour(txtcolour)
1269 labelcopy.SetBackgroundColour(bckgrdcolor)
1270 python_img = wx.Image(os.path.join(ImagePath,'python-logo.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
1271 r_img = wx.Image(os.path.join(ImagePath,'Rlogo.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
1272 lexique_img = wx.Image(os.path.join(ImagePath,'LexTexte4.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
1273 but_python = wx.BitmapButton(self, -1, python_img)
1274 but_lexique = wx.BitmapButton(self, -1, lexique_img)
1275 but_r = wx.BitmapButton(self, -1, r_img)
1276 self.Bind(wx.EVT_BUTTON, self.OnPython, but_python)
1277 self.Bind(wx.EVT_BUTTON, self.OnLexique, but_lexique)
1278 self.Bind(wx.EVT_BUTTON, self.OnR, but_r)
1281 #grid_sizer_1.Add(label3, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1282 grid_sizer_1.Add(self.hyper2, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1283 grid_sizer_3.Add(label_lerass, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1284 grid_sizer_3.Add(self.hyper_lerass, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1285 sizer4.Add(label_1, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 5)
1287 sizer2.Add(label2, 0, wx.ALIGN_CENTER, 5)
1288 #sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1289 sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1290 sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1291 sizer2.Add(grid_sizer_3, 0, wx.ALIGN_CENTER, 5)
1292 sizer2.Add(wx.StaticText(PanelPres, -1, u' '), 0, wx.ALIGN_CENTER, 5)
1293 #sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1294 #sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1295 sizer2.Add(grid_sizer_1, 0, wx.ALIGN_CENTER, 5)
1296 sizer2.Add(labellicence, 0, wx.ALIGN_CENTER, 5)
1297 sizer2.Add(labelcopy, 0, wx.ALIGN_CENTER, 5)
1298 sizer1.Add(sizer4, 1, wx.ALIGN_CENTER_HORIZONTAL, 0)
1299 sizer1.Add(but_ira, 1, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 5)
1300 sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1301 PanelPres.SetSizer(sizer2)
1302 #sizer5.Add(blank, 1, wx.EXPAND | wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 2)
1303 sizer5.Add(PanelPres, 1, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1304 #sizer5.Add(blank1, 1, wx.ALIGN_CENTER_HORIZONTAL,2)
1305 grid_sizer_2.Add(but_python, 1, wx.ALIGN_BOTTOM)
1306 grid_sizer_2.Add(but_lexique, 1, wx.ALIGN_BOTTOM)
1307 grid_sizer_2.Add(but_r, 1, wx.ALIGN_BOTTOM)
1309 sizer1.Add(sizer5, 0, wx.EXPAND |wx.ALL, 10)
1310 sizer1.Add(grid_sizer_2, 2, wx.ALIGN_CENTER_HORIZONTAL|wx.ALL, 1)
1311 self.SetSizer(sizer1)
1314 def OnPython(self,evt):
1315 webbrowser.open('http://www.python.org')
1317 def OnLexique(self,evt):
1318 webbrowser.open('http://www.lexique.org')
1321 webbrowser.open('http://www.r-project.org')
1323 class MySplashScreen(wx.SplashScreen):
1325 bmp = wx.Image(os.path.join(ImagePath, 'splash.png')).ConvertToBitmap()
1326 wx.SplashScreen.__init__(self, bmp,
1327 wx.SPLASH_CENTRE_ON_SCREEN | wx.SPLASH_TIMEOUT,
1329 self.Bind(wx.EVT_CLOSE, self.OnClose)
1330 self.fc = wx.FutureCall(1, self.ShowMain)
1332 def OnClose(self, evt):
1336 if self.fc.IsRunning():
1341 displaySize = wx.DisplaySize()
1342 w = displaySize[0]/1.2
1343 h = displaySize[1]/1.2
1344 frame = IraFrame(None, -1, "IRaMuTeQ " + ConfigGlob.get('DEFAULT', 'version'), size=(w, h))
1348 frame.OnOpenFromCmdl()
1349 # if self.fc.IsRunning():
1351 #wx.CallAfter(frame.ShowTip)
1353 class MyApp(wx.App):
1356 Create and show the splash screen. It will then create and show
1357 the main frame when it is time to do so.
1359 wx.SystemOptions.SetOptionInt("mac.window-plain-transition", 1)
1360 self.SetAppName("Iramuteq")
1361 splash = MySplashScreen()
1369 if __name__ == '__main__':