You need to sign in or sign up before continuing.
Newer
Older
/********************************************************************
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library 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
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*
* Copyright (C) Genome Research Limited
*
********************************************************************/
package uk.ac.sanger.artemis.components;
import java.awt.datatransfer.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.border.*;
import uk.ac.sanger.artemis.components.database.DatabaseTreeNode;
import java.awt.dnd.*;
import java.awt.*;
import java.io.*;
/**
*
* Extends JTextField to enable pasting & drag and drop into it.
*
*/
public class TextFieldSink extends JTextField implements DropTargetListener
{
private DatabaseTreeNode dbNode = null;
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
public TextFieldSink(String text, int columns)
{
super(text, columns);
//pasting
addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
if(e.getClickCount() == 2)
{
pasteText();
e.consume();
};
}
});
setDropTarget(new DropTarget(this,this));
}
public TextFieldSink()
{
this("",0);
}
public void pasteText()
{
Clipboard c = this.getToolkit().getSystemClipboard();
Transferable t = c.getContents(this);
if(t==null)
{
this.getToolkit().beep();
return;
}
try
{
if(t.isDataFlavorSupported(DataFlavor.stringFlavor))
{
String s = (String) t.getTransferData(DataFlavor.stringFlavor);
this.replaceSelection(s);
}
else
this.getToolkit().beep();
}
catch (UnsupportedFlavorException ex) { this.getToolkit().beep(); }
catch (IOException ex) { this.getToolkit().beep(); }
}
protected static Border dropBorder = new BevelBorder(BevelBorder.LOWERED);
protected static Border endBorder =
BorderFactory.createLineBorder(Color.black);
public void dragEnter(DropTargetDragEvent e)
{
if(e.isDataFlavorSupported(DataFlavor.stringFlavor) ||
e.isDataFlavorSupported(DatabaseTreeNode.DATABASETREENODE))
{
e.acceptDrag(DnDConstants.ACTION_COPY_OR_MOVE);
this.setBorder(dropBorder);
}
}
public void dragExit(DropTargetEvent e)
{
this.setBorder(null);
}
public void drop(DropTargetDropEvent e)
{
this.setBorder(endBorder);
Transferable t = e.getTransferable();
if(t.isDataFlavorSupported(DatabaseTreeNode.DATABASETREENODE))
{
try
{
setCursor(new Cursor(Cursor.WAIT_CURSOR));
dbNode =
(DatabaseTreeNode)t.getTransferData(DatabaseTreeNode.DATABASETREENODE);
String name = dbNode.getOrganismCommonName();
this.replaceSelection(name+":featureId="+dbNode.getFeatureId());
e.dropComplete(true);
setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}
catch(UnsupportedFlavorException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
catch(IOException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
else if(t.isDataFlavorSupported(DataFlavor.stringFlavor))
{
e.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
try
{
String dropS = (String)t.getTransferData(DataFlavor.stringFlavor);
this.replaceSelection(dropS);
e.dropComplete(true);
}
catch (Exception ex) {}
}
else
{
e.rejectDrop();
return;
}
return;
}
public void dragOver(DropTargetDragEvent e)
{
if(e.isDataFlavorSupported(DataFlavor.stringFlavor) ||
e.isDataFlavorSupported(DatabaseTreeNode.DATABASETREENODE))
e.acceptDrag(DnDConstants.ACTION_COPY_OR_MOVE);
}
public void dropActionChanged(DropTargetDragEvent e) {}
public DatabaseTreeNode getDbNode()
{
return dbNode;
}