2 # -*- coding: utf-8 -*-
3 #Author: Pierre Ratinaud
4 #Copyright (c) 2008-2012, Pierre Ratinaud
7 from optparse import OptionParser
8 from wx import BusyCursor
10 parser = OptionParser()
11 parser.add_option("-f", "--file", dest="filename",
12 help="open FILE", metavar="FILE", default=False)
13 (options, args) = parser.parse_args()
21 from random import randint
22 from ConfigParser import ConfigParser, RawConfigParser
26 #------------------------------------
28 import wx.lib.agw.aui as aui
31 import wx.lib.hyperlink as hl
32 #------------------------------------
33 from functions import BugReport, PlaySound, History
34 from checkversion import NewVersion
35 from guifunct import *
36 from tableau import Tableau
37 from dialog import PrefDialog
38 from tabfrequence import Frequences, FreqMultiple
39 from tabchi2 import ChiSquare
40 #from tabstudent import MakeStudent
41 from tabchddist import ChdCluster
42 from tabafcm import DoAFCM
43 from tabchdalc import AnalyseQuest
44 from tabsimi import DoSimi
45 from tabrsimple import InputText
46 from tabverges import Prototypical
47 from tabsplitvar import SplitMatrixFromVar
48 #from textdist import AnalysePam
49 from textstat import Stat
50 from textaslexico import Lexico
51 from textsimi import SimiTxt, SimiFromCluster
52 from textwordcloud import WordCloud, ClusterCloud
53 from textreinert import Reinert
54 #from textcheckcorpus import checkcorpus
55 from openanalyse import OpenAnalyse
56 from corpus import Builder, SubBuilder
57 from checkinstall import CreateIraDirectory, CheckRPath, FindRPAthWin32, FindRPathNix, CheckRPackages, IsNew, UpgradeConf, CopyConf, RLibsAreInstalled
58 from chemins import RscriptsPath, ConstructConfigPath, ConstructDicoPath, ConstructGlobalPath, PathOut
59 from parse_factiva_xml import ImportFactiva
60 from tools import Extract
62 from tree import LeftTree
63 ##########################################################
64 ID_OpenData = wx.NewId()
65 ID_Import = wx.NewId()
66 ID_OpenText = wx.NewId()
67 ID_OnOpenAnalyse = wx.NewId()
70 ID_Student = wx.NewId()
71 ID_CHDSIM = wx.NewId()
72 ID_CHDReinert = wx.NewId()
73 ID_TEXTAFCM = wx.NewId()
74 ID_TEXTSTAT = wx.NewId()
76 ID_TEXTREINERT = wx.NewId()
77 ID_TEXTPAM = wx.NewId()
78 ID_CHECKCORPUS = wx.NewId()
79 ID_Tabcontent = wx.NewId()
82 ID_CloseTab = wx.NewId()
83 ID_SaveTab = wx.NewId()
84 ID_CreateText = wx.NewId()
85 ID_ACCEUIL = wx.NewId()
86 ID_RESULT = wx.NewId()
87 ID_VIEWDATA = wx.NewId()
88 ID_HTMLcontent = wx.NewId()
89 ID_SimiTxt = wx.NewId()
91 ID_ImportTXM = wx.NewId()
92 ID_FreqMulti = wx.NewId()
93 ID_Splitfromvar = wx.NewId()
94 ID_Subtxtfrommeta = wx.NewId()
95 ID_Subtxtfromthem = wx.NewId()
97 ##########################################################
98 #elements de configuration
99 ##########################################################
101 if sys.platform == 'darwin' :
102 sys.setdefaultencoding('UTF-8')
103 wx.SetDefaultPyEncoding('UTF-8')
105 sys.setdefaultencoding(locale.getpreferredencoding())
107 #chemin de l'application
108 AppliPath = os.path.abspath(os.path.dirname(os.path.realpath(sys.argv[0])))
110 ImagePath = os.path.join(AppliPath, 'images')
111 #configuration generale
112 DictConfigPath = ConstructGlobalPath(AppliPath)
113 ConfigGlob = ConfigParser()
114 ConfigGlob.read(DictConfigPath['global'])
115 DefaultConf = ConfigParser()
116 DefaultConf.read(DictConfigPath['preferences'])
117 #repertoire de l'utilisateur
118 if os.getenv('HOME') != None:
119 user_home = os.getenv('HOME')
121 user_home = os.getenv('HOMEPATH')
122 UserConfigPath = os.path.abspath(os.path.join(user_home, '.iramuteq'))
123 #Si pas de fichiers de config utilisateur, on cree le repertoire
124 CreateIraDirectory(UserConfigPath, AppliPath)
125 #fichiers log pour windows (py2exe)
126 log = logging.getLogger('iramuteq')
127 fh = logging.FileHandler(os.path.join(UserConfigPath,'stdout.log'))
128 formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
129 fh.setFormatter(formatter)
131 if sys.platform != 'win32' and sys.platform != 'darwin':
132 ch = logging.StreamHandler()
133 ch.setFormatter(formatter)
135 log.setLevel(logging.INFO)
137 class writer(object):
138 def write(self, data):
139 if data.strip() != '' :
140 log.info('ERROR : %s' % data)
142 class printer(object) :
143 def write(self, data) :
144 if data.strip() != '' :
145 log.info('Print : %s' % data)
147 sys.stderr = writer()
148 sys.stdout = printer()
150 ConfigPath = ConstructConfigPath(UserConfigPath)
152 langues = {'french' : wx.LANGUAGE_FRENCH,
153 'english' : wx.LANGUAGE_ENGLISH,
154 'portuguese' : wx.LANGUAGE_PORTUGUESE,
155 'italian' : wx.LANGUAGE_ITALIAN,
156 'spanish' : wx.LANGUAGE_SPANISH
159 code_langues = {'french' : 'fr_FR',
161 'portuguese' : 'pt_PT',
167 'textroot' : 'textroot.png',
168 'alceste' : 'reinert.png',
169 'corpus' : 'textcorpus.png',
170 'wordcloud' :'wordcloud.png',
172 'simitxt' : 'simitxt.png',
173 'clustersimitxt' :'clustersimitxt.png',
174 'clustercloud' : 'clustercloud.png',
176 'matroot' : 'matroot.png',
177 'matrix' : 'matrix.png',
178 'freq' : 'frequences.png',
179 'freqmulti' : 'frequences.png',
181 'reinertmatrix' : 'reinertmatrix.png',
182 'simimatrix' : 'simimatrix.png',
183 'simiclustermatrix' : 'simimatrix.png',
184 'proto' : 'proto.png',
186 #####################################################################
188 class IraFrame(wx.Frame):
189 def __init__(self, parent, id= -1, title="", pos=wx.DefaultPosition,
190 size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE |
193 log.info('Starting...')
194 wx.Frame.__init__(self, parent, id, title, pos, size, style)
196 self.AppliPath = AppliPath
197 self.images_path = os.path.join(AppliPath,'images')
198 self.UserConfigPath = UserConfigPath
199 #self.RscriptsPath = ConstructRscriptsPath(AppliPath)
200 self.RscriptsPath = PathOut(dirout=os.path.join(AppliPath, 'Rscripts'))
201 self.RscriptsPath.basefiles(RscriptsPath)
202 #self.DictPath = ConstructDicoPath(AppliPath)
203 self.DictPath = ConstructDicoPath(UserConfigPath)
204 self.ConfigGlob = ConfigGlob
205 self.ConfigPath = ConstructConfigPath(UserConfigPath)
206 self.pref = RawConfigParser()
207 #workaround for import problem
208 self.SimiFromCluster = SimiFromCluster
210 gettext.install('iramuteq', os.path.join(AppliPath,'locale'), unicode=True)
211 #langues = ['fr_FR', 'en', 'pt_PT']
215 for langue in code_langues :
216 self.preslangue[langue] = gettext.translation("iramuteq", os.path.join(AppliPath,'locale'), languages=[code_langues[langue]])
218 #self.presLan_fr = gettext.translation("iramuteq", os.path.join(AppliPath,'locale'), languages=['fr_FR'])
219 #self.presLan_en = gettext.translation("iramuteq", os.path.join(AppliPath,'locale'), languages=['en'])
220 # tell FrameManager to manage this frame
221 #self._mgr = wx.aui.AuiManager()
222 self._mgr = aui.AuiManager()
223 self._mgr.SetManagedWindow(self)
226 #--------------------------------------------------------------------------------
227 self.images_analyses = images_analyses
228 for img in images_analyses :
229 self.images_analyses[img] = wx.Image(os.path.join(self.images_path, self.images_analyses[img]), wx.BITMAP_TYPE_PNG).Scale(16,16).ConvertToBitmap()
230 self.mb = wx.MenuBar()
232 file_menu = wx.Menu()
233 item = wx.MenuItem(file_menu, ID_OpenData, _(u"Open a matrix").decode('utf8'), _(u"Open a matrix").decode('utf8'))
234 #item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN))
235 item.SetBitmap(self.images_analyses['matroot'])
236 file_menu.AppendItem(item)
238 item = wx.MenuItem(file_menu, ID_OpenText, _(u"Open a text corpus").decode('utf8'), _(u"Open a text corpus").decode('utf8'))
239 item.SetBitmap(self.images_analyses['textroot'])
240 file_menu.AppendItem(item)
242 item = wx.MenuItem(file_menu, ID_OnOpenAnalyse, _(u"Open an analysis").decode('utf8'), _(u"Open an analysis").decode('utf8'))
243 item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN))
244 file_menu.AppendItem(item)
247 menuFactiva = wx.Menu()
248 fact_from_xml = wx.MenuItem(menuFactiva, wx.ID_ANY, _(u"from xml").decode('utf8'))
249 fact_from_mail = wx.MenuItem(menuFactiva, wx.ID_ANY, _(u"from mail").decode('utf8'))
250 fact_from_txt = wx.MenuItem(menuFactiva, wx.ID_ANY, _(u"from copy/paste").decode('utf8'))
251 menuFactiva.AppendItem(fact_from_xml)
252 menuFactiva.AppendItem(fact_from_mail)
253 menuFactiva.AppendItem(fact_from_txt)
254 file_menu.AppendMenu(-1, _(u"Import from factiva").decode('utf8'), menuFactiva)
256 item = wx.MenuItem(file_menu, ID_ImportTXM, _(u"Import from TXM").decode('utf8'), _(u"Import from TXM").decode('utf8'))
257 item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN))
258 file_menu.AppendItem(item)
260 menuTools = wx.Menu()
261 splitvar = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Split from variable").decode('utf8'))
262 extractmod = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Extract mods").decode('utf8'))
263 extractthem = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Extract thematics").decode('utf8'))
264 menuTools.AppendItem(splitvar)
265 menuTools.AppendItem(extractmod)
266 menuTools.AppendItem(extractthem)
267 self.ID_splitvar = splitvar.GetId()
268 self.ID_extractmod = extractmod.GetId()
269 self.ID_extractthem = extractthem.GetId()
270 file_menu.AppendMenu(-1, _(u"Tools").decode('utf8'), menuTools)
273 #item = wx.MenuItem(file_menu, ID_SaveTab, _(u"Save tab as...").decode('utf8'), _(u"Save tab as...").decode('utf8'))
274 #item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_SAVE_AS))
275 #file_menu.AppendItem(item)
277 file_menu.Append(wx.ID_EXIT, _(u"Exit").decode('utf8'))
279 edit_menu = wx.Menu()
280 edit_menu.Append(wx.ID_PREFERENCES, _(u'Preferences').decode('utf8'))
282 view_menu = wx.Menu()
283 view_menu.Append(ID_ACCEUIL, _(u"Home page").decode('utf8'))
284 view_menu.Append(ID_VIEWDATA, _(u"Show data").decode('utf8'))
285 view_menu.Append(ID_RESULT, _(u'Show results').decode('utf8'))
286 #view_menu.AppendSeparator()
287 matrix_menu = wx.Menu()
288 matanalyses = [[ID_Freq, _(u"Frequencies").decode('utf8'), 'freq'],
289 [ID_Freq, _(u"Multiple Frequencies").decode('utf8'), 'freqmulti'],
290 [ID_Chi2, _(u"Chi2").decode('utf8'), 'chi2'],
291 {'name' : _(u"Clustering").decode('utf8'),
292 'content' : [[ID_CHDReinert, _(u"Reinert's Method").decode('utf8'), 'reinertmatrix']]},
293 [ID_SIMI, _(u"Similarities Analysis").decode('utf8'), 'simimatrix'],
294 [ID_proto, _(u"Prototypical Analysis").decode('utf8'), 'proto'],
295 [ID_Splitfromvar, _(u"Split from variable").decode('utf8'), '']]
297 for analyse in matanalyses :
298 if not isinstance(analyse, dict) :
299 item = wx.MenuItem(matrix_menu, analyse[0], analyse[1])
300 item.SetBitmap(self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16)))
301 matrix_menu.AppendItem(item)
304 for subana in analyse['content'] :
305 item = wx.MenuItem(nmenu, subana[0], subana[1])
306 item.SetBitmap(self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)))
307 nmenu.AppendItem(item)
308 matrix_menu.AppendMenu(-1, analyse['name'], nmenu)
309 #item = wx.MenuItem(matrix_menu, ID_Freq, _(u"Frequencies").decode('utf8'))
310 #item.SetBitmap(self.images_analyses['freq'])
311 #matrix_menu.AppendItem(item)
312 #matrix_menu.Append(ID_Freq, _(u"Frequencies").decode('utf8'))
313 #item = wx.MenuItem(matrix_menu, ID_Freq, _(u"Multiple Frequencies").decode('utf8'))
314 #item.SetBitmap(self.images_analyses['freqmulti'])
315 #matrix_menu.Append(ID_FreqMulti, _(u'Multiple frequencies').decode('utf8'))
316 #matrix_menu.AppendItem(item)
317 #matrix_menu.Append(ID_Chi2, _(u"Chi2").decode('utf8'))
318 #matrix_menu.Append(ID_Student, u"t de Student")
319 #menu_classif = wx.Menu()
320 #menu_classif.Append(ID_CHDReinert, _(u"Reinert's Method").decode('utf8'))
321 #menu_classif.Append(ID_CHDSIM, u"Par matrice des distances")
322 #matrix_menu.AppendMenu(-1, _(u"Clustering").decode('utf8'), menu_classif)
323 #matrix_menu.Append(ID_AFCM, u"AFCM")
324 #matrix_menu.Append(ID_SIMI, _(u"Similarities Analysis").decode('utf8'))
325 #matrix_menu.Append(ID_proto, _(u"Prototypical Analysis").decode('utf8'))
326 ID_RCODE = wx.NewId()
327 #matrix_menu.Append(ID_RCODE, u"Code R...")
328 #menu_splittab = wx.Menu()
329 #ID_SPLITVAR = wx.NewId()
330 #splitvar = wx.MenuItem(menu_splittab, ID_SPLITVAR, _(u"Split from variable").decode('utf8'))
331 #menu_splittab.AppendItem(splitvar)
332 #matrix_menu.AppendMenu(-1, _(u"Split matrix").decode('utf8'), menu_splittab)
333 self.matrix_menu = matrix_menu
335 text_menu = wx.Menu()
336 analyses_text = [[ID_TEXTSTAT, _(u"Statistics").decode('utf8'), 'stat'],
337 [ID_ASLEX, _(u"Specificities and CA").decode('utf8'), 'spec'],
338 {'name' : _(u"Clustering").decode('utf8'),
339 'content' : [[ID_TEXTREINERT, _(u"Reinert's Method").decode('utf8'), 'alceste']]},
340 [ID_SimiTxt, _(u"Similarities Analysis").decode('utf8'), 'simitxt'],
341 [ID_WC, _(u"WordCloud").decode('utf8'), 'wordcloud'],
342 {'name' : _(u"Sub corpus").decode('utf8'),
343 'content' : [[ID_Subtxtfrommeta, _(u'Sub corpus from metadata').decode('utf8'), None],
344 [ID_Subtxtfromthem, _(u'Sub corpus from thematic').decode('utf8'), None]]},
347 for analyse in analyses_text :
348 if not isinstance(analyse, dict) :
349 item = wx.MenuItem(text_menu, analyse[0], analyse[1])
350 item.SetBitmap(self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16)))
351 text_menu.AppendItem(item)
354 for subana in analyse['content'] :
355 item = wx.MenuItem(nmenu, subana[0], subana[1])
356 item.SetBitmap(self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)))
357 nmenu.AppendItem(item)
358 text_menu.AppendMenu(-1, analyse['name'], nmenu)
359 #text_menu.Append(ID_CHECKCORPUS, u"Vérifier le corpus")
360 # text_menu.Append(ID_TEXTSTAT, _(u"Statistics").decode('utf8'))
361 # text_menu.Append(ID_ASLEX, _(u"Specificities and CA").decode('utf8'))
362 # #text_menu.Append(ID_TEXTAFCM, u"AFC sur UCI / Vocabulaire")
363 # menu_classiftxt = wx.Menu()
364 # menu_classiftxt.Append(ID_TEXTREINERT, _(u"Reinert's Method").decode('utf8'))
365 # #menu_classiftxt.Append(ID_TEXTPAM, u"Par matrice des distances")
366 # text_menu.AppendMenu(-1, _(u"Clustering").decode('utf8'), menu_classiftxt)
367 # text_menu.Append(ID_SimiTxt, _(u"Similarities Analysis").decode('utf8'))
369 # text_menu.Append(ID_WC, _(u"WordCloud").decode('utf8'))
370 self.text_menu = text_menu
372 help_menu = wx.Menu()
373 help_menu.Append(wx.ID_ABOUT, _(u"About...").decode('utf8'))
374 help_menu.Append(wx.ID_HELP, _(u"Online help...").decode('utf8'))
376 self.mb.Append(file_menu, _(u"File").decode('utf8'))
377 self.mb.Append(edit_menu, _(u"Edition").decode('utf8'))
378 self.mb.Append(view_menu, _(u"View").decode('utf8'))
379 self.mb.Append(matrix_menu, _(u"Matrix analysis").decode('utf8'))
380 self.mb.Append(text_menu, _(u"Text analysis").decode('utf8'))
381 self.mb.Append(help_menu, _(u"Help").decode('utf8'))
383 self.SetMenuBar(self.mb)
384 #--------------------------------------------------------------------
385 self.statusbar = self.CreateStatusBar(2, wx.ST_SIZEGRIP)
386 self.statusbar.SetStatusWidths([-2, -3])
387 self.statusbar.SetStatusText(_(u"Ready").decode('utf8'), 0)
388 self.statusbar.SetStatusText(_(u"Welcome").decode('utf8'), 1)
390 # min size for the frame itself isn't completely done.
391 # see the end up FrameManager::Update() for the test
392 # code. For now, just hard code a frame minimum size
393 self.SetMinSize(wx.Size(400, 400))
395 # create some toolbars
396 tb1 = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
397 wx.TB_FLAT | wx.TB_NODIVIDER)
398 tb1.SetToolBitmapSize(wx.Size(16, 16))
399 tb1.AddLabelTool(ID_OpenData, "OpenData", self.images_analyses['matroot'], shortHelp=_(u"Matrix").decode('utf8'), longHelp=_(u"Open a matrix").decode('utf8'))
401 tb1.AddLabelTool(ID_OpenText, "OpenText", self.images_analyses['textroot'], shortHelp=_(u"Text").decode('utf8'), longHelp=_(u"Open a text corpus").decode('utf8'))
405 tb_text = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
406 wx.TB_FLAT | wx.TB_NODIVIDER)
407 for analyse in analyses_text :
408 if not isinstance(analyse, dict) :
409 tb_text.AddLabelTool(analyse[0], analyse[1], self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16)), shortHelp = analyse[1], longHelp = analyse[1])
411 for subana in analyse['content'] :
412 tb_text.AddLabelTool(subana[0], subana[1], self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)), shortHelp = subana[1], longHelp = subana[1])
415 tb_mat = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
416 wx.TB_FLAT | wx.TB_NODIVIDER)
417 for analyse in matanalyses :
418 if not isinstance(analyse, dict) :
419 tb_mat.AddLabelTool(analyse[0], analyse[1], self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16)), shortHelp = analyse[1], longHelp = analyse[1])
421 for subana in analyse['content'] :
422 tb_mat.AddLabelTool(subana[0], subana[1], self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)), shortHelp = subana[1], longHelp = subana[1])
424 #------------------------------------------------------------------------------------------------
426 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)
428 #self._mgr.AddPane(self.text_ctrl_txt, wx.aui.AuiPaneInfo().
429 # Name("Text").CenterPane())
430 self._mgr.AddPane(self.text_ctrl_txt, aui.AuiPaneInfo().
431 Name("Text").CenterPane())
432 #self._mgr.AddPane(IntroPanel(self), wx.aui.AuiPaneInfo().Name("Intro_Text").
434 self._mgr.AddPane(IntroPanel(self), aui.AuiPaneInfo().Name("Intro_Text").
436 #if not os.path.exists(os.path.join(UserConfigPath, 'history.db')) :
437 # with open(os.path.join(UserConfigPath, 'history.db'), 'w') as f :
439 self.history = History(os.path.join(UserConfigPath, 'history.db'))
440 self.tree = LeftTree(self)
441 self._mgr.AddPane(self.tree, aui.AuiPaneInfo().Name("lefttree").Caption(_(u"Historic").decode('utf8')).
442 Left().MinSize(wx.Size(200,500)).Layer(1).Position(1).CloseButton(False).MaximizeButton(True).
443 MinimizeButton(True))
445 #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)
446 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)
447 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
448 self.nb.SetAGWWindowStyleFlag(notebook_flags)
449 self.nb.SetArtProvider(aui.ChromeTabArt())
450 #self.nb.SetArtProvider(aui.VC8TabArt())
451 #self.nb.parent = self
452 #self._notebook_style = aui.AUI_NB_DEFAULT_STYLE | aui.AUI_NB_TAB_EXTERNAL_MOVE | wx.NO_BORDER
453 #self._mgr.AddPane(self.nb, wx.aui.AuiPaneInfo().
454 # Name("Tab_content").
456 self._mgr.AddPane(self.nb, aui.AuiPaneInfo().
460 #self._mgr.AddPane(self.Sheet, wx.aui.AuiPaneInfo().Name("Data").CenterPane())
461 #self._mgr.AddPane(self.Sheet, aui.AuiPaneInfo().Name("Data").CenterPane())
462 self.nb.Bind(aui.EVT_AUINOTEBOOK_PAGE_CLOSE, self.OnCloseTab)
463 self.nb.Bind(aui.EVT_AUINOTEBOOK_PAGE_CHANGED, self.OnPageChanged)
464 # add the toolbars to the manager
466 #self._mgr.AddPane(tb1, wx.aui.AuiPaneInfo().
467 # Name("tb1").Caption("Fichiers").
468 # ToolbarPane().Top().
469 # LeftDockable(False).RightDockable(False))
470 self._mgr.AddPane(tb1, aui.AuiPaneInfo().
471 Name("tb1").Caption("Fichiers").
473 LeftDockable(True).RightDockable(False))
475 self._mgr.AddPane(tb_text, aui.AuiPaneInfo().
476 Name("tb_text").Caption("analyse_text").
478 LeftDockable(True).RightDockable(False))
480 self._mgr.AddPane(tb_mat, aui.AuiPaneInfo().
481 Name("tb_mat").Caption("analyse_matrix").
483 LeftDockable(True).RightDockable(False))
485 self._mgr.GetPane('tb_text').Hide()
486 self._mgr.GetPane('tb_mat').Hide()
488 self.ShowAPane("Intro_Text")
489 self._mgr.GetPane("lefttree").Show()
490 self._mgr.GetPane("classif_tb").Hide()
491 # "commit" all changes made to FrameManager
494 # Show How To Use The Closing Panes Event
495 ##################################################################
496 self.Bind(wx.EVT_MENU, self.OnAcceuil, id=ID_ACCEUIL)
497 self.Bind(wx.EVT_MENU, self.OnViewData, id=ID_VIEWDATA)
498 self.Bind(wx.EVT_MENU, self.ShowTab, id=ID_RESULT)
499 self.Bind(wx.EVT_MENU, self.OnOpenData, id=ID_OpenData)
500 self.Bind(wx.EVT_MENU, self.OnOpenText, id=ID_OpenText)
501 self.Bind(wx.EVT_MENU, self.OnOpenAnalyse, id=ID_OnOpenAnalyse)
502 self.Bind(wx.EVT_MENU, self.import_factiva_xml, fact_from_xml)
503 self.Bind(wx.EVT_MENU, self.import_factiva_mail, fact_from_mail)
504 self.Bind(wx.EVT_MENU, self.import_factiva_txt, fact_from_txt)
505 self.Bind(wx.EVT_MENU, self.ExtractTools, splitvar)
506 self.Bind(wx.EVT_MENU, self.ExtractTools, extractmod)
507 self.Bind(wx.EVT_MENU, self.ExtractTools, extractthem)
508 self.Bind(wx.EVT_MENU, self.OnFreq, id=ID_Freq)
509 self.Bind(wx.EVT_MENU, self.OnFreqMulti, id=ID_FreqMulti)
510 self.Bind(wx.EVT_MENU, self.OnChi2, id=ID_Chi2)
511 self.Bind(wx.EVT_MENU, self.OnStudent, id=ID_Student)
512 self.Bind(wx.EVT_MENU, self.OnCHDSIM, id=ID_CHDSIM)
513 self.Bind(wx.EVT_MENU, self.OnCHDReinert, id=ID_CHDReinert)
514 self.Bind(wx.EVT_MENU, self.OnAFCM, id=ID_AFCM)
515 self.Bind(wx.EVT_MENU, self.OnProto, id=ID_proto)
516 self.Bind(wx.EVT_MENU, self.OnSplitVar, id = ID_Splitfromvar)
517 #self.Bind(wx.EVT_MENU, self.OnRCode, id=ID_RCODE)
518 #self.Bind(wx.EVT_MENU, self.OnSplitVar, id=ID_SPLITVAR)
519 #self.Bind(wx.EVT_MENU, self.OnCheckcorpus, id = ID_CHECKCORPUS)
520 self.Bind(wx.EVT_MENU, self.OnTextStat, id=ID_TEXTSTAT)
521 self.Bind(wx.EVT_MENU, self.OnTextSpec, id=ID_ASLEX)
522 self.Bind(wx.EVT_MENU, self.OnTextAfcm, id=ID_TEXTAFCM)
523 self.Bind(wx.EVT_MENU, self.OnTextReinert, id=ID_TEXTREINERT)
524 self.Bind(wx.EVT_MENU, self.OnPamSimple, id=ID_TEXTPAM)
525 self.Bind(wx.EVT_MENU, self.OnSimiTxt, id=ID_SimiTxt)
526 self.Bind(wx.EVT_MENU, self.OnWordCloud, id=ID_WC)
527 self.Bind(wx.EVT_MENU, self.OnSubText, id = ID_Subtxtfrommeta)
528 self.Bind(wx.EVT_MENU, self.OnSubText, id = ID_Subtxtfromthem)
529 self.Bind(wx.EVT_MENU, self.OnSimiTab, id=ID_SIMI)
530 self.Bind(wx.EVT_MENU, self.OnExit, id=wx.ID_EXIT)
531 #self.Bind(wx.EVT_MENU, self.OnSaveTabAs, id=ID_SaveTab)
532 self.Bind(wx.EVT_MENU, self.OnAbout, id=wx.ID_ABOUT)
533 self.Bind(wx.EVT_MENU, self.OnHelp, id=wx.ID_HELP)
534 self.Bind(wx.EVT_MENU, self.OnPref, id=wx.ID_PREFERENCES)
535 self.Bind(wx.EVT_MENU, self.OnImportTXM, id=ID_ImportTXM)
536 self.Bind(wx.EVT_CLOSE, self.OnClose)
537 ##################################################################
538 flags = self._mgr.GetAGWFlags()
539 #flags &= ~wx.aui.AUI_MGR_TRANSPARENT_HINT
540 #flags &= ~wx.aui.AUI_MGR_VENETIAN_BLINDS_HINT
541 #flags &= ~wx.aui.AUI_MGR_RECTANGLE_HINT
542 flags &= ~(aui.AUI_MGR_RECTANGLE_HINT | aui.AUI_MGR_ALLOW_FLOATING)
543 self._mgr.SetAGWFlags(self._mgr.GetAGWFlags() ^ (aui.AUI_MGR_RECTANGLE_HINT | aui.AUI_MGR_ALLOW_FLOATING))
544 self._mgr.GetArtProvider().SetMetric(aui.AUI_DOCKART_GRADIENT_TYPE, aui.AUI_GRADIENT_HORIZONTAL)
545 self.GetDockArt().SetColor(aui.AUI_DOCKART_ACTIVE_CAPTION_GRADIENT_COLOUR, "#00FFF9")
548 self._icon = wx.Icon(os.path.join(ImagePath, "iraicone.ico"), wx.BITMAP_TYPE_ICO)
549 self.SetIcon(self._icon)
550 ##########################
552 self.input_path = [False]
553 self.TEMPDIR = tempfile.mkdtemp('iramuteq')
554 self.FileTabList = []
560 self.g_header = False
567 self.SysEncoding = sys.getdefaultencoding()
568 self.syscoding = sys.getdefaultencoding()
569 #print 'SysEncoding',self.SysEncoding
570 if self.SysEncoding == 'mac-roman' : self.SysEncoding = 'MacRoman'
573 ##############################################################@
574 self.DisEnSaveTabAs(False)
575 self.ShowMenu('view', False)
576 self.ShowMenu('matrix', False)
577 self.ShowMenu('text', False)
588 def finish_init(self) :
590 self.pref.read(self.ConfigPath['preferences'])
593 self.pref.read(self.ConfigPath['preferences'])
600 self.pref.read(self.ConfigPath['preferences'])
602 self.sound = self.pref.getboolean('iramuteq', 'sound')
603 self.check_update = self.pref.getboolean('iramuteq', 'checkupdate')
604 self.version = ConfigGlob.get('DEFAULT', 'version')
605 #configuration des chemins de R
606 self.PathPath = ConfigParser()
607 self.PathPath.read(ConfigPath['path'])
609 if not CheckRPath(self.PathPath) :
610 if sys.platform == 'win32':
611 BestRPath = FindRPAthWin32()
613 BestRPath = FindRPathNix()
615 self.PathPath.set('PATHS', 'rpath', BestRPath)
616 with open(ConfigPath['path'], 'w') as f :
617 self.PathPath.write(f)
621 self.RPath = self.PathPath.get('PATHS', 'rpath')
624 if not RLibsAreInstalled(self) :
627 msg = '\n'.join([_(u"Can't find R executable"), _(u"If R is not installed, get it from http://www.r-project.org."),
628 _(u"If R is installed, report its path in Preferences."),
629 _(u"IRaMuTeQ does not work without R.")])
631 #Le chemin de l'executable de R n'a pas été trouvé.
632 #Si R n'est pas installé, vous devez l'installer (http://www.r-project.org/).
633 #Si R n'est pas installé dans le répertoire par défaut
634 #(souvent C:\Program Files\R\R-2.x.x\R.exe sous windows ou /usr/bin/R sous linux ou Mac Os X)
635 #vous devez signaler le chemin de l'éxecutable de R dans les préférences."""
636 dlg = wx.MessageDialog(self, msg, u"Problème de configuration", wx.OK | wx.NO_DEFAULT | wx.ICON_WARNING)
638 if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
642 def setlangue(self) :
643 self.pref.read(self.ConfigPath['preferences'])
645 guilangue = self.pref.get('iramuteq', 'guilanguage')
647 guilangue = DefaultConf.get('iramuteq', 'guilanguage')
648 self.preslangue.get(guilangue, 'english').install()
650 def OnVerif(self, evt) :
651 pack = CheckRPackages(self)
653 dlg = wx.MessageDialog(self, _(u"Installation OK").decode('utf8'), _(u"Installation").decode('utf8'), wx.OK | wx.ICON_INFORMATION | wx.STAY_ON_TOP)
655 if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
658 def DisEnSaveTabAs(self, DISEN):
660 file_menu = self.mb.GetMenu(0)
661 items = file_menu.GetMenuItems()
663 if item.GetId() == ID_SaveTab :
666 def ShowMenu(self, menu, Show=True):
670 self._mgr.GetPane('tb_text').Show()
672 self._mgr.GetPane('tb_text').Hide()
673 elif menu == 'matrix' :
676 self._mgr.GetPane('tb_mat').Show()
678 self._mgr.GetPane('tb_mat').Hide()
679 elif menu == 'view' :
684 #menu_pos = self.mb.FindMenu(menu)
685 if not menu_pos is None :
686 self.mb.EnableTop(menu_pos, Show)
687 self.mb.UpdateMenus()
690 #--------------------------------------------------------------------
691 def OnClose(self, event):
693 with open(self.ConfigPath['path'], 'w') as f :
694 self.PathPath.write(f)
699 def OnOpenData(self, event):
700 inputname, self.input_path = OnOpen(self, "Data")
702 #filename = self.input_path[0]
703 self.tableau = Tableau(self,os.path.abspath(self.input_path[0]))
704 val = get_table_param(self, self.input_path[0])
706 busy = wx.BusyInfo(_("Please wait...").decode('utf8'), self)
709 self.tableau.make_content()
710 OpenAnalyse(self, self.tableau.parametres)
711 self.tree.OnItemAppend(self.tableau.parametres)
716 #self.tableau.show_tab()
718 def OnOpenAnalyse(self, event):
719 self.AnalysePath = OnOpen(self, "Analyse")
720 OpenAnalyse(self, self.AnalysePath[1][0], True)
721 self.ShowMenu('view')
723 def OnOpenText(self, event):
724 inputname, self.input_path = OnOpen(self, "Texte")
725 self.filename = self.input_path[0]
729 def OnViewData(self, event):
730 if self.type == "Data":
731 if not self.DataPop :
732 self.Sheet.Populate(self.content)
735 self.ShowAPane(u"Data")
736 elif self.type == "Texte" or self.type == 'Analyse' :
737 if not self.DataTxt :
738 self.text_ctrl_txt.Clear()
739 self.text_ctrl_txt.write(self.content)
740 self.text_ctrl_txt.ShowPosition(0)
743 self.ShowAPane(u"Text")
746 def OnSubText(self, evt, corpus = None, parametres = None):
748 corpus = self.tree.getcorpus()
749 if evt.GetId() == ID_Subtxtfrommeta :
750 parametres = {'frommeta' : True}
751 elif evt.GetId() == ID_Subtxtfromthem :
752 parametres = {'fromtheme' : True}
753 builder = SubBuilder(self, corpus, parametres)
754 if builder.res == wx.ID_OK :
755 busy = wx.BusyInfo(_("Please wait...").decode('utf8'), self)
757 corpus = builder.doanalyse()
758 self.history.add(corpus.parametres)
759 self.tree.OnItemAppend(corpus.parametres)
760 OpenAnalyse(self, corpus.parametres)
764 dlg = wx.ProgressDialog("Ouverture...",
765 "Veuillez patienter...",
768 style=wx.PD_APP_MODAL | wx.PD_AUTO_HIDE | wx.PD_ELAPSED_TIME | wx.PD_CAN_ABORT
771 builder = Builder(self, dlg)
772 if builder.res == wx.ID_OK :
774 corpus = builder.doanalyse()
775 self.history.add(corpus.parametres)
776 self.tree.OnItemAppend(corpus.parametres)
777 OpenAnalyse(self, corpus.parametres)
783 keepGoing = dlg.Update(count, u"Lecture du fichier")
784 self.ShowMenu('view')
785 self.ShowMenu('text')
786 self.ShowMenu('matrix', False)
791 keepGoing = dlg.Update(count, u"Chargement du dictionnaire")
793 #self.OnViewData(wx.EVT_BUTTON)
795 def OnExit(self, event):
798 def OnAbout(self, event):
799 info = wx.AboutDialogInfo()
800 info.Name = ConfigGlob.get('DEFAULT', 'name')
801 info.Version = ConfigGlob.get('DEFAULT', 'version')
802 info.Copyright = ConfigGlob.get('DEFAULT', 'copyright')
803 info.Description = u"""
804 Interface de R pour les Analyses Multidimensionnelles
805 de Textes et de Questionnaires
808 construit avec des logiciels libres.
814 info.WebSite = ("http://www.iramuteq.org", u"Site web IRaMuTeQ")
815 dev = ConfigGlob.get('DEFAULT', 'dev').decode('utf8').split(';')
816 info.Developers = dev
817 info.License = u"""Iramuteq est un logiciel libre ; vous pouvez le diffuser et/ou le modifier
818 suivant les termes de la Licence Publique Générale GNU telle que publiée
819 par la Free Software Foundation ; soit la version 2 de cette licence,
820 soit (à votre convenance) une version ultérieure.
822 Iramuteq est diffusé dans l'espoir qu'il sera utile,
823 mais SANS AUCUNE GARANTIE ; sans même une garantie implicite
824 de COMMERCIALISATION ou d'ADÉQUATION À UN USAGE PARTICULIER.
825 Voyez la Licence Publique Générale GNU pour plus de détails.
827 Vous devriez avoir reçu une copie de la Licence Publique Générale GNU
828 avec Iramuteq ; sinon, veuillez écrire à la Free Software Foundation,
829 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
832 def GetDockArt(self):
833 return self._mgr.GetArtProvider()
838 def OnPageChanged(self, event) :
839 new = event.GetSelection()
840 nobject = event.GetEventObject()
841 parent = nobject.GetParent()
842 if isinstance(parent, IraFrame) :
843 npage = self.nb.GetPage(new)
844 if 'parametres' in dir(npage) :
845 self.tree.GiveFocus(uuid=npage.parametres['uuid'])
846 if npage.parametres.get('matrix', False) :
847 self.ShowMenu('text', False)
848 self.ShowMenu('matrix', True)
849 elif npage.parametres.get('corpus', False) :
850 self.ShowMenu('text')
851 self.ShowMenu('matrix', False)
853 def OnCloseTab(self, evt):
854 #log.info('Closing tab %s' % str(evt.GetEventObject()))
855 ctrl = evt.GetEventObject()
856 if isinstance(ctrl.GetParent(), aui.AuiNotebook) or isinstance(ctrl.GetParent(), wx.Panel):
860 page = self.nb.GetPage(self.nb.GetSelection())
861 if 'parametres' in dir(page) and isinstance(ctrl.GetParent(), IraFrame) :
862 self.history.rmtab(page.parametres)
863 self.tree.CloseItem(uuid = page.parametres['uuid'])
864 TabTitle = self.nb.GetPageText(self.nb.GetSelection())
866 if self.nb.GetPageCount() == 1 and not notebook :
869 def LastTabClose(self) :
870 if self.nb.GetPageCount() == 1 :
871 #self.DisEnSaveTabAs(False)
873 self.ShowAPane("Text")
875 self.ShowAPane("Data")
877 self.ShowAPane("Intro_Text")
879 def GetStartPosition(self):
883 pt = self.ClientToScreen(wx.Point(0, 0))
885 return wx.Point(pt.x + x, pt.y + x)
887 def ShowAPane(self, panel):
888 for pane in self._mgr.GetAllPanes() :
889 if not pane.IsToolbar() and pane.name != 'lefttree':
891 self._mgr.GetPane(panel).Show()
894 def OnAcceuil(self, event):
895 self.ShowAPane(u"Intro_Text")
898 def CreateHTMLCtrl(self):
899 ctrl = wx.html.HtmlWindow(self, -1, wx.DefaultPosition, wx.Size(400, 300))
900 if "gtk2" in wx.PlatformInfo:
901 ctrl.SetStandardFonts()
902 ctrl.SetPage(u"text")
905 def ShowTab(self, evt):
906 self.ShowAPane("Tab_content")
908 ################################################################
910 ################################################################
911 def analyse_matrix(self, analyse, analyse_type = '', matrix = None, parametres = None, dlgnb = 1):
913 matrix = self.tree.getmatrix()
914 if parametres is not None :
915 parametres['type'] = analyse_type
917 parametres = {'type' : analyse_type}
919 #print 'plus de bug@@@@@@@@@@@@@@@@@@@@@@'
920 analyse(self, matrix, parametres = parametres, dlg = dlgnb)
924 def OnFreq(self, event, matrix = None):
925 self.analyse_matrix(Frequences, analyse_type = 'freq', matrix = matrix, dlgnb = 3)
927 def OnFreqMulti(self, event, matrix = None):
928 self.analyse_matrix(FreqMultiple, analyse_type = 'freqmulti', matrix = matrix, dlgnb = 3)
930 def OnChi2(self, event, matrix = None):
931 self.analyse_matrix(ChiSquare, matrix = matrix, analyse_type = 'chi2', dlgnb = 3)
933 def OnSimiTab(self, event, matrix = None):
934 self.analyse_matrix(DoSimi, matrix = matrix, analyse_type = 'simimatrix', dlgnb = 5)
936 def OnCHDReinert(self, event, matrix = None):
938 # matrix = self.tree.getmatrix()
939 #AnalyseQuest(self, matrix, parametres = {'type' : 'reinertmatrix'}, dlg = 3)
940 self.analyse_matrix(AnalyseQuest, matrix = matrix, analyse_type = 'reinertmatrix', dlgnb = 5)
942 def OnStudent(self, event):
948 def OnRCode(self, event):
954 def OnCHDSIM(self, event):
956 # print 'ATTENTION!!!!'
957 chdsim = ChdCluster(self)
958 if chdsim.val == wx.ID_OK:
963 # def OnCHDReinert(self, event):
965 # # print('PLUS DE BUG SUR ALCESTE QUESTIONNAIRE')
966 # self.quest = AnalyseQuest(self)
967 # if self.quest.val == wx.ID_OK:
972 def OnProto(self, evt, matrix = None) :
973 self.analyse_matrix(Prototypical, matrix = matrix, analyse_type = 'proto', dlgnb = 3)
974 #Prototypical(self, {'type' : 'proto'})
976 def OnSplitVar(self, evt, matrix = None):
978 matrix = self.tree.getmatrix()
979 self.analyse_matrix(SplitMatrixFromVar, matrix = matrix, analyse_type = 'splitvar', parametres = {'pathout': matrix.pathout.dirout}, dlgnb = 3)
980 #matrix = self.tree.getmatrix()
983 def OnSimiTxt(self, evt, corpus = None) :
984 # print 'PLUS DE BUG SUR SIMITXT'
986 #self.Text = SimiTxt(self)
988 corpus = self.tree.getcorpus()
989 self.Text = SimiTxt(self, corpus, parametres = {'type': 'simitxt'}, dlg = 3)
990 if self.Text.val == wx.ID_OK :
995 def OnWordCloud(self, evt, corpus = None) :
996 # print 'PLUS DE BUG SUR WORDCLOUD'
999 corpus = self.tree.getcorpus()
1000 self.Text = WordCloud(self, corpus, parametres = {'type' : 'wordcloud'}, dlg = 3)
1001 if self.Text.val == wx.ID_OK :
1006 def OnClusterCloud(self, corpus, parametres = None) :
1007 self.Text = ClusterCloud(self, corpus, parametres = parametres, dlg = 3)
1009 def OnAFCM(self, event):
1015 def OnTextStat(self, event, corpus = None):
1016 #print 'PAS DE BUG SUR TEXT STAT'
1019 corpus = self.tree.getcorpus()
1020 self.Text = Stat(self, corpus, parametres = {'type': 'stat'}, dlg = 7)
1022 if self.Text.val == wx.ID_OK :
1027 def OnTextSpec(self, event, corpus = None):
1029 #self.Text = AsLexico(self)
1030 #print('ATTENTION : PLUS DE BUG SUR LEXICO')
1032 corpus = self.tree.getcorpus()
1033 self.Text = Lexico(self, corpus, parametres = {'type' : 'spec'}, dlg = 3)
1034 if self.Text.val == wx.ID_OK :
1039 def OnTextAfcm(self, event):
1046 def import_factiva_xml(self,event):
1048 ImportFactiva(self, 'xml')
1052 def import_factiva_mail(self, evt) :
1054 ImportFactiva(self, 'mail')
1058 def import_factiva_txt(self, evt) :
1060 ImportFactiva(self, 'txt')
1064 def OnImportTXM(self, evt) :
1066 ImportFactiva(self, 'txm')
1070 def ExtractTools(self, evt) :
1072 if ID == self.ID_splitvar :
1073 Extract(self, 'splitvar')
1074 elif ID == self.ID_extractmod :
1075 Extract(self, 'mods')
1076 elif ID == self.ID_extractthem :
1077 Extract(self, 'them')
1079 def OnTextReinert(self, event, corpus = None):
1081 #print('ATTENTION : PLUS DE BUG SUR ALCESTE')
1082 #RunAnalyse(self, corpus, Alceste, OptAlceste)
1084 corpus = self.tree.getcorpus()
1085 self.Text = Reinert(self, corpus, parametres = {'type': 'alceste'}, dlg = 6)
1086 if self.Text.val == wx.ID_OK:
1091 def OnPamSimple(self, event, corpus = None):
1094 corpus = self.tree.getcorpus()
1095 self.Text = AnalysePam(self, corpus, parametres = {'type' : 'pamtxt'}, dlg = 6)
1096 if self.Text.val == wx.ID_OK:
1101 def SimiCluster(self, parametres = {}, fromprof = False, tableau = None) :
1102 self.analyse_matrix(DoSimi, parametres = parametres, analyse_type = 'simiclustermatrix', matrix = tableau, dlgnb = 5)
1104 # def OnSimi(self,evt):
1106 #print 'ATTENTION !!!! VERGES'
1107 #print 'PLUS DE BUG SUR SIMI'
1108 # self.res = DoSimi(self, param = None)
1109 #self.res = Verges(self)
1110 # if self.res.val == wx.ID_OK :
1114 #################################################################
1116 def OnHelp(self, event):
1117 webbrowser.open('http://www.iramuteq.org/documentation')
1119 def OnPref(self, event):
1120 dlg = PrefDialog(self)
1121 dlg.CenterOnParent()
1122 self.val = dlg.ShowModal()
1125 if self.check_update:
1128 print 'pas de verif'
1130 #CheckRPackages(self)
1132 def OnOpenFromCmdl(self):
1134 if options.filename :
1135 if os.path.exists(options.filename):
1136 self.filename = os.path.abspath(options.filename)
1140 if os.path.exists(os.path.realpath(args[0])):
1141 self.filename = os.path.abspath(os.path.realpath(args[0]))
1147 if os.path.splitext(self.filename)[1] in ['.csv', '.xls', '.ods']:
1148 self.tableau = Tableau(self, self.filename)
1149 val = get_table_param(self, self.filename)
1150 if val == wx.ID_OK :
1151 self.tableau.make_content()
1152 OpenAnalyse(self, self.tableau.parametres)
1153 self.tree.OnItemAppend(self.tableau.parametres)
1154 #get_table_param(self, self.filename)
1155 #self.tableau.make_content()
1156 #self.tableau.show_tab()
1157 #open_data(self, self.filename)
1158 elif os.path.splitext(self.filename)[1] == '.txt':
1160 elif os.path.splitext(self.filename)[1] == '.ira' :
1161 #self.corpus = Corpus(self)
1162 #self.Text = OpenAnalyse(self, self.filename)
1163 OpenAnalyse(self, self.filename)
1165 print 'ce fichier n\'existe pas'
1169 class IntroPanel(wx.Panel):
1170 def __init__(self, parent):
1171 wx.Panel.__init__(self, parent)
1172 col = randint(0, 255)
1173 col1 = randint(0,255)
1174 col2 = randint(0,255)
1176 bckgrdcolor = wx.Colour(col, col1, col2)
1177 self.SetBackgroundColour(bckgrdcolor)
1178 txtcolour = wx.Colour(250, 250, 250)
1179 linkcolor = wx.Colour(255, 0, 0)
1180 sizer1 = wx.BoxSizer(wx.VERTICAL)
1181 sizer2 = wx.BoxSizer(wx.VERTICAL)
1182 sizer3 = wx.BoxSizer(wx.HORIZONTAL)
1183 sizer4 = wx.BoxSizer(wx.VERTICAL)
1184 sizer5 = wx.BoxSizer(wx.HORIZONTAL)
1185 grid_sizer_1 = wx.FlexGridSizer(1, 4, 0, 0)
1186 grid_sizer_3 = wx.FlexGridSizer(1, 4, 0, 0)
1187 grid_sizer_2 = wx.FlexGridSizer(1, 3, 0, 0)
1188 PanelPres = wx.Panel(self)
1189 PanelPres.SetBackgroundColour(bckgrdcolor)
1190 label_1 = wx.StaticText(self, -1, u"IRaMuTeQ", size=(-1, -1))
1191 label_1.SetFont(wx.Font(46, wx.TELETYPE, wx.NORMAL, wx.BOLD, 0, "Purisa"))
1192 label_1.SetForegroundColour(wx.RED)
1193 label2 = wx.StaticText(PanelPres, -1 , u'\nVersion ' + ConfigGlob.get('DEFAULT', 'version') + '\n')
1194 label2.SetForegroundColour(txtcolour)
1195 label2.SetBackgroundColour(bckgrdcolor)
1196 #label3 = wx.StaticText(PanelPres, -1 , u'Equipe ')
1197 #label3.SetForegroundColour(txtcolour)
1198 #label3.SetBackgroundColour(bckgrdcolor)
1199 self.hyper2 = hl.HyperLinkCtrl(PanelPres, wx.ID_ANY, u"REPERE", URL="http://repere.no-ip.org/")
1200 self.hyper2.SetColours(linkcolor, linkcolor, "RED")
1201 self.hyper2.SetBackgroundColour(bckgrdcolor)
1202 self.hyper2.EnableRollover(True)
1203 self.hyper2.SetUnderlines(False, False, True)
1204 self.hyper2.SetBold(True)
1205 self.hyper2.UpdateLink()
1206 label_lerass = wx.StaticText(PanelPres, -1, u'Laboratoire ')
1207 label_lerass.SetForegroundColour(txtcolour)
1208 label_lerass.SetBackgroundColour(bckgrdcolor)
1209 self.hyper_lerass = hl.HyperLinkCtrl(PanelPres, -1, u'LERASS', URL="http://www.lerass.com")
1210 self.hyper_lerass.SetColours(linkcolor, linkcolor, "RED")
1211 self.hyper_lerass.SetBackgroundColour(bckgrdcolor)
1212 self.hyper_lerass.EnableRollover(True)
1213 self.hyper_lerass.SetUnderlines(False, False, True)
1214 self.hyper_lerass.SetBold(True)
1215 self.hyper_lerass.UpdateLink()
1216 blank = wx.StaticText(PanelPres, -1, u'\n')
1217 blank1 = wx.StaticText(PanelPres, -1, u'\n')
1218 labellicence = wx.StaticText(PanelPres, -1, _(u"License GNU GPL").decode('utf8'))
1219 labellicence.SetForegroundColour(txtcolour)
1220 labellicence.SetBackgroundColour(bckgrdcolor)
1221 labelcopy = wx.StaticText(PanelPres, -1, ConfigGlob.get('DEFAULT', 'copyright'))
1222 labelcopy.SetForegroundColour(txtcolour)
1223 labelcopy.SetBackgroundColour(bckgrdcolor)
1224 python_img = wx.Image(os.path.join(ImagePath,'python-logo.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
1225 r_img = wx.Image(os.path.join(ImagePath,'Rlogo.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
1226 lexique_img = wx.Image(os.path.join(ImagePath,'LexTexte4.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
1227 but_python = wx.BitmapButton(self, -1, python_img)
1228 but_lexique = wx.BitmapButton(self, -1, lexique_img)
1229 but_r = wx.BitmapButton(self, -1, r_img)
1230 self.Bind(wx.EVT_BUTTON, self.OnPython, but_python)
1231 self.Bind(wx.EVT_BUTTON, self.OnLexique, but_lexique)
1232 self.Bind(wx.EVT_BUTTON, self.OnR, but_r)
1235 #grid_sizer_1.Add(label3, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1236 grid_sizer_1.Add(self.hyper2, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1237 grid_sizer_3.Add(label_lerass, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1238 grid_sizer_3.Add(self.hyper_lerass, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1239 sizer4.Add(label_1, 0, wx.ALIGN_CENTER, 5)
1240 sizer2.Add(label2, 0, wx.ALIGN_CENTER, 5)
1241 #sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1242 sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1243 sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1244 sizer2.Add(grid_sizer_3, 0, wx.ALIGN_CENTER, 5)
1245 sizer2.Add(wx.StaticText(PanelPres, -1, u' '), 0, wx.ALIGN_CENTER, 5)
1246 #sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1247 #sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1248 sizer2.Add(grid_sizer_1, 0, wx.ALIGN_CENTER, 5)
1249 sizer2.Add(labellicence, 0, wx.ALIGN_CENTER, 5)
1250 sizer2.Add(labelcopy, 0, wx.ALIGN_CENTER, 5)
1251 sizer1.Add(sizer4, 1, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1252 PanelPres.SetSizer(sizer2)
1253 sizer5.Add(blank, 1, wx.EXPAND | wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 2)
1254 sizer5.Add(PanelPres, 1, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1255 sizer5.Add(blank1, 1, wx.ALIGN_CENTER_HORIZONTAL,2)
1256 grid_sizer_2.Add(but_python, 1, wx.ALIGN_CENTER_HORIZONTAL| wx.ALIGN_CENTER_VERTICAL)
1257 grid_sizer_2.Add(but_lexique, 1,wx.ALIGN_CENTER_HORIZONTAL| wx.ALIGN_CENTER_VERTICAL)
1258 grid_sizer_2.Add(but_r, 1, wx.ALIGN_CENTER_HORIZONTAL| wx.ALIGN_CENTER_VERTICAL)
1260 sizer1.Add(sizer5, 3, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 1)
1261 sizer1.Add(grid_sizer_2, 1, wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL)
1262 self.SetSizer(sizer1)
1265 def OnPython(self,evt):
1266 webbrowser.open('http://www.python.org')
1268 def OnLexique(self,evt):
1269 webbrowser.open('http://www.lexique.org')
1272 webbrowser.open('http://www.r-project.org')
1274 class MySplashScreen(wx.SplashScreen):
1276 bmp = wx.Image(os.path.join(ImagePath, 'splash.png')).ConvertToBitmap()
1277 wx.SplashScreen.__init__(self, bmp,
1278 wx.SPLASH_CENTRE_ON_SCREEN | wx.SPLASH_TIMEOUT,
1280 self.Bind(wx.EVT_CLOSE, self.OnClose)
1281 self.fc = wx.FutureCall(1, self.ShowMain)
1283 def OnClose(self, evt):
1287 if self.fc.IsRunning():
1292 displaySize = wx.DisplaySize()
1293 w = displaySize[0]/1.2
1294 h = displaySize[1]/1.2
1295 frame = IraFrame(None, -1, "IRaMuTeQ " + ConfigGlob.get('DEFAULT', 'version'), size=(w, h))
1299 frame.OnOpenFromCmdl()
1300 # if self.fc.IsRunning():
1302 #wx.CallAfter(frame.ShowTip)
1304 class MyApp(wx.App):
1307 Create and show the splash screen. It will then create and show
1308 the main frame when it is time to do so.
1310 wx.SystemOptions.SetOptionInt("mac.window-plain-transition", 1)
1311 self.SetAppName("Iramuteq")
1312 splash = MySplashScreen()
1320 if __name__ == '__main__':