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