01: /*
02: * The contents of this file are subject to the Mozilla Public License
03: * Version 1.1 (the "License"); you may not use this file except in
04: * compliance with the License. You may obtain a copy of the License at
05: * http://www.mozilla.org/MPL/
06: *
07: * Software distributed under the License is distributed on an "AS IS"
08: * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
09: * License for the specific language governing rights and limitations
10: * under the License.
11: *
12: * The Original Code is iSQL-Viewer, A Mutli-Platform Database Tool.
13: *
14: * The Initial Developer of the Original Code is iSQL-Viewer, A Mutli-Platform Database Tool.
15: * Portions created by Mark A. Kobold are Copyright (C) 2000-2007. All Rights Reserved.
16: *
17: * Contributor(s):
18: * Mark A. Kobold [mkobold <at> isqlviewer <dot> com].
19: *
20: * If you didn't download this code from the following link, you should check
21: * if you aren't using an obsolete version: http://www.isqlviewer.com
22: */
23: package org.isqlviewer.ui.dnd;
24:
25: import java.awt.datatransfer.DataFlavor;
26: import java.awt.datatransfer.Transferable;
27: import java.awt.datatransfer.UnsupportedFlavorException;
28: import java.awt.dnd.DnDConstants;
29: import java.awt.dnd.DropTarget;
30: import java.awt.dnd.DropTargetDropEvent;
31: import java.io.IOException;
32:
33: import javax.swing.text.BadLocationException;
34: import javax.swing.text.Document;
35: import javax.swing.text.JTextComponent;
36:
37: /**
38: * Drop Target for dropping text with COPY/MOVE DnD actions.
39: * <p>
40: * The default drop targets for text only want to seem to do COPY only.
41: *
42: * @author Mark A. Kobold <mkobold at isqlviewer dot com>
43: * @version 1.0
44: */
45: public class TextComponentDropTarget extends DropTarget {
46:
47: private static final long serialVersionUID = 4496993389366518143L;
48: private JTextComponent editor = null;
49:
50: public TextComponentDropTarget(JTextComponent editor) {
51:
52: this .editor = editor;
53: }
54:
55: public void drop(DropTargetDropEvent event) {
56:
57: boolean successful = false;
58: try {
59: if (event.isDataFlavorSupported(DataFlavor.stringFlavor)) {
60: Document doc = editor.getDocument();
61: int offset = editor.viewToModel(event.getLocation());
62: int dropAction = event.getDropAction();
63: Transferable transferable = event.getTransferable();
64: String s = (String) transferable
65: .getTransferData(DataFlavor.stringFlavor);
66: event.acceptDrop(dropAction);
67: switch (dropAction) {
68: case DnDConstants.ACTION_COPY:
69: doc.insertString(offset, s, null);
70: editor.requestFocus();
71: successful = true;
72: break;
73: case DnDConstants.ACTION_MOVE:
74: editor.setText(s);
75: editor.requestFocus();
76: successful = true;
77: break;
78: default:
79: break;
80: }
81: }
82: } catch (UnsupportedFlavorException e) {
83: } catch (IOException e) {
84: } catch (BadLocationException e) {
85: } finally {
86: event.dropComplete(successful);
87: }
88: }
89: }
|