source: salt-libreoffice-addon/trunk/fuentes/old-files/old-sltuoo-old.py @ 473

Last change on this file since 473 was 473, checked in by daduve, 3 years ago

Adding files

File size: 34.7 KB
Line 
1# -*- coding: latin-1 -*-
2import sys
3sys.path.append(sys.exec_prefix)
4
5sltversion="4.0.10"
6
7#Constantes que indican la plataforma
8esLinux=False
9esMac=False
10miHOME='APPDATA'
11pyLIB=sys.exec_prefix+"\\lib"
12if sys.platform.lower().find('linux')>=0:
13  esLinux=True
14  miHOME='HOME'
15  pyLIB=sys.exec_prefix+"/lib"
16
17sys.path.append(pyLIB)
18
19import os
20# 1. Obtener srvPath
21if esLinux:
22        srvPath="/usr/share/salt-server"
23else:
24        srvPath=os.environ['PROGRAMFILES'] + "/salt4"
25srvPath=os.path.abspath(srvPath)
26srvPath2=os.path.abspath(os.environ[miHOME]+"/salt4") #alternativo
27
28# 2. Obtener usrPath
29usrPath=os.path.abspath(os.environ[miHOME]+"/.salt4")
30try:
31        if os.environ['USERNAME']=='root':
32                usrPath=os.path.abspath("/root/.salt4")
33except:
34        pass
35try:
36        if os.environ['USER']=='root':
37                usrPath=os.path.abspath("/root/.salt4")
38except:
39        pass
40
41if not os.path.exists(usrPath):
42  os.mkdir(usrPath)
43
44# 3. Buscar archivo de configuracien
45if not os.path.exists(os.path.abspath(srvPath+'/sltsrv.config')) and os.path.exists(os.path.abspath(srvPath2+'/sltsrv.config')):
46  srvPath=srvPath2
47 
48# 4. Copiar config si es necesario
49_config=os.path.abspath('/var/lib/salt/sltsrv.config')
50if not os.path.exists(_config):
51  _config=os.path.abspath(srvPath+'/sltsrv.config')
52if os.path.exists(_config):
53  if os.path.exists(os.path.abspath(usrPath+'/sltsrv.config')):
54    fsrv=file(_config,'rb')
55    fusr=file(os.path.abspath(usrPath+'/sltsrv.config'),'rb')
56    cfgsrv=eval(fsrv.read())
57    cfgusr=eval(fusr.read())
58    fsrv.close()
59    fusr.close()
60    if not cfgsrv.has_key('entorn') or not cfgusr.has_key('entorn') or not cfgsrv['entorn'].has_key('sltinitime') or not cfgusr['entorn'].has_key('sltinitime') or cfgsrv['entorn']['sltinitime']!=cfgusr['entorn']['sltinitime']:
61      import shutil
62      shutil.copy(_config,os.path.abspath(usrPath+'/sltsrv.config'))
63      try:
64        for root,dirs, files in os.walk(usrPath):
65          for name in files:
66            if name[0:3]=='tmp':
67              os.remove(os.path.join(root,name))
68      except:
69        pass
70  else:
71    import shutil
72    shutil.copy(_config,os.path.abspath(usrPath+'/sltsrv.config'))
73    try:
74        for root,dirs, files in os.walk(usrPath):
75          for name in files:
76            if name[0:3]=='tmp':
77              os.remove(os.path.join(root,name))
78    except:
79      pass
80   
81# Leer configuracion
82f=file(os.path.abspath(usrPath+'/sltsrv.config'),'rb')
83scfg=f.read()
84f.close()
85cfg=eval(scfg)
86if cfg.has_key('entorn'):
87  if cfg['entorn'].has_key('sltsrvpaths'):
88    sys.path.extend(cfg['entorn']['sltsrvpaths'])
89     
90ooopath=sys.executable
91bn=os.path.basename(ooopath)
92ooopath=os.path.dirname(ooopath)
93ooopathpy=""
94while bn!="":
95  if bn.lower()=="program":
96    ooopath=os.path.abspath(ooopath+"/program")
97    break
98  elif bn.lower().find("python-")>-1:
99    ooopathpy=os.path.abspath(ooopath+"/"+bn)
100  bn=os.path.basename(ooopath)
101  ooopath=os.path.dirname(ooopath)
102if ooopathpy!="":
103  sys.path.append(os.path.abspath(ooopathpy+"/lib"))
104  sys.path.append(os.path.abspath(ooopathpy))
105else:
106  sys.path.append(os.path.abspath(ooopath+"/python-core-2.3.4/lib"))
107  sys.path.append(os.path.abspath(ooopath+"/python-core-2.3.4"))
108sys.path.append(ooopath)
109
110import uno
111try:
112  import unohelper
113except:
114  pass
115import socket
116import codecs
117# bsddb
118import bsddb3 as bsddb
119import platform
120
121from com.sun.star.task import XJobExecutor
122
123#Numero de lineas en lis ListBox
124if esLinux:
125  nitems=16
126else:
127  nitems=16 #20
128
129def sltDate():
130  #Fecha del addon
131  try:
132    _txt=__name__
133  finally:
134    return _txt
135  if os.path.exists(os.path.abspath(__file__)):
136    return time.localtime(os.stat(os.path.abspath(__file__))[8])
137  else:
138    return None
139
140def uts(s):
141  #Pasar cadena unicode a string
142  i=0
143  t=""
144  while i<len(s):
145    c=s[i]
146    if ord(c)>255:
147      c=quitarFF(c)
148    t=t+chr(ord(c))
149    i=i+1
150  return t
151
152def quitarFF(pal):
153  #Eliminar caracteres unicode superiores a 255
154  n=ord(pal)
155  if n==8216 or n==8219 or n==8224:
156    ret="'"
157  elif n==8221:
158    ret=chr(148)
159  elif n==8220:
160    ret=chr(147)
161  elif n==8217:
162    ret=chr(146)
163  else:
164    ret="_"
165  return ret
166
167def ucodeSiLinux(s):
168  if esLinux:
169    try:
170      _s=unicode(s,'latin-1').encode('utf-8')
171    except:
172      _s=s
173  else:
174    _s=s
175  return _s
176
177def socketConnect():
178  try:
179    sck=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
180    sck.connect(('localhost',20001))
181  except:
182    #iniciar server
183    import os,time
184    f=file(os.path.abspath(usrPath+'/sltsrv.config'),'rb')
185    scfg=f.read()
186    f.close()
187    cfg=eval(scfg)
188    if cfg.has_key('entorn'):
189      if cfg['entorn'].has_key('sltsrvexe'):
190        if cfg['entorn'].has_key('sltsrvpath'):
191          sltsrvpath=os.path.abspath(cfg['entorn']['sltsrvpath'])
192          os.chdir(sltsrvpath)
193        if cfg['entorn'].has_key('sltsrvexe'):
194          sltsrvargs=cfg['entorn']['sltsrvexe']
195          sltsrvexe=os.path.abspath(sltsrvargs[0])
196        if esLinux:
197          modo=os.P_NOWAIT
198        else:
199          modo=os.P_DETACH
200        os.spawnve(modo,sltsrvexe,sltsrvargs,os.environ)
201        i=5
202        while i>0:
203          try:
204            time.sleep(2)
205            sck.connect(('localhost',20001))
206          except:
207            i=i-1
208          else:
209            break
210        if i<=0:
211          msg=MsgWindow('Cal iniciar el servidor Salt4')
212          sck=None
213      else:
214        msg=MsgWindow('Cal iniciar el servidor Salt4')
215        sck=None
216  return sck
217
218class uooUNOext:
219  #simular la clase uooUNOobj llamada desde sltooo_extern (test)
220  def __init__(self, ctx):
221    #component context
222    self.ctx=ctx
223   
224  def action(self,args):
225    smgr = self.ctx.ServiceManager
226    import doooLib
227    doooLib.getServiceManager(sMan=smgr)
228    doooLib.getDesktop()
229   
230    # retrieve the desktop object
231    desktop = smgr.createInstanceWithContext("com.sun.star.frame.Desktop", self.ctx )
232   
233    # get current document model
234    model = desktop.getCurrentComponent()
235   
236    # access the document's text property
237    #text = model.Text
238   
239    # create a cursor
240    #cursor = text.createTextCursor()
241   
242    #Cursor
243    vcursorsupplier=model.getCurrentController()
244    vcursor=vcursorsupplier.getViewCursor()
245    text=vcursor.getText()
246    cur=text.createTextCursorByRange(vcursor.getStart())
247    #Funcion a realizar
248    if args=="dicc":
249      oDic=DicSaltWindow(desktop)
250      oDic.Load()
251      oDic.Show("tren")
252      oDic.Espera()
253    elif args=="diccbil":
254      oDic=DicBilWindow(desktop)
255      oDic.Load()
256      oDic.Espera()
257    elif args=="sin":
258      pass
259    elif args=="verbs":
260      oVerbs=VerbsWindow(desktop)
261      oVerbs.Load()
262      oVerbs.Espera()
263    elif args=="info":
264      oInfo=InfoWindow(desktop)
265      oInfo.Espera()
266    elif args=="mouse":
267      ListenFields(model)
268      Espera()   
269
270# implement a UNO component by deriving from the standard unohelper.Base class
271# and from the interface(s) you want to implement.
272class uooUNOobj( unohelper.Base, XJobExecutor ):
273  def __init__( self, ctx ):
274    # store the component context for later use
275    self.ctx = ctx
276
277  def trigger( self, args ):
278    # note: args[0] == "HelloWorld", see below config settings
279   
280    # retrieve the desktop object
281    desktop = self.ctx.ServiceManager.createInstanceWithContext(
282            "com.sun.star.frame.Desktop", self.ctx )
283    import doooLib
284    doooLib.getServiceManager(sMan=self.ctx.ServiceManager)
285
286    # get current document model
287    model = desktop.getCurrentComponent()
288
289    # access the document's text property
290    #text = model.Text
291
292    # create a cursor
293    #cursor = text.createTextCursor()
294
295    #Cursor
296    vcursorsupplier=model.getCurrentController()
297    vcursor=vcursorsupplier.getViewCursor()
298    text=vcursor.getText()
299    cur=text.createTextCursorByRange(vcursor.getStart())
300   
301    #Funcion a realizar
302    if args=="dicc":
303      oDic=DicSaltWindow(desktop)
304      oDic.Load()
305      #oDic.Espera()
306    elif args=="diccbil":
307      oDic=DicBilWindow(desktop)
308      oDic.Load()
309      #oDic.Espera()
310    elif args=="sin":
311      pass
312    elif args=="verbs":
313      oVerbs=VerbsWindow(desktop)
314      oVerbs.Load()
315      #oVerbs.Espera()
316    elif args=="info":
317      oInfo=InfoWindow(desktop)
318      #oInfo.Espera()
319    elif args=="mouse":
320      ListenFields(model)
321      Espera()   
322class uooDoc:
323  """ Documento para presentar informacion desde los utilities"""
324  def __init__(self,desktop,ncolumns=0):
325    self.pagini=True
326    self.desktop=desktop
327    self.doc=None
328 
329  def NewDoc(self,ncolumns=0):
330    #Obtener un nuevo documentos (con o sin formato de columnas)
331    self.pagini=True
332    model=self.desktop.getCurrentComponent()
333    text=model.Text
334    cur=text.createTextCursor()
335    cur.gotoEnd(1)
336    if cur.String!="":
337      #Documento en uso: obtener uno nuevo
338      doc=self.desktop.loadComponentFromURL("private:factory/swriter","_blank",0,())
339      text=doc.Text
340      cur=text.createTextCursor()
341      cur.gotoEnd(1)
342    self.cursor=cur
343    if ncolumns!=0:
344      #Formato columnas
345      oSect=model.createInstance("com.sun.star.text.TextSection")
346      #oSect.setName("sltVerbs")
347      oCols=model.createInstance("com.sun.star.text.TextColumns")
348      oCols.setColumnCount(ncolumns)
349      oSect.TextColumns=oCols
350      text.insertTextContent(cur,oSect,True)
351 
352  def PrintDoc(self,fpath):
353    #Presentar como documento el archivo cuyo path esta en fpath
354    #Antes de abrir otro cerramos el anterior (si hay)
355    if self.doc!=None:
356      try:
357        self.doc.close(True)
358      except:
359        pass
360    url=self.ConvertToUrl(fpath)
361    flags=uno.getConstantByName("com.sun.star.frame.FrameSearchFlag.CREATE")+uno.getConstantByName("com.sun.star.frame.FrameSearchFlag.ALL")
362    self.doc=self.desktop.loadComponentFromURL(url,"Salt",flags,())
363
364  def PrintLine(self,lin,bold=None,italic=None,font=None,size=None,color=None):
365    #Mover linea al final del documento
366    self.cursor.gotoEnd(0)
367    self.cursor.String=lin
368    if bold!=None:
369      if bold==True:
370        self.cursor.CharWeight=150
371      else:
372        self.cursor.CharWeight=100
373    if italic!=None:
374      if italic==True:
375        self.cursor.CharPosture=2
376      else:
377        self.cursor.CharPosture=0
378    if font!=None:
379      self.cursor.CharFontName=font
380    if size!=None:
381      self.cursor.CharHeight=size
382    if color!=None:
383      self.cursor.CharColor=color
384
385  def NewPage(self):
386    #Sub InsertPageBreak( oCursor )
387       #oText = oCursor.getText()
388       #oText.insertControlCharacter( oCursor, com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False )
389       #oCursor.BreakType = com.sun.star.style.BreakType.PAGE_BEFORE
390    #End Sub
391    if not self.pagini:
392      self.PrintLine("")
393      text=self.cursor.getText()
394      text.insertControlCharacter(self.cursor,uno.getConstantByName("com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK"),0)
395      self.cursor.BreakType=uno.getConstantByName("com.sun.star.style.BreakType.PAGE_BEFORE")
396    self.pagini=False
397    #self.cursor.BreakType=5
398    #self.cursor.gotoEnd(0)
399    #self.cursor.String='\n'
400
401  def GotoEnd(self):
402    #Dejar que se vea el final del documento
403    vcur=self.desktop.getCurrentComponent().getCurrentController().getViewCursor()
404    vcur.gotoEnd(0)
405   
406  def ConvertToUrl(self,fpath):
407    #Convertir formato path a URL y devolver el valor convertido
408    furl=fpath
409    furl.replace("\\","/")
410    furl="file:///"+furl
411    return furl
412                 
413from doooWindowLib import DBListenerWindow
414import time
415
416class dicWindow(DBListenerWindow):
417  #Eventos
418  def lbxLemas_clicked(self,oItemEvent):
419    txt=self.getListBoxSelectedItem("lbxLemas")
420    self.Show(txt)
421
422  def txtConsulta_changed(self,oTextEvent):
423    txt=self.NoAcc(uts(self.getEditText("txtConsulta")))
424    self.Refresh(txt)
425 
426  def txtConsulta_keypressed(self,oKeyEvent):
427    if oKeyEvent.KeyCode==1024 or oKeyEvent.KeyCode==1280:
428      self.setFocus("lbxLemas")
429      self.selectListBoxItemPos("lbxLemas",0,True)
430      txt=self.getListBoxSelectedItem("lbxLemas")
431      self.Show(txt)
432 
433  def scrLemas_changed(self,oAdjustmentEvent):
434    self.Refresh(oAdjustmentEvent.Value)
435   
436  def cmbCancel_clicked( self, oActionEvent ): 
437    """This is called when the Cancel button is clicked."""
438    self.windowClose()
439
440  def windowClosing(self,oActionEvent):
441    pass
442 
443  def windowDeactivated(self,oActionEvent):
444    pass
445    #self.windowToFront()
446
447  #Metodos
448  def Espera(self):
449    while not self.terminar:
450        time.sleep(1)
451       
452  def Refresh(self,txt):
453    #Presentar items en la lista a partir de txt
454    self.removeListBoxItems("lbxLemas",0,self.getListBoxItemCount("lbxLemas"))
455    if str(type(txt))=="<type 'unicode'>":
456      txt=uts(txt)
457    if str(type(txt))=="<type 'str'>":
458      if txt.isdigit():
459        ini=long(txt)
460        if ini>len(self.llms):
461          ini=len(self.llms)
462      elif txt=="":
463        ini=0
464      else:
465        try:
466          (k,n)=self.bt.set_location(txt)
467          if k>=txt:
468            ini=eval(n)
469          else:
470            ini=len(self.llms)
471        except:
472          ini=len(self.llms)
473    else:
474      ini=long(txt)
475    i=ini
476    while i<ini+nitems and i<len(self.llms):
477      self.addListBoxItem("lbxLemas",self.llms[i])
478      i=i+1
479    self.setScrollBarScrollValue("scrLemas",ini)
480 
481  def NoAcc(self,s):
482    #Devuelve la cadena solo con vocales sin acentuar
483    s=s.replace('à','a')
484    s=s.replace('á','a')
485    s=s.replace('è','e')
486    s=s.replace('é','e')
487    s=s.replace('í','i')
488    s=s.replace('ï','i')
489    s=s.replace('ò','o')
490    s=s.replace('ó','o')
491    s=s.replace('ú','u')
492    s=s.replace('ü','u')
493    s=s.replace('l·l','ll')
494    s=s.replace('ñ','n')
495    s=s.replace('ç','c')
496    return s.lower()
497 
498# end of class dicWindow
499
500class VerbsWindow(DBListenerWindow):
501  def __init__(self,desktop):
502    DBListenerWindow.__init__( self, u"Verbs" )
503    self.addOptionButton( "optCas", 6, 10, 50, 16, u"Castellà", itemListenerProc = self.optCas_clicked ) 
504    self.addOptionButton( "optVal", 81, 10, 50, 16, u"Valencià", itemListenerProc = self.optVal_clicked ) 
505    self.addEdit( "txtConsulta", 6, 30, 106, 16, "",textListenerProc=self.txtConsulta_changed,keyListenerProc=self.txtConsulta_keypressed )
506    self.setEditEditable("txtConsulta",True)
507    self.addListBox( "lbxInfs", 6, 55,106,220, bDropdown=False,itemListenerProc = self.lbxInfs_clicked )
508    self.addScrollBar("scrInfs",113,55,20,220,bOrientation=1,adjustmentListenerProc=self.scrInfs_changed)
509    self.addButton( "cmbCancel", 16, 350, 106, 22, "Cancel·lar", actionListenerProc = self.cmbCancel_clicked ) 
510
511    wpos={'left':-1,'top':137,'width':166,'height':400}
512    try:
513      #if platform.system()=="Windows":
514        #self.wp=bsddb.btopen(os.path.abspath(ooopath+"/sltwpos"))
515        #if self.wp.has_key("verbswindow"):
516          #(k,p)=self.wp.set_location("verbswindow")
517          #wpos=eval(p)
518      self.wp=bsddb.btopen(os.path.abspath(usrPath+"/sltwpos"))
519      if self.wp.has_key("verbswindow"):
520        (k,p)=self.wp.set_location("verbswindow")
521        wpos=eval(p)
522    finally:
523      self.setWindowPosSize( wpos['left'], wpos['top'], 166, 400 )
524     
525    self.terminar=False
526    self.lvbs=[]
527    self.bt=bsddb.btopen(None)
528    self.cv="v" #verbos castellanos(c) o valencianos(v)
529    self.setOptionButtonState("optVal",True)
530
531    self.desktop=desktop
532    self.doc=uooDoc(desktop)
533    self.doc.NewDoc(3)
534   
535    #self.sck=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
536    #self.sck.connect(('localhost',20001))
537    self.sck=socketConnect()
538    if self.sck==None:
539      self.windowClose()
540    self.setFocus("txtConsulta")
541
542  #Eventos
543  def optCas_clicked(self,oItemEvent):
544    self.cv="c"
545    self.Load()
546 
547  def optVal_clicked(self,oItemEvent):
548    self.cv="v"
549    self.Load()
550
551  def lbxInfs_clicked(self,oItemEvent):
552    txt=self.getListBoxSelectedItem("lbxInfs")
553    self.Show(txt)
554
555  def txtConsulta_changed(self,oTextEvent):
556    txt=self.NoAcc(uts(self.getEditText("txtConsulta")))
557    self.Refresh(txt)
558 
559  def txtConsulta_keypressed(self,oKeyEvent):
560    if oKeyEvent.KeyCode==1024 or oKeyEvent.KeyCode==1280:
561      self.setFocus("lbxInfs")
562      self.selectListBoxItemPos("lbxInfs",0,True)
563      txt=self.getListBoxSelectedItem("lbxInfs")
564      self.Show(txt)
565 
566  def scrInfs_changed(self,oAdjustmentEvent):
567    self.Refresh(oAdjustmentEvent.Value)
568   
569  def cmbCancel_clicked( self, oActionEvent ): 
570    """This is called when the Cancel button is clicked."""
571    self.windowClose()
572
573  def windowClosed(self,oActionEvent):
574    self.terminar=True
575    self.sck.close()
576    #if platform.system()=="Windows":
577    rect=self.getWindowPosSize()
578    self.wp["verbswindow"]=str({'left':rect.X,'top':rect.Y,'width':rect.Width,'height':rect.Height})
579    self.wp.sync()
580    self.wp.close()
581
582  def windowClosing(self,oActionEvent):
583    pass
584  def windowDeactivated(self,oActionEvent):
585    pass
586    #self.windowToFront()
587
588  #Metodos
589  def Espera(self):
590    while not self.terminar:
591        time.sleep(1)
592       
593  def Load(self):
594    #Cargar lista de infinitivos
595    i=0
596    tmp=""
597    self.lvbs=[]
598    self.bt.close()
599    self.bt=bsddb.btopen(None)
600    self.setEditText("txtConsulta","")
601    #Cargar lista de verbos
602    datos=str(('verbs',('_lista',self.cv,usrPath)))
603    self.sck.send(datos)
604    datos=self.sck.recv(200000)
605    comando,(inf,cv,tmp)=eval(datos)
606    f=file(tmp,'r+b')
607    self.lvbs=eval(f.read())
608    f.close()
609    for i in range(len(self.lvbs)):
610      k=ucodeSiLinux(self.lvbs[i])
611      self.bt[self.NoAcc(k)]=str(i)
612      if k!=self.lvbs[i]:
613        self.lvbs[i]=k
614    self.setScrollBarScrollValueMax("scrInfs",i)
615    self.Refresh(0)
616    self.windowToFront()
617   
618  def Refresh(self,txt):
619    #Presentar items en la lista a partir de txt
620    self.removeListBoxItems("lbxInfs",0,self.getListBoxItemCount("lbxInfs"))
621    if str(type(txt))=="<type 'unicode'>":
622      txt=uts(txt)
623    if str(type(txt))=="<type 'str'>":
624      if txt.isdigit():
625        ini=long(txt)
626        if ini>len(self.lvbs):
627          ini=len(self.lvbs)
628      elif txt=="":
629        ini=0
630      else:
631        try:
632          (k,n)=self.bt.set_location(txt)
633          if k>=txt:
634            ini=eval(n)
635          else:
636            ini=len(self.lvbs)
637        except:
638          ini=len(self.lvbs)
639    else:
640      ini=long(txt)
641    i=ini
642    while i<ini+nitems and i<len(self.lvbs):
643      self.addListBoxItem("lbxInfs",self.lvbs[i])
644      i=i+1
645    self.setScrollBarScrollValue("scrInfs",ini)
646   
647  def Show(self,inf):
648    #Presentar sobre un documento el verbo inf
649    lconj=[]
650    datos=str(('verbs',(inf,self.cv,lconj)))
651    self.sck.send(datos)
652    datos=self.sck.recv(200000)
653    comando,(inf,cv,lconj)=eval(datos)
654
655    self.doc.NewPage()
656    self.doc.PrintLine(ucodeSiLinux(inf),bold=True,size=16)
657    for lin in lconj:
658      if str(type(lin))=="<type 'list'>":
659        for llin in lin:
660          self.doc.PrintLine(ucodeSiLinux(llin)+'\n',bold=False,size=12)
661      elif self.NoAcc(lin.split()[0]).isupper():
662        self.doc.PrintLine('\n'+ucodeSiLinux(lin)+'\n',bold=True,size=14)
663      elif self.NoAcc(lin.split()[0]).istitle():
664        self.doc.PrintLine(ucodeSiLinux(lin)+'\n',bold=True,size=12)
665    self.windowToFront()
666    #Para que se vea el final
667    self.doc.GotoEnd()
668
669  def NoAcc(self,s):
670    #Devuelve la cadena solo con vocales sin acentuar
671    s=s.replace('à','a')
672    s=s.replace('á','a')
673    s=s.replace('è','e')
674    s=s.replace('é','e')
675    s=s.replace('í','i')
676    s=s.replace('ï','i')
677    s=s.replace('ò','o')
678    s=s.replace('ó','o')
679    s=s.replace('ú','u')
680    s=s.replace('ü','u')
681    s=s.replace('l·','l')
682    s=s.replace('ñ','n')
683    s=s.replace('ç','c')
684    return s
685# end of class VerbsWindow
686
687class DicSaltWindow(DBListenerWindow):
688  def __init__(self,desktop):
689    DBListenerWindow.__init__( self, "D. Salt" )
690    self.addOptionButton( "optDir", 6, 10, 80, 16, "Directe", itemListenerProc = self.optDir_clicked ) 
691    self.addOptionButton( "optInv", 81, 10, 80, 16, "Invers", itemListenerProc = self.optInv_clicked ) 
692    self.addEdit( "txtConsulta", 6, 30, 200, 16, "",textListenerProc=self.txtConsulta_changed,keyListenerProc=self.txtConsulta_keypressed )
693    self.setEditEditable("txtConsulta",True)
694    self.addListBox( "lbxLemas", 6, 55,200,220, bDropdown=False,itemListenerProc = self.lbxLemas_clicked )
695    self.addScrollBar("scrLemas",113,55,20,221,bOrientation=1,adjustmentListenerProc=self.scrLemas_changed)
696    self.addButton( "cmbCancel", 16, 350, 125, 22, "Cancel·la", actionListenerProc = self.cmbCancel_clicked ) 
697   
698    wpos={'left':-1,'top':137,'width':250,'height':400}
699    try:
700      #if platform.system()=="Windows":
701        #self.wp=bsddb.btopen(os.path.abspath(ooopath+"/sltwpos"))
702        #if self.wp.has_key("dicsaltwindow"):
703          #(k,p)=self.wp.set_location("dicsaltwindow")
704          #wpos=eval(p)
705      self.wp=bsddb.btopen(os.path.abspath(usrPath+"/sltwpos"))
706      if self.wp.has_key("dicsaltwindow"):
707        (k,p)=self.wp.set_location("dicsaltwindow")
708        wpos=eval(p)
709    finally:
710      self.setWindowPosSize( wpos['left'], wpos['top'], 250, 400 )
711     
712    self.terminar=False
713    self.llms=[]
714    self.bt=bsddb.btopen(None)
715    self.tl="lema" #tipo de lista (lema, amel)
716    self.setOptionButtonState("optDir",True)
717
718    self.desktop=desktop
719    self.doc=uooDoc(desktop)
720   
721    #self.sck=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
722    #self.sck.connect(('localhost',20001))
723    self.sck=socketConnect()
724    if self.sck==None:
725      self.windowClose()
726    self.setFocus("txtConsulta")
727
728  #Eventos
729  def optDir_clicked(self,oItemEvent):
730    self.tl="lema"
731    self.Load()
732 
733  def optInv_clicked(self,oItemEvent):
734    self.tl="amel"
735    self.Load()
736
737  def lbxLemas_clicked(self,oItemEvent):
738    txt=self.getListBoxSelectedItem("lbxLemas")
739    self.Show(txt)
740
741  def txtConsulta_changed(self,oTextEvent):
742    txt=self.NoAcc(uts(self.getEditText("txtConsulta")))
743    self.Refresh(txt)
744 
745  def txtConsulta_keypressed(self,oKeyEvent):
746    if oKeyEvent.KeyCode==1024 or oKeyEvent.KeyCode==1280:
747      self.setFocus("lbxLemas")
748      self.selectListBoxItemPos("lbxLemas",0,True)
749      txt=self.getListBoxSelectedItem("lbxLemas")
750      self.Show(txt)
751 
752  def scrLemas_changed(self,oAdjustmentEvent):
753    self.Refresh(oAdjustmentEvent.Value)
754   
755  def cmbCancel_clicked( self, oActionEvent ): 
756    """This is called when the Cancel button is clicked."""
757    self.windowClose()
758
759  def windowClosed(self,oActionEvent):
760    self.terminar=True
761    self.sck.close()
762    #if platform.system()=="Windows":
763    rect=self.getWindowPosSize()
764    self.wp["dicsaltwindow"]=str({'left':rect.X,'top':rect.Y,'width':rect.Width,'height':rect.Height})
765    self.wp.sync()
766    self.wp.close()
767
768  def windowClosing(self,oActionEvent):
769    pass
770  def windowDeactivated(self,oActionEvent):
771    pass
772    #self.windowToFront()
773
774  #Metodos
775  def Espera(self):
776    while not self.terminar:
777        time.sleep(1)
778       
779  def Load(self):
780    #Cargar lista de palabras
781    i=0
782    tmp=""
783    self.llms=[]
784    self.bt.close()
785    self.bt=bsddb.btopen(None)
786    self.setEditText("txtConsulta","")
787    #Cargar lista de lemas
788    datos=str(('dicsalt',('_lista',self.tl,usrPath)))
789    self.sck.send(datos)
790    datos=self.sck.recv(200000)
791    comando,(lema,tl,tmp)=eval(datos)
792    f=file(tmp,'r+b')
793    self.llms=eval(f.read())
794    f.close()
795    for i in range(len(self.llms)):
796      k=ucodeSiLinux(self.llms[i])
797      self.bt[self.Invers(self.NoAcc(k))]=str(i)
798      if k!=self.llms[i]:
799        self.llms[i]=k
800    self.setScrollBarScrollValueMax("scrLemas",i)
801    self.Refresh(0)
802    self.windowToFront()
803   
804  def Refresh(self,txt):
805    #Presentar items en la lista a partir de txt
806    self.removeListBoxItems("lbxLemas",0,self.getListBoxItemCount("lbxLemas"))
807    if str(type(txt))=="<type 'unicode'>":
808      txt=uts(txt)
809    if str(type(txt))=="<type 'str'>":
810      if txt.isdigit():
811        ini=long(txt)
812        if ini>len(self.llms):
813          ini=len(self.llms)
814      elif txt=="":
815        ini=0
816      else:
817        try:
818          txt=self.Invers(txt)
819          (k,n)=self.bt.set_location(txt)
820          if k>=txt:
821            ini=eval(n)
822          else:
823            ini=len(self.llms)
824        except:
825          ini=len(self.llms)
826    else:
827      ini=long(txt)
828    i=ini
829    while i<ini+nitems and i<len(self.llms):
830      self.addListBoxItem("lbxLemas",self.llms[i])
831      i=i+1
832    self.setScrollBarScrollValue("scrLemas",ini)
833 
834  def Show(self,lema):
835    #Presentar sobre un documento la palabra lema
836    tmp=""
837    datos=str(('dicsalt',(lema,self.tl,usrPath)))
838    self.sck.send(datos)
839    datos=self.sck.recv(200000)
840    comando,(lema,tl,tmp)=eval(datos)
841    self.doc.PrintDoc(tmp)
842    self.windowToFront()
843 
844  def NoAcc(self,s):
845    #Devuelve la cadena sólo con vocales sin acentuar
846    s=s.replace('à','a')
847    s=s.replace('á','a')
848    s=s.replace('è','e')
849    s=s.replace('é','e')
850    s=s.replace('í','i')
851    s=s.replace('ï','i')
852    s=s.replace('ò','o')
853    s=s.replace('ó','o')
854    s=s.replace('ú','u')
855    s=s.replace('ü','u')
856    s=s.replace('l·','l')
857    s=s.replace('ñ','n')
858    s=s.replace('ç','c')
859    return s.lower()
860
861  def Invers(self,s):
862    #devuelve la cadena invertida o no según el valor de self.tl
863    rs=""
864    if self.tl=="amel":
865      for c in s:
866        rs=c+rs
867    else:
868      rs=s
869    return rs
870 
871# end of class DicSaltWindow
872
873class DicBilWindow(DBListenerWindow):
874  def Llog(msg):
875    f=open("/tmp/angel.log",'a')
876    f.write(str(msg)+"\n")
877    f.close()
878 
879
880  def __init__(self,desktop):
881    #LOG
882    f=open("/tmp/angel.log",'a')
883    f.write("[DicBilWindow] Init!\n")
884    f.close()
885   
886    DBListenerWindow.__init__( self, u"D. bil" )
887    self.addOptionButton( "optCV", 6, 10, 50, 16, u"Cas>Val", itemListenerProc = self.optCV_clicked ) 
888    self.addOptionButton( "optVC", 81, 10, 50, 16, u"Val>Cas", itemListenerProc = self.optVC_clicked ) 
889    self.addEdit( "txtConsulta", 6, 30, 106, 16, "",textListenerProc=self.txtConsulta_changed,keyListenerProc=self.txtConsulta_keypressed )
890    self.setEditEditable("txtConsulta",True)
891    self.addListBox( "lbxLemas", 6, 55,106,220, bDropdown=False,itemListenerProc = self.lbxLemas_clicked )
892    self.addScrollBar("scrLemas",113,55,20,220,bOrientation=1,adjustmentListenerProc=self.scrLemas_changed)
893    self.addButton( "cmbCancel", 16, 350, 106, 22, "Cancel·la", actionListenerProc = self.cmbCancel_clicked ) 
894
895    wpos={'left':-1,'top':137,'width':166,'height':400}
896    try:
897      self.wp=bsddb.btopen(os.path.abspath(usrPath+"/sltwpos"))
898      if self.wp.has_key("dicbilwindow"):
899        (k,p)=self.wp.set_location("dicbilwindow")
900        wpos=eval(p)
901    finally:
902      self.setWindowPosSize( wpos['left'], wpos['top'], 166, 400 )
903     
904    self.terminar=False
905    self.llms=[]
906    self.bt=bsddb.btopen(None)
907    self.tl="cv" #tipo de lista (cv, vc)
908    self.setOptionButtonState("optCV",True)
909    self.setWindowTitle(u"C > V")
910
911    self.desktop=desktop
912    self.doc=uooDoc(desktop)
913   
914    #self.sck=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
915    #self.sck.connect(('localhost',20001))
916    self.sck=socketConnect()
917    if self.sck==None:
918      self.windowClose()
919    self.setFocus("txtConsulta")
920   
921  #Eventos
922  def optCV_clicked(self,oItemEvent):
923    self.setWindowTitle(u"C > V")
924    self.tl="cv"
925    self.Load()
926 
927  def optVC_clicked(self,oItemEvent):
928    self.setWindowTitle(u"V > C")
929    self.tl="vc"
930    self.Load()
931
932  def lbxLemas_clicked(self,oItemEvent):
933    txt=self.getListBoxSelectedItem("lbxLemas")
934    self.Show(txt)
935
936  def txtConsulta_changed(self,oTextEvent):
937    txt=self.NoAcc(uts(self.getEditText("txtConsulta")))
938    self.Refresh(txt)
939 
940  def txtConsulta_keypressed(self,oKeyEvent):
941    if oKeyEvent.KeyCode==1024 or oKeyEvent.KeyCode==1280:
942      self.setFocus("lbxLemas")
943      self.selectListBoxItemPos("lbxLemas",0,True)
944      txt=self.getListBoxSelectedItem("lbxLemas")
945      self.Show(txt)
946 
947  def scrLemas_changed(self,oAdjustmentEvent):
948    self.Refresh(oAdjustmentEvent.Value)
949   
950  def cmbCancel_clicked( self, oActionEvent ): 
951    """This is called when the Cancel button is clicked."""
952    self.windowClose()
953
954  def windowClosed(self,oActionEvent):
955    self.terminar=True
956    self.sck.close()
957    #if platform.system()=="Windows":
958    rect=self.getWindowPosSize()
959    self.wp["dicbilwindow"]=str({'left':rect.X,'top':rect.Y,'width':rect.Width,'height':rect.Height})
960    self.wp.sync()
961    self.wp.close()
962
963  def windowClosing(self,oActionEvent):
964    pass
965  def windowDeactivated(self,oActionEvent):
966    pass
967    #self.windowToFront()
968
969  #Metodos
970  def Espera(self):
971    while not self.terminar:
972        time.sleep(1)
973       
974  def Load(self):
975    #Cargar lista de palabras
976    i=0
977    tmp=""
978    self.llms=[]
979    self.bt.close()
980    self.bt=bsddb.btopen(None)
981    self.setEditText("txtConsulta","")
982    #Cargar lista de lemas
983    datos=str(('dicbil',('_lista',self.tl,usrPath)))
984    self.sck.send(datos)
985    datos=self.sck.recv(200000)
986    comando,(lema,tl,tmp)=eval(datos)
987    f=file(tmp,'r+b')
988    self.llms=eval(f.read())
989    f.close()
990    for i in range(len(self.llms)):
991      k=ucodeSiLinux(self.llms[i])
992      self.bt[self.NoAcc(k)]=str(i)
993      if k!=self.llms[i]:
994        self.llms[i]=k
995    self.setScrollBarScrollValueMax("scrLemas",i)
996    self.Refresh(0)
997    self.windowToFront()
998   
999  def Refresh(self,txt):
1000    #Presentar items en la lista a partir de txt
1001    self.removeListBoxItems("lbxLemas",0,self.getListBoxItemCount("lbxLemas"))
1002    if str(type(txt))=="<type 'unicode'>":
1003      txt=uts(txt)
1004    if str(type(txt))=="<type 'str'>":
1005      if txt.isdigit():
1006        ini=long(txt)
1007        if ini>len(self.llms):
1008          ini=len(self.llms)
1009      elif txt=="":
1010        ini=0
1011      else:
1012        try:
1013          (k,n)=self.bt.set_location(txt)
1014          if k>=txt:
1015            ini=eval(n)
1016          else:
1017            ini=len(self.llms)
1018        except:
1019          ini=len(self.llms)
1020    else:
1021      ini=long(txt)
1022    i=ini
1023    while i<ini+nitems and i<len(self.llms):
1024      self.addListBoxItem("lbxLemas",self.llms[i])
1025      i=i+1
1026    self.setScrollBarScrollValue("scrLemas",ini)
1027 
1028  def Show(self,lema):
1029    #Presentar sobre un documento la palabra lema
1030    tmp=""
1031    datos=str(('dicbil',(lema,self.tl,usrPath)))
1032    self.sck.send(datos)
1033    datos=self.sck.recv(200000)
1034    comando,(lema,tl,tmp)=eval(datos)
1035    self.doc.PrintDoc(tmp)
1036    self.windowToFront()
1037 
1038  def NoAcc(self,s):
1039    #Devuelve la cadena solo con vocales sin acentuar
1040    s=s.replace('à','a')
1041    s=s.replace('á','a')
1042    s=s.replace('è','e')
1043    s=s.replace('é','e')
1044    s=s.replace('í','i')
1045    s=s.replace('ï','i')
1046    s=s.replace('ò','o')
1047    s=s.replace('ó','o')
1048    s=s.replace('ú','u')
1049    s=s.replace('ü','u')
1050    s=s.replace('l·','l')
1051    s=s.replace('ñ','n')
1052    s=s.replace('ç','c')
1053    return s.lower()
1054 
1055# end of class DicBilWindow
1056
1057class InfoWindow(DBListenerWindow):
1058  def __init__(self,desktop):
1059    DBListenerWindow.__init__(self,u"Quant al Salt")
1060    self.setWindowPosSize(100,100,1130,750)
1061    self.addGroupBox("grpVersion",10,10,920,100,u"Version")
1062    self.addFixedText( "lblNombre", 30, 40, 150, 12, u"Salt 4.0" )
1063    self.addFixedText( "lblVersAddon", 40, 60, 300, 12, u"Addon" )
1064    self.addFixedText( "lblVersServer", 40, 80, 300, 12, u"Server" )
1065    self.addFixedText( "lblCopyright", 40, 100, 300, 12, u"Copyright: Generalitat Valenciana" )
1066    self.addGroupBox("grpCredits",10,140,920,440,u"Credits")
1067    self.addFixedText( "lblCredits", 30, 170, 900, 420, u"" )
1068    self.getControl("lblCredits").getModel().MultiLine=True
1069    self.getControl("lblCredits").getModel().Align=1 #centrado
1070    self.addButton( "cmbCancel", 420, 720, 106, 22, "Cancel·la", actionListenerProc = self.cmbCancel_clicked ) 
1071
1072    wpos={'left':-1,'top':137,'width':1130,'height':750}
1073    try:
1074      self.wp=bsddb.btopen(os.path.abspath(usrPath+"/sltwpos"))
1075      if self.wp.has_key("infowindow"):
1076        (k,p)=self.wp.set_location("infowindow")
1077        wpos=eval(p)
1078    finally:
1079      self.setWindowPosSize( wpos['left'], wpos['top'], 1130, 750 )
1080
1081    self.terminar=False
1082
1083    #version del addon
1084    txt="Addon saltutil " + sltversion
1085    self.setFixedTextText("lblVersAddon",txt)
1086
1087    #version del servidor
1088    self.sck=socketConnect()
1089    if self.sck==None:
1090      self.windowClose()
1091    else:
1092      #version
1093      datos=str(('vers',""))
1094      self.sck.send(datos)
1095      datos=self.sck.recv(200000)
1096      comando,txt=eval(datos)
1097      self.setFixedTextText("lblVersServer","Server "+txt)
1098      #Creditos
1099      datos=str(('credits',""))
1100      self.sck.send(datos)
1101      datos=self.sck.recv(200000)
1102      comando,lcred=eval(datos)
1103      txt=""
1104      for cred in lcred:
1105        if str(type(cred))=="<type 'list'>":
1106          for s in cred:
1107            txt=txt+s+", "
1108          txt=txt[0:-2]+"\n\n"
1109        else:
1110          txt=txt+cred+":\n"
1111      self.setFixedTextText("lblCredits",txt)
1112           
1113  #Eventos
1114  def cmbCancel_clicked( self, oActionEvent ): 
1115    """This is called when the Cancel button is clicked."""
1116    self.windowClose()
1117
1118  def windowClosed(self,oActionEvent):
1119    self.terminar=True
1120    self.sck.close()
1121    #if platform.system()=="Windows":
1122    rect=self.getWindowPosSize()
1123    self.wp["infowindow"]=str({'left':rect.X,'top':rect.Y,'width':rect.Width,'height':rect.Height})
1124    self.wp.sync()
1125    self.wp.close()
1126
1127  def windowClosing(self,oActionEvent):
1128    pass
1129
1130  #Metodos
1131  def Espera(self):
1132    while not self.terminar:
1133        time.sleep(1)
1134       
1135# end of class InfoWindow
1136
1137class MsgWindow(DBListenerWindow):
1138  def __init__(self,msg):
1139    DBListenerWindow.__init__( self, u"Missatge del Salt")
1140    self.addFixedText("txtMsg",5,10,300,16,msg)
1141    self.setFixedTextAlignment("txtMsg",1)
1142    self.addButton( "cmbCancel", 310, 10, 60, 16, "Cancel·lar", actionListenerProc = self.cmbCancel_clicked ) 
1143    wpos={'left':100,'top':200,'width':460,'height':40}
1144    try:
1145      #if platform.system()=="Windows":
1146        #self.wp=bsddb.btopen(os.path.abspath(ooopath+"/sltwpos"))
1147        #if self.wp.has_key("msgwindow"):
1148          #(k,p)=self.wp.set_location("msgwindow")
1149          #wpos=eval(p)
1150      self.wp=bsddb.btopen(os.path.abspath(usrPath+"/sltwpos"))
1151      if self.wp.has_key("msgwindow"):
1152        (k,p)=self.wp.set_location("msgwindow")
1153        wpos=eval(p)
1154    finally:
1155      self.setWindowPosSize( wpos['left'], wpos['top'], 460, 40 )
1156    self.windowToFront()
1157
1158  #Eventos
1159  def cmbCancel_clicked( self, oActionEvent ): 
1160    """This is called when the Cancel button is clicked."""
1161    self.windowClose()
1162   
1163  def windowClosed(self,oActionEvent):
1164    #if platform.system()=="Windows":
1165    rect=self.getWindowPosSize()
1166    self.wp["msgwindow"]=str({'left':rect.X,'top':rect.Y,'width':rect.Width,'height':rect.Height})
1167    self.wp.sync()
1168    self.wp.close()
1169
1170# end of class MsgWindow
1171
1172# pythonloader looks for a static g_ImplementationHelper variable
1173g_ImplementationHelper = unohelper.ImplementationHelper()
1174g_ImplementationHelper.addImplementation( \
1175                uooUNOobj,                        # UNO object class
1176                "org.openoffice.Office.addon.salt.util.uooUNOobj", # implementation name
1177                                                                                        # Change this name for your own
1178                                                        # script
1179                ("com.sun.star.task.Job",),)          # list of implemented services
1180                                                                                        # (the only service)
Note: See TracBrowser for help on using the repository browser.