OSDN Git Service

Imported GNU Classpath 0.20
[pf3gnuchains/gcc-fork.git] / libjava / classpath / javax / swing / TransferHandler.java
1 /* TransferHandler.java --
2    Copyright (C) 2004, 2005 Free Software Foundation, Inc.
3
4 This file is part of GNU Classpath.
5
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.
10
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.
15
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., 51 Franklin Street, Fifth Floor, Boston, MA
19 02110-1301 USA.
20
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.
25
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. */
37
38
39 package javax.swing;
40
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.awt.Toolkit;
47 import java.io.Serializable;
48
49 public class TransferHandler implements Serializable
50 {
51   static class TransferAction extends AbstractAction
52   {
53     private String command;
54
55     public TransferAction(String command)
56     {
57       super(command);
58       this.command = command;
59     }
60     
61     public void actionPerformed(ActionEvent event)
62     {
63       JComponent component = (JComponent) event.getSource();
64       TransferHandler transferHandler = component.getTransferHandler();
65       Clipboard clipboard = getClipboard(component);
66
67       if (clipboard == null)
68         {
69           // Access denied!
70           Toolkit.getDefaultToolkit().beep();
71           return;
72         }
73
74       if (command.equals(COMMAND_COPY))
75         transferHandler.exportToClipboard(component, clipboard, COPY);
76       else if (command.equals(COMMAND_CUT))
77         transferHandler.exportToClipboard(component, clipboard, MOVE);
78       else if (command.equals(COMMAND_PASTE))
79         {
80           Transferable transferable = clipboard.getContents(null);
81
82           if (transferable != null)
83             transferHandler.importData(component, transferable);
84         }
85     }
86   
87     /**
88      * Get the system cliboard or null if the caller isn't allowed to
89      * access the system clipboard.
90      * 
91      * @param component a component, used to get the toolkit.
92      * @return the clipboard
93      */
94     private static Clipboard getClipboard(JComponent component)
95     {
96       try
97         {
98           return component.getToolkit().getSystemClipboard();
99         }
100       catch (SecurityException se)
101         {
102           return null;
103         }
104     }
105   }
106   
107   private static final long serialVersionUID = -967749805571669910L;
108
109   private static final String COMMAND_COPY = "copy";
110   private static final String COMMAND_CUT = "cut";
111   private static final String COMMAND_PASTE = "paste";
112   
113   public static final int NONE = 0;
114   public static final int COPY = 1;
115   public static final int MOVE = 2;
116   public static final int COPY_OR_MOVE = 3;
117
118   private static Action copyAction = new TransferAction(COMMAND_COPY);
119   private static Action cutAction = new TransferAction(COMMAND_CUT);
120   private static Action pasteAction = new TransferAction(COMMAND_PASTE);
121   
122   private int sourceActions;
123   private Icon visualRepresentation;
124   
125   public static Action getCopyAction()
126   {
127     return copyAction;
128   }
129
130   public static Action getCutAction()
131   {
132     return cutAction;
133   }
134
135   public static Action getPasteAction()
136   {
137     return pasteAction;
138   }
139
140   protected TransferHandler()
141   {
142     this.sourceActions = NONE;
143   }
144
145   public TransferHandler(String property)
146   {
147     this.sourceActions = property != null ? COPY : NONE;
148   }
149
150   public boolean canImport (JComponent c, DataFlavor[] flavors)
151   {
152     return false;
153   }
154
155   protected Transferable createTransferable(JComponent c) 
156   {
157     return null;
158   }
159
160   public void exportAsDrag (JComponent c, InputEvent e, int action) 
161   {
162     // TODO: Implement this properly
163   }
164
165   protected void exportDone (JComponent c, Transferable data, int action) 
166   {
167     // TODO: Implement this properly
168   }
169
170   public void exportToClipboard(JComponent c, Clipboard clip, int action) 
171   {
172     // TODO: Implement this properly
173   } 
174
175   public int getSourceActions (JComponent c)
176   {
177     return sourceActions;
178   }
179
180   public Icon getVisualRepresentation (Transferable t)
181   {
182     return visualRepresentation;
183   }
184
185   public boolean importData (JComponent c, Transferable t) 
186   {
187     return false;
188   }
189 }