Re: Copy textstring to Clipboard <SOLVED>

steb <[email protected]> Thu, 02 Dec 2010 13:44:12 +0100
Newsgroups gmane.comp.openoffice.devel.api
Message-ID <[email protected]>
  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|
>
>
>
>