Formatting
[jalview.git] / src / jalview / appletgui / 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 \r
20 package jalview.appletgui;\r
21 \r
22 import java.awt.*;\r
23 import java.awt.event.*;\r
24 \r
25 import jalview.datamodel.*;\r
26 import jalview.io.*;\r
27 \r
28 public class CutAndPasteTransfer\r
29     extends Panel implements ActionListener, MouseListener\r
30 {\r
31   boolean pdbImport = false;\r
32   boolean treeImport = false;\r
33   boolean annotationImport = false;\r
34   Sequence seq;\r
35   AlignFrame alignFrame;\r
36 \r
37   public CutAndPasteTransfer(boolean forImport, AlignFrame alignFrame)\r
38   {\r
39     try\r
40     {\r
41       jbInit();\r
42     }\r
43     catch (Exception e)\r
44     {\r
45       e.printStackTrace();\r
46     }\r
47 \r
48     this.alignFrame = alignFrame;\r
49 \r
50     if (!forImport)\r
51     {\r
52       buttonPanel.setVisible(false);\r
53     }\r
54   }\r
55 \r
56   public String getText()\r
57   {\r
58     return textarea.getText();\r
59   }\r
60 \r
61   public void setText(String text)\r
62   {\r
63     textarea.setText(text);\r
64   }\r
65 \r
66   public void setPDBImport(Sequence seq)\r
67   {\r
68     this.seq = seq;\r
69     accept.setLabel("Accept");\r
70     addSequences.setVisible(false);\r
71     pdbImport = true;\r
72   }\r
73 \r
74   public void setTreeImport()\r
75   {\r
76     treeImport = true;\r
77     accept.setLabel("Accept");\r
78     addSequences.setVisible(false);\r
79   }\r
80 \r
81   public void setAnnotationImport()\r
82   {\r
83     annotationImport = true;\r
84     accept.setLabel("Accept");\r
85     addSequences.setVisible(false);\r
86   }\r
87 \r
88   public void actionPerformed(ActionEvent evt)\r
89   {\r
90     if (evt.getSource() == accept)\r
91     {\r
92       ok(true);\r
93     }\r
94     else if (evt.getSource() == addSequences)\r
95     {\r
96       ok(false);\r
97     }\r
98     else if (evt.getSource() == cancel)\r
99     {\r
100       cancel();\r
101     }\r
102   }\r
103 \r
104   protected void ok(boolean newWindow)\r
105   {\r
106     String text = getText();\r
107     int length = text.length();\r
108     textarea.append("\n");\r
109     if (textarea.getText().length() == length)\r
110     {\r
111       String warning =\r
112           "\n\n#################################################\n"\r
113           + "WARNING!! THIS IS THE MAXIMUM SIZE OF TEXTAREA!!\n"\r
114           + "\nCAN'T INPUT FULL ALIGNMENT"\r
115           + "\n\nYOU MUST DELETE THIS WARNING TO CONTINUE"\r
116           + "\n\nMAKE SURE LAST SEQUENCE PASTED IS COMPLETE"\r
117           + "\n#################################################\n";\r
118       textarea.setText(text.substring(0, text.length() - warning.length())\r
119                        + warning);\r
120 \r
121       textarea.setCaretPosition(text.length());\r
122     }\r
123 \r
124     if (pdbImport)\r
125     {\r
126       new MCview.AppletPDBViewer(text, AppletFormatAdapter.PASTE,\r
127                                  seq,\r
128                                  alignFrame.getSeqcanvas());\r
129     }\r
130     else if (treeImport)\r
131     {\r
132       try\r
133       {\r
134         jalview.io.NewickFile fin = new jalview.io.NewickFile(textarea.getText(),\r
135             "Paste");\r
136 \r
137         fin.parse();\r
138         if (fin.getTree() != null)\r
139         {\r
140           alignFrame.loadTree(fin, "Pasted tree file");\r
141         }\r
142 \r
143       }\r
144       catch (Exception ex)\r
145       {\r
146         textarea.setText("Could not parse Newick file!\n" + ex);\r
147         return;\r
148       }\r
149     }\r
150     else if (annotationImport)\r
151     {\r
152       if (new AnnotationFile().readAnnotationFile(\r
153           alignFrame.viewport.alignment, textarea.getText(),\r
154           jalview.io.AppletFormatAdapter.PASTE))\r
155       {\r
156         alignFrame.alignPanel.fontChanged();\r
157         alignFrame.alignPanel.setScrollValues(0, 0);\r
158 \r
159       }\r
160       else\r
161       {\r
162         alignFrame.parseFeaturesFile(textarea.getText(),\r
163                                      jalview.io.AppletFormatAdapter.PASTE);\r
164       }\r
165     }\r
166     else if (alignFrame != null)\r
167     {\r
168       Alignment al = null;\r
169 \r
170       String format = new IdentifyFile().Identify(text,\r
171                                                   AppletFormatAdapter.PASTE);\r
172       try\r
173       {\r
174         al = new AppletFormatAdapter().readFile(text, AppletFormatAdapter.PASTE,\r
175                                                 format);\r
176       }\r
177       catch (java.io.IOException ex)\r
178       {\r
179         ex.printStackTrace();\r
180       }\r
181 \r
182       if (al != null)\r
183       {\r
184         if (newWindow)\r
185         {\r
186           AlignFrame af = new AlignFrame(al, alignFrame.viewport.applet,\r
187                                          "Cut & Paste input - " + format,\r
188                                          false);\r
189           af.statusBar.setText("Successfully pasted alignment file");\r
190         }\r
191         else\r
192         {\r
193           alignFrame.addSequences(al.getSequencesArray());\r
194         }\r
195       }\r
196     }\r
197 \r
198     if (this.getParent() instanceof Frame)\r
199     {\r
200       ( (Frame)this.getParent()).setVisible(false);\r
201     }\r
202     else\r
203     {\r
204       ( (Dialog)this.getParent()).setVisible(false);\r
205     }\r
206   }\r
207 \r
208   protected void cancel()\r
209   {\r
210     textarea.setText("");\r
211     if (this.getParent() instanceof Frame)\r
212     {\r
213       ( (Frame)this.getParent()).setVisible(false);\r
214     }\r
215     else\r
216     {\r
217       ( (Dialog)this.getParent()).setVisible(false);\r
218     }\r
219   }\r
220 \r
221   protected TextArea textarea = new TextArea();\r
222   Button accept = new Button("New Window");\r
223   Button addSequences = new Button("Add to Current Alignment");\r
224   Button cancel = new Button("Close");\r
225 \r
226   protected Panel buttonPanel = new Panel();\r
227   BorderLayout borderLayout1 = new BorderLayout();\r
228 \r
229   private void jbInit()\r
230       throws Exception\r
231   {\r
232     textarea.setFont(new java.awt.Font("Monospaced", Font.PLAIN, 10));\r
233     textarea.setText("Paste your alignment file here");\r
234     textarea.addMouseListener(this);\r
235     this.setLayout(borderLayout1);\r
236     accept.addActionListener(this);\r
237     addSequences.addActionListener(this);\r
238     cancel.addActionListener(this);\r
239     this.add(buttonPanel, BorderLayout.SOUTH);\r
240     buttonPanel.add(accept, null);\r
241     buttonPanel.add(addSequences);\r
242     buttonPanel.add(cancel, null);\r
243     this.add(textarea, java.awt.BorderLayout.CENTER);\r
244   }\r
245 \r
246   public void mousePressed(MouseEvent evt)\r
247   {\r
248     if (textarea.getText().startsWith("Paste your"))\r
249     {\r
250       textarea.setText("");\r
251     }\r
252   }\r
253 \r
254   public void mouseReleased(MouseEvent evt)\r
255   {}\r
256 \r
257   public void mouseClicked(MouseEvent evt)\r
258   {}\r
259 \r
260   public void mouseEntered(MouseEvent evt)\r
261   {}\r
262 \r
263   public void mouseExited(MouseEvent evt)\r
264   {}\r
265 }\r