#Copyright (c) 2008-2009 Pierre Ratinaud
#License: GNU/GPL
import wx
+import wx.html
import wx.lib.colourselect as csel
import wx.lib.sized_controls as sc
import wx.lib.filebrowsebutton as filebrowse
from functions import DoConf, exec_rcode, translation_languages
import os
from shutil import copyfile
-from PrintRScript import barplot, ChronoChi2Script, ChronoPropScript
+from PrintRScript import barplot, ChronoChi2Script, ChronoPropScript, ChronoggScript
import tempfile
import sys
from KeyFrame import AlcOptFrame
import wx.lib.hyperlink as hl
+
#---------------------------------------------------------------------------
provider = wx.SimpleHelpProvider()
wx.HelpProvider_Set(provider)
elif sheet :
label = wx.StaticText(self, -1, u"Feuille ")
grid_sizer.Add(label, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 5)
- self.spin1 = wx.SpinCtrl(self, -1, '',size = (100,30), min=1, max=500)
+ self.spin1 = wx.SpinCtrl(self, -1, '',size = wx.DefaultSize, min=1, max=500)
grid_sizer.Add(self.spin1, 1, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 5)
sizer.Add(grid_sizer, 0, wx.GROW | wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5)
if self.paramgraph['clnb'] <= 3 :
choix = [u'2D', 'web 2D']
else :
- choix=[u'2D' ,u'3D', 'web 2D', 'web 3D']
+ choix=[u'2D' ,u'3D', 'web 2D', 'web 3D', 'Blender']
self.choicetype = wx.Choice(self, -1, (100,50), choices=choix)
self.label_format = wx.StaticText(self, -1, _(u"Picture format").decode('utf8'))
self.choix_format = wx.Choice(self, -1, (100,50), choices = ['png', 'svg'])
self.label_1 = wx.StaticText(self, -1, _(u"width").decode('utf8'))
- self.spin1 = wx.SpinCtrl(self, -1, '',size = (100,30), min=100, max=5000)
+ self.spin1 = wx.SpinCtrl(self, -1, '',size = wx.DefaultSize, min=100, max=5000)
self.label_2 = wx.StaticText(self, -1, _(u"height").decode('utf8'))
- self.spin2 = wx.SpinCtrl(self, -1, '', size = (100,30), min=100, max=5000)
+ self.spin2 = wx.SpinCtrl(self, -1, '', size = wx.DefaultSize, min=100, max=5000)
self.label_what = wx.StaticText(self, -1, _(u"Representation").decode('utf8'))
self.choice1 = wx.Choice(self, -1, (100,50), choices=[_(u"coordinates").decode('utf8'),_(u"correlations").decode('utf8')])
self.label_qui = wx.StaticText(self, -1, u'Variables')
self.choice2 = wx.Choice(self, -1, (100,50), choices=[_(u"actives").decode('utf8') ,_(u"supplementaries").decode('utf8'), _(u"stars").decode('utf8'), _(u"clusters").decode('utf8')])
self.label_3 = wx.StaticText(self, -1, _(u"Text size").decode('utf8'))
- self.spin3 = wx.SpinCtrl(self, -1, '', size = (100,30), min=1, max=20)
+ self.spin3 = wx.SpinCtrl(self, -1, '', size = wx.DefaultSize, min=1, max=20)
txt = _(u"Take the x first points").decode('utf8')
self.label_4 = wx.StaticText(self, -1, txt)
self.check1 = wx.CheckBox(self, -1)
- self.spin_nb = wx.SpinCtrl(self, -1, '', size = (100,30), min=2, max=1000)
+ self.spin_nb = wx.SpinCtrl(self, -1, '', size = wx.DefaultSize, min=2, max=1000)
txt = _(u"Take the x first points by cluster").decode('utf8')
self.label_chic = wx.StaticText(self, -1, txt)
self.check_chic = wx.CheckBox(self, -1)
- self.spin_nbchic = wx.SpinCtrl(self, -1, '', size = (100,30), min=2, max=1000)
+ self.spin_nbchic = wx.SpinCtrl(self, -1, '', size = wx.DefaultSize, min=2, max=1000)
txt = _(u"Limit points by cluster chi2").decode('utf8')
self.label_5 = wx.StaticText(self, -1, txt)
self.check2 = wx.CheckBox(self, -1)
- self.spin_chi = wx.SpinCtrl(self, -1, '',size = (100,30), min=2, max=1000)
+ self.spin_chi = wx.SpinCtrl(self, -1, '',size = wx.DefaultSize, min=2, max=1000)
self.label_6 = wx.StaticText(self, -1, _(u"Avoid overlay").decode('utf8'))
self.check3 = wx.CheckBox(self, -1)
txt = _(u"Text size proportional to frequency").decode('utf8')
self.label_7 = wx.StaticText(self, -1, txt)
self.check4 = wx.CheckBox(self, -1)
self.label_min = wx.StaticText(self, -1, 'min')
- self.spin_min = wx.SpinCtrl(self, -1, '',size = (100,30), min = 1, max = 100)
+ self.spin_min = wx.SpinCtrl(self, -1, '',size = wx.DefaultSize, min = 1, max = 100)
self.label_max = wx.StaticText(self, -1, 'max')
- self.spin_max = wx.SpinCtrl(self, -1, '',size = (100,30), min = 1, max = 100)
+ self.spin_max = wx.SpinCtrl(self, -1, '',size = wx.DefaultSize, min = 1, max = 100)
txt = _(u"Text size proportional to chi2").decode('utf8')
self.label_tchi = wx.StaticText(self, -1, txt)
self.check_tchi = wx.CheckBox(self, -1)
self.label_min_tchi = wx.StaticText(self, -1, 'min')
- self.spin_min_tchi = wx.SpinCtrl(self, -1, '', size = (100,30), min = 1, max = 100)
+ self.spin_min_tchi = wx.SpinCtrl(self, -1, '', size = wx.DefaultSize, min = 1, max = 100)
self.label_max_tchi = wx.StaticText(self, -1, 'max')
- self.spin_max_tchi = wx.SpinCtrl(self, -1, '', size = (100,30), min = 1, max = 100)
+ self.spin_max_tchi = wx.SpinCtrl(self, -1, '', size = wx.DefaultSize, min = 1, max = 100)
self.label_8 = wx.StaticText(self, -1, _(u"Factor x : ").decode('utf8'))
- self.spin_f1 = wx.SpinCtrl(self, -1, '',size = (100,30), min=1, max=self.paramgraph['clnb']-1)
+ self.spin_f1 = wx.SpinCtrl(self, -1, '',size = wx.DefaultSize, min=1, max=self.paramgraph['clnb']-1)
self.label_9 = wx.StaticText(self, -1, _(u"Factor y : ").decode('utf8'))
- self.spin_f2 = wx.SpinCtrl(self, -1, '',size = (100,30), min=1, max=self.paramgraph['clnb']-1)
+ self.spin_f2 = wx.SpinCtrl(self, -1, '',size = wx.DefaultSize, min=1, max=self.paramgraph['clnb']-1)
self.label_f3 = wx.StaticText(self, -1, _(u"Factor z : ").decode('utf8'))
- self.spin_f3 = wx.SpinCtrl(self, -1, '',size = (100,30), min=1, max=self.paramgraph['clnb']-1)
+ self.spin_f3 = wx.SpinCtrl(self, -1, '',size = wx.DefaultSize, min=1, max=self.paramgraph['clnb']-1)
self.label_sphere = wx.StaticText(self, -1, _(u"Spheres transparency").decode('utf8'))
self.slider_sphere = wx.Slider(self, -1, 10, 1, 100, size = (255,-1), style = wx.SL_HORIZONTAL | wx.SL_AUTOTICKS | wx.SL_LABELS)
# Virtual event handlers, overide them in your derived class
def OnKeys( self, event ):
dial = AlcOptFrame(self, self.parent)
+ dial.corpus = self.corpus
dial.CenterOnParent()
dial.ShowModal()
for i in range(0,len(dial.listlabel)):
self.m_staticText3.Wrap( -1 )
fgSizer1.Add( self.m_staticText3, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )
- self.spin_min = wx.SpinCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, (100,30), wx.SP_ARROW_KEYS, 2, 30, 2 )
+ self.spin_min = wx.SpinCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.SP_ARROW_KEYS, 2, 30, 2 )
self.spin_min.SetValue(2)
fgSizer1.Add( self.spin_min, 0, wx.ALL, 5 )
self.m_staticText4.Wrap( -1 )
fgSizer1.Add( self.m_staticText4, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )
- self.spin_max = wx.SpinCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, (100,30), wx.SP_ARROW_KEYS, 2, 30, 10 )
+ self.spin_max = wx.SpinCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.SP_ARROW_KEYS, 2, 30, 10 )
self.spin_max.SetValue(10)
fgSizer1.Add( self.spin_max, 0, wx.ALL, 5 )
self.m_staticText5.Wrap( -1 )
fgSizer1.Add( self.m_staticText5, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )
- self.spin_eff = wx.SpinCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, (100,30), wx.SP_ARROW_KEYS, 4, 1000, 4 )
+ self.spin_eff = wx.SpinCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.SP_ARROW_KEYS, 4, 1000, 4 )
self.spin_eff.SetValue(4)
fgSizer1.Add( self.spin_eff, 0, wx.ALL, 5 )
def __init__(self, parent, force_chi = False):
# begin wxGlade: MyDialog.__init__
#kwds["style"] = wx.DEFAULT_DIALOG_STYLE
- wx.Dialog.__init__(self, parent, style = wx.DEFAULT_DIALOG_STYLE)
+ wx.Dialog.__init__(self, parent, style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER)
self.listet = None
self.variables = None
self.force_chi = force_chi
self.label_var = wx.StaticText(self, -1, _(u"Select by").decode('utf8'))
self.choice = wx.Choice(self, -1, (100,50), choices = [_(u"variables").decode('utf8'), _(u"modalities").decode('utf8')])
self.label1 = wx.StaticText(self, -1, _(u"Choice").decode('utf8'))
- self.list_box_1 = wx.ListBox(self, -1, choices=[], size = wx.Size( 150,200 ), style=wx.LB_EXTENDED | wx.LB_HSCROLL)
+ self.list_box_1 = wx.ListBox(self, -1, choices=[], size = wx.Size( 300,200 ), style=wx.LB_EXTENDED | wx.LB_HSCROLL)
self.button_2 = wx.Button(self, wx.ID_CANCEL, "")
self.button_1 = wx.Button(self, wx.ID_OK, "")
if not self.force_chi :
self.choice_indice = wx.Choice(self, -1, (100,50), choices = indices)
if not self.force_chi :
self.label = wx.StaticText(self, -1, _(u"Minimum frequency").decode('utf8'))
- self.spin = wx.SpinCtrl(self, -1, min = 1, max = 10000, initial = 10)
+ self.spin = wx.SpinCtrl(self, -1, min = 1, max = 10000, initial = 10, size=wx.DefaultSize)
self.Bind(wx.EVT_CHOICE, self.onselect, self.choice)
self.Bind(wx.EVT_LISTBOX, self.onchoose, self.list_box_1)
self.__set_properties()
sizer_2.Add(self.label_var, 0, wx.ALIGN_CENTER_VERTICAL, 3)
sizer_2.Add(self.choice, 0, wx.ALIGN_CENTER_VERTICAL, 3)
sizer_2.Add(self.label1, 0, wx.ALIGN_CENTER_VERTICAL, 3)
- sizer_2.Add(self.list_box_1, 0, wx.ALIGN_RIGHT, 3)
+ sizer_2.Add(self.list_box_1, 0, wx.ALIGN_RIGHT|wx.EXPAND, 3)
sizer_3.Add(self.button_2, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL, 3)
sizer_3.Add(self.button_1, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL, 3)
sizer_2.Add(self.label_indice, 0, wx.ALIGN_CENTER_VERTICAL, 3)
class PrefDendro ( wx.Dialog ):
- def __init__( self, parent, param ):
+ def __init__( self, parent, parametres ):
wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = _(u"Dendrogram").decode('utf8'), pos = wx.DefaultPosition, size = wx.DefaultSize, style = wx.DEFAULT_DIALOG_STYLE )
- self.param = param
+ self.parametres = parametres
self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
fgSizer1 = wx.FlexGridSizer( 0, 2, 0, 0 )
self.m_staticline41 = wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL )
fgSizer1.Add( self.m_staticline41, 0, wx.EXPAND |wx.ALL, 5 )
- if self.param['typedendro'] == 'classique' :
+ if self.parametres['typedendro'] == 'classique' :
self.m_staticText5 = wx.StaticText( self, wx.ID_ANY, _(u"Color or black and white").decode('utf8'), wx.DefaultPosition, wx.DefaultSize, 0 )
self.m_staticText5.Wrap( -1 )
fgSizer1.Add( self.m_staticText5, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )
self.m_staticline8 = wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL )
fgSizer1.Add( self.m_staticline8, 0, wx.EXPAND |wx.ALL, 5 )
- if self.param.get('translation', False) :
+ if self.parametres.get('translation', False) :
self.m_staticText66 = wx.StaticText( self, wx.ID_ANY, _(u"Translation").decode('utf8'), wx.DefaultPosition, wx.DefaultSize, 0 )
self.m_staticText66.Wrap( -1 )
fgSizer1.Add( self.m_staticText66, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )
m_choice1Choices = [ u"phylogram", u"cladogram", u"fan", u"unrooted", u"radial" ]
- self.trans = wx.Choice( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, ['None'] + [val[0] for val in self.param['translation']], 0 )
+ self.trans = wx.Choice( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, ['None'] + [val[0] for val in self.parametres['translation']], 0 )
self.trans.SetSelection( 0 )
fgSizer1.Add( self.trans, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT|wx.ALL, 5 )
self.Centre( wx.BOTH )
def __set_properties(self):
- self.m_spinCtrl2.SetValue(self.param['width'])
- self.m_spinCtrl1.SetValue(self.param['height'])
- self.m_choice1.SetSelection(self.param['type_dendro'])
- self.choice_format.SetSelection(self.param['svg'])
- if self.param['typedendro'] == 'classique' :
- self.m_radioBox1.SetSelection(self.param['color_nb'])
- self.m_checkBox1.SetValue(self.param['taille_classe'])
- self.m_radioBox2.SetSelection(self.param['type_tclasse'])
+ self.m_spinCtrl2.SetValue(self.parametres['width'])
+ self.m_spinCtrl1.SetValue(self.parametres['height'])
+ self.m_choice1.SetSelection(self.parametres['type_dendro'])
+ self.choice_format.SetSelection(self.parametres['svg'])
+ if self.parametres['typedendro'] == 'classique' :
+ self.m_radioBox1.SetSelection(self.parametres['color_nb'])
+ self.m_checkBox1.SetValue(self.parametres['taille_classe'])
+ self.m_radioBox2.SetSelection(self.parametres['type_tclasse'])
def __del__( self ):
pass
self.m_staticText3.Wrap( -1 )
bSizer1.Add( self.m_staticText3, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT|wx.ALL, 5 )
- self.spin_H = wx.SpinCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size( 100,30 ), wx.SP_ARROW_KEYS, 0, 10000, 600 )
+ self.spin_H = wx.SpinCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.SP_ARROW_KEYS, 0, 10000, 600 )
self.spin_H.SetValue( 800 )
bSizer1.Add( self.spin_H, 0, wx.ALL, 5 )
self.m_staticText4.Wrap( -1 )
bSizer3.Add( self.m_staticText4, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT|wx.ALL, 5 )
- self.spin_L = wx.SpinCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size( 100,30 ), wx.SP_ARROW_KEYS, 0, 10000, 600 )
+ self.spin_L = wx.SpinCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.SP_ARROW_KEYS, 0, 10000, 600 )
self.spin_L.SetValue( 800 )
bSizer3.Add( self.spin_L, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )
class message(wx.Frame):
def __init__(self, parent, items, title, size, save = True, uceids = None):
wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = title, pos = wx.DefaultPosition, size = size, style = wx.CLOSE_BOX|wx.DEFAULT_FRAME_STYLE|wx.FRAME_FLOAT_ON_PARENT|wx.TAB_TRAVERSAL )
+ self.parent = parent
self.save = save
self.uceids = uceids
self.ira = wx.GetApp().GetTopWindow()
self.button_1 = wx.Button(self.panel, wx.ID_CANCEL)
self.Bind(wx.EVT_BUTTON, self.OnCloseMe, self.button_1)
+ #self.HtmlPage.Bind(wx.wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, self.Download)
+ self.HtmlPage.Bind(wx.html.EVT_HTML_LINK_CLICKED, self.OnLink)
if self.save :
self.button_2 = wx.Button(self.panel, wx.ID_SAVE)
self.Bind(wx.EVT_BUTTON, self.OnSavePage, self.button_2)
with open(path, 'w') as f :
f.write(self.html)
+ def OnLink(self, evt):
+ corpus = self.ira.tree.page.corpus
+ link = evt.GetLinkInfo().GetHref().split('_')
+ uciid = int(link[0])
+ uceid = int(link[1])
+ et = '<b>' + ' '.join(corpus.ucis[uciid].etoiles) + '</b><br>\n'
+ txt = corpus.getuciconcorde_uces(uciid, uceid)
+ txt = '\n'.join([row[1] + '<br>' if row[0] != uceid else '<font color=red><b>%s</b></font><br>' % row[1] for row in txt])
+ txt = '<html>\n<body>\n' + et + txt + '\n</body>\n</html>'
+ fullframe = FullText(self.ira)
+ fullframe.m_htmlWin1.SetPage(txt)
+ fullframe.Show()
+
def OnCloseMe(self, event):
self.Close(True)
def OnSaveImage(self, event) :
dlg = wx.FileDialog(
- self, message=_(u"Save as...").decode('utf8'), defaultDir=os.getcwd(),
+ self, message=_(u"Save as...").decode('utf8'), defaultDir=self.parametres.get('pathout',os.getcwd()),
defaultFile= self.imagename, wildcard=self.parametres['wildcard'], style=wx.SAVE | wx.OVERWRITE_PROMPT
)
dlg.SetFilterIndex(0)
if dial.format.GetSelection() == 0 :
svg = 'FALSE'
wildcard = "png|*.png"
+ fout = 'image.png'
else :
svg = 'TRUE'
wildcard = "svg|*.svg"
+ fout = 'image.svg'
+ pathout = ira.tree.page.pathout[fout]
parametres = {'width' : dial.widthsp.GetValue(),
'height': dial.heightsp.GetValue(),
'colnames' : colnames,
'tmpgraph' : tmpgraph,
'rgraph' : ira.RscriptsPath['Rgraph'],
'svg' : svg,
- 'wildcard' : wildcard}
+ 'wildcard' : wildcard,
+ 'pathout': pathout
+ }
if tree :
parametres['tree'] = tree
txt = barplot(table, parametres)
self.parametres.update(parametres)
if which == 'chi2' :
script = ChronoChi2Script(self)
- else :
+ elif which == 'prop' :
script = ChronoPropScript(self)
+ elif which == 'gg' :
+ script = ChronoggScript(self)
script.make_script()
exec_rcode(ira.RPath, script.scriptout, wait = True)
win = ImageViewer(ira, self.parametres, _(u"Graphic").decode('utf8'), size=(700, 500))
self.m_listBox4.Delete(val)
event.Skip()
+
+class FullText ( wx.Frame ):
+
+ def __init__( self, parent ):
+ wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 500,600 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )
+
+ self.SetSizeHints( -1, -1 )
+
+ bSizer1 = wx.BoxSizer( wx.VERTICAL )
+
+ self.m_panel1 = wx.Panel( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )
+ bSizer2 = wx.BoxSizer( wx.VERTICAL )
+
+ self.m_htmlWin1 = wx.html.HtmlWindow( self.m_panel1, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.html.HW_SCROLLBAR_AUTO )
+ bSizer2.Add( self.m_htmlWin1, 8, wx.ALL | wx.EXPAND, 5 )
+
+ #self.m_richText1 = wx.richtext.RichTextCtrl( self.m_panel1, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0|wx.VSCROLL|wx.HSCROLL|wx.NO_BORDER|wx.WANTS_CHARS )
+ #bSizer2.Add( self.m_richText1, 9, wx.EXPAND |wx.ALL, 5 )
+
+ m_sdbSizer1 = wx.StdDialogButtonSizer()
+ self.m_sdbSizer1OK = wx.Button( self.m_panel1, wx.ID_OK )
+ m_sdbSizer1.AddButton( self.m_sdbSizer1OK )
+ self.m_sdbSizer1Cancel = wx.Button( self.m_panel1, wx.ID_CANCEL )
+ m_sdbSizer1.AddButton( self.m_sdbSizer1Cancel )
+ m_sdbSizer1.Realize();
+
+ bSizer2.Add( m_sdbSizer1, 0, wx.EXPAND, 5 )
+
+
+ self.m_panel1.SetSizer( bSizer2 )
+ self.m_panel1.Layout()
+ bSizer2.Fit( self.m_panel1 )
+ bSizer1.Add( self.m_panel1, 1, wx.EXPAND |wx.ALL, 5 )
+
+
+ self.SetSizer( bSizer1 )
+ self.Layout()
+
+ self.Centre( wx.BOTH )
+
+ def __del__( self ):
+ pass
+
+
from tabrsimple import InputText
from tabverges import Prototypical
from tabsplitvar import SplitMatrixFromVar
-#from textdist import AnalysePam
+#frog textdist import AnalysePam
from textstat import Stat
from textaslexico import Lexico
from textlabbe import DistLabbe
from textreinert import Reinert
#from textcheckcorpus import checkcorpus
from openanalyse import OpenAnalyse
-from corpus import Builder, SubBuilder
+from corpus import Builder, SubBuilder, MergeClusters
from checkinstall import CreateIraDirectory, CheckRPath, FindRPAthWin32, FindRPathNix, CheckRPackages, IsNew, UpgradeConf, CopyConf, RLibsAreInstalled
from chemins import RscriptsPath, ConstructConfigPath, ConstructDicoPath, ConstructGlobalPath, PathOut
from parse_factiva_xml import ImportFactiva
ID_exportmeta = wx.NewId()
ID_importdmi = wx.NewId()
ID_merge = wx.NewId()
+ID_merge_clusters = wx.NewId()
ID_labbe = wx.NewId()
##########################################################
#elements de configuration
images_analyses = {
'textroot' : 'textroot.png',
'alceste' : 'reinert.png',
+ 'reinert' : 'reinert.png',
'corpus' : 'textcorpus.png',
'wordcloud' :'wordcloud.png',
'stat' :'stats.png',
class IraFrame(wx.Frame):
def __init__(self, parent, id= -1, title="", pos=wx.DefaultPosition,
- size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE |
- wx.SUNKEN_BORDER |
+ size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE |
+ wx.SUNKEN_BORDER |
wx.CLIP_CHILDREN):
log.info('Starting... ' )
log.info('version : %s' % ConfigGlob.get('DEFAULT', 'version'))
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
+ # tell FrameManager to manage this frame
#self._mgr = wx.aui.AuiManager()
self._mgr = aui.AuiManager()
self._mgr.SetManagedWindow(self)
#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 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").decode('utf8'), _(u"Open an analysis").decode('utf8'))
item.SetBitmap(self.images_analyses['iramuteq'])
file_menu.AppendItem(item)
item = wx.MenuItem(file_menu, ID_merge, _(u'Merge graphs').decode('utf8'), _(u'Merge graphs').decode('utf8'))
file_menu.AppendItem(item)
+ item = wx.MenuItem(file_menu, ID_merge_clusters, _(u'Corpus from merge clusters').decode('utf8'), _(u'Corpus from merge clusters').decode('utf8'))
+ file_menu.AppendItem(item)
+
menuFactiva = wx.Menu()
fact_from_xml = wx.MenuItem(menuFactiva, ID_Fact_xml, _(u"from xml").decode('utf8'))
fact_from_xml.SetBitmap(self.images_analyses['factiva_xml'])
#matrix_menu.Append(ID_SIMI, _(u"Similarities Analysis").decode('utf8'))
#matrix_menu.Append(ID_proto, _(u"Prototypical Analysis").decode('utf8'))
ID_RCODE = wx.NewId()
- #matrix_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_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_SimiTxt, _(u"Similarities Analysis").decode('utf8'))
+#
# text_menu.Append(ID_WC, _(u"WordCloud").decode('utf8'))
self.text_menu = text_menu
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)
#self._mgr.AddPane(self.text_ctrl_txt, wx.aui.AuiPaneInfo().
- # Name("Text").CenterPane())
+ # Name("Text").CenterPane())
self._mgr.AddPane(self.text_ctrl_txt, aui.AuiPaneInfo().
Name("Text").CenterPane())
#self._mgr.AddPane(IntroPanel(self), wx.aui.AuiPaneInfo().Name("Intro_Text").
# with open(os.path.join(UserConfigPath, 'history.db'), 'w') as f :
# f.write('')
self.history = History(os.path.join(UserConfigPath, 'history.db'))
+ #self.history.dostat()
self.tree = LeftTree(self)
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).
self.ShowAPane("Intro_Text")
self._mgr.GetPane("lefttree").Show()
self._mgr.GetPane("classif_tb").Hide()
- # "commit" all changes made to FrameManager
+ # "commit" all changes made to FrameManager
self._mgr.Update()
# Show How To Use The Closing Panes Event
-##################################################################
+##################################################################
self.Bind(wx.EVT_MENU, self.OnAcceuil, id=ID_ACCEUIL)
self.Bind(wx.EVT_MENU, self.ShowTab, id=ID_RESULT)
self.Bind(wx.EVT_MENU, self.OnOpenData, id=ID_OpenData)
self.Bind(wx.EVT_MENU, self.OnImportDMI, id=ID_importdmi)
self.Bind(wx.EVT_MENU, self.OnExportMeta, id=ID_exportmeta)
self.Bind(wx.EVT_MENU, self.OnMergeGraph, id = ID_merge)
+ self.Bind(wx.EVT_MENU, self.OnMergeClusters, id = ID_merge_clusters)
self.Bind(wx.EVT_CLOSE, self.OnClose)
##################################################################
flags = self._mgr.GetAGWFlags()
self.ShowMenu('view', True)
self.ShowMenu('matrix', False)
self.ShowMenu('text', False)
-
+
self._mgr.Update()
self.DataPop = False
self.filename = self.input_path[0]
if inputname:
self.OpenText()
-
+
def OnSubText(self, evt, corpus = None, parametres = None):
if corpus is None :
corpus = self.tree.getcorpus()
OpenAnalyse(self, corpus.parametres)
self.tree.OnItemAppend(corpus.parametres)
del busy
-
+
def OpenText(self):
builder = Builder(self, 5)
if builder.res == wx.ID_OK :
count += 1
keepGoing = builder.dlg.Update(count, u"Chargement du dictionnaire")
builder.dlg.Destroy()
-
+
def OnExit(self, event):
self.Close()
info.Copyright = ConfigGlob.get('DEFAULT', 'copyright')
info.Translators = ConfigGlob.get('DEFAULT', 'translators').decode('utf8').split(';')
info.Description = u"""
-Interface de R pour les Analyses Multidimensionnelles
+Interface de R pour les Analyses Multidimensionnelles
de Textes et de Questionnaires
Un logiciel libre
info.WebSite = ("http://www.iramuteq.org", u"Site web IRaMuTeQ")
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
+ 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
par la Free Software Foundation ; soit la version 2 de cette licence,
soit (à votre convenance) une version ultérieure.
if self.nb.GetPageCount() == 1 and not notebook :
self.LastTabClose()
-
+
def LastTabClose(self) :
if self.nb.GetPageCount() == 1 :
if self.DataTxt :
#FIXME
AnalyseMerge(self, {'type': 'merge', 'fileout' : '/tmp/test.txt'}, dlg = 5)
+ def OnMergeClusters(self, evt) :
+ builder = MergeClusters(self, {})
+ if builder.res == wx.ID_OK :
+ busy = wx.BusyInfo(_("Please wait...").decode('utf8'), self)
+ wx.SafeYield()
+ corpus = builder.doanalyse()
+ self.history.add(corpus.parametres)
+ OpenAnalyse(self, corpus.parametres)
+ self.tree.OnItemAppend(corpus.parametres)
+ del busy
+
def OnProto(self, evt, matrix = None) :
self.analyse_matrix(Prototypical, matrix = matrix, analyse_type = 'proto', dlgnb = 3)
#Prototypical(self, {'type' : 'proto'})
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 :
#print 'ATTENTION !!!! VERGES'
def OnHelp(self, event):
webbrowser.open('http://www.iramuteq.org/documentation')
-
+
def OnPref(self, event):
dlg = PrefDialog(self)
dlg.CenterOnParent()
if self.check_update:
NewVersion(self)
else:
- print 'pas de verif'
+ print 'pas de verif'
#IsNew(self)
#CheckRPackages(self)
OpenAnalyse(self, self.filename)
if not truepath:
print 'This file does not exist'
-
-
+
class IntroPanel(wx.Panel):
def __init__(self, parent):
grid_sizer_1 = wx.FlexGridSizer(1, 4, 0, 0)
grid_sizer_3 = wx.FlexGridSizer(1, 4, 0, 0)
grid_sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
-
+
iralink = hl.HyperLinkCtrl(self, wx.ID_ANY, u"http://www.iramuteq.org", URL="http://www.iramuteq.org")
iralink.SetColours(linkcolor, linkcolor, "RED")
iralink.SetBackgroundColour(bckgrdcolor)
iralink.SetUnderlines(False, False, True)
iralink.SetBold(True)
iralink.UpdateLink()
-
+
PanelPres = wx.Panel(self)
bckgrdcolor = wx.Colour(randint(0, 255), randint(0, 255), randint(0, 255))
PanelPres.SetBackgroundColour(bckgrdcolor)
-
+
label_1 = wx.StaticText(self, -1, u"IRaMuTeQ", size=(-1, -1))
label_1.SetFont(wx.Font(46, wx.TELETYPE, wx.NORMAL, wx.BOLD, 0, "Purisa"))
label_1.SetForegroundColour(wx.RED)
-
+
iraicone = wx.Image(os.path.join(ImagePath,'iraicone100x100.png'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
but_ira = wx.StaticBitmap(self, -1, bitmap = iraicone)
-
+
label2 = wx.StaticText(PanelPres, -1 , u'\nVersion ' + ConfigGlob.get('DEFAULT', 'version') + '\n')
label2.SetForegroundColour(txtcolour)
label2.SetBackgroundColour(bckgrdcolor)
self.hyper2.SetUnderlines(False, False, True)
self.hyper2.SetBold(True)
self.hyper2.UpdateLink()
-
+
label_lerass = wx.StaticText(PanelPres, -1, u'Laboratoire ')
label_lerass.SetForegroundColour(txtcolour)
label_lerass.SetBackgroundColour(bckgrdcolor)
-
+
self.hyper_lerass = hl.HyperLinkCtrl(PanelPres, -1, u'LERASS', URL="http://www.lerass.com")
self.hyper_lerass.SetColours(linkcolor, linkcolor, "RED")
self.hyper_lerass.SetBackgroundColour(bckgrdcolor)
self.hyper_lerass.SetUnderlines(False, False, True)
self.hyper_lerass.SetBold(True)
self.hyper_lerass.UpdateLink()
-
+
blank = wx.StaticText(PanelPres, -1, u'\n')
blank1 = wx.StaticText(PanelPres, -1, u'\n')
-
+
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'))
labelcopy.SetForegroundColour(txtcolour)
labelcopy.SetBackgroundColour(bckgrdcolor)
-
+
python_img = wx.Image(os.path.join(ImagePath,'python-logo.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
r_img = wx.Image(os.path.join(ImagePath,'Rlogo.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
lexique_img = wx.Image(os.path.join(ImagePath,'LexTexte4.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
self.Bind(wx.EVT_BUTTON, self.OnPython, but_python)
self.Bind(wx.EVT_BUTTON, self.OnLexique, but_lexique)
self.Bind(wx.EVT_BUTTON, self.OnR, but_r)
-
-
+
grid_sizer_1.Add(self.hyper2, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
grid_sizer_3.Add(label_lerass, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
grid_sizer_3.Add(self.hyper_lerass, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
sizer4.Add(label_1, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 5)
-
+
sizer2.Add(label2, 0, wx.ALIGN_CENTER, 5)
sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
sizer2.Add(wx.StaticText(PanelPres, -1, u''), 0, wx.ALIGN_CENTER, 5)
grid_sizer_2.Add(but_python, 1, wx.ALIGN_BOTTOM)
grid_sizer_2.Add(but_lexique, 1, wx.ALIGN_BOTTOM)
grid_sizer_2.Add(but_r, 1, wx.ALIGN_BOTTOM)
-
+
sizer1.Add(PanelPres, 0, wx.EXPAND |wx.ALL, 10)
sizer1.Add(grid_sizer_2, 2, wx.ALIGN_CENTER_HORIZONTAL|wx.ALL, 1)
self.SetSizer(sizer1)
sizer1.Fit(self)
-
+
def OnPython(self,evt):
webbrowser.open('http://www.python.org')
-
+
def OnLexique(self,evt):
webbrowser.open('http://www.lexique.org')
-
+
def OnR(self,evt):
webbrowser.open('http://www.r-project.org')
def OnClose(self, evt):
evt.Skip()
self.Hide()
-
+
if self.fc.IsRunning():
self.fc.Stop()
self.ShowMain()
# if self.fc.IsRunning():
# self.Raise()
#wx.CallAfter(frame.ShowTip)
-
+
class MyApp(wx.App):
def OnInit(self):
"""
the main frame when it is time to do so.
"""
wx.SystemOptions.SetOptionInt("mac.window-plain-transition", 1)
- self.SetAppName("Iramuteq")
+ self.SetAppName("Iramuteq")
splash = MySplashScreen()
splash.Show()
return True