ensure lastSeq is refreshed if new feature added
[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   Sequence seq;\r
33   AlignFrame alignFrame;\r
34 \r
35   public CutAndPasteTransfer(boolean forImport, AlignFrame alignFrame)\r
36   {\r
37     try {\r
38         jbInit();\r
39     } catch (Exception e) {\r
40         e.printStackTrace();\r
41     }\r
42 \r
43     this.alignFrame = alignFrame;\r
44 \r
45     if (!forImport)\r
46     {\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     pdbImport = true;\r
66   }\r
67 \r
68   public void setTreeImport()\r
69   {\r
70     treeImport = true;\r
71     ok.setLabel("Accept");\r
72   }\r
73 \r
74 \r
75   public void actionPerformed(ActionEvent evt)\r
76   {\r
77     if(evt.getSource()==ok)\r
78       ok_actionPerformed();\r
79     else if(evt.getSource()==cancel)\r
80       cancel_actionPerformed();\r
81   }\r
82 \r
83   protected void ok_actionPerformed()\r
84   {\r
85     String text = getText();\r
86     int length = text.length();\r
87     textarea.append("\n");\r
88     if(textarea.getText().length()==length)\r
89     {\r
90       String warning = "\n\n#################################################\n"\r
91           +"WARNING!! THIS IS THE MAXIMUM SIZE OF TEXTAREA!!\n"\r
92           +"\nCAN'T INPUT FULL ALIGNMENT"\r
93           +"\n\nYOU MUST DELETE THIS WARNING TO CONTINUE"\r
94           +"\n\nMAKE SURE LAST SEQUENCE PASTED IS COMPLETE"\r
95           +"\n#################################################\n";\r
96       textarea.setText(text.substring(0, text.length()-warning.length())\r
97           +warning);\r
98 \r
99       textarea.setCaretPosition(text.length());\r
100     }\r
101 \r
102     if(pdbImport)\r
103     {\r
104       new MCview.AppletPDBViewer(text, AppletFormatAdapter.PASTE,\r
105                                  seq,\r
106                                  alignFrame.getSeqcanvas());\r
107     }\r
108     else if(treeImport)\r
109     {\r
110       try{\r
111         jalview.io.NewickFile fin = new jalview.io.NewickFile(textarea.getText(),\r
112             "Paste");\r
113 \r
114         fin.parse();\r
115         if(fin.getTree()!=null)\r
116           alignFrame.loadTree(fin, "Pasted tree file");\r
117 \r
118       }\r
119       catch (Exception ex)\r
120       {\r
121         textarea.setText("Could not parse Newick file!\n" + ex);\r
122         return;\r
123       }\r
124     }\r
125     else if(alignFrame!=null)\r
126     {\r
127       SequenceI[] sequences = null;\r
128 \r
129       String format = new IdentifyFile().Identify(text, AppletFormatAdapter.PASTE);\r
130       try{\r
131         sequences = new AppletFormatAdapter().readFile(text, AppletFormatAdapter.PASTE, format);\r
132       }catch(java.io.IOException ex)\r
133       {\r
134         ex.printStackTrace();\r
135       }\r
136       if (sequences != null)\r
137       {\r
138         AlignFrame af = new AlignFrame(new Alignment(sequences), alignFrame.viewport.applet,\r
139                                        "Cut & Paste input - " + format,\r
140                                        false);\r
141         af.statusBar.setText("Successfully pasted alignment file");\r
142       }\r
143     }\r
144 \r
145    if(this.getParent() instanceof Frame)\r
146     ((Frame)this.getParent()).setVisible(false);\r
147    else\r
148      ((Dialog)this.getParent()).setVisible(false);\r
149   }\r
150 \r
151   protected void cancel_actionPerformed()\r
152   {\r
153     textarea.setText("");\r
154     if(this.getParent() instanceof Frame)\r
155      ((Frame)this.getParent()).setVisible(false);\r
156     else\r
157      ((Dialog)this.getParent()).setVisible(false);\r
158   }\r
159 \r
160   protected TextArea textarea = new TextArea();\r
161   Button ok = new Button();\r
162   Button cancel = new Button();\r
163   protected Panel buttonPanel = new Panel();\r
164   BorderLayout borderLayout1 = new BorderLayout();\r
165 \r
166 \r
167   private void jbInit() throws Exception {\r
168       textarea.setFont(new java.awt.Font("Monospaced", Font.PLAIN, 10));\r
169       textarea.setText("Paste your alignment file here");\r
170       textarea.addMouseListener(this);\r
171       this.setLayout(borderLayout1);\r
172       ok.setLabel("New Window");\r
173       ok.addActionListener(this);\r
174       cancel.setLabel("Close");\r
175       cancel.addActionListener(this);\r
176       this.add(buttonPanel, BorderLayout.SOUTH);\r
177       buttonPanel.add(ok, null);\r
178       buttonPanel.add(cancel, null);\r
179       this.add(textarea, java.awt.BorderLayout.CENTER);\r
180   }\r
181 \r
182   public void mousePressed(MouseEvent evt) {\r
183       if (textarea.getText().startsWith("Paste your")) {\r
184           textarea.setText("");\r
185      }\r
186   }\r
187   public void mouseReleased(MouseEvent evt){}\r
188   public void mouseClicked(MouseEvent evt){}\r
189   public void mouseEntered(MouseEvent evt){}\r
190   public void mouseExited(MouseEvent evt){}\r
191 }\r