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.SchemaModel; /** * SchemaHolderTransferHandler * * @author Kazushi Minagawa * */ public class SchemaHolderTransferHandler extends TransferHandler implements IKarteTransferHandler { private final KartePane soaPane; private final SchemaHolder schemaHolder; public SchemaHolderTransferHandler(KartePane soaPane, SchemaHolder sh) { this.soaPane = soaPane; this.schemaHolder = sh; } @Override protected Transferable createTransferable(JComponent c) { SchemaHolder source = (SchemaHolder) c; KartePane context = source.getKartePane(); context.setDrragedStamp(new ComponentHolder[]{source}); context.setDraggedCount(1); SchemaModel schema = source.getSchema(); SchemaList list = new SchemaList(); list.schemaList = new SchemaModel[]{schema}; Transferable tr = new SchemaListTransferable(list); return tr; } @Override public int getSourceActions(JComponent c) { return COPY_OR_MOVE; } @Override protected void exportDone(JComponent c, Transferable data, int action) { SchemaHolder test = (SchemaHolder) c; KartePane context = test.getKartePane(); if (action == MOVE && context.getDrragedStamp() != null && context.getDraggedCount() == context.getDroppedCount()) { context.removeSchema(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) { SchemaHolder sh = (SchemaHolder) comp; Transferable tr = createTransferable(comp); clip.setContents(tr, null); if (action == MOVE) { KartePane kartePane = sh.getKartePane(); if (kartePane.getTextPane().isEditable()) { kartePane.removeSchema(sh); } } } @Override public JComponent getComponent() { return schemaHolder; } @Override public void enter(ActionMap map) { schemaHolder.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) { schemaHolder.setSelected(false); } }