OOoES/Desarrollo/Add-on de Soporte

From OpenOffice.org Wiki

Jump to: navigation, search

Contents

Objetivo

Este add-on pretende integrar la ayduda del portal de ayuda del sitio es.openffice.org dentro de la suite de OpenOffice.org. Esto hara que el usuario pueda rapidamente acceder a las listas y subscribirse. El nivel de interaccion avanzara conforme el modulo se haga mas popular.

Roadmap

Se prentede empezar con algo sencillo, esto es insertar un item dentro del menu de ayuda que redirija a las personas a la pagina de ayuda de OOoEs. Una vez que este modulo se haya implementado el segundo nivel de interaccion es abrir un navegador dentro de un dialogo donde se tome los datos tal como el correo de la persona y se seleccione la lista a donde se quiere subscriibir. En un tercer plano se intentara tener un RSS de la lista el cual se imprimira dentro del contenido de un dialogo especial.


Primera etapa

Image:AddonSupport.png

Este es un ejemplo de como se vera la primera etapa del modulo. El Soporte Comunitario tendra ligas a las listas de OpenOffice.org Español.

En el proyecto usaremos los modulos de python como smtpdlib para enviar el correo a la lista. Tambien usaremos los modulos de la parte grafica de UNO, esta se encuentra en el modulo AWT. AWT nos da toda una coleccion de widgets tales como:

  • Ventana o Dialogo: com.sun.star.awt.UnoControlDialogModel
  • Botones: com.sun.star.awt.UnoControlButtonModel
  • Listas: com.sun.star.awt.UnoControlListBoxModel
  • Caja de texto: com.sun.star.awt.UnoControlEditModel
  • Botones de radio: com.sun.star.awt.UnoControlRadioButtonModel
  • Caja de verificacion: com.sun.star.awt.UnoControlCheckBoxModel
  • Etiquetas: com.sun.star.awt.UnoControlFixedTextModel


Codigo

Funcion: Modulos de Widgets

Esta parte el codigo se enfoca a los widgets AWT del script, incluye ventana, caja de texto, lista de menu y finalmente un boton para aceptar y cancelar: Utilizamos los siguientes widgets:

  • UnoControlDialogModel - Dialogo
  • UnoControlButtonModel - Boton
  • UnoControlEditModel - Caja de texto
  • UnoControlFixedTextModel - Etiqueta
  • UnoControlListBoxModel - Lista de Menu
  • Rectangle - Rectangulo

[python]

   def _createBox(self):
       """Create Xray User Interface"""
   #create the dialog model and set the properties
       dialog_model = self.smgr.createInstanceWithContext(
                                   'com.sun.star.awt.UnoControlDialogModel',
                                   self.ctx)
       dialog_model.PositionX = 50
       dialog_model.Step = 1
       dialog_model.TabIndex = 7
       dialog_model.Width = 150
       dialog_model.Height = 60
       dialog_model.PositionY = 63
       dialog = self.smgr.createInstanceWithContext(
                               'com.sun.star.awt.UnoControlDialog',
                               self.ctx)
   # Button Exit : BtnExit
       button = dialog_model.createInstance(
                               'com.sun.star.awt.UnoControlButtonModel')
       button.PositionX = 35
       button.TabIndex = 8
       button.Height = 12
       button.Width = 33
       button.PositionY = 45
       button.PushButtonType =  cancel
       button.DefaultButton =  True
       button.Label = self.gui_rsc['BtnExit']
       dialog_model.insertByName('BtnExit', button )
       
   # Button Exit : BtnExit
       button = dialog_model.createInstance(
                               'com.sun.star.awt.UnoControlButtonModel')
       button.PositionX = 85
       button.TabIndex = 8
       button.Height = 12
       button.Width = 43
       button.PositionY = 45
       button.PushButtonType =  standard
       button.DefaultButton =  True
       button.Label = "Enviar Correo"
       dialog_model.insertByName('BtnEmail', button )
       # text Object Name : OriginName
       textfield = dialog_model.createInstance(
                               'com.sun.star.awt.UnoControlEditModel')
       textfield.PositionX = 35
       textfield.TabIndex = 15
       textfield.BackgroundColor = 0xccffff
       textfield.Width = 90
       textfield.Height = 13
       textfield.PositionY = 6
       textfield.Align =  left
       textfield.ReadOnly =  False
       textfield.Tabstop =  False
       dialog_model.insertByName('OriginName', textfield )
       
       # label Label2
       label = dialog_model.createInstance(
                               'com.sun.star.awt.UnoControlFixedTextModel')
       label.PositionX = 10
       label.TabIndex = 16
       label.Height = 10
       label.Width = 20
       label.PositionY = 6
       label.Label = self.gui_rsc['Label2']
       dialog_model.insertByName('Label2', label)
       # label Label2
       label = dialog_model.createInstance(
                               'com.sun.star.awt.UnoControlFixedTextModel')
       label.PositionX = 10
       label.TabIndex = 16
       label.Height = 10
       label.Width = 20
       label.PositionY = 27
       label.Label = self.gui_rsc['Label3']
       dialog_model.insertByName('Label3', label)
       
   # List Historical examinated objects : ListObj
       a_list= dialog_model.createInstance(
                               'com.sun.star.awt.UnoControlListBoxModel')
       a_list.PositionX = 35
       a_list.TabIndex = 14
       a_list.Width = 100
       a_list.Height = 12
       a_list.PositionY = 25
       a_list.HelpText = self.gui_rsc['ListObj']
       a_list.Dropdown =  True
       a_list.LineCount = 15
       a_list.Tag = 
  1. lista = array("Item 1", "Item 2", "Item 3")

a_list.StringItemList = ("users-subscribe@es.openoffice.org", "discuss_es-subscribe@es.openoffice.org", "dev-subscribe@es.openoffice.org") a_list.Border= 2

       dialog_model.insertByName('ListObj', a_list )
   # End of objects definition
       if not dialog.getModel():
           dialog.setModel(dialog_model)
   #UNO toolkit definition
       toolkit = self.smgr.createInstanceWithContext(
                               'com.sun.star.awt.Toolkit',
                               self.ctx)
       a_rect = uno.createUnoStruct( 'com.sun.star.awt.Rectangle' )
       a_rect.X = 150
       dialog.setTitle ( "Soporte Comunitario ")
       a_rect.Width = 170
       a_rect.Height = 161
       a_rect.Y = 263
       win_descriptor = uno.createUnoStruct('com.sun.star.awt.WindowDescriptor')
       win_descriptor.Type = TOP
       win_descriptor.ParentIndex = -1
       win_descriptor.Bounds = a_rect
       peer = toolkit.createWindow( win_descriptor )
       dialog.createPeer( toolkit, peer )
       return dialog

Funcion: SendMail

Este es el codigo para enviar correo, el codigo puede mejorarse incluyendo el modulos de correo electronico asi como MimeType. Este codigo esta en bruto y falta ligarse con el resto del script. [python] import smtplib def SendEmail(): # servidor mismo de collabnet smtpServer='cylon1.sjc.collab.net';

               # se reemplazara por el valor que entrege la caja de texto

fromAddr='jza@openoffice.org';

               # se reemplazara por el valor que entrege el menu de lista

toAddr='jza@openoffice.org';

               # se inserta el valor de fromAddr y To Addr a la cadena para que
               # se reporte de acuerdo a la convencion, sin embargo se puede usar
               # el modulo de email

text= 'From: ' + fromAddr + '\r\n'+ 'To: ' + toAddr + '\r\n\r\n' + Subject: new found love

Hi Friend,

Linux is a reality. Love it!!

               server = smtplib.SMTP(smtpServer)

server.set_debuglevel(1) server.sendmail(fromAddr, toAddr, text) server.quit()

SendEmail()

Ligas Utiles

  • OOoBasic crash course: Adding GUI goodness Contiene un gui con diversas opciones para manejar diferentes buscadores. Puede ser utiles para tener diversas listas de correo para la configuracion.
  • UNO Component Packaging es un buen recurso para aprender como converitr un script en un componente y pueda representarse en los menus o barras de herramientas.
Personal tools