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) :
628 Le chemin de l'executable de R n'a pas été trouvé.
629 Si R n'est pas installé, vous devez l'installer (http://www.r-project.org/).
630 Si R n'est pas installé dans le répertoire par défaut
631 (souvent C:\Program Files\R\R-2.x.x\R.exe sous windows ou /usr/bin/R sous linux ou Mac Os X)
632 vous devez signaler le chemin de l'éxecutable de R dans les préférences."""
633 dlg = wx.MessageDialog(self, msg, u"Problème de configuration", wx.OK | wx.NO_DEFAULT | wx.ICON_WARNING)
635 if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
639 def setlangue(self) :
640 self.pref.read(self.ConfigPath['preferences'])
642 guilangue = self.pref.get('iramuteq', 'guilanguage')
644 guilangue = DefaultConf.get('iramuteq', 'guilanguage')
645 self.preslangue.get(guilangue, 'english').install()
647 def OnVerif(self, evt) :
648 pack = CheckRPackages(self)
650 dlg = wx.MessageDialog(self, u"Installation OK", u"Installation", wx.OK | wx.ICON_INFORMATION)
652 if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
655 def DisEnSaveTabAs(self, DISEN):
657 file_menu = self.mb.GetMenu(0)
658 items = file_menu.GetMenuItems()
660 if item.GetId() == ID_SaveTab :
663 def ShowMenu(self, menu, Show=True):
667 self._mgr.GetPane('tb_text').Show()
669 self._mgr.GetPane('tb_text').Hide()
670 elif menu == 'matrix' :
673 self._mgr.GetPane('tb_mat').Show()
675 self._mgr.GetPane('tb_mat').Hide()
676 elif menu == 'view' :
681 #menu_pos = self.mb.FindMenu(menu)
682 if not menu_pos is None :
683 self.mb.EnableTop(menu_pos, Show)
684 self.mb.UpdateMenus()
687 #--------------------------------------------------------------------
688 def OnClose(self, event):
690 with open(self.ConfigPath['path'], 'w') as f :
691 self.PathPath.write(f)
696 def OnOpenData(self, event):
697 inputname, self.input_path = OnOpen(self, "Data")
699 #filename = self.input_path[0]
700 self.tableau = Tableau(self,os.path.abspath(self.input_path[0]))
701 val = get_table_param(self, self.input_path[0])
703 busy = wx.BusyInfo(_("Please wait...").decode('utf8'), self)
706 self.tableau.make_content()
707 OpenAnalyse(self, self.tableau.parametres)
708 self.tree.OnItemAppend(self.tableau.parametres)
713 #self.tableau.show_tab()
715 def OnOpenAnalyse(self, event):
716 self.AnalysePath = OnOpen(self, "Analyse")
717 OpenAnalyse(self, self.AnalysePath[1][0], True)
718 self.ShowMenu('view')
720 def OnOpenText(self, event):
721 inputname, self.input_path = OnOpen(self, "Texte")
722 self.filename = self.input_path[0]
726 def OnViewData(self, event):
727 if self.type == "Data":
728 if not self.DataPop :
729 self.Sheet.Populate(self.content)
732 self.ShowAPane(u"Data")
733 elif self.type == "Texte" or self.type == 'Analyse' :
734 if not self.DataTxt :
735 self.text_ctrl_txt.Clear()
736 self.text_ctrl_txt.write(self.content)
737 self.text_ctrl_txt.ShowPosition(0)
740 self.ShowAPane(u"Text")
743 def OnSubText(self, evt, corpus = None, parametres = None):
745 corpus = self.tree.getcorpus()
746 if evt.GetId() == ID_Subtxtfrommeta :
747 parametres = {'frommeta' : True}
748 elif evt.GetId() == ID_Subtxtfromthem :
749 parametres = {'fromtheme' : True}
750 builder = SubBuilder(self, corpus, parametres)
751 if builder.res == wx.ID_OK :
752 busy = wx.BusyInfo(_("Please wait...").decode('utf8'), self)
754 corpus = builder.doanalyse()
755 self.history.add(corpus.parametres)
756 self.tree.OnItemAppend(corpus.parametres)
757 OpenAnalyse(self, corpus.parametres)
761 dlg = wx.ProgressDialog("Ouverture...",
762 "Veuillez patienter...",
765 style=wx.PD_APP_MODAL | wx.PD_AUTO_HIDE | wx.PD_ELAPSED_TIME | wx.PD_CAN_ABORT
768 builder = Builder(self, dlg)
769 if builder.res == wx.ID_OK :
771 corpus = builder.doanalyse()
772 self.history.add(corpus.parametres)
773 self.tree.OnItemAppend(corpus.parametres)
774 OpenAnalyse(self, corpus.parametres)
780 keepGoing = dlg.Update(count, u"Lecture du fichier")
781 self.ShowMenu('view')
782 self.ShowMenu('text')
783 self.ShowMenu('matrix', False)
788 keepGoing = dlg.Update(count, u"Chargement du dictionnaire")
790 #self.OnViewData(wx.EVT_BUTTON)
792 def OnExit(self, event):
795 def OnAbout(self, event):
796 info = wx.AboutDialogInfo()
797 info.Name = ConfigGlob.get('DEFAULT', 'name')
798 info.Version = ConfigGlob.get('DEFAULT', 'version')
799 info.Copyright = ConfigGlob.get('DEFAULT', 'copyright')
800 info.Description = u"""
801 Interface de R pour les Analyses Multidimensionnelles
802 de Textes et de Questionnaires
805 construit avec des logiciels libres.
811 info.WebSite = ("http://www.iramuteq.org", u"Site web IRaMuTeQ")
812 dev = ConfigGlob.get('DEFAULT', 'dev').decode('utf8').split(';')
813 info.Developers = dev
814 info.License = u"""Iramuteq est un logiciel libre ; vous pouvez le diffuser et/ou le modifier
815 suivant les termes de la Licence Publique Générale GNU telle que publiée
816 par la Free Software Foundation ; soit la version 2 de cette licence,
817 soit (à votre convenance) une version ultérieure.
819 Iramuteq est diffusé dans l'espoir qu'il sera utile,
820 mais SANS AUCUNE GARANTIE ; sans même une garantie implicite
821 de COMMERCIALISATION ou d'ADÉQUATION À UN USAGE PARTICULIER.
822 Voyez la Licence Publique Générale GNU pour plus de détails.
824 Vous devriez avoir reçu une copie de la Licence Publique Générale GNU
825 avec Iramuteq ; sinon, veuillez écrire à la Free Software Foundation,
826 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis."""
829 def GetDockArt(self):
830 return self._mgr.GetArtProvider()
835 def OnPageChanged(self, event) :
836 new = event.GetSelection()
837 nobject = event.GetEventObject()
838 parent = nobject.GetParent()
839 if isinstance(parent, IraFrame) :
840 npage = self.nb.GetPage(new)
841 if 'parametres' in dir(npage) :
842 self.tree.GiveFocus(uuid=npage.parametres['uuid'])
843 if npage.parametres.get('matrix', False) :
844 self.ShowMenu('text', False)
845 self.ShowMenu('matrix', True)
846 elif npage.parametres.get('corpus', False) :
847 self.ShowMenu('text')
848 self.ShowMenu('matrix', False)
850 def OnCloseTab(self, evt):
851 #log.info('Closing tab %s' % str(evt.GetEventObject()))
852 ctrl = evt.GetEventObject()
853 if isinstance(ctrl.GetParent(), aui.AuiNotebook) or isinstance(ctrl.GetParent(), wx.Panel):
857 page = self.nb.GetPage(self.nb.GetSelection())
858 if 'parametres' in dir(page) and isinstance(ctrl.GetParent(), IraFrame) :
859 self.history.rmtab(page.parametres)
860 self.tree.CloseItem(uuid = page.parametres['uuid'])
861 TabTitle = self.nb.GetPageText(self.nb.GetSelection())
863 if self.nb.GetPageCount() == 1 and not notebook :
866 def LastTabClose(self) :
867 if self.nb.GetPageCount() == 1 :
868 #self.DisEnSaveTabAs(False)
870 self.ShowAPane("Text")
872 self.ShowAPane("Data")
874 self.ShowAPane("Intro_Text")
876 def GetStartPosition(self):
880 pt = self.ClientToScreen(wx.Point(0, 0))
882 return wx.Point(pt.x + x, pt.y + x)
884 def ShowAPane(self, panel):
885 for pane in self._mgr.GetAllPanes() :
886 if not pane.IsToolbar() and pane.name != 'lefttree':
888 self._mgr.GetPane(panel).Show()
891 def OnAcceuil(self, event):
892 self.ShowAPane(u"Intro_Text")
895 def CreateHTMLCtrl(self):
896 ctrl = wx.html.HtmlWindow(self, -1, wx.DefaultPosition, wx.Size(400, 300))
897 if "gtk2" in wx.PlatformInfo:
898 ctrl.SetStandardFonts()
899 ctrl.SetPage(u"text")
902 def ShowTab(self, evt):
903 self.ShowAPane("Tab_content")
905 ################################################################
907 ################################################################
908 def analyse_matrix(self, analyse, analyse_type = '', matrix = None, parametres = None, dlgnb = 1):
910 matrix = self.tree.getmatrix()
911 if parametres is not None :
912 parametres['type'] = analyse_type
914 parametres = {'type' : analyse_type}
916 #print 'plus de bug@@@@@@@@@@@@@@@@@@@@@@'
917 analyse(self, matrix, parametres = parametres, dlg = dlgnb)
921 def OnFreq(self, event, matrix = None):
922 self.analyse_matrix(Frequences, analyse_type = 'freq', matrix = matrix, dlgnb = 3)
924 def OnFreqMulti(self, event, matrix = None):
925 self.analyse_matrix(FreqMultiple, analyse_type = 'freqmulti', matrix = matrix, dlgnb = 3)
927 def OnChi2(self, event, matrix = None):
928 self.analyse_matrix(ChiSquare, matrix = matrix, analyse_type = 'chi2', dlgnb = 3)
930 def OnSimiTab(self, event, matrix = None):
931 self.analyse_matrix(DoSimi, matrix = matrix, analyse_type = 'simimatrix', dlgnb = 5)
933 def OnCHDReinert(self, event, matrix = None):
935 # matrix = self.tree.getmatrix()
936 #AnalyseQuest(self, matrix, parametres = {'type' : 'reinertmatrix'}, dlg = 3)
937 self.analyse_matrix(AnalyseQuest, matrix = matrix, analyse_type = 'reinertmatrix', dlgnb = 5)
939 def OnStudent(self, event):
945 def OnRCode(self, event):
951 def OnCHDSIM(self, event):
953 # print 'ATTENTION!!!!'
954 chdsim = ChdCluster(self)
955 if chdsim.val == wx.ID_OK:
960 # def OnCHDReinert(self, event):
962 # # print('PLUS DE BUG SUR ALCESTE QUESTIONNAIRE')
963 # self.quest = AnalyseQuest(self)
964 # if self.quest.val == wx.ID_OK:
969 def OnProto(self, evt, matrix = None) :
970 self.analyse_matrix(Prototypical, matrix = matrix, analyse_type = 'proto', dlgnb = 3)
971 #Prototypical(self, {'type' : 'proto'})
973 def OnSplitVar(self, evt, matrix = None):
975 matrix = self.tree.getmatrix()
976 self.analyse_matrix(SplitMatrixFromVar, matrix = matrix, analyse_type = 'splitvar', parametres = {'pathout': matrix.pathout.dirout}, dlgnb = 3)
977 #matrix = self.tree.getmatrix()
980 def OnSimiTxt(self, evt, corpus = None) :
981 # print 'PLUS DE BUG SUR SIMITXT'
983 #self.Text = SimiTxt(self)
985 corpus = self.tree.getcorpus()
986 self.Text = SimiTxt(self, corpus, parametres = {'type': 'simitxt'}, dlg = 3)
987 if self.Text.val == wx.ID_OK :
992 def OnWordCloud(self, evt, corpus = None) :
993 # print 'PLUS DE BUG SUR WORDCLOUD'
996 corpus = self.tree.getcorpus()
997 self.Text = WordCloud(self, corpus, parametres = {'type' : 'wordcloud'}, dlg = 3)
998 if self.Text.val == wx.ID_OK :
1003 def OnClusterCloud(self, corpus, parametres = None) :
1004 self.Text = ClusterCloud(self, corpus, parametres = parametres, dlg = 3)
1006 def OnAFCM(self, event):
1012 def OnTextStat(self, event, corpus = None):
1013 #print 'PAS DE BUG SUR TEXT STAT'
1016 corpus = self.tree.getcorpus()
1017 self.Text = Stat(self, corpus, parametres = {'type': 'stat'}, dlg = 7)
1019 if self.Text.val == wx.ID_OK :
1024 def OnTextSpec(self, event, corpus = None):
1026 #self.Text = AsLexico(self)
1027 #print('ATTENTION : PLUS DE BUG SUR LEXICO')
1029 corpus = self.tree.getcorpus()
1030 self.Text = Lexico(self, corpus, parametres = {'type' : 'spec'}, dlg = 3)
1031 if self.Text.val == wx.ID_OK :
1036 def OnTextAfcm(self, event):
1043 def import_factiva_xml(self,event):
1045 ImportFactiva(self, 'xml')
1049 def import_factiva_mail(self, evt) :
1051 ImportFactiva(self, 'mail')
1055 def import_factiva_txt(self, evt) :
1057 ImportFactiva(self, 'txt')
1061 def OnImportTXM(self, evt) :
1063 ImportFactiva(self, 'txm')
1067 def ExtractTools(self, evt) :
1069 if ID == self.ID_splitvar :
1070 Extract(self, 'splitvar')
1071 elif ID == self.ID_extractmod :
1072 Extract(self, 'mods')
1073 elif ID == self.ID_extractthem :
1074 Extract(self, 'them')
1076 def OnTextReinert(self, event, corpus = None):
1078 #print('ATTENTION : PLUS DE BUG SUR ALCESTE')
1079 #RunAnalyse(self, corpus, Alceste, OptAlceste)
1081 corpus = self.tree.getcorpus()
1082 self.Text = Reinert(self, corpus, parametres = {'type': 'alceste'}, dlg = 6)
1083 if self.Text.val == wx.ID_OK:
1088 def OnPamSimple(self, event, corpus = None):
1091 corpus = self.tree.getcorpus()
1092 self.Text = AnalysePam(self, corpus, parametres = {'type' : 'pamtxt'}, dlg = 6)
1093 if self.Text.val == wx.ID_OK:
1098 def SimiCluster(self, parametres = {}, fromprof = False, tableau = None) :
1099 self.analyse_matrix(DoSimi, parametres = parametres, analyse_type = 'simiclustermatrix', matrix = tableau, dlgnb = 5)
1101 # def OnSimi(self,evt):
1103 #print 'ATTENTION !!!! VERGES'
1104 #print 'PLUS DE BUG SUR SIMI'
1105 # self.res = DoSimi(self, param = None)
1106 #self.res = Verges(self)
1107 # if self.res.val == wx.ID_OK :
1111 #################################################################
1113 def OnHelp(self, event):
1114 webbrowser.open('http://www.iramuteq.org/documentation')
1116 def OnPref(self, event):
1117 dlg = PrefDialog(self)
1118 dlg.CenterOnParent()
1119 self.val = dlg.ShowModal()
1122 if self.check_update:
1125 print 'pas de verif'
1127 #CheckRPackages(self)
1129 def OnOpenFromCmdl(self):
1131 if options.filename :
1132 if os.path.exists(options.filename):
1133 self.filename = os.path.abspath(options.filename)
1137 if os.path.exists(os.path.realpath(args[0])):
1138 self.filename = os.path.abspath(os.path.realpath(args[0]))
1144 if os.path.splitext(self.filename)[1] in ['.csv', '.xls', '.ods']:
1145 self.tableau = Tableau(self, self.filename)
1146 val = get_table_param(self, self.filename)
1147 if val == wx.ID_OK :
1148 self.tableau.make_content()
1149 OpenAnalyse(self, self.tableau.parametres)
1150 self.tree.OnItemAppend(self.tableau.parametres)
1151 #get_table_param(self, self.filename)
1152 #self.tableau.make_content()
1153 #self.tableau.show_tab()
1154 #open_data(self, self.filename)
1155 elif os.path.splitext(self.filename)[1] == '.txt':
1157 elif os.path.splitext(self.filename)[1] == '.ira' :
1158 #self.corpus = Corpus(self)
1159 #self.Text = OpenAnalyse(self, self.filename)
1160 OpenAnalyse(self, self.filename)
1162 print 'ce fichier n\'existe pas'
1166 class IntroPanel(wx.Panel):
1167 def __init__(self, parent):
1168 wx.Panel.__init__(self, parent)
1169 col = randint(0, 255)
1170 col1 = randint(0,255)
1171 col2 = randint(0,255)
1173 bckgrdcolor = wx.Colour(col, col1, col2)
1174 self.SetBackgroundColour(bckgrdcolor)
1175 txtcolour = wx.Colour(250, 250, 250)
1176 linkcolor = wx.Colour(255, 0, 0)
1177 sizer1 = wx.BoxSizer(wx.VERTICAL)
1178 sizer2 = wx.BoxSizer(wx.VERTICAL)
1179 sizer3 = wx.BoxSizer(wx.HORIZONTAL)
1180 sizer4 = wx.BoxSizer(wx.VERTICAL)
1181 sizer5 = wx.BoxSizer(wx.HORIZONTAL)
1182 grid_sizer_1 = wx.FlexGridSizer(1, 4, 0, 0)
1183 grid_sizer_3 = wx.FlexGridSizer(1, 4, 0, 0)
1184 grid_sizer_2 = wx.FlexGridSizer(1, 3, 0, 0)
1185 PanelPres = wx.Panel(self)
1186 PanelPres.SetBackgroundColour(bckgrdcolor)
1187 label_1 = wx.StaticText(self, -1, u"IRaMuTeQ", size=(-1, -1))
1188 label_1.SetFont(wx.Font(46, wx.TELETYPE, wx.NORMAL, wx.BOLD, 0, "Purisa"))
1189 label_1.SetForegroundColour(wx.RED)
1190 label2 = wx.StaticText(PanelPres, -1 , u'\nVersion ' + ConfigGlob.get('DEFAULT', 'version') + '\n')
1191 label2.SetForegroundColour(txtcolour)
1192 label2.SetBackgroundColour(bckgrdcolor)
1193 #label3 = wx.StaticText(PanelPres, -1 , u'Equipe ')
1194 #label3.SetForegroundColour(txtcolour)
1195 #label3.SetBackgroundColour(bckgrdcolor)
1196 self.hyper2 = hl.HyperLinkCtrl(PanelPres, wx.ID_ANY, u"REPERE", URL="http://repere.no-ip.org/")
1197 self.hyper2.SetColours(linkcolor, linkcolor, "RED")
1198 self.hyper2.SetBackgroundColour(bckgrdcolor)
1199 self.hyper2.EnableRollover(True)
1200 self.hyper2.SetUnderlines(False, False, True)
1201 self.hyper2.SetBold(True)
1202 self.hyper2.UpdateLink()
1203 label_lerass = wx.StaticText(PanelPres, -1, u'Laboratoire ')
1204 label_lerass.SetForegroundColour(txtcolour)
1205 label_lerass.SetBackgroundColour(bckgrdcolor)
1206 self.hyper_lerass = hl.HyperLinkCtrl(PanelPres, -1, u'LERASS', URL="http://www.lerass.com")
1207 self.hyper_lerass.SetColours(linkcolor, linkcolor, "RED")
1208 self.hyper_lerass.SetBackgroundColour(bckgrdcolor)
1209 self.hyper_lerass.EnableRollover(True)
1210 self.hyper_lerass.SetUnderlines(False, False, True)
1211 self.hyper_lerass.SetBold(True)
1212 self.hyper_lerass.UpdateLink()
1213 blank = wx.StaticText(PanelPres, -1, u'\n')
1214 blank1 = wx.StaticText(PanelPres, -1, u'\n')
1215 labellicence = wx.StaticText(PanelPres, -1, _(u"License GNU GPL").decode('utf8'))
1216 labellicence.SetForegroundColour(txtcolour)
1217 labellicence.SetBackgroundColour(bckgrdcolor)
1218 labelcopy = wx.StaticText(PanelPres, -1, ConfigGlob.get('DEFAULT', 'copyright'))
1219 labelcopy.SetForegroundColour(txtcolour)
1220 labelcopy.SetBackgroundColour(bckgrdcolor)
1221 python_img = wx.Image(os.path.join(ImagePath,'python-logo.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
1222 r_img = wx.Image(os.path.join(ImagePath,'Rlogo.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
1223 lexique_img = wx.Image(os.path.join(ImagePath,'LexTexte4.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
1224 but_python = wx.BitmapButton(self, -1, python_img)
1225 but_lexique = wx.BitmapButton(self, -1, lexique_img)
1226 but_r = wx.BitmapButton(self, -1, r_img)
1227 self.Bind(wx.EVT_BUTTON, self.OnPython, but_python)
1228 self.Bind(wx.EVT_BUTTON, self.OnLexique, but_lexique)
1229 self.Bind(wx.EVT_BUTTON, self.OnR, but_r)
1232 #grid_sizer_1.Add(label3, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1233 grid_sizer_1.Add(self.hyper2, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1234 grid_sizer_3.Add(label_lerass, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1235 grid_sizer_3.Add(self.hyper_lerass, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1236 sizer4.Add(label_1, 0, wx.ALIGN_CENTER, 5)
1237 sizer2.Add(label2, 0, wx.ALIGN_CENTER, 5)
1238 #sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1239 sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1240 sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1241 sizer2.Add(grid_sizer_3, 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(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
1245 sizer2.Add(grid_sizer_1, 0, wx.ALIGN_CENTER, 5)
1246 sizer2.Add(labellicence, 0, wx.ALIGN_CENTER, 5)
1247 sizer2.Add(labelcopy, 0, wx.ALIGN_CENTER, 5)
1248 sizer1.Add(sizer4, 1, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1249 PanelPres.SetSizer(sizer2)
1250 sizer5.Add(blank, 1, wx.EXPAND | wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 2)
1251 sizer5.Add(PanelPres, 1, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
1252 sizer5.Add(blank1, 1, wx.ALIGN_CENTER_HORIZONTAL,2)
1253 grid_sizer_2.Add(but_python, 1, wx.ALIGN_CENTER_HORIZONTAL| wx.ALIGN_CENTER_VERTICAL)
1254 grid_sizer_2.Add(but_lexique, 1,wx.ALIGN_CENTER_HORIZONTAL| wx.ALIGN_CENTER_VERTICAL)
1255 grid_sizer_2.Add(but_r, 1, wx.ALIGN_CENTER_HORIZONTAL| wx.ALIGN_CENTER_VERTICAL)
1257 sizer1.Add(sizer5, 3, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 1)
1258 sizer1.Add(grid_sizer_2, 1, wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL)
1259 self.SetSizer(sizer1)
1262 def OnPython(self,evt):
1263 webbrowser.open('http://www.python.org')
1265 def OnLexique(self,evt):
1266 webbrowser.open('http://www.lexique.org')
1269 webbrowser.open('http://www.r-project.org')
1271 class MySplashScreen(wx.SplashScreen):
1273 bmp = wx.Image(os.path.join(ImagePath, 'splash.png')).ConvertToBitmap()
1274 wx.SplashScreen.__init__(self, bmp,
1275 wx.SPLASH_CENTRE_ON_SCREEN | wx.SPLASH_TIMEOUT,
1277 self.Bind(wx.EVT_CLOSE, self.OnClose)
1278 self.fc = wx.FutureCall(1, self.ShowMain)
1280 def OnClose(self, evt):
1284 if self.fc.IsRunning():
1289 displaySize = wx.DisplaySize()
1290 w = displaySize[0]/1.2
1291 h = displaySize[1]/1.2
1292 frame = IraFrame(None, -1, "IRaMuTeQ " + ConfigGlob.get('DEFAULT', 'version'), size=(w, h))
1296 frame.OnOpenFromCmdl()
1297 # if self.fc.IsRunning():
1299 #wx.CallAfter(frame.ShowTip)
1301 class MyApp(wx.App):
1304 Create and show the splash screen. It will then create and show
1305 the main frame when it is time to do so.
1307 wx.SystemOptions.SetOptionInt("mac.window-plain-transition", 1)
1308 self.SetAppName("Iramuteq")
1309 splash = MySplashScreen()
1317 if __name__ == '__main__':