Clonar formato con selección múltiple

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...

Clonar formato con selección múltiple

Notapor pruebaPincel » Jue Jul 05, 2018 10:51 am

Hola a tod@s:

Estoy trabajando con el api UNO, y utilizando los comandos como: .uno:copy, .uno:paste, ect...
Tengo problemas con el comando .uno:FormatPaintbrush.
El código que ejecuto es:
Código: Seleccionar todo   Expandir vistaContraer vista
PropertyValue[] args = new PropertyValue[0];
xDispatchHelper.executeDispatch(xDispatchProvider, ".uno:FormatPaintbrush", "", 0, args);


Me gustaría saber si existe otro comando para la selección múltiple que tiene el botón "brocha" o si con este mismo comando y algo más podría conseguir que funcionara el doble-click sobre "Clonar formato".

Gracias
Win 7 y OpenOffice 3.1
pruebaPincel
 
Mensajes: 5
Registrado: Jue Jul 05, 2018 10:30 am

Re: Clonar formato con selección múltiple

Notapor fornelasa » Jue Jul 05, 2018 5:39 pm

Hola pruebaPincel, considero que hace falta más detalle de tu consulta.
Por el momento solo puedo decirte que dicho comando no esta soportado en selecciones múltiples.
Saludos. Federico.
lo 6.1.2 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
fornelasa
 
Mensajes: 3099
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Clonar formato con selección múltiple

Notapor pruebaPincel » Vie Jul 06, 2018 8:14 am

Buenas,

Estoy intentando reproducir el funcionamiento del botón "Clonar formato" tal y como se explica en:
https://wiki.open-office.es/Copiar_formato_en_OpenOffice_Writer,

concretamente la opción doble-click:

"Si quieres pegar el formato más de una vez:
Selecciona la letra, palabra, párrafo o párrafos origen del formato a copiar.
Haz un doble clic sobre la herramienta "Pincel de formato. "

Código: Seleccionar todo   Expandir vistaContraer vista
JButton buttonPincel;
this.buttonPincel.addMouseListener( new MouseAdapter()
      {
         @Override
         public void mouseClicked( MouseEvent arg0 )
         
         {   
            
            if ( arg0.getButton() == MouseEvent.BUTTON1 ) {
               copiarFormato();
            }
         }
      });
   public void copiarFormato(XDispatchHelper xDispatchHelper, XDispatchProvider xDispatchProvider) throws OOException
   {
      PropertyValue[] args = new PropertyValue[1];
      xDispatchHelper.executeDispatch(xDispatchProvider, "[b].uno:FormatPaintbrush[/b]", "", 0, args);
      
   }
Win 7 y OpenOffice 3.1
pruebaPincel
 
Mensajes: 5
Registrado: Jue Jul 05, 2018 10:30 am

Re: Clonar formato con selección múltiple

Notapor fornelasa » Vie Jul 06, 2018 6:29 pm

Ah ok, pensé que era para Calc, bueno ..... tal vez puedas crear y después aplicar un "estilo".

1) Seleccionas el texto origen y después ejecutamos esta macro:
Código: Seleccionar todo   Expandir vistaContraer vista
sub CrearEstilo
    document   = ThisComponent.CurrentController.Frame
    dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
  dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Param"
args1(0).Value = "miEstilo"
args1(1).Name = "Family"
args1(1).Value = 1
     dispatcher.executeDispatch(document, ".uno:StyleNewByExample", "", 0, args1())
end sub

2) Seleccionas los textos destino y aplicamos esta macro:
Código: Seleccionar todo   Expandir vistaContraer vista
sub PegarEstilo
        document = ThisComponent.CurrentController.Frame
      dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    dim args1(1) as new com.sun.star.beans.PropertyValue
   args1(0).Name = "Template"
  args1(0).Value = "miEstilo"
   args1(1).Name = "Family"
  args1(1).Value = 1
dispatcher.executeDispatch(document, ".uno:StyleApply", "", 0, args1())
end sub
lo 6.1.2 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
fornelasa
 
Mensajes: 3099
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Clonar formato con selección múltiple

Notapor pruebaPincel » Lun Jul 09, 2018 12:31 pm

Hola,

La verdad es que creo que me explico mal.
Con el código que adjuntas, crearía un nuevo estilo y lo aplicaría sobre el texto, pero esto ya lo hace, el comando .uno:FormatPaintbrush.
La funcionalidad que no consigo reproducir es:
Cuando se hace doble click sobre el botón "Copiar formato" y copiar el formato en varios textos, hasta que se pulsa sobre el mismo botón o se pulsa la tecla "Esc".

Me gustaría saber cómo indicarle al comando .uno:FormatPaintbrush que se ha hecho doble-click...

Muchas gracias por todo!
Win 7 y OpenOffice 3.1
pruebaPincel
 
Mensajes: 5
Registrado: Jue Jul 05, 2018 10:30 am

Re: Clonar formato con selección múltiple

Notapor fornelasa » Lun Jul 09, 2018 5:53 pm

pruebaPincel escribió:La verdad es que creo que me explico mal.

creo no es el caso, creo te entendí correctamente.

pruebaPincel escribió:La funcionalidad que no consigo reproducir es:
Cuando se hace doble click sobre el botón "Copiar formato" y copiar el formato en varios textos, hasta que se pulsa sobre el mismo botón o se pulsa la tecla "Esc".
Yo tampoco sé hacerlo, esperemos que alguien más del foro nos oriente, Writer no es mi fuerte ... :mrgreen:

Cómo se ha mencionado previamente y con las macros indicadas arriba, tal vez podamos hacerlo de otro modo, parece más practico usar estilos.
Primero selecciona el texto que deseas copiar y pulsa el botón CrearEstilo, selecciona los textos que deseas pegar y pulsa el botón PegarEstilos.
Ejemplo:
lo 6.1.2 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
fornelasa
 
Mensajes: 3099
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Clonar formato con selección múltiple

Notapor pruebaPincel » Mar Jul 10, 2018 12:07 pm

Muchas gracias por contestar.

He probado el ejemplo y parece que la primera vez que se ejecuta funciona, pero luego se vuelve "loco".
Dentro de mi desarrollo lo he probado y se comporta de otra manera.
Código: Seleccionar todo   Expandir vistaContraer vista
public void copiarFormato(XDispatchHelper xDispatchHelper, XDispatchProvider xDispatchProvider) throws OOException
   {
      PropertyValue[] args = new PropertyValue[2];
      System.out.println("creando propiedades");
      args[0] = new PropertyValue();
      System.out.println("creada propiedades"+args[0]);
      args[0].Name = "Param";
      args[0].Value = "miEstilo";
      args[1] = new PropertyValue();
      args[1].Name = "Family";
      args[1].Value =1;
      xDispatchHelper.executeDispatch(xDispatchProvider,".uno:StyleNewByExample", "", 0, args);
   }
   public void pegarFormato(XDispatchHelper xDispatchHelper, XDispatchProvider xDispatchProvider) throws OOException
   {
      PropertyValue[] args = new PropertyValue[2];
      args[0] = new PropertyValue();
      args[0].Name = "Template";
      args[0].Value ="miEstilo";
      args[1] = new PropertyValue();
      args[1].Name = "Family";
      args[1].Value ="1";
      xDispatchHelper.executeDispatch(xDispatchProvider, ".uno:StyleUpdateByExample", "", 0, args);
   }


En este caso funciona peor. No se entera del estilo copiado...Creo que lo voy a dejar por imposible :(
Win 7 y OpenOffice 3.1
pruebaPincel
 
Mensajes: 5
Registrado: Jue Jul 05, 2018 10:30 am

Re: Clonar formato con selección múltiple

Notapor fornelasa » Mar Jul 10, 2018 5:01 pm

Solo para no dejar ..... acá en Basic funciona siempre.
No sé si puedas explicar lo que deseas hacer dentro de tu desarrollo para intentar replicarlo por acá y ver si de casualidad funciona también de manera normal acá en Basic.
Saludos, Federico.
lo 6.1.2 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
fornelasa
 
Mensajes: 3099
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Clonar formato con selección múltiple

Notapor pruebaPincel » Mié Jul 11, 2018 6:51 am

Buenas,

Lo que quiero decir es que con la prueba que me pasaste(aplicaFormato.odt), no funciona como la brocha:
Las pruebas que hago son:
    Poner el cursos sobre un texto, por ejemplo "leyes".
    Pulsar el botón "Crear estilo"
    Y al texto leyes se le cambia el estilo, poniendo fondo amarillo.

La brocha no funciona así, funciona:

    Poner el cursos sobre un texto, por ejemplo "leyes".
    Pulsar el botón "Crear estilo"
    Al texto "leyes" no le hace nada
    Seleccionar otro texto
    Se le aplica el formato que tiene leyes sobre este nuevo texto.

En cuanto a mi desarrollo, adjunto código fuente:
Código: Seleccionar todo   Expandir vistaContraer vista
JButton buttonPincelCopiar;
JButton buttonPincelPegar;
this.buttonPincelCopiar = (JButton)CreadorButton.crearBoton( CreadorButton.TIPO_JBUTTON, true, WeboUI.ICONO_FORMATPAINTBRUSH, null, null, null);
this.buttonPincelPegar = (JButton)CreadorButton.crearBoton( CreadorButton.TIPO_JBUTTON, true, WeboUI.ICONO_FORMATPAINTBRUSH, null, null, null);
this.buttonPincelCopiar.setToolTipText("Copiar formato");
this.buttonPincelCopiar.setEnabled( this.oODocumentoMostrado.getOOConfig().isEdicionPermitida() );
this.buttonPincelPegar.setToolTipText("Pegar formato");
this.buttonPincelPegar.setEnabled( this.oODocumentoMostrado.getOOConfig().isEdicionPermitida() );

this.buttonPincelCopiar.addActionListener(new ActionListener()
      {
         public void actionPerformed(ActionEvent evt)
         {
            OODocumentShow.this.soloCopiarFormato();
         }
      });
this.buttonPincelPegar.addActionListener(new ActionListener()
      {
         public void actionPerformed(ActionEvent evt)
         {
            OODocumentShow.this.pegarFormato();
         }
      });


Código: Seleccionar todo   Expandir vistaContraer vista
private void pegarFormato()
   {
      try
      {
         System.out.println("pegarFormato método............");
         this.oODocumentoMostrado.pegarFormato();
      }
      catch(Exception ex)
      {
         JOptionPane.showMessageDialog( this.frame,
               "Error al copiar",
               "WebOffice: Error copiando",
               JOptionPane.ERROR_MESSAGE);

         System.out.println("· [ Error ] Error al copiar");
         ex.printStackTrace();
      }
   }
   
   private void soloCopiarFormato()
   {
      try
      {
         System.out.println("solocopiar método............");
         this.oODocumentoMostrado.copiarFormato();
      }
      catch(Exception ex)
      {
         JOptionPane.showMessageDialog( this.frame,
               "Error al copiar",
               "WebOffice: Error copiando",
               JOptionPane.ERROR_MESSAGE);

         System.out.println("· [ Error ] Error al copiar");
         ex.printStackTrace();
      }
   }

Código: Seleccionar todo   Expandir vistaContraer vista
public void copiarFormato() throws OOException
   {
      System.out.println("copiarFormato en OODOocument.java");
      OODocumentEdition oODocumentEdition = new OODocumentEdition();
      oODocumentEdition.setDocument(this.xTextDocument);
      oODocumentEdition.setCursor(this.xTextCursor);
      oODocumentEdition.copiarFormato(this.oODocumentShow.getDispatchHelper(),this.oODocumentShow.getDispatchProvider());
   }
   public void pegarFormato() throws OOException
   {
      System.out.println("copyFormat en OODOocument.java");
      OODocumentEdition oODocumentEdition = new OODocumentEdition();
      oODocumentEdition.setDocument(this.xTextDocument);
      oODocumentEdition.setCursor(this.xTextCursor);
      oODocumentEdition.pegarFormato(this.oODocumentShow.getDispatchHelper(),this.oODocumentShow.getDispatchProvider());
   }

Código: Seleccionar todo   Expandir vistaContraer vista
public void copiarFormato(XDispatchHelper xDispatchHelper, XDispatchProvider xDispatchProvider) throws OOException
   {
      PropertyValue[] args = new PropertyValue[2];
      System.out.println("creando propiedades");
      args[0] = new PropertyValue();
      System.out.println("creada propiedades"+args[0]);
      args[0].Name = "Param";
      args[0].Value = "miEstilo";
      args[1] = new PropertyValue();
      args[1].Name = "Family";
      args[1].Value =1;
      xDispatchHelper.executeDispatch(xDispatchProvider,".uno:StyleNewByExample", "", 0, args);
   }
   public void pegarFormato(XDispatchHelper xDispatchHelper, XDispatchProvider xDispatchProvider) throws OOException
   {
      PropertyValue[] args = new PropertyValue[2];
      args[0] = new PropertyValue();
      args[0].Name = "Template";
      args[0].Value ="miEstilo";
      args[1] = new PropertyValue();
      args[1].Name = "Family";
      args[1].Value ="1";
      xDispatchHelper.executeDispatch(xDispatchProvider, ".uno:StyleUpdateByExample", "", 0, args);
   }


Probando con este código, a veces se entera del estilo, pero lo aplica raro.

Podrías indicarme cómo haces las pruebas? Igual estoy haciendo algo mal...

Saludos.
Win 7 y OpenOffice 3.1
pruebaPincel
 
Mensajes: 5
Registrado: Jue Jul 05, 2018 10:30 am

Re: Clonar formato con selección múltiple

Notapor fornelasa » Mié Jul 11, 2018 11:22 pm

Solo se me ocurre como ejemplo algo terrorífico como esto:
Poner el cursor sobre un texto, por ejemplo "leyes".
Pulsar el botón "Crear estilo"
Al texto "leyes" no le hace nada
Seleccionar otro texto
Pulsar el botón aplicarEstilo y se le aplica el formato que tiene leyes sobre este nuevo texto.


Ufff, en serio solo se me ocurre eso, a ver si alguien del foro nos orienta aun más.

Nota: No sé si funcione para LibreOffice.
Adjuntos
aplicaFormato (1).odt
aplica Formato
(28.5 KiB) 31 veces
lo 6.1.2 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
fornelasa
 
Mensajes: 3099
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.


Volver a Macros y API UNO

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 4 invitados