package open.dolphin.client;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.Transferable;
import javax.swing.ActionMap;
import javax.swing.JComponent;
import javax.swing.TransferHandler;
import open.dolphin.infomodel.AttachmentModel;
/**
* AttachmentHolderTransferHandler class.
*
* @author Kazushi Minagawa. Digital Globe, Inc.
*
*/
public class AttachmentHolderTransferHandler extends TransferHandler implements IKarteTransferHandler {
private final KartePane soaPane;
private final AttachmentHolder attachmentHolder;
public AttachmentHolderTransferHandler(KartePane soaPane, AttachmentHolder attachmentHolder) {
this.soaPane = soaPane;
this.attachmentHolder = attachmentHolder;
}
@Override
protected Transferable createTransferable(JComponent c) {
AttachmentHolder source = (AttachmentHolder)c;
KartePane context = source.getKartePane();
context.setDrragedStamp(new ComponentHolder[]{source});
context.setDraggedCount(1);
AttachmentModel attachment = source.getAttachment();
Transferable tr = new AttachmentTransferable(attachment);
return tr;
}
@Override
public int getSourceActions(JComponent c) {
return COPY_OR_MOVE;
}
@Override
protected void exportDone(JComponent c, Transferable data, int action) {
AttachmentHolder test = (AttachmentHolder)c;
KartePane context = test.getKartePane();
if (action == MOVE &&
context.getDrragedStamp() != null &&
context.getDraggedCount() == context.getDroppedCount()) {
context.removeAttachment(test); // TODO
}
context.setDrragedStamp(null);
context.setDraggedCount(0);
context.setDroppedCount(0);
}
@Override
public boolean canImport(TransferHandler.TransferSupport support) {
return false;
}
/**
* スタンプをクリップボードへ転送する。
*/
@Override
public void exportToClipboard(JComponent comp, Clipboard clip, int action) {
AttachmentHolder ah = (AttachmentHolder)comp;
Transferable tr = createTransferable(comp);
clip.setContents(tr, null);
if (action == MOVE) {
KartePane kartePane = ah.getKartePane();
if (kartePane.getTextPane().isEditable()) {
kartePane.removeAttachment(ah);
}
}
}
@Override
public JComponent getComponent() {
return attachmentHolder;
}
@Override
public void enter(ActionMap map) {
attachmentHolder.setSelected(true);
map.get(GUIConst.ACTION_COPY).setEnabled(true);
boolean caCunt = (soaPane.getTextPane().isEditable());
map.get(GUIConst.ACTION_CUT).setEnabled(caCunt);
map.get(GUIConst.ACTION_PASTE).setEnabled(false);
}
@Override
public void exit(ActionMap map) {
attachmentHolder.setSelected(false);
}
}