source: salt-libreoffice-addon/trunk/fuentes/saltutil/sltuooo.py @ 473

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

Adding files

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