File Parsing returns Alignments, not Sequence[]
[jalview.git] / src / jalview / gui / CutAndPasteTransfer.java
1 /*\r
2  * Jalview - A Sequence Alignment Editor and Viewer\r
3  * Copyright (C) 2006 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 jalview.datamodel.*;\r
22 \r
23 import jalview.io.*;\r
24 \r
25 import jalview.jbgui.*;\r
26 \r
27 import java.awt.*;\r
28 import java.awt.datatransfer.*;\r
29 import java.awt.event.*;\r
30 \r
31 import javax.swing.*;\r
32 \r
33 \r
34 /**\r
35  * DOCUMENT ME!\r
36  *\r
37  * @author $author$\r
38  * @version $Revision$\r
39  */\r
40 public class CutAndPasteTransfer extends GCutAndPasteTransfer\r
41 {\r
42 \r
43   AlignViewport viewport;\r
44 \r
45   public CutAndPasteTransfer()\r
46   {\r
47     SwingUtilities.invokeLater(new Runnable()\r
48     {\r
49       public void run()\r
50       {\r
51         textarea.requestFocus();\r
52       }\r
53     });\r
54 \r
55   }\r
56 \r
57     /**\r
58      * DOCUMENT ME!\r
59      */\r
60     public void setForInput(AlignViewport viewport)\r
61     {\r
62       this.viewport = viewport;\r
63       if(viewport!=null)\r
64         ok.setText("Add");\r
65 \r
66       getContentPane().add(inputButtonPanel, java.awt.BorderLayout.SOUTH);\r
67     }\r
68 \r
69     /**\r
70      * DOCUMENT ME!\r
71      *\r
72      * @return DOCUMENT ME!\r
73      */\r
74     public String getText()\r
75     {\r
76         return textarea.getText();\r
77     }\r
78 \r
79     /**\r
80      * DOCUMENT ME!\r
81      *\r
82      * @param text DOCUMENT ME!\r
83      */\r
84     public void setText(String text)\r
85     {\r
86         textarea.setText(text);\r
87     }\r
88 \r
89     public void appendText(String text)\r
90     {\r
91       textarea.append(text);\r
92     }\r
93 \r
94 \r
95     public void save_actionPerformed(ActionEvent e)\r
96     {\r
97       JalviewFileChooser chooser = new JalviewFileChooser(\r
98           jalview.bin.Cache.getProperty(\r
99               "LAST_DIRECTORY"));\r
100 \r
101       chooser.setAcceptAllFileFilterUsed(false);\r
102       chooser.setFileView(new JalviewFileView());\r
103       chooser.setDialogTitle("Save Text to File");\r
104       chooser.setToolTipText("Save");\r
105 \r
106       int value = chooser.showSaveDialog(this);\r
107 \r
108       if (value == JalviewFileChooser.APPROVE_OPTION)\r
109       {\r
110         try\r
111         {\r
112           java.io.PrintWriter out = new java.io.PrintWriter(\r
113               new java.io.FileWriter(chooser.getSelectedFile()));\r
114 \r
115           out.print(getText());\r
116           out.close();\r
117         }\r
118         catch (Exception ex)\r
119         {\r
120           ex.printStackTrace();\r
121         }\r
122 \r
123       }\r
124     }\r
125 \r
126 \r
127 \r
128     /**\r
129      * DOCUMENT ME!\r
130      *\r
131      * @param e DOCUMENT ME!\r
132      */\r
133     public void copyItem_actionPerformed(ActionEvent e)\r
134     {\r
135         textarea.getSelectedText();\r
136         Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();\r
137         c.setContents(new StringSelection(textarea.getSelectedText()), null);\r
138     }\r
139 \r
140     /**\r
141      * DOCUMENT ME!\r
142      *\r
143      * @param e DOCUMENT ME!\r
144      */\r
145     public void pasteMenu_actionPerformed(ActionEvent e)\r
146     {\r
147         Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();\r
148         Transferable contents = c.getContents(this);\r
149 \r
150         if (contents == null)\r
151         {\r
152             return;\r
153         }\r
154 \r
155         try\r
156         {\r
157             textarea.append((String) contents.getTransferData(\r
158                     DataFlavor.stringFlavor));\r
159         }\r
160         catch (Exception ex)\r
161         {\r
162         }\r
163     }\r
164 \r
165     /**\r
166      * DOCUMENT ME!\r
167      *\r
168      * @param e DOCUMENT ME!\r
169      */\r
170     public void ok_actionPerformed(ActionEvent e)\r
171     {\r
172         String format = new IdentifyFile().Identify(getText(), "Paste");\r
173         Alignment al = null;\r
174 \r
175         if (FormatAdapter.isValidFormat(format))\r
176         {\r
177           try{\r
178             al = new FormatAdapter().readFile(getText(), "Paste", format);\r
179           }catch(java.io.IOException ex)\r
180           {\r
181             JOptionPane.showInternalMessageDialog(Desktop.desktop,\r
182                                                   "Couldn't read the pasted text.\n" +ex.toString(),\r
183                                                   "Error parsing text",\r
184                                                   JOptionPane.WARNING_MESSAGE);\r
185           }\r
186         }\r
187 \r
188         if (al != null)\r
189         {\r
190           if(viewport!=null)\r
191           {\r
192             for(int i=0; i<al.getHeight(); i++)\r
193               viewport.getAlignment().addSequence(al.getSequenceAt(i));\r
194 \r
195             viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());\r
196           }\r
197           else\r
198           {\r
199             AlignFrame af = new AlignFrame(al,\r
200                                            AlignFrame.DEFAULT_WIDTH,\r
201                                            AlignFrame.DEFAULT_HEIGHT);\r
202             af.currentFileFormat = format;\r
203             Desktop.addInternalFrame(af, "Cut & Paste input - " + format,\r
204                                      AlignFrame.DEFAULT_WIDTH,\r
205                                      AlignFrame.DEFAULT_HEIGHT);\r
206             af.statusBar.setText("Successfully pasted alignment file");\r
207 \r
208             try\r
209             {\r
210               af.setMaximum(jalview.bin.Cache.getDefault("SHOW_FULLSCREEN", false));\r
211             }\r
212             catch (Exception ex)\r
213             {\r
214             }\r
215           }\r
216         }\r
217     }\r
218 \r
219     /**\r
220      * DOCUMENT ME!\r
221      *\r
222      * @param e DOCUMENT ME!\r
223      */\r
224     public void cancel_actionPerformed(ActionEvent e)\r
225     {\r
226         try\r
227         {\r
228             this.setClosed(true);\r
229         }\r
230         catch (Exception ex)\r
231         {\r
232         }\r
233     }\r
234 \r
235     public void textarea_mousePressed(MouseEvent e)\r
236     {\r
237       if(SwingUtilities.isRightMouseButton(e))\r
238       {\r
239         JPopupMenu popup = new JPopupMenu("Edit");\r
240         JMenuItem item = new JMenuItem("Copy");\r
241         item.addActionListener(new ActionListener()\r
242             {public void actionPerformed(ActionEvent e)\r
243                   {\r
244                     copyItem_actionPerformed(e);\r
245                   }\r
246             });\r
247         popup.add(item);\r
248         item = new JMenuItem("Paste");\r
249         item.addActionListener(new ActionListener()\r
250             {public void actionPerformed(ActionEvent e)\r
251                   {\r
252                     pasteMenu_actionPerformed(e);\r
253                   }\r
254             });\r
255         popup.add(item);\r
256         popup.show(this, e.getX()+10, e.getY()+textarea.getY()+40);\r
257 \r
258       }\r
259     }\r
260 \r
261 }\r