Formatting
[jalview.git] / src / jalview / gui / CutAndPasteTransfer.java
1 /*\r
2  * Jalview - A Sequence Alignment Editor and Viewer\r
3  * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
4  *\r
5  * This program is free software; you can redistribute it and/or\r
6  * modify it under the terms of the GNU General Public License\r
7  * as published by the Free Software Foundation; either version 2\r
8  * of the License, or (at your option) any later version.\r
9  *\r
10  * This program is distributed in the hope that it will be useful,\r
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13  * GNU General Public License for more details.\r
14  *\r
15  * You should have received a copy of the GNU General Public License\r
16  * along with this program; if not, write to the Free Software\r
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA\r
18  */\r
19 package jalview.gui;\r
20 \r
21 import java.awt.*;\r
22 import java.awt.datatransfer.*;\r
23 import java.awt.event.*;\r
24 import javax.swing.*;\r
25 \r
26 import jalview.datamodel.*;\r
27 import jalview.io.*;\r
28 import jalview.jbgui.*;\r
29 \r
30 /**\r
31  * DOCUMENT ME!\r
32  *\r
33  * @author $author$\r
34  * @version $Revision$\r
35  */\r
36 public class CutAndPasteTransfer\r
37     extends GCutAndPasteTransfer\r
38 {\r
39 \r
40   AlignViewport viewport;\r
41 \r
42   public CutAndPasteTransfer()\r
43   {\r
44     SwingUtilities.invokeLater(new Runnable()\r
45     {\r
46       public void run()\r
47       {\r
48         textarea.requestFocus();\r
49       }\r
50     });\r
51 \r
52   }\r
53 \r
54   /**\r
55    * DOCUMENT ME!\r
56    */\r
57   public void setForInput(AlignViewport viewport)\r
58   {\r
59     this.viewport = viewport;\r
60     if (viewport != null)\r
61     {\r
62       ok.setText("Add");\r
63     }\r
64 \r
65     getContentPane().add(inputButtonPanel, java.awt.BorderLayout.SOUTH);\r
66   }\r
67 \r
68   /**\r
69    * DOCUMENT ME!\r
70    *\r
71    * @return DOCUMENT ME!\r
72    */\r
73   public String getText()\r
74   {\r
75     return textarea.getText();\r
76   }\r
77 \r
78   /**\r
79    * DOCUMENT ME!\r
80    *\r
81    * @param text DOCUMENT ME!\r
82    */\r
83   public void setText(String text)\r
84   {\r
85     textarea.setText(text);\r
86   }\r
87 \r
88   public void appendText(String text)\r
89   {\r
90     textarea.append(text);\r
91   }\r
92 \r
93   public void save_actionPerformed(ActionEvent e)\r
94   {\r
95     JalviewFileChooser chooser = new JalviewFileChooser(\r
96         jalview.bin.Cache.getProperty(\r
97             "LAST_DIRECTORY"));\r
98 \r
99     chooser.setAcceptAllFileFilterUsed(false);\r
100     chooser.setFileView(new JalviewFileView());\r
101     chooser.setDialogTitle("Save Text to File");\r
102     chooser.setToolTipText("Save");\r
103 \r
104     int value = chooser.showSaveDialog(this);\r
105 \r
106     if (value == JalviewFileChooser.APPROVE_OPTION)\r
107     {\r
108       try\r
109       {\r
110         java.io.PrintWriter out = new java.io.PrintWriter(\r
111             new java.io.FileWriter(chooser.getSelectedFile()));\r
112 \r
113         out.print(getText());\r
114         out.close();\r
115       }\r
116       catch (Exception ex)\r
117       {\r
118         ex.printStackTrace();\r
119       }\r
120 \r
121     }\r
122   }\r
123 \r
124   /**\r
125    * DOCUMENT ME!\r
126    *\r
127    * @param e DOCUMENT ME!\r
128    */\r
129   public void copyItem_actionPerformed(ActionEvent e)\r
130   {\r
131     textarea.getSelectedText();\r
132     Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();\r
133     c.setContents(new StringSelection(textarea.getSelectedText()), null);\r
134   }\r
135 \r
136   /**\r
137    * DOCUMENT ME!\r
138    *\r
139    * @param e DOCUMENT ME!\r
140    */\r
141   public void pasteMenu_actionPerformed(ActionEvent e)\r
142   {\r
143     Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();\r
144     Transferable contents = c.getContents(this);\r
145 \r
146     if (contents == null)\r
147     {\r
148       return;\r
149     }\r
150 \r
151     try\r
152     {\r
153       textarea.append( (String) contents.getTransferData(\r
154           DataFlavor.stringFlavor));\r
155     }\r
156     catch (Exception ex)\r
157     {\r
158     }\r
159   }\r
160 \r
161   /**\r
162    * DOCUMENT ME!\r
163    *\r
164    * @param e DOCUMENT ME!\r
165    */\r
166   public void ok_actionPerformed(ActionEvent e)\r
167   {\r
168     String format = new IdentifyFile().Identify(getText(), "Paste");\r
169     Alignment al = null;\r
170 \r
171     if (FormatAdapter.isValidFormat(format))\r
172     {\r
173       try\r
174       {\r
175         al = new FormatAdapter().readFile(getText(), "Paste", format);\r
176       }\r
177       catch (java.io.IOException ex)\r
178       {\r
179         JOptionPane.showInternalMessageDialog(Desktop.desktop,\r
180                                               "Couldn't read the pasted text.\n" +\r
181                                               ex.toString(),\r
182                                               "Error parsing text",\r
183                                               JOptionPane.WARNING_MESSAGE);\r
184       }\r
185     }\r
186 \r
187     if (al != null)\r
188     {\r
189       if (viewport != null)\r
190       {\r
191         for (int i = 0; i < al.getHeight(); i++)\r
192         {\r
193           viewport.getAlignment().addSequence(al.getSequenceAt(i));\r
194         }\r
195 \r
196         viewport.firePropertyChange("alignment", null,\r
197                                     viewport.getAlignment().getSequences());\r
198       }\r
199       else\r
200       {\r
201         AlignFrame af = new AlignFrame(al,\r
202                                        AlignFrame.DEFAULT_WIDTH,\r
203                                        AlignFrame.DEFAULT_HEIGHT);\r
204         af.currentFileFormat = format;\r
205         Desktop.addInternalFrame(af, "Cut & Paste input - " + format,\r
206                                  AlignFrame.DEFAULT_WIDTH,\r
207                                  AlignFrame.DEFAULT_HEIGHT);\r
208         af.statusBar.setText("Successfully pasted alignment file");\r
209 \r
210         try\r
211         {\r
212           af.setMaximum(jalview.bin.Cache.getDefault("SHOW_FULLSCREEN", false));\r
213         }\r
214         catch (Exception ex)\r
215         {\r
216         }\r
217       }\r
218     }\r
219   }\r
220 \r
221   /**\r
222    * DOCUMENT ME!\r
223    *\r
224    * @param e DOCUMENT ME!\r
225    */\r
226   public void cancel_actionPerformed(ActionEvent e)\r
227   {\r
228     try\r
229     {\r
230       this.setClosed(true);\r
231     }\r
232     catch (Exception ex)\r
233     {\r
234     }\r
235   }\r
236 \r
237   public void textarea_mousePressed(MouseEvent e)\r
238   {\r
239     if (SwingUtilities.isRightMouseButton(e))\r
240     {\r
241       JPopupMenu popup = new JPopupMenu("Edit");\r
242       JMenuItem item = new JMenuItem("Copy");\r
243       item.addActionListener(new ActionListener()\r
244       {\r
245         public void actionPerformed(ActionEvent e)\r
246         {\r
247           copyItem_actionPerformed(e);\r
248         }\r
249       });\r
250       popup.add(item);\r
251       item = new JMenuItem("Paste");\r
252       item.addActionListener(new ActionListener()\r
253       {\r
254         public void actionPerformed(ActionEvent e)\r
255         {\r
256           pasteMenu_actionPerformed(e);\r
257         }\r
258       });\r
259       popup.add(item);\r
260       popup.show(this, e.getX() + 10, e.getY() + textarea.getY() + 40);\r
261 \r
262     }\r
263   }\r
264 \r
265 }\r