Clonar formato con selección múltiple

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
pruebaPincel
Mensajes: 5
Registrado: Jue Jul 05, 2018 10:30 am

Clonar formato con selección múltiple

Mensaje por pruebaPincel »

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

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
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Clonar formato con selección múltiple

Mensaje por fornelasa »

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.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
pruebaPincel
Mensajes: 5
Registrado: Jue Jul 05, 2018 10:30 am

Re: Clonar formato con selección múltiple

Mensaje por pruebaPincel »

Buenas,

Estoy intentando reproducir el funcionamiento del botón "Clonar formato" tal y como se explica en:
https://wiki.open-office.es/Copiar_form ... ice_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

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
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Clonar formato con selección múltiple

Mensaje por fornelasa »

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

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

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.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
pruebaPincel
Mensajes: 5
Registrado: Jue Jul 05, 2018 10:30 am

Re: Clonar formato con selección múltiple

Mensaje por pruebaPincel »

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
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Clonar formato con selección múltiple

Mensaje por fornelasa »

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.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
pruebaPincel
Mensajes: 5
Registrado: Jue Jul 05, 2018 10:30 am

Re: Clonar formato con selección múltiple

Mensaje por pruebaPincel »

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

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
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Clonar formato con selección múltiple

Mensaje por fornelasa »

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.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
pruebaPincel
Mensajes: 5
Registrado: Jue Jul 05, 2018 10:30 am

Re: Clonar formato con selección múltiple

Mensaje por pruebaPincel »

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

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

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

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

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
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Clonar formato con selección múltiple

Mensaje por fornelasa »

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) Descargado 180 veces
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Responder