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 ##########################################################
100 #elements de configuration
101 ##########################################################
103 if sys.platform == 'darwin' :
104 sys.setdefaultencoding('UTF-8')
105 wx.SetDefaultPyEncoding('UTF-8')
107 sys.setdefaultencoding(locale.getpreferredencoding())
109 #chemin de l'application
110 AppliPath = os.path.abspath(os.path.dirname(os.path.realpath(sys.argv[0])))
112 ImagePath = os.path.join(AppliPath, 'images')
113 #configuration generale
114 DictConfigPath = ConstructGlobalPath(AppliPath)
115 ConfigGlob = ConfigParser()
116 ConfigGlob.read(DictConfigPath['global'])
117 DefaultConf = ConfigParser()
118 DefaultConf.read(DictConfigPath['preferences'])
119 #repertoire de l'utilisateur
120 if os.getenv('HOME') != None:
121 user_home = os.getenv('HOME')
123 user_home = os.getenv('HOMEPATH')
124 UserConfigPath = os.path.abspath(os.path.join(user_home, '.iramuteq'))
125 #Si pas de fichiers de config utilisateur, on cree le repertoire
126 CreateIraDirectory(UserConfigPath, AppliPath)
127 #fichiers log pour windows (py2exe)
128 log = logging.getLogger('iramuteq')
129 fh = logging.FileHandler(os.path.join(UserConfigPath,'stdout.log'))
130 formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
131 fh.setFormatter(formatter)
133 if sys.platform != 'win32' and sys.platform != 'darwin':
134 ch = logging.StreamHandler()
135 ch.setFormatter(formatter)
137 log.setLevel(logging.INFO)
139 class writer(object):
140 def write(self, data):
141 if data.strip() != '' :
142 log.info('ERROR : %s' % data)
144 class printer(object) :
145 def write(self, data) :
146 if data.strip() != '' :
147 log.info('Print : %s' % data)
149 sys.stderr = writer()
150 sys.stdout = printer()
152 ConfigPath = ConstructConfigPath(UserConfigPath)
154 langues = {'french' : wx.LANGUAGE_FRENCH,
155 'english' : wx.LANGUAGE_ENGLISH,
156 'portuguese' : wx.LANGUAGE_PORTUGUESE,
157 'italian' : wx.LANGUAGE_ITALIAN,
158 'spanish' : wx.LANGUAGE_SPANISH
161 code_langues = {'french' : 'fr_FR',
163 'portuguese' : 'pt_PT',
169 'textroot' : 'textroot.png',
170 'alceste' : 'reinert.png',
171 'corpus' : 'textcorpus.png',
172 'wordcloud' :'wordcloud.png',
174 'simitxt' : 'simitxt.png',
175 'clustersimitxt' :'clustersimitxt.png',
176 'clustercloud' : 'clustercloud.png',
178 'matroot' : 'matroot.png',
179 'matrix' : 'matrix.png',
180 'freq' : 'frequences.png',
181 'freqmulti' : 'frequences.png',
183 'reinertmatrix' : 'reinertmatrix.png',
184 'simimatrix' : 'simimatrix.png',
185 'simiclustermatrix' : 'simimatrix.png',
186 'proto' : 'proto.png',
188 'europress' : 'europress.png',
189 'factiva_xml' : 'factiva_xml.png',
190 'factiva_copy' : 'factiva_copy.png',
191 'factiva_mail': 'factiva_mail.png',
192 'iramuteq' : 'iraicone.png',
193 'subcorpusmeta' : 'subcorpusmeta.png',
194 'subcorpusthema' : 'subcorpusthema.png',
195 'preferences' : 'preferences.png'
197 #####################################################################
199 class IraFrame(wx.Frame):
200 def __init__(self, parent, id= -1, title="", pos=wx.DefaultPosition,
201 size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE |
204 log.info('Starting...')
205 wx.Frame.__init__(self, parent, id, title, pos, size, style)
207 self.AppliPath = AppliPath
208 self.images_path = os.path.join(AppliPath,'images')
209 self.UserConfigPath = UserConfigPath
210 #self.RscriptsPath = ConstructRscriptsPath(AppliPath)
211 self.RscriptsPath = PathOut(dirout=os.path.join(AppliPath, 'Rscripts'))
212 self.RscriptsPath.basefiles(RscriptsPath)
213 #self.DictPath = ConstructDicoPath(AppliPath)
214 self.DictPath = ConstructDicoPath(UserConfigPath)
215 self.ConfigGlob = ConfigGlob
216 self.ConfigPath = ConstructConfigPath(UserConfigPath)
217 self.pref = RawConfigParser()
218 #workaround for import problem
219 self.SimiFromCluster = SimiFromCluster
221 gettext.install('iramuteq', os.path.join(AppliPath,'locale'), unicode=True)
222 #langues = ['fr_FR', 'en', 'pt_PT']
226 for langue in code_langues :
227 self.preslangue[langue] = gettext.translation("iramuteq", os.path.join(AppliPath,'locale'), languages=[code_langues[langue]])
229 #self.presLan_fr = gettext.translation("iramuteq", os.path.join(AppliPath,'locale'), languages=['fr_FR'])
230 #self.presLan_en = gettext.translation("iramuteq", os.path.join(AppliPath,'locale'), languages=['en'])
231 # tell FrameManager to manage this frame
232 #self._mgr = wx.aui.AuiManager()
233 self._mgr = aui.AuiManager()
234 self._mgr.SetManagedWindow(self)
237 #--------------------------------------------------------------------------------
238 self.images_analyses = images_analyses
239 for img in images_analyses :
240 self.images_analyses[img] = wx.Image(os.path.join(self.images_path, self.images_analyses[img]), wx.BITMAP_TYPE_PNG).Scale(16,16).ConvertToBitmap()
241 self.mb = wx.MenuBar()
243 file_menu = wx.Menu()
244 item = wx.MenuItem(file_menu, ID_OpenData, _(u"Open a matrix").decode('utf8'), _(u"Open a matrix").decode('utf8'))
245 #item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN))
246 item.SetBitmap(self.images_analyses['matroot'])
247 file_menu.AppendItem(item)
249 item = wx.MenuItem(file_menu, ID_OpenText, _(u"Open a text corpus").decode('utf8'), _(u"Open a text corpus").decode('utf8'))
250 item.SetBitmap(self.images_analyses['textroot'])
251 file_menu.AppendItem(item)
253 item = wx.MenuItem(file_menu, ID_OnOpenAnalyse, _(u"Open an analysis").decode('utf8'), _(u"Open an analysis").decode('utf8'))
254 item.SetBitmap(self.images_analyses['iramuteq'])
255 file_menu.AppendItem(item)
257 item = wx.MenuItem(file_menu, ID_ImportTXM, _(u"Import from TXM").decode('utf8'), _(u"Import from TXM").decode('utf8'))
258 item.SetBitmap(self.images_analyses['TXM'])
259 file_menu.AppendItem(item)
261 item = wx.MenuItem(file_menu, ID_ImportEuro, _(u"Import from Europress").decode('utf8'), _(u"Import from Europress").decode('utf8'))
262 item.SetBitmap(self.images_analyses['europress'])
263 file_menu.AppendItem(item)
265 menuFactiva = wx.Menu()
266 fact_from_xml = wx.MenuItem(menuFactiva, ID_Fact_xml, _(u"from xml").decode('utf8'))
267 fact_from_xml.SetBitmap(self.images_analyses['factiva_xml'])
268 fact_from_mail = wx.MenuItem(menuFactiva, ID_Fact_mail, _(u"from mail").decode('utf8'))
269 fact_from_mail.SetBitmap(self.images_analyses['factiva_mail'])
270 fact_from_txt = wx.MenuItem(menuFactiva, ID_Fact_copy, _(u"from copy/paste").decode('utf8'))
271 fact_from_txt.SetBitmap(self.images_analyses['factiva_copy'])
272 menuFactiva.AppendItem(fact_from_xml)
273 menuFactiva.AppendItem(fact_from_mail)
274 menuFactiva.AppendItem(fact_from_txt)
275 file_menu.AppendMenu(-1, _(u"Import from factiva").decode('utf8'), menuFactiva)
277 menuTools = wx.Menu()
278 splitvar = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Split from variable").decode('utf8'))
279 extractmod = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Extract mods").decode('utf8'))
280 extractthem = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Extract thematics").decode('utf8'))
281 menuTools.AppendItem(splitvar)
282 menuTools.AppendItem(extractmod)
283 menuTools.AppendItem(extractthem)
284 self.ID_splitvar = splitvar.GetId()
285 self.ID_extractmod = extractmod.GetId()
286 self.ID_extractthem = extractthem.GetId()
287 file_menu.AppendMenu(-1, _(u"Tools").decode('utf8'), menuTools)
290 #item = wx.MenuItem(file_menu, ID_SaveTab, _(u"Save tab as...").decode('utf8'), _(u"Save tab as...").decode('utf8'))
291 #item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_SAVE_AS))
292 #file_menu.AppendItem(item)
294 file_menu.Append(wx.ID_EXIT, _(u"Exit").decode('utf8'))
296 edit_menu = wx.Menu()
297 pref = wx.MenuItem(edit_menu, wx.ID_PREFERENCES, _(u'Preferences').decode('utf8'))
298 pref.SetBitmap(self.images_analyses['preferences'])
299 edit_menu.AppendItem(pref)
300 #edit_menu.Append(wx.ID_PREFERENCES, _(u'Preferences').decode('utf8'))
302 view_menu = wx.Menu()
303 home = wx.MenuItem(view_menu, ID_ACCEUIL, _(u"Home page").decode('utf8'))
304 home.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_GO_HOME, size = (16,16)))
305 view_menu.AppendItem(home)
306 #view_menu.Append(ID_ACCEUIL, _(u"Home page").decode('utf8'))
307 results = wx.MenuItem(view_menu, ID_RESULT, _(u'Show results').decode('utf8'))
308 results.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_LIST_VIEW, size = (16,16)))
309 view_menu.AppendItem(results)
310 #view_menu.Append(ID_RESULT, _(u'Show results').decode('utf8'))
311 #view_menu.AppendSeparator()
312 matrix_menu = wx.Menu()
313 matanalyses = [[ID_Freq, _(u"Frequencies").decode('utf8'), 'freq'],
314 [ID_Freq, _(u"Multiple Frequencies").decode('utf8'), 'freqmulti'],
315 [ID_Chi2, _(u"Chi2").decode('utf8'), 'chi2'],
316 {'name' : _(u"Clustering").decode('utf8'),
317 'content' : [[ID_CHDReinert, _(u"Reinert's Method").decode('utf8'), 'reinertmatrix']]},
318 [ID_SIMI, _(u"Similarities Analysis").decode('utf8'), 'simimatrix'],
319 [ID_proto, _(u"Prototypical Analysis").decode('utf8'), 'proto'],
320 [ID_Splitfromvar, _(u"Split from variable").decode('utf8'), 'subcorpusmeta']]
322 for analyse in matanalyses :
323 if not isinstance(analyse, dict) :
324 item = wx.MenuItem(matrix_menu, analyse[0], analyse[1])
325 item.SetBitmap(self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16)))
326 matrix_menu.AppendItem(item)
329 for subana in analyse['content'] :
330 item = wx.MenuItem(nmenu, subana[0], subana[1])
331 item.SetBitmap(self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)))
332 nmenu.AppendItem(item)
333 matrix_menu.AppendMenu(-1, analyse['name'], nmenu)
334 #item = wx.MenuItem(matrix_menu, ID_Freq, _(u"Frequencies").decode('utf8'))
335 #item.SetBitmap(self.images_analyses['freq'])
336 #matrix_menu.AppendItem(item)
337 #matrix_menu.Append(ID_Freq, _(u"Frequencies").decode('utf8'))
338 #item = wx.MenuItem(matrix_menu, ID_Freq, _(u"Multiple Frequencies").decode('utf8'))
339 #item.SetBitmap(self.images_analyses['freqmulti'])
340 #matrix_menu.Append(ID_FreqMulti, _(u'Multiple frequencies').decode('utf8'))
341 #matrix_menu.AppendItem(item)
342 #matrix_menu.Append(ID_Chi2, _(u"Chi2").decode('utf8'))
343 #matrix_menu.Append(ID_Student, u"t de Student")
344 #menu_classif = wx.Menu()
345 #menu_classif.Append(ID_CHDReinert, _(u"Reinert's Method").decode('utf8'))
346 #menu_classif.Append(ID_CHDSIM, u"Par matrice des distances")
347 #matrix_menu.AppendMenu(-1, _(u"Clustering").decode('utf8'), menu_classif)
348 #matrix_menu.Append(ID_AFCM, u"AFCM")
349 #matrix_menu.Append(ID_SIMI, _(u"Similarities Analysis").decode('utf8'))
350 #matrix_menu.Append(ID_proto, _(u"Prototypical Analysis").decode('utf8'))
351 ID_RCODE = wx.NewId()
352 #matrix_menu.Append(ID_RCODE, u"Code R...")
353 #menu_splittab = wx.Menu()
354 #ID_SPLITVAR = wx.NewId()
355 #splitvar = wx.MenuItem(menu_splittab, ID_SPLITVAR, _(u"Split from variable").decode('utf8'))
356 #menu_splittab.AppendItem(splitvar)
357 #matrix_menu.AppendMenu(-1, _(u"Split matrix").decode('utf8'), menu_splittab)
358 self.matrix_menu = matrix_menu
360 text_menu = wx.Menu()
361 analyses_text = [[ID_TEXTSTAT, _(u"Statistics").decode('utf8'), 'stat'],
362 [ID_ASLEX, _(u"Specificities and CA").decode('utf8'), 'spec'],
363 {'name' : _(u"Clustering").decode('utf8'),
364 'content' : [[ID_TEXTREINERT, _(u"Reinert's Method").decode('utf8'), 'alceste']]},
365 [ID_SimiTxt, _(u"Similarities Analysis").decode('utf8'), 'simitxt'],
366 [ID_WC, _(u"WordCloud").decode('utf8'), 'wordcloud'],
367 {'name' : _(u"Sub corpus").decode('utf8'),
368 'content' : [[ID_Subtxtfrommeta, _(u'Sub corpus from metadata').decode('utf8'), 'subcorpusmeta'],
369 [ID_Subtxtfromthem, _(u'Sub corpus from thematic').decode('utf8'), 'subcorpusthema']]},
372 for analyse in analyses_text :
373 if not isinstance(analyse, dict) :
374 item = wx.MenuItem(text_menu, analyse[0], analyse[1])
375 item.SetBitmap(self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16)))
376 text_menu.AppendItem(item)
379 for subana in analyse['content'] :
380 item = wx.MenuItem(nmenu, subana[0], subana[1])
381 item.SetBitmap(self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)))
382 nmenu.AppendItem(item)
383 text_menu.AppendMenu(-1, analyse['name'], nmenu)
384 #text_menu.Append(ID_CHECKCORPUS, u"Vérifier le corpus")
385 # text_menu.Append(ID_TEXTSTAT, _(u"Statistics").decode('utf8'))
386 # text_menu.Append(ID_ASLEX, _(u"Specificities and CA").decode('utf8'))
387 # #text_menu.Append(ID_TEXTAFCM, u"AFC sur UCI / Vocabulaire")
388 # menu_classiftxt = wx.Menu()
389 # menu_classiftxt.Append(ID_TEXTREINERT, _(u"Reinert's Method").decode('utf8'))
390 # #menu_classiftxt.Append(ID_TEXTPAM, u"Par matrice des distances")
391 # text_menu.AppendMenu(-1, _(u"Clustering").decode('utf8'), menu_classiftxt)
392 # text_menu.Append(ID_SimiTxt, _(u"Similarities Analysis").decode('utf8'))
394 # text_menu.Append(ID_WC, _(u"WordCloud").decode('utf8'))
395 self.text_menu = text_menu
397 help_menu = wx.Menu()
398 about = wx.MenuItem(help_menu, wx.ID_ABOUT, _(u"About...").decode('utf8'))
399 about.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_INFORMATION, size = (16,16)))
400 help_menu.AppendItem(about)
401 #help_menu.Append(wx.ID_ABOUT, _(u"About...").decode('utf8'))
402 help = wx.MenuItem(help_menu, wx.ID_HELP, _(u"Online help...").decode('utf8'))
403 help.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_HELP, size = (16,16)))
404 help_menu.AppendItem(help)
405 #help_menu.Append(wx.ID_HELP, _(u"Online help...").decode('utf8'))
407 self.mb.Append(file_menu, _(u"File").decode('utf8'))
408 self.mb.Append(edit_menu, _(u"Edition").decode('utf8'))
409 self.mb.Append(view_menu, _(u"View").decode('utf8'))
410 self.mb.Append(matrix_menu, _(u"Matrix analysis").decode('utf8'))
411 self.mb.Append(text_menu, _(u"Text analysis").decode('utf8'))
412 self.mb.Append(help_menu, _(u"Help").decode('utf8'))
414 self.SetMenuBar(self.mb)
415 #--------------------------------------------------------------------
416 self.statusbar = self.CreateStatusBar(2, wx.ST_SIZEGRIP)
417 self.statusbar.SetStatusWidths([-2, -3])
418 self.statusbar.SetStatusText(_(u"Ready").decode('utf8'), 0)
419 self.statusbar.SetStatusText(_(u"Welcome").decode('utf8'), 1)
421 # min size for the frame itself isn't completely done.
422 # see the end up FrameManager::Update() for the test
423 # code. For now, just hard code a frame minimum size
424 self.SetMinSize(wx.Size(400, 400))
426 # create some toolbars
427 tb1 = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
428 wx.TB_FLAT | wx.TB_NODIVIDER)
429 tb1.SetToolBitmapSize(wx.Size(16, 16))
430 tb1.AddLabelTool(ID_OpenData, "OpenData", self.images_analyses['matroot'], shortHelp=_(u"Matrix").decode('utf8'), longHelp=_(u"Open a matrix").decode('utf8'))
432 tb1.AddLabelTool(ID_OpenText, "OpenText", self.images_analyses['textroot'], shortHelp=_(u"Text").decode('utf8'), longHelp=_(u"Open a text corpus").decode('utf8'))
434 tb1.AddLabelTool(ID_OnOpenAnalyse, "OpenAnalyse", self.images_analyses['iramuteq'], shortHelp= _(u"Open an analysis").decode('utf8'), longHelp=_(u"Open an analysis").decode('utf8'))
436 tb1.AddLabelTool(ID_ImportTXM, "ImportTXM", self.images_analyses['TXM'], shortHelp= _(u"Import from TXM").decode('utf8'), longHelp=_(u"Import from TXM").decode('utf8'))
438 tb1.AddLabelTool(ID_ImportEuro, "ImportEuro", self.images_analyses['europress'], shortHelp= _(u"Import from Europress").decode('utf8'), longHelp=_(u"Import from Europress").decode('utf8'))
440 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'))
441 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'))
442 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'))
444 tb1.AddLabelTool(wx.ID_PREFERENCES, "Preferences", self.images_analyses['preferences'], shortHelp= _(u"Preferences").decode('utf8'), longHelp=_(u"Preferences").decode('utf8'))
446 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'))
447 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'))
450 tb_text = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
451 wx.TB_FLAT | wx.TB_NODIVIDER)
452 for analyse in analyses_text :
453 if not isinstance(analyse, dict) :
454 tb_text.AddLabelTool(analyse[0], analyse[1], self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16)), shortHelp = analyse[1], longHelp = analyse[1])
456 for subana in analyse['content'] :
457 tb_text.AddLabelTool(subana[0], subana[1], self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)), shortHelp = subana[1], longHelp = subana[1])
460 tb_mat = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
461 wx.TB_FLAT | wx.TB_NODIVIDER)
462 for analyse in matanalyses :
463 if not isinstance(analyse, dict) :
464 tb_mat.AddLabelTool(analyse[0], analyse[1], self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16)), shortHelp = analyse[1], longHelp = analyse[1])
466 for subana in analyse['content'] :
467 tb_mat.AddLabelTool(subana[0], subana[1], self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)), shortHelp = subana[1], longHelp = subana[1])
470 tb_help = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
471 wx.TB_FLAT | wx.TB_NODIVIDER)
472 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'))
473 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'))
475 #------------------------------------------------------------------------------------------------
477 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)
479 #self._mgr.AddPane(self.text_ctrl_txt, wx.aui.AuiPaneInfo().
480 # Name("Text").CenterPane())
481 self._mgr.AddPane(self.text_ctrl_txt, aui.AuiPaneInfo().
482 Name("Text").CenterPane())
483 #self._mgr.AddPane(IntroPanel(self), wx.aui.AuiPaneInfo().Name("Intro_Text").
485 self._mgr.AddPane(IntroPanel(self), aui.AuiPaneInfo().Name("Intro_Text").
487 #if not os.path.exists(os.path.join(UserConfigPath, 'history.db')) :
488 # with open(os.path.join(UserConfigPath, 'history.db'), 'w') as f :
490 self.history = History(os.path.join(UserConfigPath, 'history.db'))
491 self.tree = LeftTree(self)
492 self._mgr.AddPane(self.tree, aui.AuiPaneInfo().Name("lefttree").Caption(_(u"Historic").decode('utf8')).
493 Left().MinSize(wx.Size(200,500)).Layer(1).Position(1).CloseButton(False).MaximizeButton(True).
494 MinimizeButton(True))
496 #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)
497 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)
498 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
499 self.nb.SetAGWWindowStyleFlag(notebook_flags)
500 self.nb.SetArtProvider(aui.ChromeTabArt())
501 #self.nb.SetArtProvider(aui.VC8TabArt())
502 #self.nb.parent = self
503 #self._notebook_style = aui.AUI_NB_DEFAULT_STYLE | aui.AUI_NB_TAB_EXTERNAL_MOVE | wx.NO_BORDER
504 #self._mgr.AddPane(self.nb, wx.aui.AuiPaneInfo().
505 # Name("Tab_content").
507 self._mgr.AddPane(self.nb, aui.AuiPaneInfo().
511 #self._mgr.AddPane(self.Sheet, wx.aui.AuiPaneInfo().Name("Data").CenterPane())
512 #self._mgr.AddPane(self.Sheet, aui.AuiPaneInfo().Name("Data").CenterPane())
513 self.nb.Bind(aui.EVT_AUINOTEBOOK_PAGE_CLOSE, self.OnCloseTab)
514 self.nb.Bind(aui.EVT_AUINOTEBOOK_PAGE_CHANGED, self.OnPageChanged)
515 # add the toolbars to the manager
517 #self._mgr.AddPane(tb1, wx.aui.AuiPaneInfo().
518 # Name("tb1").Caption("Fichiers").
519 # ToolbarPane().Top().
520 # LeftDockable(False).RightDockable(False))
521 self._mgr.AddPane(tb1, aui.AuiPaneInfo().
522 Name("tb1").Caption("Fichiers").
524 LeftDockable(True).RightDockable(False))
526 self._mgr.AddPane(tb_text, aui.AuiPaneInfo().
527 Name("tb_text").Caption("analyse_text").
529 LeftDockable(True).RightDockable(False))
531 self._mgr.AddPane(tb_mat, aui.AuiPaneInfo().
532 Name("tb_mat").Caption("analyse_matrix").
534 LeftDockable(True).RightDockable(False))
536 self._mgr.AddPane(tb_help, aui.AuiPaneInfo().
537 Name("tb_help").Caption("help").
539 LeftDockable(True).RightDockable(False))
541 self._mgr.GetPane('tb_text').Hide()
542 self._mgr.GetPane('tb_mat').Hide()
544 self.ShowAPane("Intro_Text")
545 self._mgr.GetPane("lefttree").Show()
546 self._mgr.GetPane("classif_tb").Hide()
547 # "commit" all changes made to FrameManager
550 # Show How To Use The Closing Panes Event
551 ##################################################################
552 self.Bind(wx.EVT_MENU, self.OnAcceuil, id=ID_ACCEUIL)
553 self.Bind(wx.EVT_MENU, self.ShowTab, id=ID_RESULT)
554 self.Bind(wx.EVT_MENU, self.OnOpenData, id=ID_OpenData)
555 self.Bind(wx.EVT_MENU, self.OnOpenText, id=ID_OpenText)
556 self.Bind(wx.EVT_MENU, self.OnOpenAnalyse, id=ID_OnOpenAnalyse)
557 self.Bind(wx.EVT_MENU, self.import_factiva_xml, fact_from_xml)
558 self.Bind(wx.EVT_MENU, self.import_factiva_mail, fact_from_mail)
559 self.Bind(wx.EVT_MENU, self.import_factiva_txt, fact_from_txt)
560 self.Bind(wx.EVT_MENU, self.ExtractTools, splitvar)
561 self.Bind(wx.EVT_MENU, self.ExtractTools, extractmod)
562 self.Bind(wx.EVT_MENU, self.ExtractTools, extractthem)
563 self.Bind(wx.EVT_MENU, self.OnFreq, id=ID_Freq)
564 self.Bind(wx.EVT_MENU, self.OnFreqMulti, id=ID_FreqMulti)
565 self.Bind(wx.EVT_MENU, self.OnChi2, id=ID_Chi2)
566 self.Bind(wx.EVT_MENU, self.OnStudent, id=ID_Student)
567 self.Bind(wx.EVT_MENU, self.OnCHDSIM, id=ID_CHDSIM)
568 self.Bind(wx.EVT_MENU, self.OnCHDReinert, id=ID_CHDReinert)
569 self.Bind(wx.EVT_MENU, self.OnAFCM, id=ID_AFCM)
570 self.Bind(wx.EVT_MENU, self.OnProto, id=ID_proto)
571 self.Bind(wx.EVT_MENU, self.OnSplitVar, id = ID_Splitfromvar)
572 #self.Bind(wx.EVT_MENU, self.OnRCode, id=ID_RCODE)
573 #self.Bind(wx.EVT_MENU, self.OnSplitVar, id=ID_SPLITVAR)
574 #self.Bind(wx.EVT_MENU, self.OnCheckcorpus, id = ID_CHECKCORPUS)
575 self.Bind(wx.EVT_MENU, self.OnTextStat, id=ID_TEXTSTAT)
576 self.Bind(wx.EVT_MENU, self.OnTextSpec, id=ID_ASLEX)
577 self.Bind(wx.EVT_MENU, self.OnTextAfcm, id=ID_TEXTAFCM)
578 self.Bind(wx.EVT_MENU, self.OnTextReinert, id=ID_TEXTREINERT)
579 self.Bind(wx.EVT_MENU, self.OnPamSimple, id=ID_TEXTPAM)
580 self.Bind(wx.EVT_MENU, self.OnSimiTxt, id=ID_SimiTxt)
581 self.Bind(wx.EVT_MENU, self.OnWordCloud, id=ID_WC)
582 self.Bind(wx.EVT_MENU, self.OnSubText, id = ID_Subtxtfrommeta)
583 self.Bind(wx.EVT_MENU, self.OnSubText, id = ID_Subtxtfromthem)
584 self.Bind(wx.EVT_MENU, self.OnSimiTab, id=ID_SIMI)
585 self.Bind(wx.EVT_MENU, self.OnExit, id=wx.ID_EXIT)
586 #self.Bind(wx.EVT_MENU, self.OnSaveTabAs, id=ID_SaveTab)
587 self.Bind(wx.EVT_MENU, self.OnAbout, id=wx.ID_ABOUT)
588 self.Bind(wx.EVT_MENU, self.OnHelp, id=wx.ID_HELP)
589 self.Bind(wx.EVT_MENU, self.OnPref, id=wx.ID_PREFERENCES)
590 self.Bind(wx.EVT_MENU, self.OnImportTXM, id=ID_ImportTXM)
591 self.Bind(wx.EVT_MENU, self.OnImportEuropress, id=ID_ImportEuro)
592 self.Bind(wx.EVT_CLOSE, self.OnClose)
593 ##################################################################
594 flags = self._mgr.GetAGWFlags()
595 #flags &= ~wx.aui.AUI_MGR_TRANSPARENT_HINT
596 #flags &= ~wx.aui.AUI_MGR_VENETIAN_BLINDS_HINT
597 #flags &= ~wx.aui.AUI_MGR_RECTANGLE_HINT
598 flags &= ~(aui.AUI_MGR_RECTANGLE_HINT | aui.AUI_MGR_ALLOW_FLOATING)
599 self._mgr.SetAGWFlags(self._mgr.GetAGWFlags() ^ (aui.AUI_MGR_RECTANGLE_HINT | aui.AUI_MGR_ALLOW_FLOATING))
600 self._mgr.GetArtProvider().SetMetric(aui.AUI_DOCKART_GRADIENT_TYPE, aui.AUI_GRADIENT_HORIZONTAL)
601 self.GetDockArt().SetColor(aui.AUI_DOCKART_ACTIVE_CAPTION_GRADIENT_COLOUR, "#00FFF9")
604 self._icon = wx.Icon(os.path.join(ImagePath, "iraicone.ico"), wx.BITMAP_TYPE_ICO)
605 self.SetIcon(self._icon)
606 ##########################
608 self.input_path = [False]
609 self.TEMPDIR = tempfile.mkdtemp('iramuteq')
610 self.FileTabList = []
616 self.g_header = False
623 self.SysEncoding = sys.getdefaultencoding()
624 self.syscoding = sys.getdefaultencoding()
625 #print 'SysEncoding',self.SysEncoding
626 if self.SysEncoding == 'mac-roman' : self.SysEncoding = 'MacRoman'
629 ##############################################################@
630 self.ShowMenu('view', True)
631 self.ShowMenu('matrix', False)
632 self.ShowMenu('text', False)
643 def finish_init(self) :
645 self.pref.read(self.ConfigPath['preferences'])
648 self.pref.read(self.ConfigPath['preferences'])
655 self.pref.read(self.ConfigPath['preferences'])
657 self.sound = self.pref.getboolean('iramuteq', 'sound')
658 self.check_update = self.pref.getboolean('iramuteq', 'checkupdate')
659 self.version = ConfigGlob.get('DEFAULT', 'version')
660 #configuration des chemins de R
661 self.PathPath = ConfigParser()
662 self.PathPath.read(ConfigPath['path'])
664 if not CheckRPath(self.PathPath) :
665 if sys.platform == 'win32':
666 BestRPath = FindRPAthWin32()
668 BestRPath = FindRPathNix()
670 self.PathPath.set('PATHS', 'rpath', BestRPath)
671 with open(ConfigPath['path'], 'w') as f :
672 self.PathPath.write(f)
676 self.RPath = self.PathPath.get('PATHS', 'rpath')
679 if not RLibsAreInstalled(self) :
682 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'),
683 _(u"If R is installed, report its path in Preferences.").decode('utf8'),
684 _(u"IRaMuTeQ does not work without R.").decode('utf8')])
685 dlg = wx.MessageDialog(self, msg, _(u"Problem").decode('utf8'), wx.OK | wx.NO_DEFAULT | wx.ICON_WARNING)
687 if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
691 def setlangue(self) :
692 self.pref.read(self.ConfigPath['preferences'])
694 guilangue = self.pref.get('iramuteq', 'guilanguage')
696 guilangue = DefaultConf.get('iramuteq', 'guilanguage')
697 self.preslangue.get(guilangue, 'english').install()
699 def OnVerif(self, evt) :
700 pack = CheckRPackages(self)
702 dlg = wx.MessageDialog(self, _(u"Installation OK").decode('utf8'), _(u"Installation").decode('utf8'), wx.OK | wx.ICON_INFORMATION | wx.STAY_ON_TOP)
704 if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
707 def ShowMenu(self, menu, Show=True):
711 self._mgr.GetPane('tb_text').Show()
713 self._mgr.GetPane('tb_text').Hide()
714 elif menu == 'matrix' :
717 self._mgr.GetPane('tb_mat').Show()
719 self._mgr.GetPane('tb_mat').Hide()
720 elif menu == 'view' :
725 #menu_pos = self.mb.FindMenu(menu)
726 if not menu_pos is None :
727 self.mb.EnableTop(menu_pos, Show)
728 self.mb.UpdateMenus()
731 #--------------------------------------------------------------------
732 def OnClose(self, event):
734 with open(self.ConfigPath['path'], 'w') as f :
735 self.PathPath.write(f)
740 def OnOpenData(self, event):
741 inputname, self.input_path = OnOpen(self, "Data")
743 #filename = self.input_path[0]
744 self.tableau = Tableau(self,os.path.abspath(self.input_path[0]))
745 val = get_table_param(self, self.input_path[0])
747 busy = wx.BusyInfo(_("Please wait...").decode('utf8'), self)
750 self.tableau.make_content()
751 OpenAnalyse(self, self.tableau.parametres)
752 self.tree.OnItemAppend(self.tableau.parametres)
757 #self.tableau.show_tab()
759 def OnOpenAnalyse(self, event):
760 self.AnalysePath = OnOpen(self, "Analyse")
761 if self.AnalysePath :
762 OpenAnalyse(self, self.AnalysePath[1][0], True)
763 self.ShowMenu('view')
765 def OnOpenText(self, event):
766 inputname, self.input_path = OnOpen(self, "Texte")
767 self.filename = self.input_path[0]
771 def OnSubText(self, evt, corpus = None, parametres = None):
773 corpus = self.tree.getcorpus()
774 if evt.GetId() == ID_Subtxtfrommeta :
775 parametres = {'frommeta' : True}
776 elif evt.GetId() == ID_Subtxtfromthem :
777 parametres = {'fromtheme' : True}
778 builder = SubBuilder(self, corpus, parametres)
779 if builder.res == wx.ID_OK :
780 busy = wx.BusyInfo(_("Please wait...").decode('utf8'), self)
782 corpus = builder.doanalyse()
783 self.history.add(corpus.parametres)
784 self.tree.OnItemAppend(corpus.parametres)
785 OpenAnalyse(self, corpus.parametres)
789 dlg = wx.ProgressDialog("Ouverture...",
790 "Veuillez patienter...",
793 style=wx.PD_APP_MODAL | wx.PD_AUTO_HIDE | wx.PD_ELAPSED_TIME | wx.PD_CAN_ABORT
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 ExtractTools(self, evt) :
1102 if ID == self.ID_splitvar :
1103 Extract(self, 'splitvar')
1104 elif ID == self.ID_extractmod :
1105 Extract(self, 'mods')
1106 elif ID == self.ID_extractthem :
1107 Extract(self, 'them')
1109 def OnTextReinert(self, event, corpus = None):
1111 #print('ATTENTION : PLUS DE BUG SUR ALCESTE')
1112 #RunAnalyse(self, corpus, Alceste, OptAlceste)
1114 corpus = self.tree.getcorpus()
1115 self.Text = Reinert(self, corpus, parametres = {'type': 'alceste'}, dlg = 6)
1116 if self.Text.val == wx.ID_OK:
1121 def OnPamSimple(self, event, corpus = None):
1124 corpus = self.tree.getcorpus()
1125 self.Text = AnalysePam(self, corpus, parametres = {'type' : 'pamtxt'}, dlg = 6)
1126 if self.Text.val == wx.ID_OK:
1131 def SimiCluster(self, parametres = {}, fromprof = False, tableau = None) :
1132 self.analyse_matrix(DoSimi, parametres = parametres, analyse_type = 'simiclustermatrix', matrix = tableau, dlgnb = 5)
1134 # def OnSimi(self,evt):
1136 #print 'ATTENTION !!!! VERGES'
1137 #print 'PLUS DE BUG SUR SIMI'
1138 # self.res = DoSimi(self, param = None)
1139 #self.res = Verges(self)
1140 # if self.res.val == wx.ID_OK :
1144 #################################################################
1146 def OnHelp(self, event):
1147 webbrowser.open('http://www.iramuteq.org/documentation')
1149 def OnPref(self, event):
1150 dlg = PrefDialog(self)
1151 dlg.CenterOnParent()
1152 self.val = dlg.ShowModal()
1156 if self.check_update:
1159 print 'pas de verif'
1161 #CheckRPackages(self)
1163 def OnOpenFromCmdl(self):
1165 if options.filename :
1166 if os.path.exists(options.filename):
1167 self.filename = os.path.abspath(options.filename)
1171 if os.path.exists(os.path.realpath(args[0])):
1172 self.filename = os.path.abspath(os.path.realpath(args[0]))
1178 if os.path.splitext(self.filename)[1] in ['.csv', '.xls', '.ods']:
1179 self.tableau = Tableau(self, self.filename)
1180 val = get_table_param(self, self.filename)
1181 if val == wx.ID_OK :
1182 self.tableau.make_content()
1183 OpenAnalyse(self, self.tableau.parametres)
1184 self.tree.OnItemAppend(self.tableau.parametres)
1185 #get_table_param(self, self.filename)
1186 #self.tableau.make_content()
1187 #self.tableau.show_tab()
1188 #open_data(self, self.filename)
1189 elif os.path.splitext(self.filename)[1] == '.txt':
1191 elif os.path.splitext(self.filename)[1] == '.ira' :
1192 #self.corpus = Corpus(self)
1193 #self.Text = OpenAnalyse(self, self.filename)
1194 OpenAnalyse(self, self.filename)
1196 print 'ce fichier n\'existe pas'
1200 class IntroPanel(wx.Panel):
1201 def __init__(self, parent):
1202 wx.Panel.__init__(self, parent)
1203 col = randint(0, 255)
1204 col1 = randint(0,255)
1205 col2 = randint(0,255)
1207 bckgrdcolor = wx.Colour(col, col1, col2)
1208 self.SetBackgroundColour(bckgrdcolor)
1209 txtcolour = wx.Colour(250, 250, 250)
1210 linkcolor = wx.Colour(255, 0, 0)
1211 sizer1 = wx.BoxSizer(wx.VERTICAL)
1212 sizer2 = wx.BoxSizer(wx.VERTICAL)
1213 sizer3 = wx.BoxSizer(wx.HORIZONTAL)
1214 sizer4 = wx.BoxSizer(wx.VERTICAL)
1215 sizer5 = wx.BoxSizer(wx.HORIZONTAL)
1216 grid_sizer_1 = wx.FlexGridSizer(1, 4, 0, 0)
1217 grid_sizer_3 = wx.FlexGridSizer(1, 4, 0, 0)
1218 grid_sizer_2 = wx.FlexGridSizer(1, 3, 0, 0)
1219 PanelPres = wx.Panel(self)
1220 PanelPres.SetBackgroundColour(bckgrdcolor)
1221 label_1 = wx.StaticText(self, -1, u"IRaMuTeQ", size=(-1, -1))
1222 label_1.SetFont(wx.Font(46, wx.TELETYPE, wx.NORMAL, wx.BOLD, 0, "Purisa"))
1223 label_1.SetForegroundColour(wx.RED)
1224 label2 = wx.StaticText(PanelPres, -1 , u'\nVersion ' + ConfigGlob.get('DEFAULT', 'version') + '\n')
1225 label2.SetForegroundColour(txtcolour)
1226 label2.SetBackgroundColour(bckgrdcolor)
1227 #label3 = wx.StaticText(PanelPres, -1 , u'Equipe ')
1228 #label3.SetForegroundColour(txtcolour)
1229 #label3.SetBackgroundColour(bckgrdcolor)
1230 self.hyper2 = hl.HyperLinkCtrl(PanelPres, wx.ID_ANY, u"REPERE", URL="http://repere.no-ip.org/")
1231 self.hyper2.SetColours(linkcolor, linkcolor, "RED")
1232 self.hyper2.SetBackgroundColour(bckgrdcolor)
1233 self.hyper2.EnableRollover(True)
1234 self.hyper2.SetUnderlines(False, False, True)
1235 self.hyper2.SetBold(True)
1236 self.hyper2.UpdateLink()
1237 label_lerass = wx.StaticText(PanelPres, -1, u'Laboratoire ')
1238 label_lerass.SetForegroundColour(txtcolour)
1239 label_lerass.SetBackgroundColour(bckgrdcolor)
1240 self.hyper_lerass = hl.HyperLinkCtrl(PanelPres, -1, u'LERASS', URL="http://www.lerass.com")
1241 self.hyper_lerass.SetColours(linkcolor, linkcolor, "RED")
1242 self.hyper_lerass.SetBackgroundColour(bckgrdcolor)
1243 self.hyper_lerass.EnableRollover(True)
1244 self.hyper_lerass.SetUnderlines(False, False, True)
1245 self.hyper_lerass.SetBold(True)
1246 self.hyper_lerass.UpdateLink()
1247 blank = wx.StaticText(PanelPres, -1, u'\n')
1248 blank1 = wx.StaticText(PanelPres, -1, u'\n')
1249 labellicence = wx.StaticText(PanelPres, -1, _(u"License GNU GPL").decode('utf8'))
1250 labellicence.SetForegroundColour(txtcolour)
1251 labellicence.SetBackgroundColour(bckgrdcolor)
1252 labelcopy = wx.StaticText(PanelPres, -1, ConfigGlob.get('DEFAULT', 'copyright'))
1253 labelcopy.SetForegroundColour(txtcolour)
1254 labelcopy.SetBackgroundColour(bckgrdcolor)
1255 python_img = wx.Image(os.path.join(ImagePath,'python-logo.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
1256 r_img = wx.Image(os.path.join(ImagePath,'Rlogo.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
1257 lexique_img = wx.Image(os.path.join(ImagePath,'LexTexte4.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
1258 but_python = wx.BitmapButton(self, -1, python_img)
1259 but_lexique = wx.BitmapButton(self, -1, lexique_img)
1260 but_r = wx.BitmapButton(self, -1, r_img)
1261 self.Bind(wx.EVT_BUTTON, self.OnPython, but_python)
1262 self.Bind(wx.EVT_BUTTON, self.OnLexique, but_lexique)
1263 self.Bind(wx.EVT_BUTTON, self.OnR, but_r)
1266 #grid_sizer_1.Add(label3, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1267 grid_sizer_1.Add(self.hyper2, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1268 grid_sizer_3.Add(label_lerass, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1269 grid_sizer_3.Add(self.hyper_lerass, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1270 sizer4.Add(label_1, 0, wx.ALIGN_CENTER, 5)
1271 sizer2.Add(label2, 0, wx.ALIGN_CENTER, 5)
1272 #sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1273 sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1274 sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1275 sizer2.Add(grid_sizer_3, 0, wx.ALIGN_CENTER, 5)
1276 sizer2.Add(wx.StaticText(PanelPres, -1, u' '), 0, wx.ALIGN_CENTER, 5)
1277 #sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1278 #sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1279 sizer2.Add(grid_sizer_1, 0, wx.ALIGN_CENTER, 5)
1280 sizer2.Add(labellicence, 0, wx.ALIGN_CENTER, 5)
1281 sizer2.Add(labelcopy, 0, wx.ALIGN_CENTER, 5)
1282 sizer1.Add(sizer4, 1, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1283 PanelPres.SetSizer(sizer2)
1284 sizer5.Add(blank, 1, wx.EXPAND | wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 2)
1285 sizer5.Add(PanelPres, 1, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1286 sizer5.Add(blank1, 1, wx.ALIGN_CENTER_HORIZONTAL,2)
1287 grid_sizer_2.Add(but_python, 1, wx.ALIGN_CENTER_HORIZONTAL| wx.ALIGN_CENTER_VERTICAL)
1288 grid_sizer_2.Add(but_lexique, 1,wx.ALIGN_CENTER_HORIZONTAL| wx.ALIGN_CENTER_VERTICAL)
1289 grid_sizer_2.Add(but_r, 1, wx.ALIGN_CENTER_HORIZONTAL| wx.ALIGN_CENTER_VERTICAL)
1291 sizer1.Add(sizer5, 3, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 1)
1292 sizer1.Add(grid_sizer_2, 1, wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL)
1293 self.SetSizer(sizer1)
1296 def OnPython(self,evt):
1297 webbrowser.open('http://www.python.org')
1299 def OnLexique(self,evt):
1300 webbrowser.open('http://www.lexique.org')
1303 webbrowser.open('http://www.r-project.org')
1305 class MySplashScreen(wx.SplashScreen):
1307 bmp = wx.Image(os.path.join(ImagePath, 'splash.png')).ConvertToBitmap()
1308 wx.SplashScreen.__init__(self, bmp,
1309 wx.SPLASH_CENTRE_ON_SCREEN | wx.SPLASH_TIMEOUT,
1311 self.Bind(wx.EVT_CLOSE, self.OnClose)
1312 self.fc = wx.FutureCall(1, self.ShowMain)
1314 def OnClose(self, evt):
1318 if self.fc.IsRunning():
1323 displaySize = wx.DisplaySize()
1324 w = displaySize[0]/1.2
1325 h = displaySize[1]/1.2
1326 frame = IraFrame(None, -1, "IRaMuTeQ " + ConfigGlob.get('DEFAULT', 'version'), size=(w, h))
1330 frame.OnOpenFromCmdl()
1331 # if self.fc.IsRunning():
1333 #wx.CallAfter(frame.ShowTip)
1335 class MyApp(wx.App):
1338 Create and show the splash screen. It will then create and show
1339 the main frame when it is time to do so.
1341 wx.SystemOptions.SetOptionInt("mac.window-plain-transition", 1)
1342 self.SetAppName("Iramuteq")
1343 splash = MySplashScreen()
1351 if __name__ == '__main__':