#------------------------------------
import wx
#import wx.aui
-#import wx.lib.agw.aui as aui
-import agw.aui as aui
+if wx.__version__ >= '2.11' :
+ import wx.lib.agw.aui as aui
+else :
+ import aui
import wx.html
import wx.grid
import wx.lib.hyperlink as hl
-#from wx.lib.wordwrap import wordwrap
#------------------------------------
from functions import BugReport, PlaySound, ReadLexique, History, DoConf, ReadDicoAsDico, progressbar
from checkversion import NewVersion
from textdist import PamTxt
from textstat import Stat
from textaslexico import Lexico
-from textsimi import SimiTxt
+from textsimi import SimiTxt, SimiFromCluster
from textwordcloud import WordCloud
from profile_segment import ProfileSegment
from textcheckcorpus import checkcorpus
from openanalyse import OpenAnalyse
-from corpusNG import BuildFromAlceste, Builder
+from corpus import BuildFromAlceste, Builder
from sheet import MySheet
-from checkinstall import CreateIraDirectory, CheckRPath, FindRPAthWin32, FindRPathNix, CheckRapp, CheckRPackages, IsNew, UpgradeConf, CopyConf, RLibsAreInstalled
+from checkinstall import CreateIraDirectory, CheckRPath, FindRPAthWin32, FindRPathNix, CheckRPackages, IsNew, UpgradeConf, CopyConf, RLibsAreInstalled
from chemins import ConstructRscriptsPath, ConstructConfigPath, ConstructDicoPath, ConstructGlobalPath, PathOut
from parse_factiva_xml import ImportFactiva
+from tools import Extract
+
from tree import LeftTree
##########################################################
ID_OpenData = wx.NewId()
else :
sys.setdefaultencoding(locale.getpreferredencoding())
#chemin de l'application
-#print 'ATTENTION APPLIPATH'
AppliPath = os.path.abspath(os.path.dirname(os.path.realpath(sys.argv[0])))
-#AppliPath = '/home/pierre/workspace/iramuteqNG'
#chemin des images
ImagePath = os.path.join(AppliPath, 'images')
#configuration generale
#Si pas de fichiers de config utilisateur, on cree le repertoire
CreateIraDirectory(UserConfigPath, AppliPath)
#fichiers log pour windows (py2exe)
-print 'PLUS DE LOG !!!!!!!!!!'
-print 'LOGGING TEST'
log = logging.getLogger('iramuteq')
fh = logging.FileHandler(os.path.join(UserConfigPath,'stdout.log'))
ch = logging.StreamHandler()
-formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
+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' or sys.platform != 'darwin':
+ log.addHandler(ch)
log.setLevel(logging.INFO)
-#debug = False
-#if not debug :
-# if sys.platform == 'win32' or sys.platform == 'darwin':
-# sys.stdout = open(os.path.join(UserConfigPath,'stdout.log'), 'w')
-# sys.stderr = open(os.path.join(UserConfigPath,'stderr.log'), 'w')
-#chemin des fichiers de configuration utilisateur
-#print sys.argv[0]
+
+
+class writer(object):
+ def write(self, data):
+ if data.strip() != '' :
+ 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)
#####################################################################
self.images_path = os.path.join(AppliPath,'images')
self.UserConfigPath = UserConfigPath
self.RscriptsPath = ConstructRscriptsPath(AppliPath)
- self.DictPath = ConstructDicoPath(AppliPath)
+ #self.DictPath = ConstructDicoPath(AppliPath)
+ self.DictPath = ConstructDicoPath(UserConfigPath)
self.ConfigGlob = ConfigGlob
self.ConfigPath = ConstructConfigPath(UserConfigPath)
self.pref = RawConfigParser()
+ #workaround for import problem
+ self.SimiFromCluster = SimiFromCluster
#langues
mylocale = wx.Locale(wx.LANGUAGE_FRENCH)
mylocale.AddCatalogLookupPathPrefix(os.path.join(AppliPath,'locale'))
item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN))
file_menu.AppendItem(item)
- item1 = wx.MenuItem(file_menu, ID_Import, _(u"Import a factiva corpora..."), _("Import a factiva corpora..."))
- item1.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_TIP))
- file_menu.AppendItem(item1)
- #item1.Enable(True)
-
+
+ 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"))
+ menuFactiva.AppendItem(fact_from_xml)
+ menuFactiva.AppendItem(fact_from_mail)
+ menuFactiva.AppendItem(fact_from_txt)
+ file_menu.AppendMenu(-1, _(u"Import from factiva"), menuFactiva)
+
+ menuTools = wx.Menu()
+ splitvar = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Split from variable"))
+ extractmod = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Extract mods"))
+ menuTools.AppendItem(splitvar)
+ menuTools.AppendItem(extractmod)
+ self.ID_splitvar = splitvar.GetId()
+ self.ID_extractmod = extractmod.GetId()
+ file_menu.AppendMenu(-1, _(u"Tools"), 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))
- #item.Enable(False)
file_menu.AppendItem(item)
file_menu.Append(wx.ID_EXIT, _(u"Exit"))
# CenterPane())
self._mgr.AddPane(IntroPanel(self), aui.AuiPaneInfo().Name("Intro_Text").
CenterPane())
- if not os.path.exists(os.path.join(UserConfigPath, 'history.db')) :
- with open(os.path.join(UserConfigPath, 'history.db'), 'w') as f :
- f.write('')
+ #if not os.path.exists(os.path.join(UserConfigPath, 'history.db')) :
+ # with open(os.path.join(UserConfigPath, 'history.db'), 'w') as f :
+ # 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.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.nb.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CLOSE, self.OnCloseTab)
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
self.Bind(wx.EVT_MENU, self.OnOpenData, id=ID_OpenData)
self.Bind(wx.EVT_MENU, self.OnOpenText, id=ID_OpenText)
self.Bind(wx.EVT_MENU, self.OnOpenAnalyse, id=ID_OnOpenAnalyse)
- self.Bind(wx.EVT_MENU, self.import_factiva, id= ID_Import)
+ self.Bind(wx.EVT_MENU, self.import_factiva_xml, fact_from_xml)
+ self.Bind(wx.EVT_MENU, self.import_factiva_mail, fact_from_mail)
+ 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.OnFreq, id=ID_Freq)
self.Bind(wx.EVT_MENU, self.OnChi2, id=ID_Chi2)
self.Bind(wx.EVT_MENU, self.OnStudent, id=ID_Student)
Le chemin de l'executable de R n'a pas été trouvé.
Si R n'est pas installé, vous devez l'installer (http://www.r-project.org/).
Si R n'est pas installé dans le répertoire par défaut
-(C:\Program Files\R\R-2.x.x\R.exe sous windows ou /usr/bin/R sous linux ou Mac Os X)
+(souvent C:\Program Files\R\R-2.x.x\R.exe sous windows ou /usr/bin/R sous linux ou Mac Os X)
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()
- else :
- print 'ok'
- if sys.platform == 'darwin':
- self.Rapp = self.PathPath.get('PATHS', 'rapp')
- RappOk = CheckRapp(self.Rapp)
+ dlg.Destroy()
self.DataPop = False
self.DataTxt = False
self.Text = ''
#Disable SaveTabAs
file_menu = self.mb.GetMenu(0)
items = file_menu.GetMenuItems()
- items[4].Enable(DISEN)
+ for item in items :
+ if item.GetId() == ID_SaveTab :
+ item.Enable(DISEN)
def ShowMenu(self, menu, Show=True):
menu_pos = self.mb.FindMenu(menu)
self._mgr.UnInit()
del self._mgr
self.Destroy()
- ##FIXME
#if sys.platform == 'win32' :
# os.system("taskkill /im iramuteq.exe /f")
# print 'meurtre de process'
self.tree.GiveFocus(uuid=npage.parametres['uuid'])
def OnCloseTab(self, evt):
- log.info('Closing tab %s' % str(evt.GetEventObject()))
+ #log.info('Closing tab %s' % str(evt.GetEventObject()))
ctrl = evt.GetEventObject()
if isinstance(ctrl.GetParent(), aui.AuiNotebook) or isinstance(ctrl.GetParent(), wx.Panel):
notebook = True
else :
notebook = False
page = self.nb.GetPage(self.nb.GetSelection())
- if 'parametres' in dir(page) :
+ if 'parametres' in dir(page) and isinstance(ctrl.GetParent(), IraFrame) :
self.history.rmtab(page.parametres)
self.tree.CloseItem(uuid = page.parametres['uuid'])
TabTitle = self.nb.GetPageText(self.nb.GetSelection())
def OnAcceuil(self, event):
self.ShowAPane(u"Intro_Text")
event.Skip()
- #???
-# def OnCreateTab(self, event):
-# if not self._mgr.GetPane("Tab_content").name == "Tab_content":
-# self._mgr.AddPane(self.CreateTabCtrl(), aui.AuiPaneInfo().
-# Name("Tab_content").
-# CenterPane())
-# self._mgr.GetPane("Intro_Text").Hide()
-# self._mgr.GetPane("Tab_content").Show()
-# self.ctrl.Bind(aui.EVT_AUINOTEBOOK_PAGE_CLOSE, self.OnCloseTab)
-# else :
-# page = wx.TextCtrl(self, -1, str(text), style=wx.TE_MULTILINE)
-# self.ctrl.AddPage(page, "qsdqsd")
-# self.ctrl.SetSelection(self.ctrl.GetPageCount() - 1)
-# self._mgr.Update()
-
def CreateHTMLCtrl(self):
ctrl = wx.html.HtmlWindow(self, -1, wx.DefaultPosition, wx.Size(400, 300))
BugReport(self)
def OnSimiTxt(self, evt, corpus = None) :
- print 'PLUS DE BUG SUR SIMITXT'
- #try :
+ # print 'PLUS DE BUG SUR SIMITXT'
+ try :
#self.Text = SimiTxt(self)
+ if corpus is None :
+ corpus = self.tree.getcorpus()
self.Text = SimiTxt(self, corpus, parametres = {'type': 'simitxt'}, dlg = progressbar(self, 3))
if self.Text.val == wx.ID_OK :
PlaySound(self)
- #except :
- # BugReport(self)
+ except :
+ BugReport(self)
def OnWordCloud(self, evt, corpus = None) :
# print 'PLUS DE BUG SUR WORDCLOUD'
try :
+ if corpus is None :
+ corpus = self.tree.getcorpus()
self.Text = WordCloud(self, corpus, parametres = {'type' : 'wordcloud'}, dlg = progressbar(self, 3))
if self.Text.val == wx.ID_OK :
PlaySound(self)
def OnTextStat(self, event, corpus = None):
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))
if self.Text.val == wx.ID_OK :
#try:
#self.Text = AsLexico(self)
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))
if self.Text.val == wx.ID_OK :
PlaySound(self)
except:
BugReport(self)
- def import_factiva(self,event):
+ def import_factiva_xml(self,event):
try :
- ImportFactiva(self)
+ ImportFactiva(self, 'xml')
except :
BugReport(self)
+ def import_factiva_mail(self, evt) :
+ try :
+ ImportFactiva(self, 'mail')
+ except :
+ BugReport(self)
+
+ def import_factiva_txt(self, evt) :
+ try :
+ ImportFactiva(self, 'txt')
+ except :
+ BugReport(self)
+
+ def ExtractTools(self, evt) :
+ ID = evt.GetId()
+ if ID == self.ID_splitvar :
+ Extract(self, 'splitvar')
+ else :
+ Extract(self, 'mods')
+
def OnTextAlceste(self, event, corpus = None):
- #try:
- print('ATTENTION : PLUS DE BUG SUR ALCESTE')
+ 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.history.addtab(self.Text.parametres)
- #OpenAnalyse(self, self.Text.parametres['ira'])
if self.Text.val == wx.ID_OK:
PlaySound(self)
- #except:
- # BugReport(self)
+ except:
+ BugReport(self)
def OnPamSimple(self, event):
try:
bmp = wx.Image(os.path.join(ImagePath, 'splash.png')).ConvertToBitmap()
wx.SplashScreen.__init__(self, bmp,
wx.SPLASH_CENTRE_ON_SCREEN | wx.SPLASH_TIMEOUT,
- 1000, None, -1)
+ 2000, None, -1)
self.Bind(wx.EVT_CLOSE, self.OnClose)
- self.fc = wx.FutureCall(1500, self.ShowMain)
+ self.fc = wx.FutureCall(1, self.ShowMain)
def OnClose(self, evt):
evt.Skip()