2 # -*- coding: utf-8 -*-
3 #Author: Pierre Ratinaud
4 #Copyright (c) 2008-2012, Pierre Ratinaud
7 from optparse import OptionParser
9 parser = OptionParser()
10 parser.add_option("-f", "--file", dest="filename",
11 help="open FILE", metavar="FILE", default=False)
12 (options, args) = parser.parse_args()
20 from random import randint
21 from ConfigParser import ConfigParser, RawConfigParser
25 #------------------------------------
27 import wx.lib.agw.aui as aui
30 import wx.lib.hyperlink as hl
31 #------------------------------------
32 from functions import BugReport, PlaySound, History
33 from checkversion import NewVersion
34 from guifunct import *
35 from tableau import Tableau
36 from dialog import PrefDialog
37 from tabfrequence import Frequences, FreqMultiple
38 from tabchi2 import ChiSquare
39 #from tabstudent import MakeStudent
40 from tabchddist import ChdCluster
41 from tabafcm import DoAFCM
42 from tabchdalc import AnalyseQuest
43 from tabsimi import DoSimi
44 from tabrsimple import InputText
45 from tabverges import Prototypical
46 from tabsplitvar import SplitMatrixFromVar
47 #from textdist import AnalysePam
48 from textstat import Stat
49 from textaslexico import Lexico
50 from textsimi import SimiTxt, SimiFromCluster
51 from textwordcloud import WordCloud, ClusterCloud
52 from textreinert import Reinert
53 #from textcheckcorpus import checkcorpus
54 from openanalyse import OpenAnalyse
55 from corpus import Builder, SubBuilder
56 from checkinstall import CreateIraDirectory, CheckRPath, FindRPAthWin32, FindRPathNix, CheckRPackages, IsNew, UpgradeConf, CopyConf, RLibsAreInstalled
57 from chemins import RscriptsPath, ConstructConfigPath, ConstructDicoPath, ConstructGlobalPath, PathOut
58 from parse_factiva_xml import ImportFactiva
59 from tools import Extract
61 from tree import LeftTree
62 ##########################################################
63 ID_OpenData = wx.NewId()
64 ID_Import = wx.NewId()
65 ID_OpenText = wx.NewId()
66 ID_OnOpenAnalyse = wx.NewId()
69 ID_Student = wx.NewId()
70 ID_CHDSIM = wx.NewId()
71 ID_CHDReinert = wx.NewId()
72 ID_TEXTAFCM = wx.NewId()
73 ID_TEXTSTAT = wx.NewId()
75 ID_TEXTREINERT = wx.NewId()
76 ID_TEXTPAM = wx.NewId()
77 ID_CHECKCORPUS = wx.NewId()
78 ID_Tabcontent = wx.NewId()
81 ID_CloseTab = wx.NewId()
82 ID_SaveTab = wx.NewId()
83 ID_CreateText = wx.NewId()
84 ID_ACCEUIL = wx.NewId()
85 ID_RESULT = wx.NewId()
86 ID_VIEWDATA = wx.NewId()
87 ID_HTMLcontent = wx.NewId()
88 ID_SimiTxt = wx.NewId()
90 ID_ImportTXM = wx.NewId()
91 ID_FreqMulti = wx.NewId()
92 ID_Splitfromvar = wx.NewId()
93 ID_Subtxtfrommeta = wx.NewId()
94 ID_Subtxtfromthem = wx.NewId()
96 ID_ImportEuro = wx.NewId()
97 ID_Fact_xml = wx.NewId()
98 ID_Fact_mail = wx.NewId()
99 ID_Fact_copy = 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',
195 #####################################################################
197 class IraFrame(wx.Frame):
198 def __init__(self, parent, id= -1, title="", pos=wx.DefaultPosition,
199 size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE |
202 log.info('Starting...')
203 wx.Frame.__init__(self, parent, id, title, pos, size, style)
205 self.AppliPath = AppliPath
206 self.images_path = os.path.join(AppliPath,'images')
207 self.UserConfigPath = UserConfigPath
208 #self.RscriptsPath = ConstructRscriptsPath(AppliPath)
209 self.RscriptsPath = PathOut(dirout=os.path.join(AppliPath, 'Rscripts'))
210 self.RscriptsPath.basefiles(RscriptsPath)
211 #self.DictPath = ConstructDicoPath(AppliPath)
212 self.DictPath = ConstructDicoPath(UserConfigPath)
213 self.ConfigGlob = ConfigGlob
214 self.ConfigPath = ConstructConfigPath(UserConfigPath)
215 self.pref = RawConfigParser()
216 #workaround for import problem
217 self.SimiFromCluster = SimiFromCluster
219 gettext.install('iramuteq', os.path.join(AppliPath,'locale'), unicode=True)
220 #langues = ['fr_FR', 'en', 'pt_PT']
224 for langue in code_langues :
225 self.preslangue[langue] = gettext.translation("iramuteq", os.path.join(AppliPath,'locale'), languages=[code_langues[langue]])
227 #self.presLan_fr = gettext.translation("iramuteq", os.path.join(AppliPath,'locale'), languages=['fr_FR'])
228 #self.presLan_en = gettext.translation("iramuteq", os.path.join(AppliPath,'locale'), languages=['en'])
229 # tell FrameManager to manage this frame
230 #self._mgr = wx.aui.AuiManager()
231 self._mgr = aui.AuiManager()
232 self._mgr.SetManagedWindow(self)
235 #--------------------------------------------------------------------------------
236 self.images_analyses = images_analyses
237 for img in images_analyses :
238 self.images_analyses[img] = wx.Image(os.path.join(self.images_path, self.images_analyses[img]), wx.BITMAP_TYPE_PNG).Scale(16,16).ConvertToBitmap()
239 self.mb = wx.MenuBar()
241 file_menu = wx.Menu()
242 item = wx.MenuItem(file_menu, ID_OpenData, _(u"Open a matrix").decode('utf8'), _(u"Open a matrix").decode('utf8'))
243 #item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN))
244 item.SetBitmap(self.images_analyses['matroot'])
245 file_menu.AppendItem(item)
247 item = wx.MenuItem(file_menu, ID_OpenText, _(u"Open a text corpus").decode('utf8'), _(u"Open a text corpus").decode('utf8'))
248 item.SetBitmap(self.images_analyses['textroot'])
249 file_menu.AppendItem(item)
251 item = wx.MenuItem(file_menu, ID_OnOpenAnalyse, _(u"Open an analysis").decode('utf8'), _(u"Open an analysis").decode('utf8'))
252 item.SetBitmap(self.images_analyses['iramuteq'])
253 file_menu.AppendItem(item)
255 item = wx.MenuItem(file_menu, ID_ImportTXM, _(u"Import from TXM").decode('utf8'), _(u"Import from TXM").decode('utf8'))
256 item.SetBitmap(self.images_analyses['TXM'])
257 file_menu.AppendItem(item)
259 item = wx.MenuItem(file_menu, ID_ImportEuro, _(u"Import from Europress").decode('utf8'), _(u"Import from Europress").decode('utf8'))
260 item.SetBitmap(self.images_analyses['europress'])
261 file_menu.AppendItem(item)
263 menuFactiva = wx.Menu()
264 fact_from_xml = wx.MenuItem(menuFactiva, ID_Fact_xml, _(u"from xml").decode('utf8'))
265 fact_from_xml.SetBitmap(self.images_analyses['factiva_xml'])
266 fact_from_mail = wx.MenuItem(menuFactiva, ID_Fact_mail, _(u"from mail").decode('utf8'))
267 fact_from_mail.SetBitmap(self.images_analyses['factiva_mail'])
268 fact_from_txt = wx.MenuItem(menuFactiva, ID_Fact_copy, _(u"from copy/paste").decode('utf8'))
269 fact_from_txt.SetBitmap(self.images_analyses['factiva_copy'])
270 menuFactiva.AppendItem(fact_from_xml)
271 menuFactiva.AppendItem(fact_from_mail)
272 menuFactiva.AppendItem(fact_from_txt)
273 file_menu.AppendMenu(-1, _(u"Import from factiva").decode('utf8'), menuFactiva)
275 menuTools = wx.Menu()
276 splitvar = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Split from variable").decode('utf8'))
277 extractmod = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Extract mods").decode('utf8'))
278 extractthem = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Extract thematics").decode('utf8'))
279 menuTools.AppendItem(splitvar)
280 menuTools.AppendItem(extractmod)
281 menuTools.AppendItem(extractthem)
282 self.ID_splitvar = splitvar.GetId()
283 self.ID_extractmod = extractmod.GetId()
284 self.ID_extractthem = extractthem.GetId()
285 file_menu.AppendMenu(-1, _(u"Tools").decode('utf8'), menuTools)
288 #item = wx.MenuItem(file_menu, ID_SaveTab, _(u"Save tab as...").decode('utf8'), _(u"Save tab as...").decode('utf8'))
289 #item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_SAVE_AS))
290 #file_menu.AppendItem(item)
292 file_menu.Append(wx.ID_EXIT, _(u"Exit").decode('utf8'))
294 edit_menu = wx.Menu()
295 pref = wx.MenuItem(edit_menu, wx.ID_PREFERENCES, _(u'Preferences').decode('utf8'))
296 pref.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_HELP_SETTINGS, size = (16,16)))
297 edit_menu.AppendItem(pref)
298 #edit_menu.Append(wx.ID_PREFERENCES, _(u'Preferences').decode('utf8'))
300 view_menu = wx.Menu()
301 view_menu.Append(ID_ACCEUIL, _(u"Home page").decode('utf8'))
302 view_menu.Append(ID_VIEWDATA, _(u"Show data").decode('utf8'))
303 view_menu.Append(ID_RESULT, _(u'Show results').decode('utf8'))
304 #view_menu.AppendSeparator()
305 matrix_menu = wx.Menu()
306 matanalyses = [[ID_Freq, _(u"Frequencies").decode('utf8'), 'freq'],
307 [ID_Freq, _(u"Multiple Frequencies").decode('utf8'), 'freqmulti'],
308 [ID_Chi2, _(u"Chi2").decode('utf8'), 'chi2'],
309 {'name' : _(u"Clustering").decode('utf8'),
310 'content' : [[ID_CHDReinert, _(u"Reinert's Method").decode('utf8'), 'reinertmatrix']]},
311 [ID_SIMI, _(u"Similarities Analysis").decode('utf8'), 'simimatrix'],
312 [ID_proto, _(u"Prototypical Analysis").decode('utf8'), 'proto'],
313 [ID_Splitfromvar, _(u"Split from variable").decode('utf8'), '']]
315 for analyse in matanalyses :
316 if not isinstance(analyse, dict) :
317 item = wx.MenuItem(matrix_menu, analyse[0], analyse[1])
318 item.SetBitmap(self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16)))
319 matrix_menu.AppendItem(item)
322 for subana in analyse['content'] :
323 item = wx.MenuItem(nmenu, subana[0], subana[1])
324 item.SetBitmap(self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)))
325 nmenu.AppendItem(item)
326 matrix_menu.AppendMenu(-1, analyse['name'], nmenu)
327 #item = wx.MenuItem(matrix_menu, ID_Freq, _(u"Frequencies").decode('utf8'))
328 #item.SetBitmap(self.images_analyses['freq'])
329 #matrix_menu.AppendItem(item)
330 #matrix_menu.Append(ID_Freq, _(u"Frequencies").decode('utf8'))
331 #item = wx.MenuItem(matrix_menu, ID_Freq, _(u"Multiple Frequencies").decode('utf8'))
332 #item.SetBitmap(self.images_analyses['freqmulti'])
333 #matrix_menu.Append(ID_FreqMulti, _(u'Multiple frequencies').decode('utf8'))
334 #matrix_menu.AppendItem(item)
335 #matrix_menu.Append(ID_Chi2, _(u"Chi2").decode('utf8'))
336 #matrix_menu.Append(ID_Student, u"t de Student")
337 #menu_classif = wx.Menu()
338 #menu_classif.Append(ID_CHDReinert, _(u"Reinert's Method").decode('utf8'))
339 #menu_classif.Append(ID_CHDSIM, u"Par matrice des distances")
340 #matrix_menu.AppendMenu(-1, _(u"Clustering").decode('utf8'), menu_classif)
341 #matrix_menu.Append(ID_AFCM, u"AFCM")
342 #matrix_menu.Append(ID_SIMI, _(u"Similarities Analysis").decode('utf8'))
343 #matrix_menu.Append(ID_proto, _(u"Prototypical Analysis").decode('utf8'))
344 ID_RCODE = wx.NewId()
345 #matrix_menu.Append(ID_RCODE, u"Code R...")
346 #menu_splittab = wx.Menu()
347 #ID_SPLITVAR = wx.NewId()
348 #splitvar = wx.MenuItem(menu_splittab, ID_SPLITVAR, _(u"Split from variable").decode('utf8'))
349 #menu_splittab.AppendItem(splitvar)
350 #matrix_menu.AppendMenu(-1, _(u"Split matrix").decode('utf8'), menu_splittab)
351 self.matrix_menu = matrix_menu
353 text_menu = wx.Menu()
354 analyses_text = [[ID_TEXTSTAT, _(u"Statistics").decode('utf8'), 'stat'],
355 [ID_ASLEX, _(u"Specificities and CA").decode('utf8'), 'spec'],
356 {'name' : _(u"Clustering").decode('utf8'),
357 'content' : [[ID_TEXTREINERT, _(u"Reinert's Method").decode('utf8'), 'alceste']]},
358 [ID_SimiTxt, _(u"Similarities Analysis").decode('utf8'), 'simitxt'],
359 [ID_WC, _(u"WordCloud").decode('utf8'), 'wordcloud'],
360 {'name' : _(u"Sub corpus").decode('utf8'),
361 'content' : [[ID_Subtxtfrommeta, _(u'Sub corpus from metadata').decode('utf8'), None],
362 [ID_Subtxtfromthem, _(u'Sub corpus from thematic').decode('utf8'), None]]},
365 for analyse in analyses_text :
366 if not isinstance(analyse, dict) :
367 item = wx.MenuItem(text_menu, analyse[0], analyse[1])
368 item.SetBitmap(self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16)))
369 text_menu.AppendItem(item)
372 for subana in analyse['content'] :
373 item = wx.MenuItem(nmenu, subana[0], subana[1])
374 item.SetBitmap(self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)))
375 nmenu.AppendItem(item)
376 text_menu.AppendMenu(-1, analyse['name'], nmenu)
377 #text_menu.Append(ID_CHECKCORPUS, u"Vérifier le corpus")
378 # text_menu.Append(ID_TEXTSTAT, _(u"Statistics").decode('utf8'))
379 # text_menu.Append(ID_ASLEX, _(u"Specificities and CA").decode('utf8'))
380 # #text_menu.Append(ID_TEXTAFCM, u"AFC sur UCI / Vocabulaire")
381 # menu_classiftxt = wx.Menu()
382 # menu_classiftxt.Append(ID_TEXTREINERT, _(u"Reinert's Method").decode('utf8'))
383 # #menu_classiftxt.Append(ID_TEXTPAM, u"Par matrice des distances")
384 # text_menu.AppendMenu(-1, _(u"Clustering").decode('utf8'), menu_classiftxt)
385 # text_menu.Append(ID_SimiTxt, _(u"Similarities Analysis").decode('utf8'))
387 # text_menu.Append(ID_WC, _(u"WordCloud").decode('utf8'))
388 self.text_menu = text_menu
390 help_menu = wx.Menu()
391 about = wx.MenuItem(help_menu, wx.ID_ABOUT, _(u"About...").decode('utf8'))
392 about.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_INFORMATION, size = (16,16)))
393 help_menu.AppendItem(about)
394 #help_menu.Append(wx.ID_ABOUT, _(u"About...").decode('utf8'))
395 help = wx.MenuItem(help_menu, wx.ID_HELP, _(u"Online help...").decode('utf8'))
396 help.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_HELP, size = (16,16)))
397 help_menu.AppendItem(help)
398 #help_menu.Append(wx.ID_HELP, _(u"Online help...").decode('utf8'))
400 self.mb.Append(file_menu, _(u"File").decode('utf8'))
401 self.mb.Append(edit_menu, _(u"Edition").decode('utf8'))
402 self.mb.Append(view_menu, _(u"View").decode('utf8'))
403 self.mb.Append(matrix_menu, _(u"Matrix analysis").decode('utf8'))
404 self.mb.Append(text_menu, _(u"Text analysis").decode('utf8'))
405 self.mb.Append(help_menu, _(u"Help").decode('utf8'))
407 self.SetMenuBar(self.mb)
408 #--------------------------------------------------------------------
409 self.statusbar = self.CreateStatusBar(2, wx.ST_SIZEGRIP)
410 self.statusbar.SetStatusWidths([-2, -3])
411 self.statusbar.SetStatusText(_(u"Ready").decode('utf8'), 0)
412 self.statusbar.SetStatusText(_(u"Welcome").decode('utf8'), 1)
414 # min size for the frame itself isn't completely done.
415 # see the end up FrameManager::Update() for the test
416 # code. For now, just hard code a frame minimum size
417 self.SetMinSize(wx.Size(400, 400))
419 # create some toolbars
420 tb1 = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
421 wx.TB_FLAT | wx.TB_NODIVIDER)
422 tb1.SetToolBitmapSize(wx.Size(16, 16))
423 tb1.AddLabelTool(ID_OpenData, "OpenData", self.images_analyses['matroot'], shortHelp=_(u"Matrix").decode('utf8'), longHelp=_(u"Open a matrix").decode('utf8'))
425 tb1.AddLabelTool(ID_OpenText, "OpenText", self.images_analyses['textroot'], shortHelp=_(u"Text").decode('utf8'), longHelp=_(u"Open a text corpus").decode('utf8'))
427 tb1.AddLabelTool(ID_OnOpenAnalyse, "OpenAnalyse", self.images_analyses['iramuteq'], shortHelp= _(u"Open an analysis").decode('utf8'), longHelp=_(u"Open an analysis").decode('utf8'))
429 tb1.AddLabelTool(ID_ImportTXM, "ImportTXM", self.images_analyses['TXM'], shortHelp= _(u"Import from TXM").decode('utf8'), longHelp=_(u"Import from TXM").decode('utf8'))
431 tb1.AddLabelTool(ID_ImportEuro, "ImportEuro", self.images_analyses['europress'], shortHelp= _(u"Import from Europress").decode('utf8'), longHelp=_(u"Import from Europress").decode('utf8'))
433 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'))
434 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'))
435 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'))
438 tb_text = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
439 wx.TB_FLAT | wx.TB_NODIVIDER)
440 for analyse in analyses_text :
441 if not isinstance(analyse, dict) :
442 tb_text.AddLabelTool(analyse[0], analyse[1], self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16)), shortHelp = analyse[1], longHelp = analyse[1])
444 for subana in analyse['content'] :
445 tb_text.AddLabelTool(subana[0], subana[1], self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)), shortHelp = subana[1], longHelp = subana[1])
448 tb_mat = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
449 wx.TB_FLAT | wx.TB_NODIVIDER)
450 for analyse in matanalyses :
451 if not isinstance(analyse, dict) :
452 tb_mat.AddLabelTool(analyse[0], analyse[1], self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16)), shortHelp = analyse[1], longHelp = analyse[1])
454 for subana in analyse['content'] :
455 tb_mat.AddLabelTool(subana[0], subana[1], self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)), shortHelp = subana[1], longHelp = subana[1])
457 #------------------------------------------------------------------------------------------------
459 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)
461 #self._mgr.AddPane(self.text_ctrl_txt, wx.aui.AuiPaneInfo().
462 # Name("Text").CenterPane())
463 self._mgr.AddPane(self.text_ctrl_txt, aui.AuiPaneInfo().
464 Name("Text").CenterPane())
465 #self._mgr.AddPane(IntroPanel(self), wx.aui.AuiPaneInfo().Name("Intro_Text").
467 self._mgr.AddPane(IntroPanel(self), aui.AuiPaneInfo().Name("Intro_Text").
469 #if not os.path.exists(os.path.join(UserConfigPath, 'history.db')) :
470 # with open(os.path.join(UserConfigPath, 'history.db'), 'w') as f :
472 self.history = History(os.path.join(UserConfigPath, 'history.db'))
473 self.tree = LeftTree(self)
474 self._mgr.AddPane(self.tree, aui.AuiPaneInfo().Name("lefttree").Caption(_(u"Historic").decode('utf8')).
475 Left().MinSize(wx.Size(200,500)).Layer(1).Position(1).CloseButton(False).MaximizeButton(True).
476 MinimizeButton(True))
478 #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)
479 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)
480 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
481 self.nb.SetAGWWindowStyleFlag(notebook_flags)
482 self.nb.SetArtProvider(aui.ChromeTabArt())
483 #self.nb.SetArtProvider(aui.VC8TabArt())
484 #self.nb.parent = self
485 #self._notebook_style = aui.AUI_NB_DEFAULT_STYLE | aui.AUI_NB_TAB_EXTERNAL_MOVE | wx.NO_BORDER
486 #self._mgr.AddPane(self.nb, wx.aui.AuiPaneInfo().
487 # Name("Tab_content").
489 self._mgr.AddPane(self.nb, aui.AuiPaneInfo().
493 #self._mgr.AddPane(self.Sheet, wx.aui.AuiPaneInfo().Name("Data").CenterPane())
494 #self._mgr.AddPane(self.Sheet, aui.AuiPaneInfo().Name("Data").CenterPane())
495 self.nb.Bind(aui.EVT_AUINOTEBOOK_PAGE_CLOSE, self.OnCloseTab)
496 self.nb.Bind(aui.EVT_AUINOTEBOOK_PAGE_CHANGED, self.OnPageChanged)
497 # add the toolbars to the manager
499 #self._mgr.AddPane(tb1, wx.aui.AuiPaneInfo().
500 # Name("tb1").Caption("Fichiers").
501 # ToolbarPane().Top().
502 # LeftDockable(False).RightDockable(False))
503 self._mgr.AddPane(tb1, aui.AuiPaneInfo().
504 Name("tb1").Caption("Fichiers").
506 LeftDockable(True).RightDockable(False))
508 self._mgr.AddPane(tb_text, aui.AuiPaneInfo().
509 Name("tb_text").Caption("analyse_text").
511 LeftDockable(True).RightDockable(False))
513 self._mgr.AddPane(tb_mat, aui.AuiPaneInfo().
514 Name("tb_mat").Caption("analyse_matrix").
516 LeftDockable(True).RightDockable(False))
518 self._mgr.GetPane('tb_text').Hide()
519 self._mgr.GetPane('tb_mat').Hide()
521 self.ShowAPane("Intro_Text")
522 self._mgr.GetPane("lefttree").Show()
523 self._mgr.GetPane("classif_tb").Hide()
524 # "commit" all changes made to FrameManager
527 # Show How To Use The Closing Panes Event
528 ##################################################################
529 self.Bind(wx.EVT_MENU, self.OnAcceuil, id=ID_ACCEUIL)
530 self.Bind(wx.EVT_MENU, self.OnViewData, id=ID_VIEWDATA)
531 self.Bind(wx.EVT_MENU, self.ShowTab, id=ID_RESULT)
532 self.Bind(wx.EVT_MENU, self.OnOpenData, id=ID_OpenData)
533 self.Bind(wx.EVT_MENU, self.OnOpenText, id=ID_OpenText)
534 self.Bind(wx.EVT_MENU, self.OnOpenAnalyse, id=ID_OnOpenAnalyse)
535 self.Bind(wx.EVT_MENU, self.import_factiva_xml, fact_from_xml)
536 self.Bind(wx.EVT_MENU, self.import_factiva_mail, fact_from_mail)
537 self.Bind(wx.EVT_MENU, self.import_factiva_txt, fact_from_txt)
538 self.Bind(wx.EVT_MENU, self.ExtractTools, splitvar)
539 self.Bind(wx.EVT_MENU, self.ExtractTools, extractmod)
540 self.Bind(wx.EVT_MENU, self.ExtractTools, extractthem)
541 self.Bind(wx.EVT_MENU, self.OnFreq, id=ID_Freq)
542 self.Bind(wx.EVT_MENU, self.OnFreqMulti, id=ID_FreqMulti)
543 self.Bind(wx.EVT_MENU, self.OnChi2, id=ID_Chi2)
544 self.Bind(wx.EVT_MENU, self.OnStudent, id=ID_Student)
545 self.Bind(wx.EVT_MENU, self.OnCHDSIM, id=ID_CHDSIM)
546 self.Bind(wx.EVT_MENU, self.OnCHDReinert, id=ID_CHDReinert)
547 self.Bind(wx.EVT_MENU, self.OnAFCM, id=ID_AFCM)
548 self.Bind(wx.EVT_MENU, self.OnProto, id=ID_proto)
549 self.Bind(wx.EVT_MENU, self.OnSplitVar, id = ID_Splitfromvar)
550 #self.Bind(wx.EVT_MENU, self.OnRCode, id=ID_RCODE)
551 #self.Bind(wx.EVT_MENU, self.OnSplitVar, id=ID_SPLITVAR)
552 #self.Bind(wx.EVT_MENU, self.OnCheckcorpus, id = ID_CHECKCORPUS)
553 self.Bind(wx.EVT_MENU, self.OnTextStat, id=ID_TEXTSTAT)
554 self.Bind(wx.EVT_MENU, self.OnTextSpec, id=ID_ASLEX)
555 self.Bind(wx.EVT_MENU, self.OnTextAfcm, id=ID_TEXTAFCM)
556 self.Bind(wx.EVT_MENU, self.OnTextReinert, id=ID_TEXTREINERT)
557 self.Bind(wx.EVT_MENU, self.OnPamSimple, id=ID_TEXTPAM)
558 self.Bind(wx.EVT_MENU, self.OnSimiTxt, id=ID_SimiTxt)
559 self.Bind(wx.EVT_MENU, self.OnWordCloud, id=ID_WC)
560 self.Bind(wx.EVT_MENU, self.OnSubText, id = ID_Subtxtfrommeta)
561 self.Bind(wx.EVT_MENU, self.OnSubText, id = ID_Subtxtfromthem)
562 self.Bind(wx.EVT_MENU, self.OnSimiTab, id=ID_SIMI)
563 self.Bind(wx.EVT_MENU, self.OnExit, id=wx.ID_EXIT)
564 #self.Bind(wx.EVT_MENU, self.OnSaveTabAs, id=ID_SaveTab)
565 self.Bind(wx.EVT_MENU, self.OnAbout, id=wx.ID_ABOUT)
566 self.Bind(wx.EVT_MENU, self.OnHelp, id=wx.ID_HELP)
567 self.Bind(wx.EVT_MENU, self.OnPref, id=wx.ID_PREFERENCES)
568 self.Bind(wx.EVT_MENU, self.OnImportTXM, id=ID_ImportTXM)
569 self.Bind(wx.EVT_MENU, self.OnImportEuropress, id=ID_ImportEuro)
570 self.Bind(wx.EVT_CLOSE, self.OnClose)
571 ##################################################################
572 flags = self._mgr.GetAGWFlags()
573 #flags &= ~wx.aui.AUI_MGR_TRANSPARENT_HINT
574 #flags &= ~wx.aui.AUI_MGR_VENETIAN_BLINDS_HINT
575 #flags &= ~wx.aui.AUI_MGR_RECTANGLE_HINT
576 flags &= ~(aui.AUI_MGR_RECTANGLE_HINT | aui.AUI_MGR_ALLOW_FLOATING)
577 self._mgr.SetAGWFlags(self._mgr.GetAGWFlags() ^ (aui.AUI_MGR_RECTANGLE_HINT | aui.AUI_MGR_ALLOW_FLOATING))
578 self._mgr.GetArtProvider().SetMetric(aui.AUI_DOCKART_GRADIENT_TYPE, aui.AUI_GRADIENT_HORIZONTAL)
579 self.GetDockArt().SetColor(aui.AUI_DOCKART_ACTIVE_CAPTION_GRADIENT_COLOUR, "#00FFF9")
582 self._icon = wx.Icon(os.path.join(ImagePath, "iraicone.ico"), wx.BITMAP_TYPE_ICO)
583 self.SetIcon(self._icon)
584 ##########################
586 self.input_path = [False]
587 self.TEMPDIR = tempfile.mkdtemp('iramuteq')
588 self.FileTabList = []
594 self.g_header = False
601 self.SysEncoding = sys.getdefaultencoding()
602 self.syscoding = sys.getdefaultencoding()
603 #print 'SysEncoding',self.SysEncoding
604 if self.SysEncoding == 'mac-roman' : self.SysEncoding = 'MacRoman'
607 ##############################################################@
608 self.DisEnSaveTabAs(False)
609 self.ShowMenu('view', False)
610 self.ShowMenu('matrix', False)
611 self.ShowMenu('text', False)
622 def finish_init(self) :
624 self.pref.read(self.ConfigPath['preferences'])
627 self.pref.read(self.ConfigPath['preferences'])
634 self.pref.read(self.ConfigPath['preferences'])
636 self.sound = self.pref.getboolean('iramuteq', 'sound')
637 self.check_update = self.pref.getboolean('iramuteq', 'checkupdate')
638 self.version = ConfigGlob.get('DEFAULT', 'version')
639 #configuration des chemins de R
640 self.PathPath = ConfigParser()
641 self.PathPath.read(ConfigPath['path'])
643 if not CheckRPath(self.PathPath) :
644 if sys.platform == 'win32':
645 BestRPath = FindRPAthWin32()
647 BestRPath = FindRPathNix()
649 self.PathPath.set('PATHS', 'rpath', BestRPath)
650 with open(ConfigPath['path'], 'w') as f :
651 self.PathPath.write(f)
655 self.RPath = self.PathPath.get('PATHS', 'rpath')
658 if not RLibsAreInstalled(self) :
661 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'),
662 _(u"If R is installed, report its path in Preferences.").decode('utf8'),
663 _(u"IRaMuTeQ does not work without R.").decode('utf8')])
664 dlg = wx.MessageDialog(self, msg, _(u"Problem").decode('utf8'), wx.OK | wx.NO_DEFAULT | wx.ICON_WARNING)
666 if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
670 def setlangue(self) :
671 self.pref.read(self.ConfigPath['preferences'])
673 guilangue = self.pref.get('iramuteq', 'guilanguage')
675 guilangue = DefaultConf.get('iramuteq', 'guilanguage')
676 self.preslangue.get(guilangue, 'english').install()
678 def OnVerif(self, evt) :
679 pack = CheckRPackages(self)
681 dlg = wx.MessageDialog(self, _(u"Installation OK").decode('utf8'), _(u"Installation").decode('utf8'), wx.OK | wx.ICON_INFORMATION | wx.STAY_ON_TOP)
683 if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
686 def DisEnSaveTabAs(self, DISEN):
688 file_menu = self.mb.GetMenu(0)
689 items = file_menu.GetMenuItems()
691 if item.GetId() == ID_SaveTab :
694 def ShowMenu(self, menu, Show=True):
698 self._mgr.GetPane('tb_text').Show()
700 self._mgr.GetPane('tb_text').Hide()
701 elif menu == 'matrix' :
704 self._mgr.GetPane('tb_mat').Show()
706 self._mgr.GetPane('tb_mat').Hide()
707 elif menu == 'view' :
712 #menu_pos = self.mb.FindMenu(menu)
713 if not menu_pos is None :
714 self.mb.EnableTop(menu_pos, Show)
715 self.mb.UpdateMenus()
718 #--------------------------------------------------------------------
719 def OnClose(self, event):
721 with open(self.ConfigPath['path'], 'w') as f :
722 self.PathPath.write(f)
727 def OnOpenData(self, event):
728 inputname, self.input_path = OnOpen(self, "Data")
730 #filename = self.input_path[0]
731 self.tableau = Tableau(self,os.path.abspath(self.input_path[0]))
732 val = get_table_param(self, self.input_path[0])
734 busy = wx.BusyInfo(_("Please wait...").decode('utf8'), self)
737 self.tableau.make_content()
738 OpenAnalyse(self, self.tableau.parametres)
739 self.tree.OnItemAppend(self.tableau.parametres)
744 #self.tableau.show_tab()
746 def OnOpenAnalyse(self, event):
747 self.AnalysePath = OnOpen(self, "Analyse")
748 if self.AnalysePath :
749 OpenAnalyse(self, self.AnalysePath[1][0], True)
750 self.ShowMenu('view')
752 def OnOpenText(self, event):
753 inputname, self.input_path = OnOpen(self, "Texte")
754 self.filename = self.input_path[0]
758 def OnViewData(self, event):
759 if self.type == "Data":
760 if not self.DataPop :
761 self.Sheet.Populate(self.content)
764 self.ShowAPane(u"Data")
765 elif self.type == "Texte" or self.type == 'Analyse' :
766 if not self.DataTxt :
767 self.text_ctrl_txt.Clear()
768 self.text_ctrl_txt.write(self.content)
769 self.text_ctrl_txt.ShowPosition(0)
772 self.ShowAPane(u"Text")
775 def OnSubText(self, evt, corpus = None, parametres = None):
777 corpus = self.tree.getcorpus()
778 if evt.GetId() == ID_Subtxtfrommeta :
779 parametres = {'frommeta' : True}
780 elif evt.GetId() == ID_Subtxtfromthem :
781 parametres = {'fromtheme' : True}
782 builder = SubBuilder(self, corpus, parametres)
783 if builder.res == wx.ID_OK :
784 busy = wx.BusyInfo(_("Please wait...").decode('utf8'), self)
786 corpus = builder.doanalyse()
787 self.history.add(corpus.parametres)
788 self.tree.OnItemAppend(corpus.parametres)
789 OpenAnalyse(self, corpus.parametres)
793 dlg = wx.ProgressDialog("Ouverture...",
794 "Veuillez patienter...",
797 style=wx.PD_APP_MODAL | wx.PD_AUTO_HIDE | wx.PD_ELAPSED_TIME | wx.PD_CAN_ABORT
800 builder = Builder(self, dlg)
801 if builder.res == wx.ID_OK :
803 corpus = builder.doanalyse()
804 self.history.add(corpus.parametres)
805 self.tree.OnItemAppend(corpus.parametres)
806 OpenAnalyse(self, corpus.parametres)
812 keepGoing = dlg.Update(count, u"Lecture du fichier")
813 self.ShowMenu('view')
814 self.ShowMenu('text')
815 self.ShowMenu('matrix', False)
820 keepGoing = dlg.Update(count, u"Chargement du dictionnaire")
822 #self.OnViewData(wx.EVT_BUTTON)
824 def OnExit(self, event):
827 def OnAbout(self, event):
828 info = wx.AboutDialogInfo()
829 info.Name = ConfigGlob.get('DEFAULT', 'name')
830 info.Version = ConfigGlob.get('DEFAULT', 'version')
831 info.Copyright = ConfigGlob.get('DEFAULT', 'copyright')
832 info.Translators = ConfigGlob.get('DEFAULT', 'translators').decode('utf8').split(';')
833 info.Description = u"""
834 Interface de R pour les Analyses Multidimensionnelles
835 de Textes et de Questionnaires
838 construit avec des logiciels libres.
844 info.WebSite = ("http://www.iramuteq.org", u"Site web IRaMuTeQ")
845 dev = ConfigGlob.get('DEFAULT', 'dev').decode('utf8').split(';')
846 info.Developers = dev
847 info.License = u"""Iramuteq est un logiciel libre ; vous pouvez le diffuser et/ou le modifier
848 suivant les termes de la Licence Publique Générale GNU telle que publiée
849 par la Free Software Foundation ; soit la version 2 de cette licence,
850 soit (à votre convenance) une version ultérieure.
852 Iramuteq est diffusé dans l'espoir qu'il sera utile,
853 mais SANS AUCUNE GARANTIE ; sans même une garantie implicite
854 de COMMERCIALISATION ou d'ADÉQUATION À UN USAGE PARTICULIER.
855 Voyez la Licence Publique Générale GNU pour plus de détails.
857 Vous devriez avoir reçu une copie de la Licence Publique Générale GNU
858 avec Iramuteq ; sinon, veuillez écrire à la Free Software Foundation,
859 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
862 def GetDockArt(self):
863 return self._mgr.GetArtProvider()
868 def OnPageChanged(self, event) :
869 new = event.GetSelection()
870 nobject = event.GetEventObject()
871 parent = nobject.GetParent()
872 if isinstance(parent, IraFrame) :
873 npage = self.nb.GetPage(new)
874 if 'parametres' in dir(npage) :
875 self.tree.GiveFocus(uuid=npage.parametres['uuid'])
876 if npage.parametres.get('matrix', False) :
877 self.ShowMenu('text', False)
878 self.ShowMenu('matrix', True)
879 elif npage.parametres.get('corpus', False) :
880 self.ShowMenu('text')
881 self.ShowMenu('matrix', False)
883 def OnCloseTab(self, evt):
884 #log.info('Closing tab %s' % str(evt.GetEventObject()))
885 ctrl = evt.GetEventObject()
886 if isinstance(ctrl.GetParent(), aui.AuiNotebook) or isinstance(ctrl.GetParent(), wx.Panel):
890 page = self.nb.GetPage(self.nb.GetSelection())
891 if 'parametres' in dir(page) and isinstance(ctrl.GetParent(), IraFrame) :
892 self.history.rmtab(page.parametres)
893 self.tree.CloseItem(uuid = page.parametres['uuid'])
894 TabTitle = self.nb.GetPageText(self.nb.GetSelection())
896 if self.nb.GetPageCount() == 1 and not notebook :
899 def LastTabClose(self) :
900 if self.nb.GetPageCount() == 1 :
901 #self.DisEnSaveTabAs(False)
903 self.ShowAPane("Text")
905 self.ShowAPane("Data")
907 self.ShowAPane("Intro_Text")
909 def GetStartPosition(self):
913 pt = self.ClientToScreen(wx.Point(0, 0))
915 return wx.Point(pt.x + x, pt.y + x)
917 def ShowAPane(self, panel):
918 for pane in self._mgr.GetAllPanes() :
919 if not pane.IsToolbar() and pane.name != 'lefttree':
921 self._mgr.GetPane(panel).Show()
924 def OnAcceuil(self, event):
925 self.ShowAPane(u"Intro_Text")
928 def CreateHTMLCtrl(self):
929 ctrl = wx.html.HtmlWindow(self, -1, wx.DefaultPosition, wx.Size(400, 300))
930 if "gtk2" in wx.PlatformInfo:
931 ctrl.SetStandardFonts()
932 ctrl.SetPage(u"text")
935 def ShowTab(self, evt):
936 self.ShowAPane("Tab_content")
938 ################################################################
940 ################################################################
941 def analyse_matrix(self, analyse, analyse_type = '', matrix = None, parametres = None, dlgnb = 1):
943 matrix = self.tree.getmatrix()
944 if parametres is not None :
945 parametres['type'] = analyse_type
947 parametres = {'type' : analyse_type}
949 #print 'plus de bug@@@@@@@@@@@@@@@@@@@@@@'
950 analyse(self, matrix, parametres = parametres, dlg = dlgnb)
954 def OnFreq(self, event, matrix = None):
955 self.analyse_matrix(Frequences, analyse_type = 'freq', matrix = matrix, dlgnb = 3)
957 def OnFreqMulti(self, event, matrix = None):
958 self.analyse_matrix(FreqMultiple, analyse_type = 'freqmulti', matrix = matrix, dlgnb = 3)
960 def OnChi2(self, event, matrix = None):
961 self.analyse_matrix(ChiSquare, matrix = matrix, analyse_type = 'chi2', dlgnb = 3)
963 def OnSimiTab(self, event, matrix = None):
964 self.analyse_matrix(DoSimi, matrix = matrix, analyse_type = 'simimatrix', dlgnb = 5)
966 def OnCHDReinert(self, event, matrix = None):
968 # matrix = self.tree.getmatrix()
969 #AnalyseQuest(self, matrix, parametres = {'type' : 'reinertmatrix'}, dlg = 3)
970 self.analyse_matrix(AnalyseQuest, matrix = matrix, analyse_type = 'reinertmatrix', dlgnb = 5)
972 def OnStudent(self, event):
978 def OnRCode(self, event):
984 def OnCHDSIM(self, event):
986 # print 'ATTENTION!!!!'
987 chdsim = ChdCluster(self)
988 if chdsim.val == wx.ID_OK:
993 # def OnCHDReinert(self, event):
995 # # print('PLUS DE BUG SUR ALCESTE QUESTIONNAIRE')
996 # self.quest = AnalyseQuest(self)
997 # if self.quest.val == wx.ID_OK:
1002 def OnProto(self, evt, matrix = None) :
1003 self.analyse_matrix(Prototypical, matrix = matrix, analyse_type = 'proto', dlgnb = 3)
1004 #Prototypical(self, {'type' : 'proto'})
1006 def OnSplitVar(self, evt, matrix = None):
1008 matrix = self.tree.getmatrix()
1009 self.analyse_matrix(SplitMatrixFromVar, matrix = matrix, analyse_type = 'splitvar', parametres = {'pathout': matrix.pathout.dirout}, dlgnb = 3)
1010 #matrix = self.tree.getmatrix()
1013 def OnSimiTxt(self, evt, corpus = None) :
1014 # print 'PLUS DE BUG SUR SIMITXT'
1016 #self.Text = SimiTxt(self)
1018 corpus = self.tree.getcorpus()
1019 self.Text = SimiTxt(self, corpus, parametres = {'type': 'simitxt'}, dlg = 3)
1020 if self.Text.val == wx.ID_OK :
1025 def OnWordCloud(self, evt, corpus = None) :
1026 # print 'PLUS DE BUG SUR WORDCLOUD'
1029 corpus = self.tree.getcorpus()
1030 self.Text = WordCloud(self, corpus, parametres = {'type' : 'wordcloud'}, dlg = 3)
1031 if self.Text.val == wx.ID_OK :
1036 def OnClusterCloud(self, corpus, parametres = None) :
1037 self.Text = ClusterCloud(self, corpus, parametres = parametres, dlg = 3)
1039 def OnAFCM(self, event):
1045 def OnTextStat(self, event, corpus = None):
1046 #print 'PAS DE BUG SUR TEXT STAT'
1049 corpus = self.tree.getcorpus()
1050 self.Text = Stat(self, corpus, parametres = {'type': 'stat'}, dlg = 7)
1052 if self.Text.val == wx.ID_OK :
1057 def OnTextSpec(self, event, corpus = None):
1059 #self.Text = AsLexico(self)
1060 #print('ATTENTION : PLUS DE BUG SUR LEXICO')
1062 corpus = self.tree.getcorpus()
1063 self.Text = Lexico(self, corpus, parametres = {'type' : 'spec'}, dlg = 3)
1064 if self.Text.val == wx.ID_OK :
1069 def OnTextAfcm(self, event):
1076 def import_factiva_xml(self,event):
1078 ImportFactiva(self, 'xml')
1082 def import_factiva_mail(self, evt) :
1084 ImportFactiva(self, 'mail')
1088 def import_factiva_txt(self, evt) :
1090 ImportFactiva(self, 'txt')
1094 def OnImportTXM(self, evt) :
1096 ImportFactiva(self, 'txm')
1100 def OnImportEuropress(self, evt) :
1102 ImportFactiva(self, 'euro')
1106 def ExtractTools(self, evt) :
1108 if ID == self.ID_splitvar :
1109 Extract(self, 'splitvar')
1110 elif ID == self.ID_extractmod :
1111 Extract(self, 'mods')
1112 elif ID == self.ID_extractthem :
1113 Extract(self, 'them')
1115 def OnTextReinert(self, event, corpus = None):
1117 #print('ATTENTION : PLUS DE BUG SUR ALCESTE')
1118 #RunAnalyse(self, corpus, Alceste, OptAlceste)
1120 corpus = self.tree.getcorpus()
1121 self.Text = Reinert(self, corpus, parametres = {'type': 'alceste'}, dlg = 6)
1122 if self.Text.val == wx.ID_OK:
1127 def OnPamSimple(self, event, corpus = None):
1130 corpus = self.tree.getcorpus()
1131 self.Text = AnalysePam(self, corpus, parametres = {'type' : 'pamtxt'}, dlg = 6)
1132 if self.Text.val == wx.ID_OK:
1137 def SimiCluster(self, parametres = {}, fromprof = False, tableau = None) :
1138 self.analyse_matrix(DoSimi, parametres = parametres, analyse_type = 'simiclustermatrix', matrix = tableau, dlgnb = 5)
1140 # def OnSimi(self,evt):
1142 #print 'ATTENTION !!!! VERGES'
1143 #print 'PLUS DE BUG SUR SIMI'
1144 # self.res = DoSimi(self, param = None)
1145 #self.res = Verges(self)
1146 # if self.res.val == wx.ID_OK :
1150 #################################################################
1152 def OnHelp(self, event):
1153 webbrowser.open('http://www.iramuteq.org/documentation')
1155 def OnPref(self, event):
1156 dlg = PrefDialog(self)
1157 dlg.CenterOnParent()
1158 self.val = dlg.ShowModal()
1161 if self.check_update:
1164 print 'pas de verif'
1166 #CheckRPackages(self)
1168 def OnOpenFromCmdl(self):
1170 if options.filename :
1171 if os.path.exists(options.filename):
1172 self.filename = os.path.abspath(options.filename)
1176 if os.path.exists(os.path.realpath(args[0])):
1177 self.filename = os.path.abspath(os.path.realpath(args[0]))
1183 if os.path.splitext(self.filename)[1] in ['.csv', '.xls', '.ods']:
1184 self.tableau = Tableau(self, self.filename)
1185 val = get_table_param(self, self.filename)
1186 if val == wx.ID_OK :
1187 self.tableau.make_content()
1188 OpenAnalyse(self, self.tableau.parametres)
1189 self.tree.OnItemAppend(self.tableau.parametres)
1190 #get_table_param(self, self.filename)
1191 #self.tableau.make_content()
1192 #self.tableau.show_tab()
1193 #open_data(self, self.filename)
1194 elif os.path.splitext(self.filename)[1] == '.txt':
1196 elif os.path.splitext(self.filename)[1] == '.ira' :
1197 #self.corpus = Corpus(self)
1198 #self.Text = OpenAnalyse(self, self.filename)
1199 OpenAnalyse(self, self.filename)
1201 print 'ce fichier n\'existe pas'
1205 class IntroPanel(wx.Panel):
1206 def __init__(self, parent):
1207 wx.Panel.__init__(self, parent)
1208 col = randint(0, 255)
1209 col1 = randint(0,255)
1210 col2 = randint(0,255)
1212 bckgrdcolor = wx.Colour(col, col1, col2)
1213 self.SetBackgroundColour(bckgrdcolor)
1214 txtcolour = wx.Colour(250, 250, 250)
1215 linkcolor = wx.Colour(255, 0, 0)
1216 sizer1 = wx.BoxSizer(wx.VERTICAL)
1217 sizer2 = wx.BoxSizer(wx.VERTICAL)
1218 sizer3 = wx.BoxSizer(wx.HORIZONTAL)
1219 sizer4 = wx.BoxSizer(wx.VERTICAL)
1220 sizer5 = wx.BoxSizer(wx.HORIZONTAL)
1221 grid_sizer_1 = wx.FlexGridSizer(1, 4, 0, 0)
1222 grid_sizer_3 = wx.FlexGridSizer(1, 4, 0, 0)
1223 grid_sizer_2 = wx.FlexGridSizer(1, 3, 0, 0)
1224 PanelPres = wx.Panel(self)
1225 PanelPres.SetBackgroundColour(bckgrdcolor)
1226 label_1 = wx.StaticText(self, -1, u"IRaMuTeQ", size=(-1, -1))
1227 label_1.SetFont(wx.Font(46, wx.TELETYPE, wx.NORMAL, wx.BOLD, 0, "Purisa"))
1228 label_1.SetForegroundColour(wx.RED)
1229 label2 = wx.StaticText(PanelPres, -1 , u'\nVersion ' + ConfigGlob.get('DEFAULT', 'version') + '\n')
1230 label2.SetForegroundColour(txtcolour)
1231 label2.SetBackgroundColour(bckgrdcolor)
1232 #label3 = wx.StaticText(PanelPres, -1 , u'Equipe ')
1233 #label3.SetForegroundColour(txtcolour)
1234 #label3.SetBackgroundColour(bckgrdcolor)
1235 self.hyper2 = hl.HyperLinkCtrl(PanelPres, wx.ID_ANY, u"REPERE", URL="http://repere.no-ip.org/")
1236 self.hyper2.SetColours(linkcolor, linkcolor, "RED")
1237 self.hyper2.SetBackgroundColour(bckgrdcolor)
1238 self.hyper2.EnableRollover(True)
1239 self.hyper2.SetUnderlines(False, False, True)
1240 self.hyper2.SetBold(True)
1241 self.hyper2.UpdateLink()
1242 label_lerass = wx.StaticText(PanelPres, -1, u'Laboratoire ')
1243 label_lerass.SetForegroundColour(txtcolour)
1244 label_lerass.SetBackgroundColour(bckgrdcolor)
1245 self.hyper_lerass = hl.HyperLinkCtrl(PanelPres, -1, u'LERASS', URL="http://www.lerass.com")
1246 self.hyper_lerass.SetColours(linkcolor, linkcolor, "RED")
1247 self.hyper_lerass.SetBackgroundColour(bckgrdcolor)
1248 self.hyper_lerass.EnableRollover(True)
1249 self.hyper_lerass.SetUnderlines(False, False, True)
1250 self.hyper_lerass.SetBold(True)
1251 self.hyper_lerass.UpdateLink()
1252 blank = wx.StaticText(PanelPres, -1, u'\n')
1253 blank1 = wx.StaticText(PanelPres, -1, u'\n')
1254 labellicence = wx.StaticText(PanelPres, -1, _(u"License GNU GPL").decode('utf8'))
1255 labellicence.SetForegroundColour(txtcolour)
1256 labellicence.SetBackgroundColour(bckgrdcolor)
1257 labelcopy = wx.StaticText(PanelPres, -1, ConfigGlob.get('DEFAULT', 'copyright'))
1258 labelcopy.SetForegroundColour(txtcolour)
1259 labelcopy.SetBackgroundColour(bckgrdcolor)
1260 python_img = wx.Image(os.path.join(ImagePath,'python-logo.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
1261 r_img = wx.Image(os.path.join(ImagePath,'Rlogo.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
1262 lexique_img = wx.Image(os.path.join(ImagePath,'LexTexte4.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
1263 but_python = wx.BitmapButton(self, -1, python_img)
1264 but_lexique = wx.BitmapButton(self, -1, lexique_img)
1265 but_r = wx.BitmapButton(self, -1, r_img)
1266 self.Bind(wx.EVT_BUTTON, self.OnPython, but_python)
1267 self.Bind(wx.EVT_BUTTON, self.OnLexique, but_lexique)
1268 self.Bind(wx.EVT_BUTTON, self.OnR, but_r)
1271 #grid_sizer_1.Add(label3, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1272 grid_sizer_1.Add(self.hyper2, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1273 grid_sizer_3.Add(label_lerass, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1274 grid_sizer_3.Add(self.hyper_lerass, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1275 sizer4.Add(label_1, 0, wx.ALIGN_CENTER, 5)
1276 sizer2.Add(label2, 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(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1280 sizer2.Add(grid_sizer_3, 0, wx.ALIGN_CENTER, 5)
1281 sizer2.Add(wx.StaticText(PanelPres, -1, u' '), 0, wx.ALIGN_CENTER, 5)
1282 #sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1283 #sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1284 sizer2.Add(grid_sizer_1, 0, wx.ALIGN_CENTER, 5)
1285 sizer2.Add(labellicence, 0, wx.ALIGN_CENTER, 5)
1286 sizer2.Add(labelcopy, 0, wx.ALIGN_CENTER, 5)
1287 sizer1.Add(sizer4, 1, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1288 PanelPres.SetSizer(sizer2)
1289 sizer5.Add(blank, 1, wx.EXPAND | wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 2)
1290 sizer5.Add(PanelPres, 1, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1291 sizer5.Add(blank1, 1, wx.ALIGN_CENTER_HORIZONTAL,2)
1292 grid_sizer_2.Add(but_python, 1, wx.ALIGN_CENTER_HORIZONTAL| wx.ALIGN_CENTER_VERTICAL)
1293 grid_sizer_2.Add(but_lexique, 1,wx.ALIGN_CENTER_HORIZONTAL| wx.ALIGN_CENTER_VERTICAL)
1294 grid_sizer_2.Add(but_r, 1, wx.ALIGN_CENTER_HORIZONTAL| wx.ALIGN_CENTER_VERTICAL)
1296 sizer1.Add(sizer5, 3, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 1)
1297 sizer1.Add(grid_sizer_2, 1, wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL)
1298 self.SetSizer(sizer1)
1301 def OnPython(self,evt):
1302 webbrowser.open('http://www.python.org')
1304 def OnLexique(self,evt):
1305 webbrowser.open('http://www.lexique.org')
1308 webbrowser.open('http://www.r-project.org')
1310 class MySplashScreen(wx.SplashScreen):
1312 bmp = wx.Image(os.path.join(ImagePath, 'splash.png')).ConvertToBitmap()
1313 wx.SplashScreen.__init__(self, bmp,
1314 wx.SPLASH_CENTRE_ON_SCREEN | wx.SPLASH_TIMEOUT,
1316 self.Bind(wx.EVT_CLOSE, self.OnClose)
1317 self.fc = wx.FutureCall(1, self.ShowMain)
1319 def OnClose(self, evt):
1323 if self.fc.IsRunning():
1328 displaySize = wx.DisplaySize()
1329 w = displaySize[0]/1.2
1330 h = displaySize[1]/1.2
1331 frame = IraFrame(None, -1, "IRaMuTeQ " + ConfigGlob.get('DEFAULT', 'version'), size=(w, h))
1335 frame.OnOpenFromCmdl()
1336 # if self.fc.IsRunning():
1338 #wx.CallAfter(frame.ShowTip)
1340 class MyApp(wx.App):
1343 Create and show the splash screen. It will then create and show
1344 the main frame when it is time to do so.
1346 wx.SystemOptions.SetOptionInt("mac.window-plain-transition", 1)
1347 self.SetAppName("Iramuteq")
1348 splash = MySplashScreen()
1356 if __name__ == '__main__':