X-Git-Url: http://iramuteq.org/git?p=iramuteq;a=blobdiff_plain;f=iramuteq.py;h=fdf2ba022f69c899e4d206cad355955e8595f728;hp=d729c40e506f8451c5d3aa9944acff4245fcb5cd;hb=35feaa5dc8cbd055e732567e012780d88b92ffe5;hpb=40ae5805c4286656d9c6c17e3231d0ea24cdcaa7 diff --git a/iramuteq.py b/iramuteq.py index d729c40..fdf2ba0 100644 --- a/iramuteq.py +++ b/iramuteq.py @@ -2,44 +2,40 @@ # -*- coding: utf-8 -*- #Author: Pierre Ratinaud #Copyright (c) 2008-2012, Pierre Ratinaud -#Lisense: GNU GPL +#License: GNU GPL from optparse import OptionParser +from wx import BusyCursor parser = OptionParser() parser.add_option("-f", "--file", dest="filename", help="open FILE", metavar="FILE", default=False) (options, args) = parser.parse_args() -#print args -#print options import sys reload(sys) import locale import tempfile import codecs import os -import shutil from random import randint -from ConfigParser import * +from ConfigParser import ConfigParser, RawConfigParser import webbrowser import gettext import logging #------------------------------------ import wx -#import wx.aui -#import wx.lib.agw.aui as aui -import agw.aui as aui +import wx.lib.agw.aui as aui import wx.html import wx.grid import wx.lib.hyperlink as hl #------------------------------------ -from functions import BugReport, PlaySound, ReadLexique, History, DoConf, ReadDicoAsDico, progressbar +from functions import BugReport, PlaySound, History from checkversion import NewVersion from guifunct import * from tableau import Tableau -from dialog import PrefDialog, EncodeDialog, CorpusPref -from tabfrequence import Frequences +from dialog import PrefDialog +from tabfrequence import Frequences, FreqMultiple from tabchi2 import ChiSquare #from tabstudent import MakeStudent from tabchddist import ChdCluster @@ -47,22 +43,19 @@ from tabafcm import DoAFCM from tabchdalc import AnalyseQuest from tabsimi import DoSimi from tabrsimple import InputText -from tabverges import Verges -#from textafcuci import AfcUci -#from textchdalc import AnalyseAlceste -from analysetxt import Alceste -from textdist import PamTxt +from tabverges import Prototypical +from tabsplitvar import SplitMatrixFromVar +#from textdist import AnalysePam from textstat import Stat from textaslexico import Lexico from textsimi import SimiTxt, SimiFromCluster -from textwordcloud import WordCloud -from profile_segment import ProfileSegment -from textcheckcorpus import checkcorpus +from textwordcloud import WordCloud, ClusterCloud +from textreinert import Reinert +#from textcheckcorpus import checkcorpus from openanalyse import OpenAnalyse -from corpusNG import BuildFromAlceste, Builder -from sheet import MySheet +from corpus import Builder, SubBuilder from checkinstall import CreateIraDirectory, CheckRPath, FindRPAthWin32, FindRPathNix, CheckRPackages, IsNew, UpgradeConf, CopyConf, RLibsAreInstalled -from chemins import ConstructRscriptsPath, ConstructConfigPath, ConstructDicoPath, ConstructGlobalPath, PathOut +from chemins import RscriptsPath, ConstructConfigPath, ConstructDicoPath, ConstructGlobalPath, PathOut from parse_factiva_xml import ImportFactiva from tools import Extract @@ -76,11 +69,11 @@ ID_Freq = wx.NewId() ID_Chi2 = wx.NewId() ID_Student = wx.NewId() ID_CHDSIM = wx.NewId() -ID_CHDAlceste = wx.NewId() +ID_CHDReinert = wx.NewId() ID_TEXTAFCM = wx.NewId() ID_TEXTSTAT = wx.NewId() ID_ASLEX = wx.NewId() -ID_TEXTALCESTE = wx.NewId() +ID_TEXTREINERT = wx.NewId() ID_TEXTPAM = wx.NewId() ID_CHECKCORPUS = wx.NewId() ID_Tabcontent = wx.NewId() @@ -94,15 +87,23 @@ ID_RESULT = wx.NewId() ID_VIEWDATA = wx.NewId() ID_HTMLcontent = wx.NewId() ID_SimiTxt = wx.NewId() +ID_proto = wx.NewId() +ID_ImportTXM = wx.NewId() +ID_FreqMulti = wx.NewId() +ID_Splitfromvar = wx.NewId() +ID_Subtxtfrommeta = wx.NewId() +ID_Subtxtfromthem = wx.NewId() +ID_WC = wx.NewId() ########################################################## #elements de configuration ########################################################## #encodage if sys.platform == 'darwin' : - sys.setdefaultencoding('utf-8') - wx.SetDefaultPyEncoding('utf-8') + sys.setdefaultencoding('UTF-8') + wx.SetDefaultPyEncoding('UTF-8') else : sys.setdefaultencoding(locale.getpreferredencoding()) + #chemin de l'application AppliPath = os.path.abspath(os.path.dirname(os.path.realpath(sys.argv[0]))) #chemin des images @@ -111,6 +112,8 @@ ImagePath = os.path.join(AppliPath, 'images') DictConfigPath = ConstructGlobalPath(AppliPath) ConfigGlob = ConfigParser() ConfigGlob.read(DictConfigPath['global']) +DefaultConf = ConfigParser() +DefaultConf.read(DictConfigPath['preferences']) #repertoire de l'utilisateur if os.getenv('HOME') != None: user_home = os.getenv('HOME') @@ -122,21 +125,64 @@ CreateIraDirectory(UserConfigPath, AppliPath) #fichiers log pour windows (py2exe) log = logging.getLogger('iramuteq') fh = logging.FileHandler(os.path.join(UserConfigPath,'stdout.log')) -ch = logging.StreamHandler() formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') -ch.setFormatter(formatter) fh.setFormatter(formatter) -log.addHandler(ch) log.addHandler(fh) +if sys.platform != 'win32' and sys.platform != 'darwin': + ch = logging.StreamHandler() + ch.setFormatter(formatter) + log.addHandler(ch) log.setLevel(logging.INFO) - class writer(object): def write(self, data): if data.strip() != '' : - log.info('BUG : %s' % data) + log.info('ERROR : %s' % data) + +class printer(object) : + def write(self, data) : + if data.strip() != '' : + log.info('Print : %s' % data) + sys.stderr = writer() +sys.stdout = printer() + ConfigPath = ConstructConfigPath(UserConfigPath) + +langues = {'french' : wx.LANGUAGE_FRENCH, + 'english' : wx.LANGUAGE_ENGLISH, + 'portuguese' : wx.LANGUAGE_PORTUGUESE, + 'italian' : wx.LANGUAGE_ITALIAN, + 'spanish' : wx.LANGUAGE_SPANISH + } + +code_langues = {'french' : 'fr_FR', + 'english' : 'en', + 'portuguese' : 'pt_PT', + 'italian' : 'it_IT', + 'spanish' : 'es_ES' + } + +images_analyses = { + 'textroot' : 'textroot.png', + 'alceste' : 'reinert.png', + 'corpus' : 'textcorpus.png', + 'wordcloud' :'wordcloud.png', + 'stat' :'stats.png', + 'simitxt' : 'simitxt.png', + 'clustersimitxt' :'clustersimitxt.png', + 'clustercloud' : 'clustercloud.png', + 'spec' : 'spec.png', + 'matroot' : 'matroot.png', + 'matrix' : 'matrix.png', + 'freq' : 'frequences.png', + 'freqmulti' : 'frequences.png', + 'chi2' : 'chi2.png', + 'reinertmatrix' : 'reinertmatrix.png', + 'simimatrix' : 'simimatrix.png', + 'simiclustermatrix' : 'simimatrix.png', + 'proto' : 'proto.png', + } ##################################################################### class IraFrame(wx.Frame): @@ -150,7 +196,9 @@ class IraFrame(wx.Frame): self.AppliPath = AppliPath self.images_path = os.path.join(AppliPath,'images') self.UserConfigPath = UserConfigPath - self.RscriptsPath = ConstructRscriptsPath(AppliPath) + #self.RscriptsPath = ConstructRscriptsPath(AppliPath) + self.RscriptsPath = PathOut(dirout=os.path.join(AppliPath, 'Rscripts')) + self.RscriptsPath.basefiles(RscriptsPath) #self.DictPath = ConstructDicoPath(AppliPath) self.DictPath = ConstructDicoPath(UserConfigPath) self.ConfigGlob = ConfigGlob @@ -159,14 +207,16 @@ class IraFrame(wx.Frame): #workaround for import problem self.SimiFromCluster = SimiFromCluster #langues - mylocale = wx.Locale(wx.LANGUAGE_FRENCH) - mylocale.AddCatalogLookupPathPrefix(os.path.join(AppliPath,'locale')) - mylocale.AddCatalog('iramuteq') - presLan_en = gettext.translation("iramuteq", os.path.join(AppliPath,'locale'), languages=['en']) - presLan_fr = gettext.translation("iramuteq", os.path.join(AppliPath,'locale'), languages=['fr_FR']) - presLan_fr.install() - - + gettext.install('iramuteq', os.path.join(AppliPath,'locale'), unicode=True) + #langues = ['fr_FR', 'en', 'pt_PT'] + #for l in langues : + # pass + self.preslangue = {} + for langue in code_langues : + self.preslangue[langue] = gettext.translation("iramuteq", os.path.join(AppliPath,'locale'), languages=[code_langues[langue]]) + self.setlangue() + #self.presLan_fr = gettext.translation("iramuteq", os.path.join(AppliPath,'locale'), languages=['fr_FR']) + #self.presLan_en = gettext.translation("iramuteq", os.path.join(AppliPath,'locale'), languages=['en']) # tell FrameManager to manage this frame #self._mgr = wx.aui.AuiManager() self._mgr = aui.AuiManager() @@ -174,99 +224,168 @@ class IraFrame(wx.Frame): self.x = 0 # create menu #-------------------------------------------------------------------------------- + self.images_analyses = images_analyses + for img in images_analyses : + self.images_analyses[img] = wx.Image(os.path.join(self.images_path, self.images_analyses[img]), wx.BITMAP_TYPE_PNG).Scale(16,16).ConvertToBitmap() self.mb = wx.MenuBar() file_menu = wx.Menu() - item = wx.MenuItem(file_menu, ID_OpenData, _(u"Open a matrix"), _(u"Open a matrix")) - item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN)) + item = wx.MenuItem(file_menu, ID_OpenData, _(u"Open a matrix").decode('utf8'), _(u"Open a matrix").decode('utf8')) + #item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN)) + item.SetBitmap(self.images_analyses['matroot']) file_menu.AppendItem(item) - item = wx.MenuItem(file_menu, ID_OpenText, _(u"Open a text corpora"), _(u"Open a text corpora")) - item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN)) + item = wx.MenuItem(file_menu, ID_OpenText, _(u"Open a text corpus").decode('utf8'), _(u"Open a text corpus").decode('utf8')) + item.SetBitmap(self.images_analyses['textroot']) file_menu.AppendItem(item) - item = wx.MenuItem(file_menu, ID_OnOpenAnalyse, _(u"Open an analysis"), _("Open an analysis")) + item = wx.MenuItem(file_menu, ID_OnOpenAnalyse, _(u"Open an analysis").decode('utf8'), _(u"Open an analysis").decode('utf8')) item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN)) file_menu.AppendItem(item) menuFactiva = wx.Menu() - fact_from_xml = wx.MenuItem(menuFactiva, wx.ID_ANY, _(u"from xml")) - fact_from_mail = wx.MenuItem(menuFactiva, wx.ID_ANY, _(u"from mail")) - fact_from_txt = wx.MenuItem(menuFactiva, wx.ID_ANY, _(u"from copy/paste")) + fact_from_xml = wx.MenuItem(menuFactiva, wx.ID_ANY, _(u"from xml").decode('utf8')) + fact_from_mail = wx.MenuItem(menuFactiva, wx.ID_ANY, _(u"from mail").decode('utf8')) + fact_from_txt = wx.MenuItem(menuFactiva, wx.ID_ANY, _(u"from copy/paste").decode('utf8')) menuFactiva.AppendItem(fact_from_xml) menuFactiva.AppendItem(fact_from_mail) menuFactiva.AppendItem(fact_from_txt) - file_menu.AppendMenu(-1, _(u"Import from factiva"), menuFactiva) + file_menu.AppendMenu(-1, _(u"Import from factiva").decode('utf8'), menuFactiva) + + item = wx.MenuItem(file_menu, ID_ImportTXM, _(u"Import from TXM").decode('utf8'), _(u"Import from TXM").decode('utf8')) + item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN)) + file_menu.AppendItem(item) menuTools = wx.Menu() - splitvar = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Split from variable")) - extractmod = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Extract mods")) + splitvar = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Split from variable").decode('utf8')) + extractmod = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Extract mods").decode('utf8')) + extractthem = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Extract thematics").decode('utf8')) menuTools.AppendItem(splitvar) menuTools.AppendItem(extractmod) + menuTools.AppendItem(extractthem) self.ID_splitvar = splitvar.GetId() self.ID_extractmod = extractmod.GetId() - file_menu.AppendMenu(-1, _(u"Tools"), menuTools) + self.ID_extractthem = extractthem.GetId() + file_menu.AppendMenu(-1, _(u"Tools").decode('utf8'), menuTools) - item = wx.MenuItem(file_menu, ID_SaveTab, _(u"Save tab as..."), _(u"Save tab as...")) - item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_SAVE_AS)) - file_menu.AppendItem(item) + #item = wx.MenuItem(file_menu, ID_SaveTab, _(u"Save tab as...").decode('utf8'), _(u"Save tab as...").decode('utf8')) + #item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_SAVE_AS)) + #file_menu.AppendItem(item) - file_menu.Append(wx.ID_EXIT, _(u"Exit")) + file_menu.Append(wx.ID_EXIT, _(u"Exit").decode('utf8')) edit_menu = wx.Menu() - edit_menu.Append(wx.ID_PREFERENCES, '', _(u'Preferences')) + edit_menu.Append(wx.ID_PREFERENCES, _(u'Preferences').decode('utf8')) view_menu = wx.Menu() - view_menu.Append(ID_ACCEUIL, _(u"Home page")) - view_menu.Append(ID_VIEWDATA, _(u"Show data")) - view_menu.Append(ID_RESULT, _(u'Show results')) + view_menu.Append(ID_ACCEUIL, _(u"Home page").decode('utf8')) + view_menu.Append(ID_VIEWDATA, _(u"Show data").decode('utf8')) + view_menu.Append(ID_RESULT, _(u'Show results').decode('utf8')) #view_menu.AppendSeparator() - - analyse_menu = wx.Menu() - analyse_menu.Append(ID_Freq, u"Fréquences") - analyse_menu.Append(ID_Chi2, u"Chi2") - #analyse_menu.Append(ID_Student, u"t de Student") - menu_classif = wx.Menu() - menu_classif.Append(ID_CHDAlceste, u"Méthode Alceste") - menu_classif.Append(ID_CHDSIM, u"Par matrice des distances") - analyse_menu.AppendMenu(-1, u"Classification", menu_classif) - analyse_menu.Append(ID_AFCM, u"AFCM") - analyse_menu.Append(ID_SIMI, u"Analyse de similitudes") + matrix_menu = wx.Menu() + matanalyses = [[ID_Freq, _(u"Frequencies").decode('utf8'), 'freq'], + [ID_Freq, _(u"Multiple Frequencies").decode('utf8'), 'freqmulti'], + [ID_Chi2, _(u"Chi2").decode('utf8'), 'chi2'], + {'name' : _(u"Clustering").decode('utf8'), + 'content' : [[ID_CHDReinert, _(u"Reinert's Method").decode('utf8'), 'reinertmatrix']]}, + [ID_SIMI, _(u"Similarities Analysis").decode('utf8'), 'simimatrix'], + [ID_proto, _(u"Prototypical Analysis").decode('utf8'), 'proto'], + [ID_Splitfromvar, _(u"Split from variable").decode('utf8'), '']] + + for analyse in matanalyses : + if not isinstance(analyse, dict) : + item = wx.MenuItem(matrix_menu, analyse[0], analyse[1]) + item.SetBitmap(self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16))) + matrix_menu.AppendItem(item) + else : + nmenu = wx.Menu() + for subana in analyse['content'] : + item = wx.MenuItem(nmenu, subana[0], subana[1]) + item.SetBitmap(self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16))) + nmenu.AppendItem(item) + matrix_menu.AppendMenu(-1, analyse['name'], nmenu) + #item = wx.MenuItem(matrix_menu, ID_Freq, _(u"Frequencies").decode('utf8')) + #item.SetBitmap(self.images_analyses['freq']) + #matrix_menu.AppendItem(item) + #matrix_menu.Append(ID_Freq, _(u"Frequencies").decode('utf8')) + #item = wx.MenuItem(matrix_menu, ID_Freq, _(u"Multiple Frequencies").decode('utf8')) + #item.SetBitmap(self.images_analyses['freqmulti']) + #matrix_menu.Append(ID_FreqMulti, _(u'Multiple frequencies').decode('utf8')) + #matrix_menu.AppendItem(item) + #matrix_menu.Append(ID_Chi2, _(u"Chi2").decode('utf8')) + #matrix_menu.Append(ID_Student, u"t de Student") + #menu_classif = wx.Menu() + #menu_classif.Append(ID_CHDReinert, _(u"Reinert's Method").decode('utf8')) + #menu_classif.Append(ID_CHDSIM, u"Par matrice des distances") + #matrix_menu.AppendMenu(-1, _(u"Clustering").decode('utf8'), menu_classif) + #matrix_menu.Append(ID_AFCM, u"AFCM") + #matrix_menu.Append(ID_SIMI, _(u"Similarities Analysis").decode('utf8')) + #matrix_menu.Append(ID_proto, _(u"Prototypical Analysis").decode('utf8')) ID_RCODE = wx.NewId() - analyse_menu.Append(ID_RCODE, u"Code R...") - + #matrix_menu.Append(ID_RCODE, u"Code R...") + #menu_splittab = wx.Menu() + #ID_SPLITVAR = wx.NewId() + #splitvar = wx.MenuItem(menu_splittab, ID_SPLITVAR, _(u"Split from variable").decode('utf8')) + #menu_splittab.AppendItem(splitvar) + #matrix_menu.AppendMenu(-1, _(u"Split matrix").decode('utf8'), menu_splittab) + self.matrix_menu = matrix_menu + text_menu = wx.Menu() - text_menu.Append(ID_CHECKCORPUS, u"Vérifier le corpus") - text_menu.Append(ID_TEXTSTAT, u"Statistiques textuelles") - text_menu.Append(ID_ASLEX, u"Spécificités et AFC") - #text_menu.Append(ID_TEXTAFCM, u"AFC sur UCI / Vocabulaire") - menu_classiftxt = wx.Menu() - menu_classiftxt.Append(ID_TEXTALCESTE, u"Méthode Alceste") - menu_classiftxt.Append(ID_TEXTPAM, u"Par matrice des distances") - text_menu.AppendMenu(-1, u"Classification", menu_classiftxt) - text_menu.Append(ID_SimiTxt, u'Analyse de similitude') - ID_WC = wx.NewId() - text_menu.Append(ID_WC, u'Nuage de mots') + analyses_text = [[ID_TEXTSTAT, _(u"Statistics").decode('utf8'), 'stat'], + [ID_ASLEX, _(u"Specificities and CA").decode('utf8'), 'spec'], + {'name' : _(u"Clustering").decode('utf8'), + 'content' : [[ID_TEXTREINERT, _(u"Reinert's Method").decode('utf8'), 'alceste']]}, + [ID_SimiTxt, _(u"Similarities Analysis").decode('utf8'), 'simitxt'], + [ID_WC, _(u"WordCloud").decode('utf8'), 'wordcloud'], + {'name' : _(u"Sub corpus").decode('utf8'), + 'content' : [[ID_Subtxtfrommeta, _(u'Sub corpus from metadata').decode('utf8'), None], + [ID_Subtxtfromthem, _(u'Sub corpus from thematic').decode('utf8'), None]]}, + ] + + for analyse in analyses_text : + if not isinstance(analyse, dict) : + item = wx.MenuItem(text_menu, analyse[0], analyse[1]) + item.SetBitmap(self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16))) + text_menu.AppendItem(item) + else : + nmenu = wx.Menu() + for subana in analyse['content'] : + item = wx.MenuItem(nmenu, subana[0], subana[1]) + item.SetBitmap(self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16))) + nmenu.AppendItem(item) + text_menu.AppendMenu(-1, analyse['name'], nmenu) + #text_menu.Append(ID_CHECKCORPUS, u"Vérifier le corpus") +# text_menu.Append(ID_TEXTSTAT, _(u"Statistics").decode('utf8')) +# text_menu.Append(ID_ASLEX, _(u"Specificities and CA").decode('utf8')) +# #text_menu.Append(ID_TEXTAFCM, u"AFC sur UCI / Vocabulaire") +# menu_classiftxt = wx.Menu() +# menu_classiftxt.Append(ID_TEXTREINERT, _(u"Reinert's Method").decode('utf8')) +# #menu_classiftxt.Append(ID_TEXTPAM, u"Par matrice des distances") +# text_menu.AppendMenu(-1, _(u"Clustering").decode('utf8'), menu_classiftxt) +# text_menu.Append(ID_SimiTxt, _(u"Similarities Analysis").decode('utf8')) +# +# text_menu.Append(ID_WC, _(u"WordCloud").decode('utf8')) + self.text_menu = text_menu help_menu = wx.Menu() - help_menu.Append(wx.ID_ABOUT, u'À propos...') - help_menu.Append(wx.ID_HELP, u'Aide en ligne') + help_menu.Append(wx.ID_ABOUT, _(u"About...").decode('utf8')) + help_menu.Append(wx.ID_HELP, _(u"Online help...").decode('utf8')) - self.mb.Append(file_menu, _(u"File")) - self.mb.Append(edit_menu, _(u"Edition")) - self.mb.Append(view_menu, _(u"View")) - self.mb.Append(analyse_menu, _("Spreadsheet analysis")) - self.mb.Append(text_menu, _(u"Text analysis")) - self.mb.Append(help_menu, _(u"Help")) + self.mb.Append(file_menu, _(u"File").decode('utf8')) + self.mb.Append(edit_menu, _(u"Edition").decode('utf8')) + self.mb.Append(view_menu, _(u"View").decode('utf8')) + self.mb.Append(matrix_menu, _(u"Matrix analysis").decode('utf8')) + self.mb.Append(text_menu, _(u"Text analysis").decode('utf8')) + self.mb.Append(help_menu, _(u"Help").decode('utf8')) self.SetMenuBar(self.mb) #-------------------------------------------------------------------- self.statusbar = self.CreateStatusBar(2, wx.ST_SIZEGRIP) self.statusbar.SetStatusWidths([-2, -3]) - self.statusbar.SetStatusText(u"Prêt", 0) - self.statusbar.SetStatusText(u"Bienvenue", 1) + self.statusbar.SetStatusText(_(u"Ready").decode('utf8'), 0) + self.statusbar.SetStatusText(_(u"Welcome").decode('utf8'), 1) # min size for the frame itself isn't completely done. # see the end up FrameManager::Update() for the test @@ -277,12 +396,31 @@ class IraFrame(wx.Frame): tb1 = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize, wx.TB_FLAT | wx.TB_NODIVIDER) tb1.SetToolBitmapSize(wx.Size(16, 16)) - tb1.AddLabelTool(ID_OpenData, "OpenData", wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN, wx.ART_OTHER, wx.Size(16, 16)), shortHelp="Questionnaire", longHelp="Ouvrir un questionnaire") + tb1.AddLabelTool(ID_OpenData, "OpenData", self.images_analyses['matroot'], shortHelp=_(u"Matrix").decode('utf8'), longHelp=_(u"Open a matrix").decode('utf8')) tb1.AddSeparator() - tb1.AddLabelTool(ID_OpenText, "OpenText", wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN, wx.ART_OTHER, wx.Size(16, 16)), shortHelp="Texte", longHelp="Ouvrir un corpus texte") - + tb1.AddLabelTool(ID_OpenText, "OpenText", self.images_analyses['textroot'], shortHelp=_(u"Text").decode('utf8'), longHelp=_(u"Open a text corpus").decode('utf8')) + tb1.Realize() + tb_text = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize, + wx.TB_FLAT | wx.TB_NODIVIDER) + for analyse in analyses_text : + if not isinstance(analyse, dict) : + tb_text.AddLabelTool(analyse[0], analyse[1], self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16)), shortHelp = analyse[1], longHelp = analyse[1]) + else : + for subana in analyse['content'] : + tb_text.AddLabelTool(subana[0], subana[1], self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)), shortHelp = subana[1], longHelp = subana[1]) + tb_text.Realize() + + tb_mat = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize, + wx.TB_FLAT | wx.TB_NODIVIDER) + for analyse in matanalyses : + if not isinstance(analyse, dict) : + tb_mat.AddLabelTool(analyse[0], analyse[1], self.images_analyses.get(analyse[2], wx.EmptyBitmap(16,16)), shortHelp = analyse[1], longHelp = analyse[1]) + else : + for subana in analyse['content'] : + tb_mat.AddLabelTool(subana[0], subana[1], self.images_analyses.get(subana[2], wx.EmptyBitmap(16,16)), shortHelp = subana[1], longHelp = subana[1]) + tb_mat.Realize() #------------------------------------------------------------------------------------------------ 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) @@ -300,7 +438,7 @@ class IraFrame(wx.Frame): # f.write('') self.history = History(os.path.join(UserConfigPath, 'history.db')) self.tree = LeftTree(self) - self._mgr.AddPane(self.tree, aui.AuiPaneInfo().Name("lefttree").Caption("Navigateur"). + self._mgr.AddPane(self.tree, aui.AuiPaneInfo().Name("lefttree").Caption(_(u"Historic").decode('utf8')). Left().MinSize(wx.Size(200,500)).Layer(1).Position(1).CloseButton(False).MaximizeButton(True). MinimizeButton(True)) @@ -318,9 +456,9 @@ class IraFrame(wx.Frame): self._mgr.AddPane(self.nb, aui.AuiPaneInfo(). Name("Tab_content"). CenterPane()) - self.Sheet = MySheet(self) + #self._mgr.AddPane(self.Sheet, wx.aui.AuiPaneInfo().Name("Data").CenterPane()) - self._mgr.AddPane(self.Sheet, aui.AuiPaneInfo().Name("Data").CenterPane()) + #self._mgr.AddPane(self.Sheet, aui.AuiPaneInfo().Name("Data").CenterPane()) self.nb.Bind(aui.EVT_AUINOTEBOOK_PAGE_CLOSE, self.OnCloseTab) self.nb.Bind(aui.EVT_AUINOTEBOOK_PAGE_CHANGED, self.OnPageChanged) # add the toolbars to the manager @@ -332,7 +470,20 @@ class IraFrame(wx.Frame): self._mgr.AddPane(tb1, aui.AuiPaneInfo(). Name("tb1").Caption("Fichiers"). ToolbarPane().Top(). - LeftDockable(True).RightDockable(False)) + LeftDockable(True).RightDockable(False)) + + self._mgr.AddPane(tb_text, aui.AuiPaneInfo(). + Name("tb_text").Caption("analyse_text"). + ToolbarPane().Top(). + LeftDockable(True).RightDockable(False)) + + self._mgr.AddPane(tb_mat, aui.AuiPaneInfo(). + Name("tb_mat").Caption("analyse_matrix"). + ToolbarPane().Top(). + LeftDockable(True).RightDockable(False)) + + self._mgr.GetPane('tb_text').Hide() + self._mgr.GetPane('tb_mat').Hide() self.ShowAPane("Intro_Text") self._mgr.GetPane("lefttree").Show() @@ -353,27 +504,35 @@ class IraFrame(wx.Frame): self.Bind(wx.EVT_MENU, self.import_factiva_txt, fact_from_txt) self.Bind(wx.EVT_MENU, self.ExtractTools, splitvar) self.Bind(wx.EVT_MENU, self.ExtractTools, extractmod) + self.Bind(wx.EVT_MENU, self.ExtractTools, extractthem) self.Bind(wx.EVT_MENU, self.OnFreq, id=ID_Freq) + self.Bind(wx.EVT_MENU, self.OnFreqMulti, id=ID_FreqMulti) self.Bind(wx.EVT_MENU, self.OnChi2, id=ID_Chi2) self.Bind(wx.EVT_MENU, self.OnStudent, id=ID_Student) self.Bind(wx.EVT_MENU, self.OnCHDSIM, id=ID_CHDSIM) - self.Bind(wx.EVT_MENU, self.OnCHDAlceste, id=ID_CHDAlceste) + self.Bind(wx.EVT_MENU, self.OnCHDReinert, id=ID_CHDReinert) self.Bind(wx.EVT_MENU, self.OnAFCM, id=ID_AFCM) - self.Bind(wx.EVT_MENU, self.OnRCode, id=ID_RCODE) - self.Bind(wx.EVT_MENU, self.OnCheckcorpus, id = ID_CHECKCORPUS) + self.Bind(wx.EVT_MENU, self.OnProto, id=ID_proto) + self.Bind(wx.EVT_MENU, self.OnSplitVar, id = ID_Splitfromvar) + #self.Bind(wx.EVT_MENU, self.OnRCode, id=ID_RCODE) + #self.Bind(wx.EVT_MENU, self.OnSplitVar, id=ID_SPLITVAR) + #self.Bind(wx.EVT_MENU, self.OnCheckcorpus, id = ID_CHECKCORPUS) self.Bind(wx.EVT_MENU, self.OnTextStat, id=ID_TEXTSTAT) self.Bind(wx.EVT_MENU, self.OnTextSpec, id=ID_ASLEX) self.Bind(wx.EVT_MENU, self.OnTextAfcm, id=ID_TEXTAFCM) - self.Bind(wx.EVT_MENU, self.OnTextAlceste, id=ID_TEXTALCESTE) + self.Bind(wx.EVT_MENU, self.OnTextReinert, id=ID_TEXTREINERT) self.Bind(wx.EVT_MENU, self.OnPamSimple, id=ID_TEXTPAM) self.Bind(wx.EVT_MENU, self.OnSimiTxt, id=ID_SimiTxt) self.Bind(wx.EVT_MENU, self.OnWordCloud, id=ID_WC) - self.Bind(wx.EVT_MENU, self.OnSimi, id=ID_SIMI) + self.Bind(wx.EVT_MENU, self.OnSubText, id = ID_Subtxtfrommeta) + self.Bind(wx.EVT_MENU, self.OnSubText, id = ID_Subtxtfromthem) + self.Bind(wx.EVT_MENU, self.OnSimiTab, id=ID_SIMI) self.Bind(wx.EVT_MENU, self.OnExit, id=wx.ID_EXIT) - self.Bind(wx.EVT_MENU, self.OnSaveTabAs, id=ID_SaveTab) + #self.Bind(wx.EVT_MENU, self.OnSaveTabAs, id=ID_SaveTab) self.Bind(wx.EVT_MENU, self.OnAbout, id=wx.ID_ABOUT) self.Bind(wx.EVT_MENU, self.OnHelp, id=wx.ID_HELP) self.Bind(wx.EVT_MENU, self.OnPref, id=wx.ID_PREFERENCES) + self.Bind(wx.EVT_MENU, self.OnImportTXM, id=ID_ImportTXM) self.Bind(wx.EVT_CLOSE, self.OnClose) ################################################################## flags = self._mgr.GetAGWFlags() @@ -411,10 +570,27 @@ class IraFrame(wx.Frame): if self.SysEncoding == 'mac-roman' : self.SysEncoding = 'MacRoman' self.type = '' +##############################################################@ + self.DisEnSaveTabAs(False) + self.ShowMenu('view', False) + self.ShowMenu('matrix', False) + self.ShowMenu('text', False) + + self._mgr.Update() + + self.DataPop = False + self.DataTxt = False + self.Text = '' + + self.lexique = None + self.corpus = None + + def finish_init(self) : try : self.pref.read(self.ConfigPath['preferences']) if IsNew(self) : UpgradeConf(self) + self.pref.read(self.ConfigPath['preferences']) New = True else : CopyConf(self) @@ -423,6 +599,9 @@ class IraFrame(wx.Frame): UpgradeConf(self) self.pref.read(self.ConfigPath['preferences']) New = True + self.sound = self.pref.getboolean('iramuteq', 'sound') + self.check_update = self.pref.getboolean('iramuteq', 'checkupdate') + self.version = ConfigGlob.get('DEFAULT', 'version') #configuration des chemins de R self.PathPath = ConfigParser() self.PathPath.read(ConfigPath['path']) @@ -454,33 +633,25 @@ vous devez signaler le chemin de l'éxecutable de R dans les préférences.""" dlg = wx.MessageDialog(self, msg, u"Problème de configuration", wx.OK | wx.NO_DEFAULT | wx.ICON_WARNING) dlg.CenterOnParent() if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]: - evt.Veto() + pass dlg.Destroy() - self.DataPop = False - self.DataTxt = False - self.Text = '' - self.sound = self.pref.getboolean('iramuteq', 'sound') - self.check_update = self.pref.getboolean('iramuteq', 'checkupdate') - self.version = ConfigGlob.get('DEFAULT', 'version') - self.lexique = None - self.corpus = None -##############################################################@ - self.DisEnSaveTabAs(False) - self.ShowMenu(_("View"), False) - self.ShowMenu(_("Spreadsheet analysis"), False) - self.ShowMenu(_("Text analysis"), False) - - self._mgr.Update() + + def setlangue(self) : + self.pref.read(self.ConfigPath['preferences']) + try : + guilangue = self.pref.get('iramuteq', 'guilanguage') + except : + guilangue = DefaultConf.get('iramuteq', 'guilanguage') + self.preslangue.get(guilangue, 'english').install() def OnVerif(self, evt) : pack = CheckRPackages(self) if pack : - dlg = wx.MessageDialog(self, u"Installation OK", u"Installation", wx.OK | wx.NO_DEFAULT | wx.ICON_INFORMATION) + dlg = wx.MessageDialog(self, _(u"Installation OK").decode('utf8'), _(u"Installation").decode('utf8'), wx.OK | wx.ICON_INFORMATION | wx.STAY_ON_TOP) dlg.CenterOnParent() if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]: - evt.Veto() + evt.Veto() - #FIXME marche pas sous mac ? def DisEnSaveTabAs(self, DISEN): #Disable SaveTabAs file_menu = self.mb.GetMenu(0) @@ -490,73 +661,69 @@ vous devez signaler le chemin de l'éxecutable de R dans les préférences.""" item.Enable(DISEN) def ShowMenu(self, menu, Show=True): - menu_pos = self.mb.FindMenu(menu) - self.mb.EnableTop(menu_pos, Show) - self.mb.UpdateMenus() - + if menu == 'text' : + menu_pos = 4 + if Show : + self._mgr.GetPane('tb_text').Show() + else : + self._mgr.GetPane('tb_text').Hide() + elif menu == 'matrix' : + menu_pos = 3 + if Show : + self._mgr.GetPane('tb_mat').Show() + else : + self._mgr.GetPane('tb_mat').Hide() + elif menu == 'view' : + menu_pos = 2 + else : + menu_pos = None + + #menu_pos = self.mb.FindMenu(menu) + if not menu_pos is None : + self.mb.EnableTop(menu_pos, Show) + self.mb.UpdateMenus() + self._mgr.Update() #-------------------------------------------------------------------- def OnClose(self, event): print 'onclose' with open(self.ConfigPath['path'], 'w') as f : self.PathPath.write(f) - if self.DictTab != {} : - savestates = [self.DictTab[item][0] for item in self.DictTab] - if False in savestates : - notsave = [item for item in self.DictTab if self.DictTab[item][0] == False] - msg = u""" - Certains résultats ne sont pas enregistrés. - Voulez-vous fermer quand même ?""" - dlg = wx.MessageDialog(self, msg, "Sauvegarde", - wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION) - dlg.CenterOnParent() - if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]: - event.Veto() - dlg.Destroy() - else: - dlg.Destroy() - for item in notsave : - for tmpfile in self.DictTab[item][1:] : - os.remove(tmpfile) - print 'remove : ' + tmpfile - self._mgr.UnInit() - del self._mgr - self.Destroy() - else : - self._mgr.UnInit() - del self._mgr - self.Destroy() - else : - self._mgr.UnInit() - del self._mgr - self.Destroy() - #if sys.platform == 'win32' : - # os.system("taskkill /im iramuteq.exe /f") - # print 'meurtre de process' + self._mgr.UnInit() + del self._mgr + self.Destroy() def OnOpenData(self, event): inputname, self.input_path = OnOpen(self, "Data") if inputname: - self.filename = self.input_path[0] + #filename = self.input_path[0] self.tableau = Tableau(self,os.path.abspath(self.input_path[0])) - get_table_param(self, self.input_path[0]) - self.tableau.make_content() - self.tableau.show_tab() + val = get_table_param(self, self.input_path[0]) + if val == wx.ID_OK : + busy = wx.BusyInfo(_("Please wait...").decode('utf8'), self) + wx.SafeYield() + try : + self.tableau.make_content() + OpenAnalyse(self, self.tableau.parametres) + self.tree.OnItemAppend(self.tableau.parametres) + del busy + except : + del busy + BugReport(self) + #self.tableau.show_tab() def OnOpenAnalyse(self, event): self.AnalysePath = OnOpen(self, "Analyse") OpenAnalyse(self, self.AnalysePath[1][0], True) - self.ShowMenu(_("View")) + self.ShowMenu('view') def OnOpenText(self, event): inputname, self.input_path = OnOpen(self, "Texte") self.filename = self.input_path[0] if inputname: - self.OpenText() + self.OpenText() def OnViewData(self, event): - print self.type - print self.DataTxt if self.type == "Data": if not self.DataPop : self.Sheet.Populate(self.content) @@ -572,9 +739,25 @@ vous devez signaler le chemin de l'éxecutable de R dans les préférences.""" self.DataPop = False self.ShowAPane(u"Text") self._mgr.Update() - + + def OnSubText(self, evt, corpus = None, parametres = None): + if corpus is None : + corpus = self.tree.getcorpus() + if evt.GetId() == ID_Subtxtfrommeta : + parametres = {'frommeta' : True} + elif evt.GetId() == ID_Subtxtfromthem : + parametres = {'fromtheme' : True} + builder = SubBuilder(self, corpus, parametres) + if builder.res == wx.ID_OK : + busy = wx.BusyInfo(_("Please wait...").decode('utf8'), self) + wx.SafeYield() + corpus = builder.doanalyse() + self.history.add(corpus.parametres) + self.tree.OnItemAppend(corpus.parametres) + OpenAnalyse(self, corpus.parametres) + del busy + def OpenText(self): - #dial = EncodeDialog(self) dlg = wx.ProgressDialog("Ouverture...", "Veuillez patienter...", maximum=2, @@ -590,35 +773,14 @@ vous devez signaler le chemin de l'éxecutable de R dans les préférences.""" self.tree.OnItemAppend(corpus.parametres) OpenAnalyse(self, corpus.parametres) except : + dlg.Destroy() BugReport(self) - #self.content = DoConf().totext(corpus.parametres) -# parametres = DoConf(os.path.join(UserConfigPath,'corpus.cfg')).getoptions('corpus') -# parametres['originalpath'] = self.filename -# -# parametres['pathout'] = PathOut(self.filename, 'corpus').dirout -# dial = CorpusPref(self, parametres) -# dial.CenterOnParent() -# dial.txtpath.SetLabel(self.filename) -# res = dial.ShowModal() -# parametres = dial.doparametres() -# print parametres -# ReadLexique(self, lang = parametres['lang']) -# self.expressions = ReadDicoAsDico(self.DictPath.get(parametres['lang'], 'french_exp')) -# corpus = BuildFromAlceste(self.filename, parametres, self.lexique, self.expressions).corpus - #self.corpus_encodage = dial.encodages[dial.list_encodages.GetSelection()][0] - #self.corpus_lang = dial.langues[dial.choice_dict.GetSelection()] else : count = 1 keepGoing = dlg.Update(count, u"Lecture du fichier") - # msg = u"Ce fichier ne semble pas être encodé en %s" % self.corpus_encodage - # dial = wx.MessageDialog(self, msg, u"Problème d'encodage", wx.OK | wx.NO_DEFAULT | wx.ICON_WARNING) - # dial.CenterOnParent() - # res = dial.ShowModal() - # dial.Destroy() - # self.OpenText() - self.ShowMenu(_("View")) - self.ShowMenu(_("Text analysis")) - self.ShowMenu(_(u"Spreadsheet analysis"), False) + self.ShowMenu('view') + self.ShowMenu('text') + self.ShowMenu('matrix', False) self.type = "Texte" self.DataTxt = False self.Text = '' @@ -647,7 +809,7 @@ Laboratoire LERASS REPERE """ info.WebSite = ("http://www.iramuteq.org", u"Site web IRaMuTeQ") - dev = ConfigGlob.get('DEFAULT', 'dev').split(';') + dev = ConfigGlob.get('DEFAULT', 'dev').decode('utf8').split(';') info.Developers = dev info.License = u"""Iramuteq est un logiciel libre ; vous pouvez le diffuser et/ou le modifier suivant les termes de la Licence Publique Générale GNU telle que publiée @@ -676,7 +838,14 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis.""" parent = nobject.GetParent() if isinstance(parent, IraFrame) : npage = self.nb.GetPage(new) - self.tree.GiveFocus(uuid=npage.parametres['uuid']) + if 'parametres' in dir(npage) : + self.tree.GiveFocus(uuid=npage.parametres['uuid']) + if npage.parametres.get('matrix', False) : + self.ShowMenu('text', False) + self.ShowMenu('matrix', True) + elif npage.parametres.get('corpus', False) : + self.ShowMenu('text') + self.ShowMenu('matrix', False) def OnCloseTab(self, evt): #log.info('Closing tab %s' % str(evt.GetEventObject())) @@ -690,40 +859,13 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis.""" self.history.rmtab(page.parametres) self.tree.CloseItem(uuid = page.parametres['uuid']) TabTitle = self.nb.GetPageText(self.nb.GetSelection()) - if self.DictTab != {} : - if TabTitle in self.DictTab : - ListFile=self.DictTab[TabTitle] - if False in ListFile: - msg = u""" -Certains résultats ne sont pas enregistrer. -Voulez-vous fermer quand même ?""" - dlg = wx.MessageDialog(self, msg, "Sauvegarde",wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION) - - dlg.CenterOnParent() - if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]: - remove = False - evt.Veto() - dlg.Destroy() - else : - for f in ListFile[1:] : - print 'remove', f - os.remove(f) - remove = True - dlg.Destroy() - elif True in ListFile : - remove = True - if remove: - del self.DictTab[TabTitle] - else : - self.LastTabClose() - else : - remove = True - if self.nb.GetPageCount() == 1 and remove and not notebook : + + if self.nb.GetPageCount() == 1 and not notebook : self.LastTabClose() def LastTabClose(self) : if self.nb.GetPageCount() == 1 : - self.DisEnSaveTabAs(False) + #self.DisEnSaveTabAs(False) if self.DataTxt : self.ShowAPane("Text") elif self.DataPop : @@ -731,40 +873,6 @@ Voulez-vous fermer quand même ?""" else : self.ShowAPane("Intro_Text") - def OnSaveTabAs(self, event): - SelectTab = self.nb.GetSelection() - TabTitle = self.nb.GetPageText(SelectTab) - FileToSave = self.DictTab[TabTitle] - NewListFile = [] - dlg = wx.FileDialog( - self, message="Enregistrer sous...", defaultDir=os.getcwd(), - defaultFile="resultat.html", wildcard="Tous les fichiers|*", style=wx.SAVE | wx.OVERWRITE_PROMPT - ) - dlg.SetFilterIndex(2) - dlg.CenterOnParent() - - if dlg.ShowModal() == wx.ID_OK: - Path = dlg.GetPath() - Dirname = os.path.dirname(Path) - Filename = dlg.GetFilename() - else : - Path = False - dlg.Destroy() - if Path: - shutil.copyfile(FileToSave[-1], Path) - os.remove(FileToSave[len(FileToSave) - 1]) - NewListFile.append(True) - NewListFile.append(Path) - for f in FileToSave[1:-1] : - Fileout = os.path.join(Dirname, os.path.basename(f)) - shutil.copyfile(f, Fileout) - NewListFile.append(Fileout) - os.remove(f) - TabText = Filename - self.DictTab[TabText] = NewListFile - del self.DictTab[TabTitle] - self.nb.SetPageText(SelectTab, TabText) - def GetStartPosition(self): self.x = self.x + 20 @@ -797,20 +905,37 @@ Voulez-vous fermer quand même ?""" ################################################################ #debut des analyses ################################################################ - - def OnFreq(self, event): - try: - Frequences(self) - except: - BugReport(self) - - def OnChi2(self, event): - try: - # print('PAS DE DEBUG SUR CHI2') - chi = ChiSquare(self) + def analyse_matrix(self, analyse, analyse_type = '', matrix = None, parametres = None, dlgnb = 1): + if matrix is None : + matrix = self.tree.getmatrix() + if parametres is not None : + parametres['type'] = analyse_type + else : + parametres = {'type' : analyse_type} + try : + #print 'plus de bug@@@@@@@@@@@@@@@@@@@@@@' + analyse(self, matrix, parametres = parametres, dlg = dlgnb) except: - BugReport(self) + BugReport(self) + + def OnFreq(self, event, matrix = None): + self.analyse_matrix(Frequences, analyse_type = 'freq', matrix = matrix, dlgnb = 3) + def OnFreqMulti(self, event, matrix = None): + self.analyse_matrix(FreqMultiple, analyse_type = 'freqmulti', matrix = matrix, dlgnb = 3) + + def OnChi2(self, event, matrix = None): + self.analyse_matrix(ChiSquare, matrix = matrix, analyse_type = 'chi2', dlgnb = 3) + + def OnSimiTab(self, event, matrix = None): + self.analyse_matrix(DoSimi, matrix = matrix, analyse_type = 'simimatrix', dlgnb = 5) + + def OnCHDReinert(self, event, matrix = None): + #if matrix is None : + # matrix = self.tree.getmatrix() + #AnalyseQuest(self, matrix, parametres = {'type' : 'reinertmatrix'}, dlg = 3) + self.analyse_matrix(AnalyseQuest, matrix = matrix, analyse_type = 'reinertmatrix', dlgnb = 5) + def OnStudent(self, event): try: MakeStudent(self) @@ -832,14 +957,25 @@ Voulez-vous fermer quand même ?""" except: BugReport(self) - def OnCHDAlceste(self, event): - try: - # print('PLUS DE BUG SUR ALCESTE QUESTIONNAIRE') - self.quest = AnalyseQuest(self) - if self.quest.val == wx.ID_OK: - PlaySound(self) - except: - BugReport(self) +# def OnCHDReinert(self, event): +# try: +# # print('PLUS DE BUG SUR ALCESTE QUESTIONNAIRE') +# self.quest = AnalyseQuest(self) +# if self.quest.val == wx.ID_OK: +# PlaySound(self) +# except: +# BugReport(self) + + def OnProto(self, evt, matrix = None) : + self.analyse_matrix(Prototypical, matrix = matrix, analyse_type = 'proto', dlgnb = 3) + #Prototypical(self, {'type' : 'proto'}) + + def OnSplitVar(self, evt, matrix = None): + if matrix is None : + matrix = self.tree.getmatrix() + self.analyse_matrix(SplitMatrixFromVar, matrix = matrix, analyse_type = 'splitvar', parametres = {'pathout': matrix.pathout.dirout}, dlgnb = 3) + #matrix = self.tree.getmatrix() + def OnSimiTxt(self, evt, corpus = None) : # print 'PLUS DE BUG SUR SIMITXT' @@ -847,7 +983,7 @@ Voulez-vous fermer quand même ?""" #self.Text = SimiTxt(self) if corpus is None : corpus = self.tree.getcorpus() - self.Text = SimiTxt(self, corpus, parametres = {'type': 'simitxt'}, dlg = progressbar(self, 3)) + self.Text = SimiTxt(self, corpus, parametres = {'type': 'simitxt'}, dlg = 3) if self.Text.val == wx.ID_OK : PlaySound(self) except : @@ -858,12 +994,14 @@ Voulez-vous fermer quand même ?""" try : if corpus is None : corpus = self.tree.getcorpus() - self.Text = WordCloud(self, corpus, parametres = {'type' : 'wordcloud'}, dlg = progressbar(self, 3)) + self.Text = WordCloud(self, corpus, parametres = {'type' : 'wordcloud'}, dlg = 3) if self.Text.val == wx.ID_OK : PlaySound(self) except : BugReport(self) + def OnClusterCloud(self, corpus, parametres = None) : + self.Text = ClusterCloud(self, corpus, parametres = parametres, dlg = 3) def OnAFCM(self, event): try: @@ -871,35 +1009,29 @@ Voulez-vous fermer quand même ?""" except: BugReport(self) - def OnCheckcorpus(self, evt): - try : - checkcorpus(self) - except : - BugReport(self) - def OnTextStat(self, event, corpus = None): - print 'PAS DE BUG SUR TEXT STAT' - #try: + #print 'PAS DE BUG SUR TEXT STAT' + try: if corpus is None : corpus = self.tree.getcorpus() - self.Text = Stat(self, corpus, parametres = {'type': 'stat'}, dlg = progressbar(self, 7)) + self.Text = Stat(self, corpus, parametres = {'type': 'stat'}, dlg = 7) if self.Text.val == wx.ID_OK : PlaySound(self) - #except: - # BugReport(self) + except: + BugReport(self) def OnTextSpec(self, event, corpus = None): - #try: + try: #self.Text = AsLexico(self) - print('ATTENTION : PLUS DE BUG SUR LEXICO') + #print('ATTENTION : PLUS DE BUG SUR LEXICO') if corpus is None : corpus = self.tree.getcorpus() - self.Text = Lexico(self, corpus, parametres = {'type' : 'spec'}, dlg = progressbar(self, 3)) + self.Text = Lexico(self, corpus, parametres = {'type' : 'spec'}, dlg = 3) if self.Text.val == wx.ID_OK : PlaySound(self) - #except: - # BugReport(self) + except: + BugReport(self) def OnTextAfcm(self, event): try: @@ -926,42 +1058,56 @@ Voulez-vous fermer quand même ?""" except : BugReport(self) + def OnImportTXM(self, evt) : + try : + ImportFactiva(self, 'txm') + except : + BugReport(self) + def ExtractTools(self, evt) : ID = evt.GetId() if ID == self.ID_splitvar : Extract(self, 'splitvar') - else : + elif ID == self.ID_extractmod : Extract(self, 'mods') + elif ID == self.ID_extractthem : + Extract(self, 'them') - def OnTextAlceste(self, event, corpus = None): + def OnTextReinert(self, event, corpus = None): try: #print('ATTENTION : PLUS DE BUG SUR ALCESTE') #RunAnalyse(self, corpus, Alceste, OptAlceste) if corpus is None : corpus = self.tree.getcorpus() - self.Text = Alceste(self, corpus, parametres = {'type': 'alceste'}, dlg = progressbar(self,6)) + self.Text = Reinert(self, corpus, parametres = {'type': 'alceste'}, dlg = 6) if self.Text.val == wx.ID_OK: PlaySound(self) except: BugReport(self) - def OnPamSimple(self, event): + def OnPamSimple(self, event, corpus = None): try: - self.Text = PamTxt(self) + if corpus is None : + corpus = self.tree.getcorpus() + self.Text = AnalysePam(self, corpus, parametres = {'type' : 'pamtxt'}, dlg = 6) if self.Text.val == wx.ID_OK: PlaySound(self) except: BugReport(self) + + def SimiCluster(self, parametres = {}, fromprof = False, tableau = None) : + self.analyse_matrix(DoSimi, parametres = parametres, analyse_type = 'simiclustermatrix', matrix = tableau, dlgnb = 5) - def OnSimi(self,evt): - try : +# def OnSimi(self,evt): +# try : #print 'ATTENTION !!!! VERGES' - self.res = DoSimi(self, param = None) + #print 'PLUS DE BUG SUR SIMI' +# self.res = DoSimi(self, param = None) #self.res = Verges(self) - if self.res.val == wx.ID_OK : - PlaySound(self) - except : - BugReport(self) +# if self.res.val == wx.ID_OK : +# PlaySound(self) +# except : +# BugReport(self) ################################################################# def OnHelp(self, event): @@ -997,9 +1143,14 @@ Voulez-vous fermer quand même ?""" if truepath : if os.path.splitext(self.filename)[1] in ['.csv', '.xls', '.ods']: self.tableau = Tableau(self, self.filename) - get_table_param(self, self.filename) - self.tableau.make_content() - self.tableau.show_tab() + val = get_table_param(self, self.filename) + if val == wx.ID_OK : + self.tableau.make_content() + OpenAnalyse(self, self.tableau.parametres) + self.tree.OnItemAppend(self.tableau.parametres) + #get_table_param(self, self.filename) + #self.tableau.make_content() + #self.tableau.show_tab() #open_data(self, self.filename) elif os.path.splitext(self.filename)[1] == '.txt': self.OpenText() @@ -1015,11 +1166,11 @@ Voulez-vous fermer quand même ?""" class IntroPanel(wx.Panel): def __init__(self, parent): wx.Panel.__init__(self, parent) - #col = randint(0, 255) - #col1 = randint(0,255) - #col2 = randint(0,255) - col = 0 - bckgrdcolor = wx.Colour(col, col, col) + col = randint(0, 255) + col1 = randint(0,255) + col2 = randint(0,255) + col = 57 + bckgrdcolor = wx.Colour(col, col1, col2) self.SetBackgroundColour(bckgrdcolor) txtcolour = wx.Colour(250, 250, 250) linkcolor = wx.Colour(255, 0, 0) @@ -1061,7 +1212,7 @@ class IntroPanel(wx.Panel): self.hyper_lerass.UpdateLink() blank = wx.StaticText(PanelPres, -1, u'\n') blank1 = wx.StaticText(PanelPres, -1, u'\n') - labellicence = wx.StaticText(PanelPres, -1, u'Licence GNU GPL') + labellicence = wx.StaticText(PanelPres, -1, _(u"License GNU GPL").decode('utf8')) labellicence.SetForegroundColour(txtcolour) labellicence.SetBackgroundColour(bckgrdcolor) labelcopy = wx.StaticText(PanelPres, -1, ConfigGlob.get('DEFAULT', 'copyright')) @@ -1135,8 +1286,12 @@ class MySplashScreen(wx.SplashScreen): self.ShowMain() def ShowMain(self): - frame = IraFrame(None, -1, "IRaMuTeQ " + ConfigGlob.get('DEFAULT', 'version'), size=(1100, 800)) + displaySize = wx.DisplaySize() + w = displaySize[0]/1.2 + h = displaySize[1]/1.2 + frame = IraFrame(None, -1, "IRaMuTeQ " + ConfigGlob.get('DEFAULT', 'version'), size=(w, h)) frame.Show() + frame.finish_init() frame.Upgrade() frame.OnOpenFromCmdl() # if self.fc.IsRunning():