package net.sourceforge.fidocadj.clipboard;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.ClipboardOwner;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.Toolkit;
import java.io.*;
import net.sourceforge.fidocadj.globals.*;
/**
Clipboard handling class.
<pre>
This file is part of FidoCadJ.
FidoCadJ is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
FidoCadJ is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with FidoCadJ. If not,
@see <a href=http://www.gnu.org/licenses/>http://www.gnu.org/licenses/</a>.
</pre>
@author Davide Bucci
*/
public final class TextTransfer implements ClipboardOwner,
ProvidesCopyPasteInterface
{
/** Perform a copy operation of the text specified as an argument.
@param s the text to be copied
*/
public void copyText(String s)
{
// get the system clipboard
Clipboard systemClipboard =Toolkit.getDefaultToolkit()
.getSystemClipboard();
Transferable transferableText = new StringSelection(s);
systemClipboard.setContents(transferableText,null);
}
/** Perform a paste operation of the copied test. The pasted text is
returned. In other words, do a read in the clipboard.
@return the pasted test.
*/
public String pasteText()
{
// TODO: review a little...
// HASDONE: it seems to work quite reliably. No problems so far...
TextTransfer textTransfer = new TextTransfer();
return textTransfer.getClipboardContents();
}
/**
Empty implementation of the ClipboardOwner interface.
@param aClipboard handle to the clipboard to use.
@param aContents handle to the contents.
*/
public void lostOwnership(Clipboard aClipboard, Transferable aContents)
{
// does nothing
}
/**
Place a {@link String} on the clipboard, and make this class the
owner of the Clipboard's contents.
@param aString the {@link String} to be employed.
*/
public void setClipboardContents(String aString)
{
StringSelection stringSelection = new StringSelection(aString);
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(stringSelection, this);
}
/**
Get the String residing on the clipboard.
@return any text found on the Clipboard; if none found, return an
empty {@link String}.
*/
public String getClipboardContents()
{
String result = "";
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
//odd: the Object param of getContents is not currently used
Transferable contents = clipboard.getContents(null);
boolean hasTransferableText = contents != null &&
contents.isDataFlavorSupported(DataFlavor.stringFlavor);
if (hasTransferableText) {
try {
result = (String)contents.getTransferData(
DataFlavor.stringFlavor);
} catch (UnsupportedFlavorException ex){
//highly unlikely since we are using a standard DataFlavor
System.out.println(ex);
ex.printStackTrace();
} catch (IOException ex) {
System.out.println(ex);
ex.printStackTrace();
}
}
return result;
}
}