Skip to content
Snippets Groups Projects
TextFieldSink.java 4.46 KiB
Newer Older
  • Learn to ignore specific revisions
  • tjc's avatar
    tjc committed
    /********************************************************************
    *
    *  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.*;
    
    tjc's avatar
    tjc committed
    import javax.swing.*;
    import java.awt.event.*;
    import javax.swing.border.*;
    
    
    import uk.ac.sanger.artemis.components.database.DatabaseTreeNode;
    
    
    tjc's avatar
    tjc committed
    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;
    
    tjc's avatar
    tjc committed
    
      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))
    
    tjc's avatar
    tjc committed
        {
          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);
    
    tjc's avatar
    tjc committed
            
    
            String name = dbNode.getOrganismCommonName();
    
    tjc's avatar
    tjc committed
            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))
    
    tjc's avatar
    tjc committed
        {
          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))
    
    tjc's avatar
    tjc committed
          e.acceptDrag(DnDConstants.ACTION_COPY_OR_MOVE);
      }
      public void dropActionChanged(DropTargetDragEvent e) {}
    
    
      public DatabaseTreeNode getDbNode()
      {
        return dbNode;
      }