update author list in license for (JAL-826)
[jalview.git] / src / jalview / appletgui / CutAndPasteTransfer.java
index 86f55b8..99a761b 100755 (executable)
-/*\r
- * Jalview - A Sequence Alignment Editor and Viewer\r
- * Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
- *\r
- * This program is free software; you can redistribute it and/or\r
- * modify it under the terms of the GNU General Public License\r
- * as published by the Free Software Foundation; either version 2\r
- * of the License, or (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program; if not, write to the Free Software\r
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA\r
- */\r
-\r
-package jalview.appletgui;\r
-\r
-import java.awt.*;\r
-import java.awt.event.*;\r
-\r
-import jalview.datamodel.*;\r
-import jalview.io.*;\r
-\r
-public class CutAndPasteTransfer extends Panel implements ActionListener, MouseListener\r
-{\r
-  boolean pdbImport = false;\r
-  boolean treeImport = false;\r
-  Sequence seq;\r
-  AlignFrame alignFrame;\r
-\r
-  public CutAndPasteTransfer(boolean forImport, AlignFrame alignFrame)\r
-  {\r
-    try {\r
-        jbInit();\r
-    } catch (Exception e) {\r
-        e.printStackTrace();\r
-    }\r
-\r
-    this.alignFrame = alignFrame;\r
-\r
-    if (!forImport)\r
-    {\r
-\r
-      buttonPanel.setVisible(false);\r
-    }\r
-  }\r
-\r
-  public String getText()\r
-  {\r
-    return textarea.getText();\r
-  }\r
-\r
-  public void setText(String text)\r
-  {\r
-    textarea.setText(text);\r
-  }\r
-\r
-  public void setPDBImport(Sequence seq)\r
-  {\r
-    this.seq = seq;\r
-    pdbImport = true;\r
-  }\r
-\r
-  public void setTreeImport()\r
-  {\r
-    treeImport = true;\r
-    ok.setLabel("Accept");\r
-  }\r
-\r
-\r
-  public void actionPerformed(ActionEvent evt)\r
-  {\r
-    if(evt.getSource()==ok)\r
-      ok_actionPerformed();\r
-    else if(evt.getSource()==cancel)\r
-      cancel_actionPerformed();\r
-  }\r
-\r
-  protected void ok_actionPerformed()\r
-  {\r
-    String text = getText();\r
-    int length = text.length();\r
-    textarea.append("\n");\r
-    if(textarea.getText().length()==length)\r
-    {\r
-      String warning = "\n\n#################################################\n"\r
-          +"WARNING!! THIS IS THE MAXIMUM SIZE OF TEXTAREA!!\n"\r
-          +"\nCAN'T INPUT FULL ALIGNMENT"\r
-          +"\n\nYOU MUST DELETE THIS WARNING TO CONTINUE"\r
-          +"\n\nMAKE SURE LAST SEQUENCE PASTED IS COMPLETE"\r
-          +"\n#################################################\n";\r
-      textarea.setText(text.substring(0, text.length()-warning.length())\r
-          +warning);\r
-\r
-      textarea.setCaretPosition(text.length());\r
-    }\r
-\r
-    if(pdbImport)\r
-    {\r
-      new MCview.AppletPDBViewer(text, AppletFormatAdapter.PASTE,\r
-                                 seq,\r
-                                 alignFrame.getSeqcanvas());\r
-    }\r
-    else if(treeImport)\r
-    {\r
-      try{\r
-        jalview.io.NewickFile fin = new jalview.io.NewickFile(textarea.getText(),\r
-            "Paste");\r
-\r
-        fin.parse();\r
-        if(fin.getTree()!=null)\r
-          alignFrame.loadTree(fin, "Pasted tree file");\r
-\r
-      }\r
-      catch (Exception ex)\r
-      {\r
-        textarea.setText("Could not parse Newick file!\n" + ex);\r
-        return;\r
-      }\r
-    }\r
-    else if(alignFrame!=null)\r
-    {\r
-      SequenceI[] sequences = null;\r
-\r
-      String format = new IdentifyFile().Identify(text, AppletFormatAdapter.PASTE);\r
-      try{\r
-        sequences = new AppletFormatAdapter().readFile(text, AppletFormatAdapter.PASTE, format);\r
-      }catch(java.io.IOException ex)\r
-      {\r
-        ex.printStackTrace();\r
-      }\r
-      if (sequences != null)\r
-      {\r
-        AlignFrame af = new AlignFrame(new Alignment(sequences), alignFrame.viewport.applet,\r
-                                       "Cut & Paste input - " + format,\r
-                                       false);\r
-        af.statusBar.setText("Successfully pasted alignment file");\r
-      }\r
-    }\r
-\r
-   if(this.getParent() instanceof Frame)\r
-    ((Frame)this.getParent()).setVisible(false);\r
-   else\r
-     ((Dialog)this.getParent()).setVisible(false);\r
-  }\r
-\r
-  protected void cancel_actionPerformed()\r
-  {\r
-    textarea.setText("");\r
-    if(this.getParent() instanceof Frame)\r
-     ((Frame)this.getParent()).setVisible(false);\r
-    else\r
-     ((Dialog)this.getParent()).setVisible(false);\r
-  }\r
-\r
-  protected TextArea textarea = new TextArea();\r
-  Button ok = new Button();\r
-  Button cancel = new Button();\r
-  protected Panel buttonPanel = new Panel();\r
-  BorderLayout borderLayout1 = new BorderLayout();\r
-\r
-\r
-  private void jbInit() throws Exception {\r
-      textarea.setFont(new java.awt.Font("Monospaced", Font.PLAIN, 10));\r
-      textarea.setText("Paste your alignment file here");\r
-      textarea.addMouseListener(this);\r
-      this.setLayout(borderLayout1);\r
-      ok.setLabel("New Window");\r
-      ok.addActionListener(this);\r
-      cancel.setLabel("Close");\r
-      cancel.addActionListener(this);\r
-      this.add(buttonPanel, BorderLayout.SOUTH);\r
-      buttonPanel.add(ok, null);\r
-      buttonPanel.add(cancel, null);\r
-      this.add(textarea, java.awt.BorderLayout.CENTER);\r
-  }\r
-\r
-  public void mousePressed(MouseEvent evt) {\r
-      if (textarea.getText().startsWith("Paste your")) {\r
-          textarea.setText("");\r
-     }\r
-  }\r
-  public void mouseReleased(MouseEvent evt){}\r
-  public void mouseClicked(MouseEvent evt){}\r
-  public void mouseEntered(MouseEvent evt){}\r
-  public void mouseExited(MouseEvent evt){}\r
-}\r
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
+ * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle
+ * 
+ * This file is part of Jalview.
+ * 
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License 
+ * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+ * 
+ * Jalview is distributed in the hope that it will be useful, but 
+ * WITHOUT ANY WARRANTY; without even the implied warranty 
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+ * PURPOSE.  See the GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package jalview.appletgui;
+
+import java.awt.*;
+import java.awt.event.*;
+
+import jalview.datamodel.*;
+import jalview.io.*;
+
+public class CutAndPasteTransfer extends Panel implements ActionListener,
+        MouseListener
+{
+  boolean pdbImport = false;
+
+  boolean treeImport = false;
+
+  boolean annotationImport = false;
+
+  Sequence seq;
+
+  AlignFrame alignFrame;
+
+  public CutAndPasteTransfer(boolean forImport, AlignFrame alignFrame)
+  {
+    try
+    {
+      jbInit();
+    } catch (Exception e)
+    {
+      e.printStackTrace();
+    }
+
+    this.alignFrame = alignFrame;
+
+    if (!forImport)
+    {
+      buttonPanel.setVisible(false);
+    }
+  }
+
+  public String getText()
+  {
+    return textarea.getText();
+  }
+
+  public void setText(String text)
+  {
+    textarea.setText(text);
+  }
+
+  public void setPDBImport(Sequence seq)
+  {
+    this.seq = seq;
+    accept.setLabel("Accept");
+    addSequences.setVisible(false);
+    pdbImport = true;
+  }
+
+  public void setTreeImport()
+  {
+    treeImport = true;
+    accept.setLabel("Accept");
+    addSequences.setVisible(false);
+  }
+
+  public void setAnnotationImport()
+  {
+    annotationImport = true;
+    accept.setLabel("Accept");
+    addSequences.setVisible(false);
+  }
+
+  public void actionPerformed(ActionEvent evt)
+  {
+    if (evt.getSource() == accept)
+    {
+      ok(true);
+    }
+    else if (evt.getSource() == addSequences)
+    {
+      ok(false);
+    }
+    else if (evt.getSource() == cancel)
+    {
+      cancel();
+    }
+  }
+
+  protected void ok(boolean newWindow)
+  {
+    String text = getText();
+    int length = text.length();
+    textarea.append("\n");
+    if (textarea.getText().length() == length)
+    {
+      String warning = "\n\n#################################################\n"
+              + "WARNING!! THIS IS THE MAXIMUM SIZE OF TEXTAREA!!\n"
+              + "\nCAN'T INPUT FULL ALIGNMENT"
+              + "\n\nYOU MUST DELETE THIS WARNING TO CONTINUE"
+              + "\n\nMAKE SURE LAST SEQUENCE PASTED IS COMPLETE"
+              + "\n#################################################\n";
+      textarea.setText(text.substring(0, text.length() - warning.length())
+              + warning);
+
+      textarea.setCaretPosition(text.length());
+    }
+
+    if (pdbImport)
+    {
+      PDBEntry pdb = new PDBEntry();
+      pdb.setFile(text);
+
+      if (alignFrame.alignPanel.av.applet.jmolAvailable)
+        new jalview.appletgui.AppletJmol(pdb, new Sequence[]
+        { seq }, null, alignFrame.alignPanel, AppletFormatAdapter.PASTE);
+      else
+
+        new MCview.AppletPDBViewer(pdb, new Sequence[]
+        { seq }, null, alignFrame.alignPanel, AppletFormatAdapter.PASTE);
+
+    }
+    else if (treeImport)
+    {
+      try
+      {
+        jalview.io.NewickFile fin = new jalview.io.NewickFile(
+                textarea.getText(), "Paste");
+
+        fin.parse();
+        if (fin.getTree() != null)
+        {
+          alignFrame.loadTree(fin, "Pasted tree file");
+        }
+
+      } catch (Exception ex)
+      {
+        textarea.setText("Could not parse Newick file!\n" + ex);
+        return;
+      }
+    }
+    else if (annotationImport)
+    {
+      if (new AnnotationFile().readAnnotationFile(
+              alignFrame.viewport.alignment, textarea.getText(),
+              jalview.io.AppletFormatAdapter.PASTE))
+      {
+        alignFrame.alignPanel.fontChanged();
+        alignFrame.alignPanel.setScrollValues(0, 0);
+
+      }
+      else
+      {
+        alignFrame.parseFeaturesFile(textarea.getText(),
+                jalview.io.AppletFormatAdapter.PASTE);
+      }
+    }
+    else if (alignFrame != null)
+    {
+      Alignment al = null;
+
+      String format = new IdentifyFile().Identify(text,
+              AppletFormatAdapter.PASTE);
+      try
+      {
+        al = new AppletFormatAdapter().readFile(text,
+                AppletFormatAdapter.PASTE, format);
+      } catch (java.io.IOException ex)
+      {
+        ex.printStackTrace();
+      }
+
+      if (al != null)
+      {
+        if (newWindow)
+        {
+          AlignFrame af = new AlignFrame(al, alignFrame.viewport.applet,
+                  "Cut & Paste input - " + format, false);
+          af.statusBar.setText("Successfully pasted alignment file");
+        }
+        else
+        {
+          alignFrame.addSequences(al.getSequencesArray());
+        }
+      }
+    }
+
+    if (this.getParent() instanceof Frame)
+    {
+      ((Frame) this.getParent()).setVisible(false);
+    }
+    else
+    {
+      ((Dialog) this.getParent()).setVisible(false);
+    }
+  }
+
+  protected void cancel()
+  {
+    textarea.setText("");
+    if (this.getParent() instanceof Frame)
+    {
+      ((Frame) this.getParent()).setVisible(false);
+    }
+    else
+    {
+      ((Dialog) this.getParent()).setVisible(false);
+    }
+  }
+
+  protected TextArea textarea = new TextArea();
+
+  Button accept = new Button("New Window");
+
+  Button addSequences = new Button("Add to Current Alignment");
+
+  Button cancel = new Button("Close");
+
+  protected Panel buttonPanel = new Panel();
+
+  BorderLayout borderLayout1 = new BorderLayout();
+
+  private void jbInit() throws Exception
+  {
+    textarea.setFont(new java.awt.Font("Monospaced", Font.PLAIN, 10));
+    textarea.setText("Paste your alignment file here");
+    textarea.addMouseListener(this);
+    this.setLayout(borderLayout1);
+    accept.addActionListener(this);
+    addSequences.addActionListener(this);
+    cancel.addActionListener(this);
+    this.add(buttonPanel, BorderLayout.SOUTH);
+    buttonPanel.add(accept, null);
+    buttonPanel.add(addSequences);
+    buttonPanel.add(cancel, null);
+    this.add(textarea, java.awt.BorderLayout.CENTER);
+  }
+
+  public void mousePressed(MouseEvent evt)
+  {
+    if (textarea.getText().startsWith("Paste your"))
+    {
+      textarea.setText("");
+    }
+  }
+
+  public void mouseReleased(MouseEvent evt)
+  {
+  }
+
+  public void mouseClicked(MouseEvent evt)
+  {
+  }
+
+  public void mouseEntered(MouseEvent evt)
+  {
+  }
+
+  public void mouseExited(MouseEvent evt)
+  {
+  }
+}