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',
197 'exportmetatable' : 'exportmetatable.png',
199 #####################################################################
201 class IraFrame(wx.Frame):
202 def __init__(self, parent, id= -1, title="", pos=wx.DefaultPosition,
203 size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE |
206 log.info('Starting...')
207 wx.Frame.__init__(self, parent, id, title, pos, size, style)
209 self.AppliPath = AppliPath
210 self.images_path = os.path.join(AppliPath,'images')
211 self.UserConfigPath = UserConfigPath
212 #self.RscriptsPath = ConstructRscriptsPath(AppliPath)
213 self.RscriptsPath = PathOut(dirout=os.path.join(AppliPath, 'Rscripts'))
214 self.RscriptsPath.basefiles(RscriptsPath)
215 #self.DictPath = ConstructDicoPath(AppliPath)
216 self.DictPath = ConstructDicoPath(UserConfigPath)
217 self.ConfigGlob = ConfigGlob
218 self.ConfigPath = ConstructConfigPath(UserConfigPath)
219 self.pref = RawConfigParser()
220 #workaround for import problem
221 self.SimiFromCluster = SimiFromCluster
223 gettext.install('iramuteq', os.path.join(AppliPath,'locale'), unicode=True)
224 #langues = ['fr_FR', 'en', 'pt_PT']
228 for langue in code_langues :
229 self.preslangue[langue] = gettext.translation("iramuteq", os.path.join(AppliPath,'locale'), languages=[code_langues[langue]])
231 #self.presLan_fr = gettext.translation("iramuteq", os.path.join(AppliPath,'locale'), languages=['fr_FR'])
232 #self.presLan_en = gettext.translation("iramuteq", os.path.join(AppliPath,'locale'), languages=['en'])
233 # tell FrameManager to manage this frame
234 #self._mgr = wx.aui.AuiManager()
235 self._mgr = aui.AuiManager()
236 self._mgr.SetManagedWindow(self)
239 #--------------------------------------------------------------------------------
240 self.images_analyses = images_analyses
241 for img in images_analyses :
242 self.images_analyses[img] = wx.Image(os.path.join(self.images_path, self.images_analyses[img]), wx.BITMAP_TYPE_PNG).Scale(16,16).ConvertToBitmap()
243 self.mb = wx.MenuBar()
245 file_menu = wx.Menu()
246 item = wx.MenuItem(file_menu, ID_OpenData, _(u"Open a matrix").decode('utf8'), _(u"Open a matrix").decode('utf8'))
247 #item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN))
248 item.SetBitmap(self.images_analyses['matroot'])
249 file_menu.AppendItem(item)
251 item = wx.MenuItem(file_menu, ID_OpenText, _(u"Open a text corpus").decode('utf8'), _(u"Open a text corpus").decode('utf8'))
252 item.SetBitmap(self.images_analyses['textroot'])
253 file_menu.AppendItem(item)
255 item = wx.MenuItem(file_menu, ID_OnOpenAnalyse, _(u"Open an analysis").decode('utf8'), _(u"Open an analysis").decode('utf8'))
256 item.SetBitmap(self.images_analyses['iramuteq'])
257 file_menu.AppendItem(item)
259 item = wx.MenuItem(file_menu, ID_ImportTXM, _(u"Import from TXM").decode('utf8'), _(u"Import from TXM").decode('utf8'))
260 item.SetBitmap(self.images_analyses['TXM'])
261 file_menu.AppendItem(item)
263 item = wx.MenuItem(file_menu, ID_ImportEuro, _(u"Import from Europress").decode('utf8'), _(u"Import from Europress").decode('utf8'))
264 item.SetBitmap(self.images_analyses['europress'])
265 file_menu.AppendItem(item)
267 menuFactiva = wx.Menu()
268 fact_from_xml = wx.MenuItem(menuFactiva, ID_Fact_xml, _(u"from xml").decode('utf8'))
269 fact_from_xml.SetBitmap(self.images_analyses['factiva_xml'])
270 fact_from_mail = wx.MenuItem(menuFactiva, ID_Fact_mail, _(u"from mail").decode('utf8'))
271 fact_from_mail.SetBitmap(self.images_analyses['factiva_mail'])
272 fact_from_txt = wx.MenuItem(menuFactiva, ID_Fact_copy, _(u"from copy/paste").decode('utf8'))
273 fact_from_txt.SetBitmap(self.images_analyses['factiva_copy'])
274 menuFactiva.AppendItem(fact_from_xml)
275 menuFactiva.AppendItem(fact_from_mail)
276 menuFactiva.AppendItem(fact_from_txt)
277 file_menu.AppendMenu(-1, _(u"Import from factiva").decode('utf8'), menuFactiva)
279 menuTools = wx.Menu()
280 splitvar = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Split from variable").decode('utf8'))
281 extractmod = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Extract mods").decode('utf8'))
282 extractthem = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Extract thematics").decode('utf8'))
283 menuTools.AppendItem(splitvar)
284 menuTools.AppendItem(extractmod)
285 menuTools.AppendItem(extractthem)
286 self.ID_splitvar = splitvar.GetId()
287 self.ID_extractmod = extractmod.GetId()
288 self.ID_extractthem = extractthem.GetId()
289 file_menu.AppendMenu(-1, _(u"Tools").decode('utf8'), menuTools)
292 #item = wx.MenuItem(file_menu, ID_SaveTab, _(u"Save tab as...").decode('utf8'), _(u"Save tab as...").decode('utf8'))
293 #item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_SAVE_AS))
294 #file_menu.AppendItem(item)
296 file_menu.Append(wx.ID_EXIT, _(u"Exit").decode('utf8'))
298 edit_menu = wx.Menu()
299 pref = wx.MenuItem(edit_menu, wx.ID_PREFERENCES, _(u'Preferences').decode('utf8'))
300 pref.SetBitmap(self.images_analyses['preferences'])
301 edit_menu.AppendItem(pref)
302 #edit_menu.Append(wx.ID_PREFERENCES, _(u'Preferences').decode('utf8'))
304 view_menu = wx.Menu()
305 home = wx.MenuItem(view_menu, ID_ACCEUIL, _(u"Home page").decode('utf8'))
306 home.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_GO_HOME, size = (16,16)))
307 view_menu.AppendItem(home)
308 #view_menu.Append(ID_ACCEUIL, _(u"Home page").decode('utf8'))
309 results = wx.MenuItem(view_menu, ID_RESULT, _(u'Show results').decode('utf8'))
310 results.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_LIST_VIEW, size = (16,16)))
311 view_menu.AppendItem(results)
312 #view_menu.Append(ID_RESULT, _(u'Show results').decode('utf8'))
313 #view_menu.AppendSeparator()
314 matrix_menu = wx.Menu()
315 matanalyses = [[ID_Freq, _(u"Frequencies").decode('utf8'), 'freq'],
316 [ID_Freq, _(u"Multiple Frequencies").decode('utf8'), 'freqmulti'],
317 [ID_Chi2, _(u"Chi2").decode('utf8'), 'chi2'],
318 {'name' : _(u"Clustering").decode('utf8'),
319 'content' : [[ID_CHDReinert, _(u"Reinert's Method").decode('utf8'), 'reinertmatrix']]},
320 [ID_SIMI, _(u"Similarities Analysis").decode('utf8'), 'simimatrix'],
321 [ID_proto, _(u"Prototypical Analysis").decode('utf8'), 'proto'],
322 [ID_Splitfromvar, _(u"Split from variable").decode('utf8'), 'subcorpusmeta'],
325 for analyse in matanalyses :
326 if not isinstance(analyse, dict) :
327 item = wx.MenuItem(matrix_menu, analyse[0], analyse[1])
328 item.SetBitmap(self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16)))
329 matrix_menu.AppendItem(item)
332 for subana in analyse['content'] :
333 item = wx.MenuItem(nmenu, subana[0], subana[1])
334 item.SetBitmap(self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)))
335 nmenu.AppendItem(item)
336 matrix_menu.AppendMenu(-1, analyse['name'], nmenu)
337 #item = wx.MenuItem(matrix_menu, ID_Freq, _(u"Frequencies").decode('utf8'))
338 #item.SetBitmap(self.images_analyses['freq'])
339 #matrix_menu.AppendItem(item)
340 #matrix_menu.Append(ID_Freq, _(u"Frequencies").decode('utf8'))
341 #item = wx.MenuItem(matrix_menu, ID_Freq, _(u"Multiple Frequencies").decode('utf8'))
342 #item.SetBitmap(self.images_analyses['freqmulti'])
343 #matrix_menu.Append(ID_FreqMulti, _(u'Multiple frequencies').decode('utf8'))
344 #matrix_menu.AppendItem(item)
345 #matrix_menu.Append(ID_Chi2, _(u"Chi2").decode('utf8'))
346 #matrix_menu.Append(ID_Student, u"t de Student")
347 #menu_classif = wx.Menu()
348 #menu_classif.Append(ID_CHDReinert, _(u"Reinert's Method").decode('utf8'))
349 #menu_classif.Append(ID_CHDSIM, u"Par matrice des distances")
350 #matrix_menu.AppendMenu(-1, _(u"Clustering").decode('utf8'), menu_classif)
351 #matrix_menu.Append(ID_AFCM, u"AFCM")
352 #matrix_menu.Append(ID_SIMI, _(u"Similarities Analysis").decode('utf8'))
353 #matrix_menu.Append(ID_proto, _(u"Prototypical Analysis").decode('utf8'))
354 ID_RCODE = wx.NewId()
355 #matrix_menu.Append(ID_RCODE, u"Code R...")
356 #menu_splittab = wx.Menu()
357 #ID_SPLITVAR = wx.NewId()
358 #splitvar = wx.MenuItem(menu_splittab, ID_SPLITVAR, _(u"Split from variable").decode('utf8'))
359 #menu_splittab.AppendItem(splitvar)
360 #matrix_menu.AppendMenu(-1, _(u"Split matrix").decode('utf8'), menu_splittab)
361 self.matrix_menu = matrix_menu
363 text_menu = wx.Menu()
364 analyses_text = [[ID_TEXTSTAT, _(u"Statistics").decode('utf8'), 'stat'],
365 [ID_ASLEX, _(u"Specificities and CA").decode('utf8'), 'spec'],
366 {'name' : _(u"Clustering").decode('utf8'),
367 'content' : [[ID_TEXTREINERT, _(u"Reinert's Method").decode('utf8'), 'alceste']]},
368 [ID_SimiTxt, _(u"Similarities Analysis").decode('utf8'), 'simitxt'],
369 [ID_WC, _(u"WordCloud").decode('utf8'), 'wordcloud'],
370 {'name' : _(u"Sub corpus").decode('utf8'),
371 'content' : [[ID_Subtxtfrommeta, _(u'Sub corpus from metadata').decode('utf8'), 'subcorpusmeta'],
372 [ID_Subtxtfromthem, _(u'Sub corpus from thematic').decode('utf8'), 'subcorpusthema']]},
373 [ID_exportmeta, _(u"Export metadata table").decode('utf8'), 'exportmetatable'],
376 for analyse in analyses_text :
377 if not isinstance(analyse, dict) :
378 item = wx.MenuItem(text_menu, analyse[0], analyse[1])
379 item.SetBitmap(self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16)))
380 text_menu.AppendItem(item)
383 for subana in analyse['content'] :
384 item = wx.MenuItem(nmenu, subana[0], subana[1])
385 item.SetBitmap(self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)))
386 nmenu.AppendItem(item)
387 text_menu.AppendMenu(-1, analyse['name'], nmenu)
388 #text_menu.Append(ID_CHECKCORPUS, u"Vérifier le corpus")
389 # text_menu.Append(ID_TEXTSTAT, _(u"Statistics").decode('utf8'))
390 # text_menu.Append(ID_ASLEX, _(u"Specificities and CA").decode('utf8'))
391 # #text_menu.Append(ID_TEXTAFCM, u"AFC sur UCI / Vocabulaire")
392 # menu_classiftxt = wx.Menu()
393 # menu_classiftxt.Append(ID_TEXTREINERT, _(u"Reinert's Method").decode('utf8'))
394 # #menu_classiftxt.Append(ID_TEXTPAM, u"Par matrice des distances")
395 # text_menu.AppendMenu(-1, _(u"Clustering").decode('utf8'), menu_classiftxt)
396 # text_menu.Append(ID_SimiTxt, _(u"Similarities Analysis").decode('utf8'))
398 # text_menu.Append(ID_WC, _(u"WordCloud").decode('utf8'))
399 self.text_menu = text_menu
401 help_menu = wx.Menu()
402 about = wx.MenuItem(help_menu, wx.ID_ABOUT, _(u"About...").decode('utf8'))
403 about.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_INFORMATION, size = (16,16)))
404 help_menu.AppendItem(about)
405 #help_menu.Append(wx.ID_ABOUT, _(u"About...").decode('utf8'))
406 help = wx.MenuItem(help_menu, wx.ID_HELP, _(u"Online help...").decode('utf8'))
407 help.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_HELP, size = (16,16)))
408 help_menu.AppendItem(help)
409 #help_menu.Append(wx.ID_HELP, _(u"Online help...").decode('utf8'))
411 self.mb.Append(file_menu, _(u"File").decode('utf8'))
412 self.mb.Append(edit_menu, _(u"Edition").decode('utf8'))
413 self.mb.Append(view_menu, _(u"View").decode('utf8'))
414 self.mb.Append(matrix_menu, _(u"Matrix analysis").decode('utf8'))
415 self.mb.Append(text_menu, _(u"Text analysis").decode('utf8'))
416 self.mb.Append(help_menu, _(u"Help").decode('utf8'))
418 self.SetMenuBar(self.mb)
419 #--------------------------------------------------------------------
420 self.statusbar = self.CreateStatusBar(2, wx.ST_SIZEGRIP)
421 self.statusbar.SetStatusWidths([-2, -3])
422 self.statusbar.SetStatusText(_(u"Ready").decode('utf8'), 0)
423 self.statusbar.SetStatusText(_(u"Welcome").decode('utf8'), 1)
425 # min size for the frame itself isn't completely done.
426 # see the end up FrameManager::Update() for the test
427 # code. For now, just hard code a frame minimum size
428 self.SetMinSize(wx.Size(400, 400))
430 # create some toolbars
431 tb1 = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
432 wx.TB_FLAT | wx.TB_NODIVIDER)
433 tb1.SetToolBitmapSize(wx.Size(16, 16))
434 tb1.AddLabelTool(ID_OpenData, "OpenData", self.images_analyses['matroot'], shortHelp=_(u"Matrix").decode('utf8'), longHelp=_(u"Open a matrix").decode('utf8'))
436 tb1.AddLabelTool(ID_OpenText, "OpenText", self.images_analyses['textroot'], shortHelp=_(u"Text").decode('utf8'), longHelp=_(u"Open a text corpus").decode('utf8'))
438 tb1.AddLabelTool(ID_OnOpenAnalyse, "OpenAnalyse", self.images_analyses['iramuteq'], shortHelp= _(u"Open an analysis").decode('utf8'), longHelp=_(u"Open an analysis").decode('utf8'))
440 tb1.AddLabelTool(ID_ImportTXM, "ImportTXM", self.images_analyses['TXM'], shortHelp= _(u"Import from TXM").decode('utf8'), longHelp=_(u"Import from TXM").decode('utf8'))
442 tb1.AddLabelTool(ID_ImportEuro, "ImportEuro", self.images_analyses['europress'], shortHelp= _(u"Import from Europress").decode('utf8'), longHelp=_(u"Import from Europress").decode('utf8'))
444 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'))
445 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'))
446 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'))
448 tb1.AddLabelTool(wx.ID_PREFERENCES, "Preferences", self.images_analyses['preferences'], shortHelp= _(u"Preferences").decode('utf8'), longHelp=_(u"Preferences").decode('utf8'))
450 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'))
451 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'))
454 tb_text = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
455 wx.TB_FLAT | wx.TB_NODIVIDER)
456 for analyse in analyses_text :
457 if not isinstance(analyse, dict) :
458 tb_text.AddLabelTool(analyse[0], analyse[1], self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16)), shortHelp = analyse[1], longHelp = analyse[1])
460 for subana in analyse['content'] :
461 tb_text.AddLabelTool(subana[0], subana[1], self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)), shortHelp = subana[1], longHelp = subana[1])
464 tb_mat = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
465 wx.TB_FLAT | wx.TB_NODIVIDER)
466 for analyse in matanalyses :
467 if not isinstance(analyse, dict) :
468 tb_mat.AddLabelTool(analyse[0], analyse[1], self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16)), shortHelp = analyse[1], longHelp = analyse[1])
470 for subana in analyse['content'] :
471 tb_mat.AddLabelTool(subana[0], subana[1], self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)), shortHelp = subana[1], longHelp = subana[1])
474 tb_help = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
475 wx.TB_FLAT | wx.TB_NODIVIDER)
476 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'))
477 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'))
479 #------------------------------------------------------------------------------------------------
481 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)
483 #self._mgr.AddPane(self.text_ctrl_txt, wx.aui.AuiPaneInfo().
484 # Name("Text").CenterPane())
485 self._mgr.AddPane(self.text_ctrl_txt, aui.AuiPaneInfo().
486 Name("Text").CenterPane())
487 #self._mgr.AddPane(IntroPanel(self), wx.aui.AuiPaneInfo().Name("Intro_Text").
489 self._mgr.AddPane(IntroPanel(self), aui.AuiPaneInfo().Name("Intro_Text").
491 #if not os.path.exists(os.path.join(UserConfigPath, 'history.db')) :
492 # with open(os.path.join(UserConfigPath, 'history.db'), 'w') as f :
494 self.history = History(os.path.join(UserConfigPath, 'history.db'))
495 self.tree = LeftTree(self)
496 self._mgr.AddPane(self.tree, aui.AuiPaneInfo().Name("lefttree").Caption(_(u"Historic").decode('utf8')).
497 Left().MinSize(wx.Size(200,500)).Layer(1).Position(1).CloseButton(False).MaximizeButton(True).
498 MinimizeButton(True))
500 #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)
501 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)
502 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
503 self.nb.SetAGWWindowStyleFlag(notebook_flags)
504 self.nb.SetArtProvider(aui.ChromeTabArt())
505 #self.nb.SetArtProvider(aui.VC8TabArt())
506 #self.nb.parent = self
507 #self._notebook_style = aui.AUI_NB_DEFAULT_STYLE | aui.AUI_NB_TAB_EXTERNAL_MOVE | wx.NO_BORDER
508 #self._mgr.AddPane(self.nb, wx.aui.AuiPaneInfo().
509 # Name("Tab_content").
511 self._mgr.AddPane(self.nb, aui.AuiPaneInfo().
515 #self._mgr.AddPane(self.Sheet, wx.aui.AuiPaneInfo().Name("Data").CenterPane())
516 #self._mgr.AddPane(self.Sheet, aui.AuiPaneInfo().Name("Data").CenterPane())
517 self.nb.Bind(aui.EVT_AUINOTEBOOK_PAGE_CLOSE, self.OnCloseTab)
518 self.nb.Bind(aui.EVT_AUINOTEBOOK_PAGE_CHANGED, self.OnPageChanged)
519 # add the toolbars to the manager
521 #self._mgr.AddPane(tb1, wx.aui.AuiPaneInfo().
522 # Name("tb1").Caption("Fichiers").
523 # ToolbarPane().Top().
524 # LeftDockable(False).RightDockable(False))
525 self._mgr.AddPane(tb1, aui.AuiPaneInfo().
526 Name("tb1").Caption("Fichiers").
528 LeftDockable(True).RightDockable(False))
530 self._mgr.AddPane(tb_text, aui.AuiPaneInfo().
531 Name("tb_text").Caption("analyse_text").
533 LeftDockable(True).RightDockable(False))
535 self._mgr.AddPane(tb_mat, aui.AuiPaneInfo().
536 Name("tb_mat").Caption("analyse_matrix").
538 LeftDockable(True).RightDockable(False))
540 self._mgr.AddPane(tb_help, aui.AuiPaneInfo().
541 Name("tb_help").Caption("help").
543 LeftDockable(True).RightDockable(False))
545 self._mgr.GetPane('tb_text').Hide()
546 self._mgr.GetPane('tb_mat').Hide()
548 self.ShowAPane("Intro_Text")
549 self._mgr.GetPane("lefttree").Show()
550 self._mgr.GetPane("classif_tb").Hide()
551 # "commit" all changes made to FrameManager
554 # Show How To Use The Closing Panes Event
555 ##################################################################
556 self.Bind(wx.EVT_MENU, self.OnAcceuil, id=ID_ACCEUIL)
557 self.Bind(wx.EVT_MENU, self.ShowTab, id=ID_RESULT)
558 self.Bind(wx.EVT_MENU, self.OnOpenData, id=ID_OpenData)
559 self.Bind(wx.EVT_MENU, self.OnOpenText, id=ID_OpenText)
560 self.Bind(wx.EVT_MENU, self.OnOpenAnalyse, id=ID_OnOpenAnalyse)
561 self.Bind(wx.EVT_MENU, self.import_factiva_xml, fact_from_xml)
562 self.Bind(wx.EVT_MENU, self.import_factiva_mail, fact_from_mail)
563 self.Bind(wx.EVT_MENU, self.import_factiva_txt, fact_from_txt)
564 self.Bind(wx.EVT_MENU, self.ExtractTools, splitvar)
565 self.Bind(wx.EVT_MENU, self.ExtractTools, extractmod)
566 self.Bind(wx.EVT_MENU, self.ExtractTools, extractthem)
567 self.Bind(wx.EVT_MENU, self.OnFreq, id=ID_Freq)
568 self.Bind(wx.EVT_MENU, self.OnFreqMulti, id=ID_FreqMulti)
569 self.Bind(wx.EVT_MENU, self.OnChi2, id=ID_Chi2)
570 self.Bind(wx.EVT_MENU, self.OnStudent, id=ID_Student)
571 self.Bind(wx.EVT_MENU, self.OnCHDSIM, id=ID_CHDSIM)
572 self.Bind(wx.EVT_MENU, self.OnCHDReinert, id=ID_CHDReinert)
573 self.Bind(wx.EVT_MENU, self.OnAFCM, id=ID_AFCM)
574 self.Bind(wx.EVT_MENU, self.OnProto, id=ID_proto)
575 self.Bind(wx.EVT_MENU, self.OnSplitVar, id = ID_Splitfromvar)
576 #self.Bind(wx.EVT_MENU, self.OnRCode, id=ID_RCODE)
577 #self.Bind(wx.EVT_MENU, self.OnSplitVar, id=ID_SPLITVAR)
578 #self.Bind(wx.EVT_MENU, self.OnCheckcorpus, id = ID_CHECKCORPUS)
579 self.Bind(wx.EVT_MENU, self.OnTextStat, id=ID_TEXTSTAT)
580 self.Bind(wx.EVT_MENU, self.OnTextSpec, id=ID_ASLEX)
581 self.Bind(wx.EVT_MENU, self.OnTextAfcm, id=ID_TEXTAFCM)
582 self.Bind(wx.EVT_MENU, self.OnTextReinert, id=ID_TEXTREINERT)
583 self.Bind(wx.EVT_MENU, self.OnPamSimple, id=ID_TEXTPAM)
584 self.Bind(wx.EVT_MENU, self.OnSimiTxt, id=ID_SimiTxt)
585 self.Bind(wx.EVT_MENU, self.OnWordCloud, id=ID_WC)
586 self.Bind(wx.EVT_MENU, self.OnSubText, id = ID_Subtxtfrommeta)
587 self.Bind(wx.EVT_MENU, self.OnSubText, id = ID_Subtxtfromthem)
588 self.Bind(wx.EVT_MENU, self.OnSimiTab, id=ID_SIMI)
589 self.Bind(wx.EVT_MENU, self.OnExit, id=wx.ID_EXIT)
590 #self.Bind(wx.EVT_MENU, self.OnSaveTabAs, id=ID_SaveTab)
591 self.Bind(wx.EVT_MENU, self.OnAbout, id=wx.ID_ABOUT)
592 self.Bind(wx.EVT_MENU, self.OnHelp, id=wx.ID_HELP)
593 self.Bind(wx.EVT_MENU, self.OnPref, id=wx.ID_PREFERENCES)
594 self.Bind(wx.EVT_MENU, self.OnImportTXM, id=ID_ImportTXM)
595 self.Bind(wx.EVT_MENU, self.OnImportEuropress, id=ID_ImportEuro)
596 self.Bind(wx.EVT_MENU, self.OnExportMeta, id=ID_exportmeta)
597 self.Bind(wx.EVT_CLOSE, self.OnClose)
598 ##################################################################
599 flags = self._mgr.GetAGWFlags()
600 #flags &= ~wx.aui.AUI_MGR_TRANSPARENT_HINT
601 #flags &= ~wx.aui.AUI_MGR_VENETIAN_BLINDS_HINT
602 #flags &= ~wx.aui.AUI_MGR_RECTANGLE_HINT
603 flags &= ~(aui.AUI_MGR_RECTANGLE_HINT | aui.AUI_MGR_ALLOW_FLOATING)
604 self._mgr.SetAGWFlags(self._mgr.GetAGWFlags() ^ (aui.AUI_MGR_RECTANGLE_HINT | aui.AUI_MGR_ALLOW_FLOATING))
605 self._mgr.GetArtProvider().SetMetric(aui.AUI_DOCKART_GRADIENT_TYPE, aui.AUI_GRADIENT_HORIZONTAL)
606 self.GetDockArt().SetColor(aui.AUI_DOCKART_ACTIVE_CAPTION_GRADIENT_COLOUR, "#00FFF9")
609 self._icon = wx.Icon(os.path.join(ImagePath, "iraicone.ico"), wx.BITMAP_TYPE_ICO)
610 self.SetIcon(self._icon)
611 ##########################
613 self.input_path = [False]
614 self.TEMPDIR = tempfile.mkdtemp('iramuteq')
615 self.FileTabList = []
621 self.g_header = False
628 self.SysEncoding = sys.getdefaultencoding()
629 self.syscoding = sys.getdefaultencoding()
630 #print 'SysEncoding',self.SysEncoding
631 if self.SysEncoding == 'mac-roman' : self.SysEncoding = 'MacRoman'
634 ##############################################################@
635 self.ShowMenu('view', True)
636 self.ShowMenu('matrix', False)
637 self.ShowMenu('text', False)
648 def finish_init(self) :
650 self.pref.read(self.ConfigPath['preferences'])
653 self.pref.read(self.ConfigPath['preferences'])
660 self.pref.read(self.ConfigPath['preferences'])
662 self.sound = self.pref.getboolean('iramuteq', 'sound')
663 self.check_update = self.pref.getboolean('iramuteq', 'checkupdate')
664 self.version = ConfigGlob.get('DEFAULT', 'version')
665 #configuration des chemins de R
666 self.PathPath = ConfigParser()
667 self.PathPath.read(ConfigPath['path'])
669 if not CheckRPath(self.PathPath) :
670 if sys.platform == 'win32':
671 BestRPath = FindRPAthWin32()
673 BestRPath = FindRPathNix()
675 self.PathPath.set('PATHS', 'rpath', BestRPath)
676 with open(ConfigPath['path'], 'w') as f :
677 self.PathPath.write(f)
681 self.RPath = self.PathPath.get('PATHS', 'rpath')
684 if not RLibsAreInstalled(self) :
687 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'),
688 _(u"If R is installed, report its path in Preferences.").decode('utf8'),
689 _(u"IRaMuTeQ does not work without R.").decode('utf8')])
690 dlg = wx.MessageDialog(self, msg, _(u"Problem").decode('utf8'), wx.OK | wx.NO_DEFAULT | wx.ICON_WARNING)
692 if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
696 def setlangue(self) :
697 self.pref.read(self.ConfigPath['preferences'])
699 guilangue = self.pref.get('iramuteq', 'guilanguage')
701 guilangue = DefaultConf.get('iramuteq', 'guilanguage')
702 self.preslangue.get(guilangue, 'english').install()
704 def OnVerif(self, evt) :
705 pack = CheckRPackages(self)
707 dlg = wx.MessageDialog(self, _(u"Installation OK").decode('utf8'), _(u"Installation").decode('utf8'), wx.OK | wx.ICON_INFORMATION | wx.STAY_ON_TOP)
709 if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
712 def ShowMenu(self, menu, Show=True):
716 self._mgr.GetPane('tb_text').Show()
718 self._mgr.GetPane('tb_text').Hide()
719 elif menu == 'matrix' :
722 self._mgr.GetPane('tb_mat').Show()
724 self._mgr.GetPane('tb_mat').Hide()
725 elif menu == 'view' :
730 #menu_pos = self.mb.FindMenu(menu)
731 if not menu_pos is None :
732 self.mb.EnableTop(menu_pos, Show)
733 self.mb.UpdateMenus()
736 #--------------------------------------------------------------------
737 def OnClose(self, event):
739 with open(self.ConfigPath['path'], 'w') as f :
740 self.PathPath.write(f)
745 def OnOpenData(self, event):
746 inputname, self.input_path = OnOpen(self, "Data")
748 #filename = self.input_path[0]
749 self.tableau = Tableau(self,os.path.abspath(self.input_path[0]))
750 val = get_table_param(self, self.input_path[0])
752 busy = wx.BusyInfo(_("Please wait...").decode('utf8'), self)
755 self.tableau.make_content()
756 OpenAnalyse(self, self.tableau.parametres)
757 self.tree.OnItemAppend(self.tableau.parametres)
762 #self.tableau.show_tab()
764 def OnOpenAnalyse(self, event):
765 self.AnalysePath = OnOpen(self, "Analyse")
766 if self.AnalysePath :
767 OpenAnalyse(self, self.AnalysePath[1][0], True)
768 self.ShowMenu('view')
770 def OnOpenText(self, event):
771 inputname, self.input_path = OnOpen(self, "Texte")
772 self.filename = self.input_path[0]
776 def OnSubText(self, evt, corpus = None, parametres = None):
778 corpus = self.tree.getcorpus()
779 if evt.GetId() == ID_Subtxtfrommeta :
780 parametres = {'frommeta' : True}
781 elif evt.GetId() == ID_Subtxtfromthem :
782 parametres = {'fromtheme' : True}
783 builder = SubBuilder(self, corpus, parametres)
784 if builder.res == wx.ID_OK :
785 busy = wx.BusyInfo(_("Please wait...").decode('utf8'), self)
787 corpus = builder.doanalyse()
788 self.history.add(corpus.parametres)
789 self.tree.OnItemAppend(corpus.parametres)
790 OpenAnalyse(self, corpus.parametres)
794 dlg = wx.ProgressDialog("Ouverture...",
795 "Veuillez patienter...",
798 style=wx.PD_APP_MODAL | wx.PD_AUTO_HIDE | wx.PD_ELAPSED_TIME | wx.PD_CAN_ABORT
801 builder = Builder(self, dlg)
802 if builder.res == wx.ID_OK :
804 corpus = builder.doanalyse()
805 self.history.add(corpus.parametres)
806 self.tree.OnItemAppend(corpus.parametres)
807 OpenAnalyse(self, corpus.parametres)
813 keepGoing = dlg.Update(count, u"Lecture du fichier")
814 self.ShowMenu('view')
815 self.ShowMenu('text')
816 self.ShowMenu('matrix', False)
821 keepGoing = dlg.Update(count, u"Chargement du dictionnaire")
824 def OnExit(self, event):
827 def OnAbout(self, event):
828 info = wx.AboutDialogInfo()
829 info.Name = ConfigGlob.get('DEFAULT', 'name')
830 info.Version = ConfigGlob.get('DEFAULT', 'version')
831 info.Copyright = ConfigGlob.get('DEFAULT', 'copyright')
832 info.Translators = ConfigGlob.get('DEFAULT', 'translators').decode('utf8').split(';')
833 info.Description = u"""
834 Interface de R pour les Analyses Multidimensionnelles
835 de Textes et de Questionnaires
838 construit avec des logiciels libres.
844 info.WebSite = ("http://www.iramuteq.org", u"Site web IRaMuTeQ")
845 dev = ConfigGlob.get('DEFAULT', 'dev').decode('utf8').split(';')
846 info.Developers = dev
847 info.License = u"""Iramuteq est un logiciel libre ; vous pouvez le diffuser et/ou le modifier
848 suivant les termes de la Licence Publique Générale GNU telle que publiée
849 par la Free Software Foundation ; soit la version 2 de cette licence,
850 soit (à votre convenance) une version ultérieure.
852 Iramuteq est diffusé dans l'espoir qu'il sera utile,
853 mais SANS AUCUNE GARANTIE ; sans même une garantie implicite
854 de COMMERCIALISATION ou d'ADÉQUATION À UN USAGE PARTICULIER.
855 Voyez la Licence Publique Générale GNU pour plus de détails.
857 Vous devriez avoir reçu une copie de la Licence Publique Générale GNU
858 avec Iramuteq ; sinon, veuillez écrire à la Free Software Foundation,
859 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
862 def GetDockArt(self):
863 return self._mgr.GetArtProvider()
868 def OnPageChanged(self, event) :
869 new = event.GetSelection()
870 nobject = event.GetEventObject()
871 parent = nobject.GetParent()
872 if isinstance(parent, IraFrame) :
873 npage = self.nb.GetPage(new)
874 if 'parametres' in dir(npage) :
875 self.tree.GiveFocus(uuid=npage.parametres['uuid'])
876 if npage.parametres.get('matrix', False) :
877 self.ShowMenu('text', False)
878 self.ShowMenu('matrix', True)
879 elif npage.parametres.get('corpus', False) :
880 self.ShowMenu('text')
881 self.ShowMenu('matrix', False)
883 def OnCloseTab(self, evt):
884 #log.info('Closing tab %s' % str(evt.GetEventObject()))
885 ctrl = evt.GetEventObject()
886 if isinstance(ctrl.GetParent(), aui.AuiNotebook) or isinstance(ctrl.GetParent(), wx.Panel):
890 page = self.nb.GetPage(self.nb.GetSelection())
891 if 'parametres' in dir(page) and isinstance(ctrl.GetParent(), IraFrame) :
892 self.history.rmtab(page.parametres)
893 self.tree.CloseItem(uuid = page.parametres['uuid'])
894 TabTitle = self.nb.GetPageText(self.nb.GetSelection())
896 if self.nb.GetPageCount() == 1 and not notebook :
899 def LastTabClose(self) :
900 if self.nb.GetPageCount() == 1 :
902 self.ShowAPane("Text")
904 self.ShowAPane("Data")
906 self.ShowAPane("Intro_Text")
908 def GetStartPosition(self):
912 pt = self.ClientToScreen(wx.Point(0, 0))
914 return wx.Point(pt.x + x, pt.y + x)
916 def ShowAPane(self, panel):
917 for pane in self._mgr.GetAllPanes() :
918 if not pane.IsToolbar() and pane.name != 'lefttree':
920 self._mgr.GetPane(panel).Show()
923 def OnAcceuil(self, event):
924 self.ShowAPane(u"Intro_Text")
927 def CreateHTMLCtrl(self):
928 ctrl = wx.html.HtmlWindow(self, -1, wx.DefaultPosition, wx.Size(400, 300))
929 if "gtk2" in wx.PlatformInfo:
930 ctrl.SetStandardFonts()
931 ctrl.SetPage(u"text")
934 def ShowTab(self, evt):
935 self.ShowAPane("Tab_content")
937 ################################################################
939 ################################################################
940 def analyse_matrix(self, analyse, analyse_type = '', matrix = None, parametres = None, dlgnb = 1):
942 matrix = self.tree.getmatrix()
943 if parametres is not None :
944 parametres['type'] = analyse_type
946 parametres = {'type' : analyse_type}
948 #print 'plus de bug@@@@@@@@@@@@@@@@@@@@@@'
949 analyse(self, matrix, parametres = parametres, dlg = dlgnb)
953 def OnFreq(self, event, matrix = None):
954 self.analyse_matrix(Frequences, analyse_type = 'freq', matrix = matrix, dlgnb = 3)
956 def OnFreqMulti(self, event, matrix = None):
957 self.analyse_matrix(FreqMultiple, analyse_type = 'freqmulti', matrix = matrix, dlgnb = 3)
959 def OnChi2(self, event, matrix = None):
960 self.analyse_matrix(ChiSquare, matrix = matrix, analyse_type = 'chi2', dlgnb = 3)
962 def OnSimiTab(self, event, matrix = None):
963 self.analyse_matrix(DoSimi, matrix = matrix, analyse_type = 'simimatrix', dlgnb = 5)
965 def OnCHDReinert(self, event, matrix = None):
967 # matrix = self.tree.getmatrix()
968 #AnalyseQuest(self, matrix, parametres = {'type' : 'reinertmatrix'}, dlg = 3)
969 self.analyse_matrix(AnalyseQuest, matrix = matrix, analyse_type = 'reinertmatrix', dlgnb = 5)
971 def OnStudent(self, event):
977 def OnRCode(self, event):
983 def OnCHDSIM(self, event):
985 # print 'ATTENTION!!!!'
986 chdsim = ChdCluster(self)
987 if chdsim.val == wx.ID_OK:
992 # def OnCHDReinert(self, event):
994 # # print('PLUS DE BUG SUR ALCESTE QUESTIONNAIRE')
995 # self.quest = AnalyseQuest(self)
996 # if self.quest.val == wx.ID_OK:
1001 def OnProto(self, evt, matrix = None) :
1002 self.analyse_matrix(Prototypical, matrix = matrix, analyse_type = 'proto', dlgnb = 3)
1003 #Prototypical(self, {'type' : 'proto'})
1005 def OnSplitVar(self, evt, matrix = None):
1007 matrix = self.tree.getmatrix()
1008 self.analyse_matrix(SplitMatrixFromVar, matrix = matrix, analyse_type = 'splitvar', parametres = {'pathout': matrix.pathout.dirout}, dlgnb = 3)
1009 #matrix = self.tree.getmatrix()
1012 def OnSimiTxt(self, evt, corpus = None) :
1013 # print 'PLUS DE BUG SUR SIMITXT'
1015 #self.Text = SimiTxt(self)
1017 corpus = self.tree.getcorpus()
1018 self.Text = SimiTxt(self, corpus, parametres = {'type': 'simitxt'}, dlg = 3)
1019 if self.Text.val == wx.ID_OK :
1024 def OnWordCloud(self, evt, corpus = None) :
1025 # print 'PLUS DE BUG SUR WORDCLOUD'
1028 corpus = self.tree.getcorpus()
1029 self.Text = WordCloud(self, corpus, parametres = {'type' : 'wordcloud'}, dlg = 3)
1030 if self.Text.val == wx.ID_OK :
1035 def OnClusterCloud(self, corpus, parametres = None) :
1036 self.Text = ClusterCloud(self, corpus, parametres = parametres, dlg = 3)
1038 def OnAFCM(self, event):
1044 def OnTextStat(self, event, corpus = None):
1045 #print 'PAS DE BUG SUR TEXT STAT'
1048 corpus = self.tree.getcorpus()
1049 self.Text = Stat(self, corpus, parametres = {'type': 'stat'}, dlg = 7)
1051 if self.Text.val == wx.ID_OK :
1056 def OnTextSpec(self, event, corpus = None):
1058 #self.Text = AsLexico(self)
1059 #print('ATTENTION : PLUS DE BUG SUR LEXICO')
1061 corpus = self.tree.getcorpus()
1062 self.Text = Lexico(self, corpus, parametres = {'type' : 'spec'}, dlg = 3)
1063 if self.Text.val == wx.ID_OK :
1068 def OnTextAfcm(self, event):
1075 def import_factiva_xml(self,event):
1077 ImportFactiva(self, 'xml')
1081 def import_factiva_mail(self, evt) :
1083 ImportFactiva(self, 'mail')
1087 def import_factiva_txt(self, evt) :
1089 ImportFactiva(self, 'txt')
1093 def OnImportTXM(self, evt) :
1095 ImportFactiva(self, 'txm')
1099 def OnImportEuropress(self, evt) :
1101 ImportFactiva(self, 'euro')
1105 def OnExportMeta(self, evt, corpus = None):
1107 corpus = self.tree.getcorpus()
1109 ExportMetaTable(self, corpus)
1113 def ExtractTools(self, evt) :
1115 if ID == self.ID_splitvar :
1116 Extract(self, 'splitvar')
1117 elif ID == self.ID_extractmod :
1118 Extract(self, 'mods')
1119 elif ID == self.ID_extractthem :
1120 Extract(self, 'them')
1122 def OnTextReinert(self, event, corpus = None):
1124 #print('ATTENTION : PLUS DE BUG SUR ALCESTE')
1125 #RunAnalyse(self, corpus, Alceste, OptAlceste)
1127 corpus = self.tree.getcorpus()
1128 self.Text = Reinert(self, corpus, parametres = {'type': 'alceste'}, dlg = 6)
1129 if self.Text.val == wx.ID_OK:
1134 def OnPamSimple(self, event, corpus = None):
1137 corpus = self.tree.getcorpus()
1138 self.Text = AnalysePam(self, corpus, parametres = {'type' : 'pamtxt'}, dlg = 6)
1139 if self.Text.val == wx.ID_OK:
1144 def SimiCluster(self, parametres = {}, fromprof = False, tableau = None) :
1145 self.analyse_matrix(DoSimi, parametres = parametres, analyse_type = 'simiclustermatrix', matrix = tableau, dlgnb = 5)
1147 # def OnSimi(self,evt):
1149 #print 'ATTENTION !!!! VERGES'
1150 #print 'PLUS DE BUG SUR SIMI'
1151 # self.res = DoSimi(self, param = None)
1152 #self.res = Verges(self)
1153 # if self.res.val == wx.ID_OK :
1157 #################################################################
1159 def OnHelp(self, event):
1160 webbrowser.open('http://www.iramuteq.org/documentation')
1162 def OnPref(self, event):
1163 dlg = PrefDialog(self)
1164 dlg.CenterOnParent()
1165 self.val = dlg.ShowModal()
1169 if self.check_update:
1172 print 'pas de verif'
1174 #CheckRPackages(self)
1176 def OnOpenFromCmdl(self):
1178 if options.filename :
1179 if os.path.exists(options.filename):
1180 self.filename = os.path.abspath(options.filename)
1184 if os.path.exists(os.path.realpath(args[0])):
1185 self.filename = os.path.abspath(os.path.realpath(args[0]))
1191 if os.path.splitext(self.filename)[1] in ['.csv', '.xls', '.ods']:
1192 self.tableau = Tableau(self, self.filename)
1193 val = get_table_param(self, self.filename)
1194 if val == wx.ID_OK :
1195 self.tableau.make_content()
1196 OpenAnalyse(self, self.tableau.parametres)
1197 self.tree.OnItemAppend(self.tableau.parametres)
1198 #get_table_param(self, self.filename)
1199 #self.tableau.make_content()
1200 #self.tableau.show_tab()
1201 #open_data(self, self.filename)
1202 elif os.path.splitext(self.filename)[1] == '.txt':
1204 elif os.path.splitext(self.filename)[1] == '.ira' :
1205 #self.corpus = Corpus(self)
1206 #self.Text = OpenAnalyse(self, self.filename)
1207 OpenAnalyse(self, self.filename)
1209 print 'ce fichier n\'existe pas'
1213 class IntroPanel(wx.Panel):
1214 def __init__(self, parent):
1215 wx.Panel.__init__(self, parent)
1216 col = randint(0, 255)
1217 col1 = randint(0,255)
1218 col2 = randint(0,255)
1220 bckgrdcolor = wx.Colour(col, col1, col2)
1221 self.SetBackgroundColour(bckgrdcolor)
1222 txtcolour = wx.Colour(250, 250, 250)
1223 linkcolor = wx.Colour(255, 0, 0)
1224 sizer1 = wx.BoxSizer(wx.VERTICAL)
1225 sizer2 = wx.BoxSizer(wx.VERTICAL)
1226 sizer4 = wx.BoxSizer(wx.HORIZONTAL)
1227 grid_sizer_1 = wx.FlexGridSizer(1, 4, 0, 0)
1228 grid_sizer_3 = wx.FlexGridSizer(1, 4, 0, 0)
1229 grid_sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
1231 iralink = hl.HyperLinkCtrl(self, wx.ID_ANY, u"http://www.iramuteq.org", URL="http://www.iramuteq.org")
1232 iralink.SetColours(linkcolor, linkcolor, "RED")
1233 iralink.SetBackgroundColour(bckgrdcolor)
1234 iralink.EnableRollover(True)
1235 iralink.SetUnderlines(False, False, True)
1236 iralink.SetBold(True)
1237 iralink.UpdateLink()
1239 PanelPres = wx.Panel(self)
1240 bckgrdcolor = wx.Colour(randint(0, 255), randint(0, 255), randint(0, 255))
1241 PanelPres.SetBackgroundColour(bckgrdcolor)
1243 label_1 = wx.StaticText(self, -1, u"IRaMuTeQ", size=(-1, -1))
1244 label_1.SetFont(wx.Font(46, wx.TELETYPE, wx.NORMAL, wx.BOLD, 0, "Purisa"))
1245 label_1.SetForegroundColour(wx.RED)
1247 iraicone = wx.Image(os.path.join(ImagePath,'iraicone100x100.png'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
1248 but_ira = wx.StaticBitmap(self, -1, bitmap = iraicone)
1251 label2 = wx.StaticText(PanelPres, -1 , u'\nVersion ' + ConfigGlob.get('DEFAULT', 'version') + '\n')
1252 label2.SetForegroundColour(txtcolour)
1253 label2.SetBackgroundColour(bckgrdcolor)
1254 self.hyper2 = hl.HyperLinkCtrl(PanelPres, wx.ID_ANY, u"REPERE", URL="http://repere.no-ip.org/")
1255 self.hyper2.SetColours(linkcolor, linkcolor, "RED")
1256 self.hyper2.SetBackgroundColour(bckgrdcolor)
1257 self.hyper2.EnableRollover(True)
1258 self.hyper2.SetUnderlines(False, False, True)
1259 self.hyper2.SetBold(True)
1260 self.hyper2.UpdateLink()
1262 label_lerass = wx.StaticText(PanelPres, -1, u'Laboratoire ')
1263 label_lerass.SetForegroundColour(txtcolour)
1264 label_lerass.SetBackgroundColour(bckgrdcolor)
1266 self.hyper_lerass = hl.HyperLinkCtrl(PanelPres, -1, u'LERASS', URL="http://www.lerass.com")
1267 self.hyper_lerass.SetColours(linkcolor, linkcolor, "RED")
1268 self.hyper_lerass.SetBackgroundColour(bckgrdcolor)
1269 self.hyper_lerass.EnableRollover(True)
1270 self.hyper_lerass.SetUnderlines(False, False, True)
1271 self.hyper_lerass.SetBold(True)
1272 self.hyper_lerass.UpdateLink()
1274 blank = wx.StaticText(PanelPres, -1, u'\n')
1275 blank1 = wx.StaticText(PanelPres, -1, u'\n')
1277 labellicence = wx.StaticText(PanelPres, -1, _(u"License GNU GPL").decode('utf8'))
1278 labellicence.SetForegroundColour(txtcolour)
1279 labellicence.SetBackgroundColour(bckgrdcolor)
1281 labelcopy = wx.StaticText(PanelPres, -1, ConfigGlob.get('DEFAULT', 'copyright'))
1282 labelcopy.SetForegroundColour(txtcolour)
1283 labelcopy.SetBackgroundColour(bckgrdcolor)
1285 python_img = wx.Image(os.path.join(ImagePath,'python-logo.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
1286 r_img = wx.Image(os.path.join(ImagePath,'Rlogo.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
1287 lexique_img = wx.Image(os.path.join(ImagePath,'LexTexte4.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
1288 but_python = wx.BitmapButton(self, -1, python_img)
1289 but_lexique = wx.BitmapButton(self, -1, lexique_img)
1290 but_r = wx.BitmapButton(self, -1, r_img)
1291 self.Bind(wx.EVT_BUTTON, self.OnPython, but_python)
1292 self.Bind(wx.EVT_BUTTON, self.OnLexique, but_lexique)
1293 self.Bind(wx.EVT_BUTTON, self.OnR, but_r)
1296 grid_sizer_1.Add(self.hyper2, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1297 grid_sizer_3.Add(label_lerass, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1298 grid_sizer_3.Add(self.hyper_lerass, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1299 sizer4.Add(label_1, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 5)
1301 sizer2.Add(label2, 0, wx.ALIGN_CENTER, 5)
1302 sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1303 sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1304 sizer2.Add(grid_sizer_3, 0, wx.ALIGN_CENTER, 5)
1305 sizer2.Add(wx.StaticText(PanelPres, -1, u' '), 0, wx.ALIGN_CENTER, 5)
1306 sizer2.Add(grid_sizer_1, 0, wx.ALIGN_CENTER, 5)
1307 sizer2.Add(labellicence, 0, wx.ALIGN_CENTER, 5)
1308 sizer2.Add(labelcopy, 0, wx.ALIGN_CENTER, 5)
1309 sizer1.Add(sizer4, 2, wx.ALIGN_CENTER_HORIZONTAL, 0)
1310 sizer1.Add(but_ira, 1, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 5)
1311 sizer1.Add(iralink, 1, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_TOP, 5)
1312 sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 10)
1313 PanelPres.SetSizer(sizer2)
1314 grid_sizer_2.Add(but_python, 1, wx.ALIGN_BOTTOM)
1315 grid_sizer_2.Add(but_lexique, 1, wx.ALIGN_BOTTOM)
1316 grid_sizer_2.Add(but_r, 1, wx.ALIGN_BOTTOM)
1318 sizer1.Add(PanelPres, 0, wx.EXPAND |wx.ALL, 10)
1319 sizer1.Add(grid_sizer_2, 2, wx.ALIGN_CENTER_HORIZONTAL|wx.ALL, 1)
1320 self.SetSizer(sizer1)
1323 def OnPython(self,evt):
1324 webbrowser.open('http://www.python.org')
1326 def OnLexique(self,evt):
1327 webbrowser.open('http://www.lexique.org')
1330 webbrowser.open('http://www.r-project.org')
1332 class MySplashScreen(wx.SplashScreen):
1334 bmp = wx.Image(os.path.join(ImagePath, 'splash.png')).ConvertToBitmap()
1335 wx.SplashScreen.__init__(self, bmp,
1336 wx.SPLASH_CENTRE_ON_SCREEN | wx.SPLASH_TIMEOUT,
1338 self.Bind(wx.EVT_CLOSE, self.OnClose)
1339 self.fc = wx.FutureCall(1, self.ShowMain)
1341 def OnClose(self, evt):
1345 if self.fc.IsRunning():
1350 displaySize = wx.DisplaySize()
1351 w = displaySize[0]/1.2
1352 h = displaySize[1]/1.2
1353 frame = IraFrame(None, -1, "IRaMuTeQ " + ConfigGlob.get('DEFAULT', 'version'), size=(w, h))
1357 frame.OnOpenFromCmdl()
1358 # if self.fc.IsRunning():
1360 #wx.CallAfter(frame.ShowTip)
1362 class MyApp(wx.App):
1365 Create and show the splash screen. It will then create and show
1366 the main frame when it is time to do so.
1368 wx.SystemOptions.SetOptionInt("mac.window-plain-transition", 1)
1369 self.SetAppName("Iramuteq")
1370 splash = MySplashScreen()
1378 if __name__ == '__main__':