Hi Fernand,

i wonder which method to copy contents is recommended. I achieve the same but I use a different approach with XSelectionSupplier in combination with XDispatchHelper and the XTextViewCursor. Code is similar to:

    public void copyContent(XCellRange cellRange, XTextRange textRange)
    {
        // Get current controller
        XController currController = this.xModel.getCurrentController();

        // Get selection supplier
XSelectionSupplier xSelectionSupplier = (XSelectionSupplier)UnoRuntime.queryInterface(XSelectionSupplier.class, currController);

            // Select the cell range constructed above
xSelectionSupplier.select(AnyConverter.toObject(XCellRange.class, cellRange)); // Here you could throw in any (selectable) object you want to copy!
            // Get Dispatch Helper to dispatch commands
            XFrame xFrame = xModel.getCurrentController().getFrame();
XDispatchProvider xDispatchProvider = (XDispatchProvider) UnoRuntime.queryInterface(
                    XDispatchProvider.class, xFrame);

Object dispatchHelperObject = this.xRemoteServiceManager.createInstanceWithContext("com.sun.star.frame.DispatchHelper", this.xComponentContext); XDispatchHelper xDispatchHelper = (com.sun.star.frame.XDispatchHelper) UnoRuntime.queryInterface( com.sun.star.frame.XDispatchHelper.class, dispatchHelperObject);

            // Excute copy command
xDispatchHelper.executeDispatch(xDispatchProvider, ".uno:Copy", "", 0, new PropertyValue[] { new PropertyValue() });

// IMPORTANT!! the textViewCursor has to be set AFTER the uno:copy command!!!
            // We have the target selection
this.xTextViewCursorSupplier.getViewCursor().gotoRange(textRange, false);

            // Perform Paste command
xDispatchHelper.executeDispatch(xDispatchProvider, ".uno:Paste", "", 0, new PropertyValue[] { new PropertyValue() });
    }

I encounter a serious performance issue if i use this approach for a few hundred cell ranges. Maybe your approach doesn't suffer from this. A comment from the devs would be great on which method is recommended for copying stuff around.

Greetings,
Steffen

Am 02.12.2010 12:15, schrieb Fernand Vanrie:
Somewhere on the web (http://hermione.s41.xrea.com/pukiwiki/) i found finaly the correct Basic code to copy a text to the clipboard without opening ghidden docs etc...
I hope its usefull for others as well

Fernand

|Global sTxtCString AsString

Sub  clipboard_1
  sText ="123456"
  CopyToClipBoard(sText)
End  Sub

Sub  CopyToClipBoard( sText )
  ' create SystemClipboard instance
oClip = CreateUnoService("com.sun.star.datatransfer.clipboard.SystemClipboard")
  oTR = createUnoListener("Tr_", _
      "com.sun.star.datatransfer.XTransferable")
  ' set data
  oClip.setContents(oTR,Null)
  sTxtCString = sText
  'oClip.flushClipboard() ' does not work
End  Sub

Function Tr_getTransferData(aFlavor as com.sun.star.datatransfer.DataFlavor)
  If  (aFlavor.MimeType ="text/plain;charset=utf-16")Then
    Tr_getTransferData() = sTxtCString
  End  If
End  Function

Function  Tr_getTransferDataFlavors()
  Dim  aFlavor As new com.sun.star.datatransfer.DataFlavor
  aFlavor.MimeType ="text/plain;charset=utf-16"
  aFlavor.HumanPresentableName ="Unicode-Text"
  Tr_getTransferDataFlavors() = array(aFlavor)
End  Function

Function Tr_isDataFlavorSupported(aFlavor as com.sun.star.datatransfer.DataFlavor) as Boolean
  If  aFlavor.MimeType ="text/plain;charset=utf-16"  Then
    Tr_isDataFlavorSupported = true
  Else
    Tr_isDataFlavorSupported = false
  End  If
End  Function|






---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@api.openoffice.org
For additional commands, e-mail: dev-h...@api.openoffice.org

Reply via email to