Merge from mainline (gomp-merge-2005-02-26).
[official-gcc.git] / libjava / javax / swing / TransferHandler.java
blob9d6fa4e3f7c51870044c332b675082565d25b4c7
1 /* TransferHandler.java --
2 Copyright (C) 2004 Free Software Foundation, Inc.
4 This file is part of GNU Classpath.
6 GNU Classpath is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
11 GNU Classpath is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with GNU Classpath; see the file COPYING. If not, write to the
18 Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
19 02111-1307 USA.
21 Linking this library statically or dynamically with other modules is
22 making a combined work based on this library. Thus, the terms and
23 conditions of the GNU General Public License cover the whole
24 combination.
26 As a special exception, the copyright holders of this library give you
27 permission to link this library with independent modules to produce an
28 executable, regardless of the license terms of these independent
29 modules, and to copy and distribute the resulting executable under
30 terms of your choice, provided that you also meet, for each linked
31 independent module, the terms and conditions of the license of that
32 module. An independent module is a module which is not derived from
33 or based on this library. If you modify this library, you may extend
34 this exception to your version of the library, but you are not
35 obligated to do so. If you do not wish to do so, delete this
36 exception statement from your version. */
39 package javax.swing;
41 import java.awt.datatransfer.Clipboard;
42 import java.awt.datatransfer.DataFlavor;
43 import java.awt.datatransfer.Transferable;
44 import java.awt.event.ActionEvent;
45 import java.awt.event.InputEvent;
46 import java.io.Serializable;
48 public class TransferHandler implements Serializable
50 static class TransferAction extends AbstractAction
52 private String command;
54 public TransferAction(String command)
56 this.command = command;
59 public void actionPerformed(ActionEvent event)
61 JComponent component = (JComponent) event.getSource();
62 TransferHandler transferHandler = component.getTransferHandler();
63 Clipboard clipboard = getClipboard(component);
65 if (command.equals(COMMAND_COPY))
66 transferHandler.exportToClipboard(component, clipboard, COPY);
67 else if (command.equals(COMMAND_CUT))
68 transferHandler.exportToClipboard(component, clipboard, MOVE);
69 else if (command.equals(COMMAND_PASTE))
71 Transferable transferable = clipboard.getContents(null);
73 if (transferable != null)
74 transferHandler.importData(component, transferable);
78 private static Clipboard getClipboard(JComponent component)
80 SecurityManager sm = System.getSecurityManager();
82 if (sm != null)
84 try
86 sm.checkSystemClipboardAccess();
88 // We may access system clipboard.
89 return component.getToolkit().getSystemClipboard();
91 catch (SecurityException e)
93 // We may not access system clipboard.
97 // Create VM-local clipboard if non exists yet.
98 if (clipboard == null)
99 clipboard = new Clipboard("Clipboard");
101 return clipboard;
105 private static final long serialVersionUID = -7908749299918704233L;
107 private static final String COMMAND_COPY = "copy";
108 private static final String COMMAND_CUT = "cut";
109 private static final String COMMAND_PASTE = "paste";
111 public static final int NONE = 0;
112 public static final int COPY = 1;
113 public static final int MOVE = 2;
114 public static final int COPY_OR_MOVE = 3;
116 private static Action copyAction = new TransferAction(COMMAND_COPY);
117 private static Action cutAction = new TransferAction(COMMAND_CUT);
118 private static Action pasteAction = new TransferAction(COMMAND_PASTE);
121 * Clipboard if system clipboard may not be used.
123 private static Clipboard clipboard;
125 private int sourceActions;
126 private Icon visualRepresentation;
128 public static Action getCopyAction()
130 return copyAction;
133 public static Action getCutAction()
135 return cutAction;
138 public static Action getPasteAction()
140 return pasteAction;
143 protected TransferHandler()
145 this.sourceActions = NONE;
148 public TransferHandler(String property)
150 this.sourceActions = property != null ? COPY : NONE;
153 public boolean canImport (JComponent c, DataFlavor[] flavors)
155 return false;
158 protected Transferable createTransferable(JComponent c)
160 return null;
163 public void exportAsDrag (JComponent c, InputEvent e, int action)
167 protected void exportDone (JComponent c, Transferable data, int action)
171 public void exportToClipboard(JComponent c, Clipboard clip, int action)
175 public int getSourceActions (JComponent c)
177 return sourceActions;
180 public Icon getVisualRepresentation (Transferable t)
182 return visualRepresentation;
185 public boolean importData (JComponent c, Transferable t)
187 return false;