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, progressbar
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_FreqMulti, _(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").decode('utf8'), _(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.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 OpenAnalyse(self, corpus.parametres)
790 self.tree.OnItemAppend(corpus.parametres)
794 dlg = progressbar(self, 5)
796 builder = Builder(self, dlg)
797 if builder.res == wx.ID_OK :
799 corpus = builder.doanalyse()
800 self.history.add(corpus.parametres)
801 self.tree.OnItemAppend(corpus.parametres)
802 OpenAnalyse(self, corpus.parametres)
808 keepGoing = dlg.Update(count, u"Lecture du fichier")
809 self.ShowMenu('view')
810 self.ShowMenu('text')
811 self.ShowMenu('matrix', False)
816 keepGoing = dlg.Update(count, u"Chargement du dictionnaire")
819 def OnExit(self, event):
822 def OnAbout(self, event):
823 info = wx.AboutDialogInfo()
824 info.Name = ConfigGlob.get('DEFAULT', 'name')
825 info.Version = ConfigGlob.get('DEFAULT', 'version')
826 info.Copyright = ConfigGlob.get('DEFAULT', 'copyright')
827 info.Translators = ConfigGlob.get('DEFAULT', 'translators').decode('utf8').split(';')
828 info.Description = u"""
829 Interface de R pour les Analyses Multidimensionnelles
830 de Textes et de Questionnaires
833 construit avec des logiciels libres.
839 info.WebSite = ("http://www.iramuteq.org", u"Site web IRaMuTeQ")
840 dev = ConfigGlob.get('DEFAULT', 'dev').decode('utf8').split(';')
841 info.Developers = dev
842 info.License = u"""Iramuteq est un logiciel libre ; vous pouvez le diffuser et/ou le modifier
843 suivant les termes de la Licence Publique Générale GNU telle que publiée
844 par la Free Software Foundation ; soit la version 2 de cette licence,
845 soit (à votre convenance) une version ultérieure.
847 Iramuteq est diffusé dans l'espoir qu'il sera utile,
848 mais SANS AUCUNE GARANTIE ; sans même une garantie implicite
849 de COMMERCIALISATION ou d'ADÉQUATION À UN USAGE PARTICULIER.
850 Voyez la Licence Publique Générale GNU pour plus de détails.
852 Vous devriez avoir reçu une copie de la Licence Publique Générale GNU
853 avec Iramuteq ; sinon, veuillez écrire à la Free Software Foundation,
854 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
857 def GetDockArt(self):
858 return self._mgr.GetArtProvider()
863 def OnPageChanged(self, event) :
864 new = event.GetSelection()
865 nobject = event.GetEventObject()
866 parent = nobject.GetParent()
867 if isinstance(parent, IraFrame) :
868 npage = self.nb.GetPage(new)
869 if 'parametres' in dir(npage) :
870 self.tree.GiveFocus(uuid=npage.parametres['uuid'])
871 if npage.parametres.get('matrix', False) :
872 self.ShowMenu('text', False)
873 self.ShowMenu('matrix', True)
874 elif npage.parametres.get('corpus', False) :
875 self.ShowMenu('text')
876 self.ShowMenu('matrix', False)
878 def OnCloseTab(self, evt):
879 #log.info('Closing tab %s' % str(evt.GetEventObject()))
880 ctrl = evt.GetEventObject()
881 if isinstance(ctrl.GetParent(), aui.AuiNotebook) or isinstance(ctrl.GetParent(), wx.Panel):
885 page = self.nb.GetPage(self.nb.GetSelection())
886 if 'parametres' in dir(page) and isinstance(ctrl.GetParent(), IraFrame) :
887 self.history.rmtab(page.parametres)
888 self.tree.CloseItem(uuid = page.parametres['uuid'])
889 TabTitle = self.nb.GetPageText(self.nb.GetSelection())
891 if self.nb.GetPageCount() == 1 and not notebook :
894 def LastTabClose(self) :
895 if self.nb.GetPageCount() == 1 :
897 self.ShowAPane("Text")
899 self.ShowAPane("Data")
901 self.ShowAPane("Intro_Text")
903 def GetStartPosition(self):
907 pt = self.ClientToScreen(wx.Point(0, 0))
909 return wx.Point(pt.x + x, pt.y + x)
911 def ShowAPane(self, panel):
912 for pane in self._mgr.GetAllPanes() :
913 if not pane.IsToolbar() and pane.name != 'lefttree':
915 self._mgr.GetPane(panel).Show()
918 def OnAcceuil(self, event):
919 self.ShowAPane(u"Intro_Text")
922 def CreateHTMLCtrl(self):
923 ctrl = wx.html.HtmlWindow(self, -1, wx.DefaultPosition, wx.Size(400, 300))
924 if "gtk2" in wx.PlatformInfo:
925 ctrl.SetStandardFonts()
926 ctrl.SetPage(u"text")
929 def ShowTab(self, evt):
930 self.ShowAPane("Tab_content")
932 ################################################################
934 ################################################################
935 def analyse_matrix(self, analyse, analyse_type = '', matrix = None, parametres = None, dlgnb = 1):
937 matrix = self.tree.getmatrix()
938 if parametres is not None :
939 parametres['type'] = analyse_type
941 parametres = {'type' : analyse_type}
943 #print 'plus de bug@@@@@@@@@@@@@@@@@@@@@@'
944 analyse(self, matrix, parametres = parametres, dlg = dlgnb)
948 def OnFreq(self, event, matrix = None):
949 self.analyse_matrix(Frequences, analyse_type = 'freq', matrix = matrix, dlgnb = 3)
951 def OnFreqMulti(self, event, matrix = None):
952 self.analyse_matrix(FreqMultiple, analyse_type = 'freqmulti', matrix = matrix, dlgnb = 3)
954 def OnChi2(self, event, matrix = None):
955 self.analyse_matrix(ChiSquare, matrix = matrix, analyse_type = 'chi2', dlgnb = 3)
957 def OnSimiTab(self, event, matrix = None):
958 self.analyse_matrix(DoSimi, matrix = matrix, analyse_type = 'simimatrix', dlgnb = 5)
960 def OnCHDReinert(self, event, matrix = None):
962 # matrix = self.tree.getmatrix()
963 #AnalyseQuest(self, matrix, parametres = {'type' : 'reinertmatrix'}, dlg = 3)
964 self.analyse_matrix(AnalyseQuest, matrix = matrix, analyse_type = 'reinertmatrix', dlgnb = 5)
966 def OnStudent(self, event):
972 def OnRCode(self, event):
978 def OnCHDSIM(self, event):
980 # print 'ATTENTION!!!!'
981 chdsim = ChdCluster(self)
982 if chdsim.val == wx.ID_OK:
987 # def OnCHDReinert(self, event):
989 # # print('PLUS DE BUG SUR ALCESTE QUESTIONNAIRE')
990 # self.quest = AnalyseQuest(self)
991 # if self.quest.val == wx.ID_OK:
996 def OnProto(self, evt, matrix = None) :
997 self.analyse_matrix(Prototypical, matrix = matrix, analyse_type = 'proto', dlgnb = 3)
998 #Prototypical(self, {'type' : 'proto'})
1000 def OnSplitVar(self, evt, matrix = None):
1002 matrix = self.tree.getmatrix()
1003 self.analyse_matrix(SplitMatrixFromVar, matrix = matrix, analyse_type = 'splitvar', parametres = {'pathout': matrix.pathout.dirout}, dlgnb = 3)
1004 #matrix = self.tree.getmatrix()
1007 def OnSimiTxt(self, evt, corpus = None) :
1008 # print 'PLUS DE BUG SUR SIMITXT'
1010 #self.Text = SimiTxt(self)
1012 corpus = self.tree.getcorpus()
1013 self.Text = SimiTxt(self, corpus, parametres = {'type': 'simitxt'}, dlg = 3)
1014 if self.Text.val == wx.ID_OK :
1019 def OnWordCloud(self, evt, corpus = None) :
1020 # print 'PLUS DE BUG SUR WORDCLOUD'
1023 corpus = self.tree.getcorpus()
1024 self.Text = WordCloud(self, corpus, parametres = {'type' : 'wordcloud'}, dlg = 3)
1025 if self.Text.val == wx.ID_OK :
1030 def OnClusterCloud(self, corpus, parametres = None) :
1031 self.Text = ClusterCloud(self, corpus, parametres = parametres, dlg = 3)
1033 def OnAFCM(self, event):
1039 def OnTextStat(self, event, corpus = None):
1040 #print 'PAS DE BUG SUR TEXT STAT'
1043 corpus = self.tree.getcorpus()
1044 self.Text = Stat(self, corpus, parametres = {'type': 'stat'}, dlg = 7)
1046 if self.Text.val == wx.ID_OK :
1051 def OnTextSpec(self, event, corpus = None):
1053 #self.Text = AsLexico(self)
1054 #print('ATTENTION : PLUS DE BUG SUR LEXICO')
1056 corpus = self.tree.getcorpus()
1057 self.Text = Lexico(self, corpus, parametres = {'type' : 'spec'}, dlg = 3)
1058 if self.Text.val == wx.ID_OK :
1063 def OnTextAfcm(self, event):
1070 def import_factiva_xml(self,event):
1072 ImportFactiva(self, 'xml')
1076 def import_factiva_mail(self, evt) :
1078 ImportFactiva(self, 'mail')
1082 def import_factiva_txt(self, evt) :
1084 ImportFactiva(self, 'txt')
1088 def OnImportTXM(self, evt) :
1090 ImportFactiva(self, 'txm')
1094 def OnImportEuropress(self, evt) :
1096 ImportFactiva(self, 'euro')
1100 def OnExportMeta(self, evt, corpus = None):
1102 corpus = self.tree.getcorpus()
1104 ExportMetaTable(self, corpus)
1108 def ExtractTools(self, evt) :
1110 if ID == self.ID_splitvar :
1111 Extract(self, 'splitvar')
1112 elif ID == self.ID_extractmod :
1113 Extract(self, 'mods')
1114 elif ID == self.ID_extractthem :
1115 Extract(self, 'them')
1117 def OnTextReinert(self, event, corpus = None):
1119 #print('ATTENTION : PLUS DE BUG SUR ALCESTE')
1120 #RunAnalyse(self, corpus, Alceste, OptAlceste)
1122 corpus = self.tree.getcorpus()
1123 self.Text = Reinert(self, corpus, parametres = {'type': 'alceste'}, dlg = 6)
1124 if self.Text.val == wx.ID_OK:
1129 def OnPamSimple(self, event, corpus = None):
1132 corpus = self.tree.getcorpus()
1133 self.Text = AnalysePam(self, corpus, parametres = {'type' : 'pamtxt'}, dlg = 6)
1134 if self.Text.val == wx.ID_OK:
1139 def SimiCluster(self, parametres = {}, fromprof = False, tableau = None) :
1140 self.analyse_matrix(DoSimi, parametres = parametres, analyse_type = 'simiclustermatrix', matrix = tableau, dlgnb = 5)
1142 # def OnSimi(self,evt):
1144 #print 'ATTENTION !!!! VERGES'
1145 #print 'PLUS DE BUG SUR SIMI'
1146 # self.res = DoSimi(self, param = None)
1147 #self.res = Verges(self)
1148 # if self.res.val == wx.ID_OK :
1152 #################################################################
1154 def OnHelp(self, event):
1155 webbrowser.open('http://www.iramuteq.org/documentation')
1157 def OnPref(self, event):
1158 dlg = PrefDialog(self)
1159 dlg.CenterOnParent()
1160 self.val = dlg.ShowModal()
1164 if self.check_update:
1167 print 'pas de verif'
1169 #CheckRPackages(self)
1171 def OnOpenFromCmdl(self):
1173 if options.filename :
1174 if os.path.exists(options.filename):
1175 self.filename = os.path.abspath(options.filename)
1179 if os.path.exists(os.path.realpath(args[0])):
1180 self.filename = os.path.abspath(os.path.realpath(args[0]))
1186 if os.path.splitext(self.filename)[1] in ['.csv', '.xls', '.ods']:
1187 self.tableau = Tableau(self, self.filename)
1188 val = get_table_param(self, self.filename)
1189 if val == wx.ID_OK :
1190 self.tableau.make_content()
1191 OpenAnalyse(self, self.tableau.parametres)
1192 self.tree.OnItemAppend(self.tableau.parametres)
1193 #get_table_param(self, self.filename)
1194 #self.tableau.make_content()
1195 #self.tableau.show_tab()
1196 #open_data(self, self.filename)
1197 elif os.path.splitext(self.filename)[1] == '.txt':
1199 elif os.path.splitext(self.filename)[1] == '.ira' :
1200 #self.corpus = Corpus(self)
1201 #self.Text = OpenAnalyse(self, self.filename)
1202 OpenAnalyse(self, self.filename)
1204 print 'This file does not exist'
1208 class IntroPanel(wx.Panel):
1209 def __init__(self, parent):
1210 wx.Panel.__init__(self, parent)
1211 #col = randint(0, 255)
1212 #col1 = randint(0,255)
1213 #col2 = randint(0,255)
1218 bckgrdcolor = wx.Colour(col, col1, col2)
1219 self.SetBackgroundColour(bckgrdcolor)
1220 txtcolour = wx.Colour(250, 250, 250)
1221 linkcolor = wx.Colour(255, 0, 0)
1222 sizer1 = wx.BoxSizer(wx.VERTICAL)
1223 sizer2 = wx.BoxSizer(wx.VERTICAL)
1224 sizer4 = wx.BoxSizer(wx.HORIZONTAL)
1225 grid_sizer_1 = wx.FlexGridSizer(1, 4, 0, 0)
1226 grid_sizer_3 = wx.FlexGridSizer(1, 4, 0, 0)
1227 grid_sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
1229 iralink = hl.HyperLinkCtrl(self, wx.ID_ANY, u"http://www.iramuteq.org", URL="http://www.iramuteq.org")
1230 iralink.SetColours(linkcolor, linkcolor, "RED")
1231 iralink.SetBackgroundColour(bckgrdcolor)
1232 iralink.EnableRollover(True)
1233 iralink.SetUnderlines(False, False, True)
1234 iralink.SetBold(True)
1235 iralink.UpdateLink()
1237 PanelPres = wx.Panel(self)
1238 bckgrdcolor = wx.Colour(randint(0, 255), randint(0, 255), randint(0, 255))
1239 PanelPres.SetBackgroundColour(bckgrdcolor)
1241 label_1 = wx.StaticText(self, -1, u"IRaMuTeQ", size=(-1, -1))
1242 label_1.SetFont(wx.Font(46, wx.TELETYPE, wx.NORMAL, wx.BOLD, 0, "Purisa"))
1243 label_1.SetForegroundColour(wx.RED)
1245 iraicone = wx.Image(os.path.join(ImagePath,'iraicone100x100.png'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
1246 but_ira = wx.StaticBitmap(self, -1, bitmap = iraicone)
1249 label2 = wx.StaticText(PanelPres, -1 , u'\nVersion ' + ConfigGlob.get('DEFAULT', 'version') + '\n')
1250 label2.SetForegroundColour(txtcolour)
1251 label2.SetBackgroundColour(bckgrdcolor)
1252 self.hyper2 = hl.HyperLinkCtrl(PanelPres, wx.ID_ANY, u"REPERE", URL="http://repere.no-ip.org/")
1253 self.hyper2.SetColours(linkcolor, linkcolor, "RED")
1254 self.hyper2.SetBackgroundColour(bckgrdcolor)
1255 self.hyper2.EnableRollover(True)
1256 self.hyper2.SetUnderlines(False, False, True)
1257 self.hyper2.SetBold(True)
1258 self.hyper2.UpdateLink()
1260 label_lerass = wx.StaticText(PanelPres, -1, u'Laboratoire ')
1261 label_lerass.SetForegroundColour(txtcolour)
1262 label_lerass.SetBackgroundColour(bckgrdcolor)
1264 self.hyper_lerass = hl.HyperLinkCtrl(PanelPres, -1, u'LERASS', URL="http://www.lerass.com")
1265 self.hyper_lerass.SetColours(linkcolor, linkcolor, "RED")
1266 self.hyper_lerass.SetBackgroundColour(bckgrdcolor)
1267 self.hyper_lerass.EnableRollover(True)
1268 self.hyper_lerass.SetUnderlines(False, False, True)
1269 self.hyper_lerass.SetBold(True)
1270 self.hyper_lerass.UpdateLink()
1272 blank = wx.StaticText(PanelPres, -1, u'\n')
1273 blank1 = wx.StaticText(PanelPres, -1, u'\n')
1275 labellicence = wx.StaticText(PanelPres, -1, _(u"License GNU GPL").decode('utf8'))
1276 labellicence.SetForegroundColour(txtcolour)
1277 labellicence.SetBackgroundColour(bckgrdcolor)
1279 labelcopy = wx.StaticText(PanelPres, -1, ConfigGlob.get('DEFAULT', 'copyright'))
1280 labelcopy.SetForegroundColour(txtcolour)
1281 labelcopy.SetBackgroundColour(bckgrdcolor)
1283 python_img = wx.Image(os.path.join(ImagePath,'python-logo.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
1284 r_img = wx.Image(os.path.join(ImagePath,'Rlogo.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
1285 lexique_img = wx.Image(os.path.join(ImagePath,'LexTexte4.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
1286 but_python = wx.BitmapButton(self, -1, python_img)
1287 but_lexique = wx.BitmapButton(self, -1, lexique_img)
1288 but_r = wx.BitmapButton(self, -1, r_img)
1289 self.Bind(wx.EVT_BUTTON, self.OnPython, but_python)
1290 self.Bind(wx.EVT_BUTTON, self.OnLexique, but_lexique)
1291 self.Bind(wx.EVT_BUTTON, self.OnR, but_r)
1294 grid_sizer_1.Add(self.hyper2, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1295 grid_sizer_3.Add(label_lerass, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1296 grid_sizer_3.Add(self.hyper_lerass, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1297 sizer4.Add(label_1, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 5)
1299 sizer2.Add(label2, 0, wx.ALIGN_CENTER, 5)
1300 sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1301 sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1302 sizer2.Add(grid_sizer_3, 0, wx.ALIGN_CENTER, 5)
1303 sizer2.Add(wx.StaticText(PanelPres, -1, u' '), 0, wx.ALIGN_CENTER, 5)
1304 sizer2.Add(grid_sizer_1, 0, wx.ALIGN_CENTER, 5)
1305 sizer2.Add(labellicence, 0, wx.ALIGN_CENTER, 5)
1306 sizer2.Add(labelcopy, 0, wx.ALIGN_CENTER, 5)
1307 sizer1.Add(sizer4, 2, wx.ALIGN_CENTER_HORIZONTAL, 0)
1308 sizer1.Add(but_ira, 1, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 5)
1309 sizer1.Add(iralink, 1, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_TOP, 5)
1310 sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 10)
1311 PanelPres.SetSizer(sizer2)
1312 grid_sizer_2.Add(but_python, 1, wx.ALIGN_BOTTOM)
1313 grid_sizer_2.Add(but_lexique, 1, wx.ALIGN_BOTTOM)
1314 grid_sizer_2.Add(but_r, 1, wx.ALIGN_BOTTOM)
1316 sizer1.Add(PanelPres, 0, wx.EXPAND |wx.ALL, 10)
1317 sizer1.Add(grid_sizer_2, 2, wx.ALIGN_CENTER_HORIZONTAL|wx.ALL, 1)
1318 self.SetSizer(sizer1)
1321 def OnPython(self,evt):
1322 webbrowser.open('http://www.python.org')
1324 def OnLexique(self,evt):
1325 webbrowser.open('http://www.lexique.org')
1328 webbrowser.open('http://www.r-project.org')
1330 class MySplashScreen(wx.SplashScreen):
1332 bmp = wx.Image(os.path.join(ImagePath, 'splash.png')).ConvertToBitmap()
1333 wx.SplashScreen.__init__(self, bmp,
1334 wx.SPLASH_CENTRE_ON_SCREEN | wx.SPLASH_TIMEOUT,
1336 self.Bind(wx.EVT_CLOSE, self.OnClose)
1337 self.fc = wx.FutureCall(1, self.ShowMain)
1339 def OnClose(self, evt):
1343 if self.fc.IsRunning():
1348 displaySize = wx.DisplaySize()
1349 w = displaySize[0]/1.2
1350 h = displaySize[1]/1.2
1351 frame = IraFrame(None, -1, "IRaMuTeQ " + ConfigGlob.get('DEFAULT', 'version'), size=(w, h))
1355 frame.OnOpenFromCmdl()
1356 # if self.fc.IsRunning():
1358 #wx.CallAfter(frame.ShowTip)
1360 class MyApp(wx.App):
1363 Create and show the splash screen. It will then create and show
1364 the main frame when it is time to do so.
1366 wx.SystemOptions.SetOptionInt("mac.window-plain-transition", 1)
1367 self.SetAppName("Iramuteq")
1368 splash = MySplashScreen()
1376 if __name__ == '__main__':