JAL-1807 still testing
[jalviewjs.git] / unused / appletgui / CutAndPasteTransfer.java
index e942eb3..5f9d376 100644 (file)
-/*
- * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
- * Copyright (C) $$Year-Rel$$ The Jalview Authors
- * 
- * 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/>.
- * The Jalview Authors are detailed in the 'AUTHORS' file.
- */
-package jalview.appletgui;
-
-import jalview.analysis.AlignmentUtils;
-import jalview.api.ComplexAlignFile;
-import jalview.bin.JalviewLite;
-import jalview.datamodel.AlignmentI;
-import jalview.datamodel.ColumnSelection;
-import jalview.datamodel.PDBEntry;
-import jalview.datamodel.SequenceI;
-import jalview.io.AlignFile;
-import jalview.io.AnnotationFile;
-import jalview.io.AppletFormatAdapter;
-import jalview.io.FileParse;
-import jalview.io.IdentifyFile;
-import jalview.io.NewickFile;
-import jalview.jsdev.GenericFileAdapter;
-import jalview.schemes.ColourSchemeI;
-import jalview.schemes.TCoffeeColourScheme;
-import jalview.util.MessageManager;
-
-import java.awt.BorderLayout;
-import java.awt.Font;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseListener;
-
-import javax.swing.JButton;
-import javax.swing.JDialog;
-import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JTextArea;
-
-public class CutAndPasteTransfer extends JPanel implements ActionListener,
-        MouseListener
-{
-  boolean pdbImport = false;
-
-  boolean treeImport = false;
-
-  boolean annotationImport = false;
-
-  SequenceI seq;
-
-  AlignFrame alignFrame;
-
-  FileParse source = null;
-
-  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(SequenceI seq)
-  {
-    this.seq = seq;
-    accept.setLabel(MessageManager.getString("action.accept"));
-    addSequences.setVisible(false);
-    pdbImport = true;
-  }
-
-  public void setTreeImport()
-  {
-    treeImport = true;
-    accept.setLabel(MessageManager.getString("action.accept"));
-    addSequences.setVisible(false);
-  }
-
-  public void setAnnotationImport()
-  {
-    annotationImport = true;
-    accept.setLabel(MessageManager.getString("action.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)
-    {
-      openPdbViewer(text);
-
-    }
-    else if (treeImport)
-    {
-      if (!loadTree())
-      {
-        return;
-      }
-    }
-    else if (annotationImport)
-    {
-      loadAnnotations();
-    }
-    else if (alignFrame != null)
-    {
-      loadAlignment(text, newWindow, alignFrame.getAlignViewport());
-    }
-
-    // TODO: dialog should indicate if data was parsed correctly or not - see
-    // JAL-1102
-    if (this.getParent() instanceof JFrame)
-    {
-      ((JFrame) this.getParent()).setVisible(false);
-    }
-    else
-    {
-      ((JDialog) this.getParent()).setVisible(false);
-    }
-  }
-
-  /**
-   * Parses text as Newick Tree format, and loads on to the alignment. Returns
-   * true if successful, else false.
-   */
-  protected boolean loadTree()
-  {
-    try
-    {
-      NewickFile fin = new NewickFile(textarea.getText(), "Paste");
-
-      fin.parse();
-      if (fin.getTree() != null)
-      {
-        alignFrame.loadTree(fin, "Pasted tree file");
-        return true;
-      }
-    } catch (Exception ex)
-    {
-      // TODO: JAL-1102 - should have a warning message in dialog, not simply
-      // overwrite the broken input data with the exception
-      textarea.setText(MessageManager.formatMessage(
-              "label.could_not_parse_newick_file", new Object[]
-              { ex.getMessage() }));
-      return false;
-    }
-    return false;
-  }
-
-  /**
-   * Parse text as an alignment file and add to the current or a new window.
-   * 
-   * @param text
-   * @param newWindow
-   */
-  protected void loadAlignment(String text, boolean newWindow,
-          AlignViewport viewport)
-  {
-    AlignmentI al = null;
-
-    String format = new IdentifyFile().Identify(text,
-            AppletFormatAdapter.PASTE);
-    AppletFormatAdapter afa = new AppletFormatAdapter(alignFrame.alignPanel);
-    try
-    {
-      al = afa.readFile(text, AppletFormatAdapter.PASTE, format);
-      source = afa.getAlignFile();
-    } catch (java.io.IOException ex)
-    {
-      ex.printStackTrace();
-    }
-
-    if (al != null)
-    {
-      al.setDataset(null); // set dataset on alignment/sequences
-
-      /*
-       * SplitFrame option dependent on applet parameter for now.
-       */
-      boolean allowSplitFrame = alignFrame.viewport.applet
-              .getDefaultParameter("enableSplitFrame", false);
-      if (allowSplitFrame && openSplitFrame(al, format))
-      {
-        return;
-      }
-      if (newWindow)
-      {
-        AlignFrame af;
-
-        if (source instanceof ComplexAlignFile)
-        {
-          ColumnSelection colSel = ((ComplexAlignFile) source)
-                  .getColumnSelection();
-          SequenceI[] hiddenSeqs = ((ComplexAlignFile) source)
-                  .getHiddenSequences();
-          boolean showSeqFeatures = ((ComplexAlignFile) source)
-                  .isShowSeqFeatures();
-          ColourSchemeI cs = ((ComplexAlignFile) source).getColourScheme();
-          af = new AlignFrame(al, hiddenSeqs, colSel,
-                  alignFrame.viewport.applet, "Cut & Paste input - "
-                          + format, false);
-          af.getAlignViewport().setShowSequenceFeatures(showSeqFeatures);
-          af.changeColour(cs);
-        }
-        else
-        {
-          af = new AlignFrame(al, alignFrame.viewport.applet,
-                  "Cut & Paste input - " + format, false);
-        }
-
-        af.statusBar
-                .setText(MessageManager
-                        .getString("label.successfully_pasted_annotation_to_alignment"));
-      }
-      else
-      {
-        alignFrame.addSequences(al.getSequencesArray());
-        alignFrame.statusBar.setText(MessageManager
-                .getString("label.successfully_pasted_alignment_file"));
-      }
-    }
-  }
-
-  /**
-   * Check whether the new alignment could be mapped to the current one as
-   * cDNA/protein, if so offer the option to open as split frame view. Returns
-   * true if a split frame view is opened, false if not.
-   * 
-   * @param al
-   * @return
-   */
-  protected boolean openSplitFrame(AlignmentI al, String format)
-  {
-    final AlignmentI thisAlignment = this.alignFrame.getAlignViewport().getAlignment();
-    if (thisAlignment.isNucleotide() == al.isNucleotide())
-    {
-      // both nucleotide or both protein
-      return false;
-    }
-    AlignmentI protein = thisAlignment.isNucleotide() ? al : thisAlignment;
-    AlignmentI dna = thisAlignment.isNucleotide() ? thisAlignment : al;
-    boolean mapped = AlignmentUtils.mapProteinToCdna(protein, dna);
-    if (!mapped)
-    {
-      return false;
-    }
-
-    /*
-     * A mapping is possible; ask user if they want a split frame.
-     */
-    String title = MessageManager.getString("label.open_split_window");
-    final JVDialog dialog = new JVDialog((JFrame) this.getParent(), title,
-            true, 100, 400);
-    dialog.ok.setLabel(MessageManager.getString("action.yes"));
-    dialog.cancel.setLabel(MessageManager.getString("action.no"));
-    JPanel question = new JPanel(new BorderLayout());
-    final String text = MessageManager
-            .getString("label.open_split_window?");
-    question.add(new JLabel(text, JLabel.CENTER), BorderLayout.CENTER);
-    dialog.setMainPanel(question);
-    dialog.setVisible(true);
-    dialog.toFront();
-    
-    if (!dialog.accept)
-    {
-      return false;
-    }
-
-    /*
-     * Open SplitFrame with DNA above and protein below, including the alignment
-     * from textbox and a copy of the original.
-     */
-    final JalviewLite applet = this.alignFrame.viewport.applet;
-    AlignFrame copyFrame = new AlignFrame(
-            this.alignFrame.viewport.getAlignment(), applet,
-            alignFrame.getTitle(), false, false);
-    AlignFrame newFrame = new AlignFrame(al, alignFrame.viewport.applet,
-            "Cut & Paste input - " + format, false, false);
-    AlignFrame dnaFrame = al.isNucleotide() ? newFrame : copyFrame;
-    AlignFrame proteinFrame = al.isNucleotide() ? copyFrame
-            : newFrame;
-    SplitFrame sf = new SplitFrame(dnaFrame, proteinFrame);
-    sf.addToDisplay(false, applet);
-    return true;
-  }
-
-  /**
-   * Parse the text as a TCoffee score file, if successful add scores as
-   * alignment annotations.
-   */
-  protected void loadAnnotations()
-  {
-    AlignFile tcf = null;
-    try
-    {
-      tcf = GenericFileAdapter.newTCoffeeScoreFile(textarea.getText(),
-              AppletFormatAdapter.PASTE);
-      if (tcf.isValid())
-      {
-        if (tcf.annotateAlignment(alignFrame.viewport.getAlignment(),
-                true))
-        {
-          alignFrame.tcoffeeColour.setEnabled(true);
-          alignFrame.alignPanel.fontChanged();
-          alignFrame.changeColour(new TCoffeeColourScheme(
-                  alignFrame.viewport.getAlignment()));
-          alignFrame.statusBar
-                  .setText(MessageManager
-                          .getString("label.successfully_pasted_tcoffee_scores_to_alignment"));
-        }
-        else
-        {
-          // file valid but didn't get added to alignment for some reason
-          alignFrame.statusBar.setText(MessageManager.formatMessage(
-                  "label.failed_add_tcoffee_scores",
-                  new Object[]
-                  { (tcf.getWarningMessage() != null ? tcf
-                          .getWarningMessage() : "") }));
-        }
-      }
-      else
-      {
-        tcf = null;
-      }
-    } catch (Exception x)
-    {
-      tcf = null;
-    }
-    if (tcf == null)
-    {
-      if (new AnnotationFile().annotateAlignmentView(alignFrame.viewport,
-              textarea.getText(), AppletFormatAdapter.PASTE))
-      {
-        alignFrame.alignPanel.fontChanged();
-        alignFrame.alignPanel.setScrollValues(0, 0);
-        alignFrame.statusBar
-                .setText(MessageManager
-                        .getString("label.successfully_pasted_annotation_to_alignment"));
-
-      }
-      else
-      {
-        if (!alignFrame.parseFeaturesFile(textarea.getText(),
-                AppletFormatAdapter.PASTE))
-        {
-          alignFrame.statusBar
-                  .setText(MessageManager
-                          .getString("label.couldnt_parse_pasted_text_as_valid_annotation_feature_GFF_tcoffee_file"));
-        }
-      }
-    }
-  }
-
-  /**
-   * Open a Jmol viewer (if available), failing that the built-in PDB viewer,
-   * passing the input text as the PDB file data.
-   * 
-   * @param text
-   */
-  protected void openPdbViewer(String text)
-  {
-    PDBEntry pdb = new PDBEntry();
-    pdb.setFile(text);
-
-//    if (alignFrame.alignPanel.av.applet.jmolAvailable)
-//    {
-      new AppletJmol(pdb, new SequenceI[]
-      { seq }, null, alignFrame.alignPanel, AppletFormatAdapter.PASTE);
-//    }
-//    else
-//    {
-//      new MCview.AppletPDBViewer(pdb, new SequenceI[]
-//      { seq }, null, alignFrame.alignPanel, AppletFormatAdapter.PASTE);
-//    }
-  }
-
-  protected void cancel()
-  {
-    textarea.setText("");
-    if (this.getParent() instanceof JFrame)
-    {
-      ((JFrame) this.getParent()).setVisible(false);
-    }
-    else
-    {
-      ((JDialog) this.getParent()).setVisible(false);
-    }
-  }
-
-  protected JTextArea textarea = new JTextArea();
-
-  JButton accept = new JButton("New Window");
-
-  JButton addSequences = new JButton("Add to Current Alignment");
-
-  JButton cancel = new JButton("Close");
-
-  protected JPanel buttonPanel = new JPanel();
-
-  BorderLayout borderLayout1 = new BorderLayout();
-
-  private void jbInit() throws Exception
-  {
-    textarea.setFont(new java.awt.Font("Monospaced", Font.PLAIN, 10));
-    textarea.setText(MessageManager
-            .getString("label.paste_your_alignment_file"));
-    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(
-            MessageManager.getString("label.paste_your")))
-    {
-      textarea.setText("");
-    }
-  }
-
-  public void mouseReleased(MouseEvent evt)
-  {
-  }
-
-  public void mouseClicked(MouseEvent evt)
-  {
-  }
-
-  public void mouseEntered(MouseEvent evt)
-  {
-  }
-
-  public void mouseExited(MouseEvent evt)
-  {
-  }
-}
+/*\r
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)\r
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors\r
+ * \r
+ * This file is part of Jalview.\r
+ * \r
+ * Jalview 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 3\r
+ * of the License, or (at your option) any later version.\r
+ *  \r
+ * Jalview is distributed in the hope that it will be useful, but \r
+ * WITHOUT ANY WARRANTY; without even the implied warranty \r
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR \r
+ * PURPOSE.  See the GNU General Public License for more details.\r
+ * \r
+ * You should have received a copy of the GNU General Public License\r
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.\r
+ * The Jalview Authors are detailed in the 'AUTHORS' file.\r
+ */\r
+package jalview.appletgui;\r
+\r
+import jalview.analysis.AlignmentUtils;\r
+import jalview.api.ComplexAlignFile;\r
+import jalview.bin.JalviewLite;\r
+import jalview.datamodel.AlignmentI;\r
+import jalview.datamodel.ColumnSelection;\r
+import jalview.datamodel.PDBEntry;\r
+import jalview.datamodel.SequenceI;\r
+import jalview.io.AlignFile;\r
+import jalview.io.AnnotationFile;\r
+import jalview.io.AppletFormatAdapter;\r
+import jalview.io.FileParse;\r
+import jalview.io.IdentifyFile;\r
+import jalview.io.NewickFile;\r
+import jalview.jsdev.GenericFileAdapter;\r
+import jalview.schemes.ColourSchemeI;\r
+import jalview.schemes.TCoffeeColourScheme;\r
+import jalview.util.MessageManager;\r
+\r
+import java.awt.BorderLayout;\r
+import java.awt.Font;\r
+import java.awt.event.ActionEvent;\r
+import java.awt.event.ActionListener;\r
+import java.awt.event.MouseEvent;\r
+import java.awt.event.MouseListener;\r
+\r
+import javax.swing.JButton;\r
+import javax.swing.JDialog;\r
+import javax.swing.JFrame;\r
+import javax.swing.JLabel;\r
+import javax.swing.JPanel;\r
+import javax.swing.JTextArea;\r
+\r
+public class CutAndPasteTransfer extends JPanel implements ActionListener,\r
+        MouseListener\r
+{\r
+  boolean pdbImport = false;\r
+\r
+  boolean treeImport = false;\r
+\r
+  boolean annotationImport = false;\r
+\r
+  SequenceI seq;\r
+\r
+  AlignFrame alignFrame;\r
+\r
+  FileParse source = null;\r
+\r
+  public CutAndPasteTransfer(boolean forImport, AlignFrame alignFrame)\r
+  {\r
+    try\r
+    {\r
+      jbInit();\r
+    } catch (Exception e)\r
+    {\r
+      e.printStackTrace();\r
+    }\r
+\r
+    this.alignFrame = alignFrame;\r
+\r
+    if (!forImport)\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(SequenceI seq)\r
+  {\r
+    this.seq = seq;\r
+    accept.setLabel(MessageManager.getString("action.accept"));\r
+    addSequences.setVisible(false);\r
+    pdbImport = true;\r
+  }\r
+\r
+  public void setTreeImport()\r
+  {\r
+    treeImport = true;\r
+    accept.setLabel(MessageManager.getString("action.accept"));\r
+    addSequences.setVisible(false);\r
+  }\r
+\r
+  public void setAnnotationImport()\r
+  {\r
+    annotationImport = true;\r
+    accept.setLabel(MessageManager.getString("action.accept"));\r
+    addSequences.setVisible(false);\r
+  }\r
+\r
+  public void actionPerformed(ActionEvent evt)\r
+  {\r
+    if (evt.getSource() == accept)\r
+    {\r
+      ok(true);\r
+    }\r
+    else if (evt.getSource() == addSequences)\r
+    {\r
+      ok(false);\r
+    }\r
+    else if (evt.getSource() == cancel)\r
+    {\r
+      cancel();\r
+    }\r
+  }\r
+\r
+  protected void ok(boolean newWindow)\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
+      openPdbViewer(text);\r
+\r
+    }\r
+    else if (treeImport)\r
+    {\r
+      if (!loadTree())\r
+      {\r
+        return;\r
+      }\r
+    }\r
+    else if (annotationImport)\r
+    {\r
+      loadAnnotations();\r
+    }\r
+    else if (alignFrame != null)\r
+    {\r
+      loadAlignment(text, newWindow, alignFrame.getAlignViewport());\r
+    }\r
+\r
+    // TODO: dialog should indicate if data was parsed correctly or not - see\r
+    // JAL-1102\r
+    if (this.getParent() instanceof JFrame)\r
+    {\r
+      ((JFrame) this.getParent()).setVisible(false);\r
+    }\r
+    else\r
+    {\r
+      ((JDialog) this.getParent()).setVisible(false);\r
+    }\r
+  }\r
+\r
+  /**\r
+   * Parses text as Newick Tree format, and loads on to the alignment. Returns\r
+   * true if successful, else false.\r
+   */\r
+  protected boolean loadTree()\r
+  {\r
+    try\r
+    {\r
+      NewickFile fin = new NewickFile(textarea.getText(), "Paste");\r
+\r
+      fin.parse();\r
+      if (fin.getTree() != null)\r
+      {\r
+        alignFrame.loadTree(fin, "Pasted tree file");\r
+        return true;\r
+      }\r
+    } catch (Exception ex)\r
+    {\r
+      // TODO: JAL-1102 - should have a warning message in dialog, not simply\r
+      // overwrite the broken input data with the exception\r
+      textarea.setText(MessageManager.formatMessage(\r
+              "label.could_not_parse_newick_file", new Object[]\r
+              { ex.getMessage() }));\r
+      return false;\r
+    }\r
+    return false;\r
+  }\r
+\r
+  /**\r
+   * Parse text as an alignment file and add to the current or a new window.\r
+   * \r
+   * @param text\r
+   * @param newWindow\r
+   */\r
+  protected void loadAlignment(String text, boolean newWindow,\r
+          AlignViewport viewport)\r
+  {\r
+    AlignmentI al = null;\r
+\r
+    String format = new IdentifyFile().Identify(text,\r
+            AppletFormatAdapter.PASTE);\r
+    AppletFormatAdapter afa = new AppletFormatAdapter(alignFrame.alignPanel);\r
+    try\r
+    {\r
+      al = afa.readFile(text, AppletFormatAdapter.PASTE, format);\r
+      source = afa.getAlignFile();\r
+    } catch (java.io.IOException ex)\r
+    {\r
+      ex.printStackTrace();\r
+    }\r
+\r
+    if (al != null)\r
+    {\r
+      al.setDataset(null); // set dataset on alignment/sequences\r
+\r
+      /*\r
+       * SplitFrame option dependent on applet parameter for now.\r
+       */\r
+      boolean allowSplitFrame = alignFrame.viewport.applet\r
+              .getDefaultParameter("enableSplitFrame", false);\r
+      if (allowSplitFrame && openSplitFrame(al, format))\r
+      {\r
+        return;\r
+      }\r
+      if (newWindow)\r
+      {\r
+        AlignFrame af;\r
+\r
+        if (source instanceof ComplexAlignFile)\r
+        {\r
+          ColumnSelection colSel = ((ComplexAlignFile) source)\r
+                  .getColumnSelection();\r
+          SequenceI[] hiddenSeqs = ((ComplexAlignFile) source)\r
+                  .getHiddenSequences();\r
+          boolean showSeqFeatures = ((ComplexAlignFile) source)\r
+                  .isShowSeqFeatures();\r
+          ColourSchemeI cs = ((ComplexAlignFile) source).getColourScheme();\r
+          af = new AlignFrame(al, hiddenSeqs, colSel,\r
+                  alignFrame.viewport.applet, "Cut & Paste input - "\r
+                          + format, false);\r
+          af.getAlignViewport().setShowSequenceFeatures(showSeqFeatures);\r
+          af.changeColour(cs);\r
+        }\r
+        else\r
+        {\r
+          af = new AlignFrame(al, alignFrame.viewport.applet,\r
+                  "Cut & Paste input - " + format, false);\r
+        }\r
+\r
+        af.statusBar\r
+                .setText(MessageManager\r
+                        .getString("label.successfully_pasted_annotation_to_alignment"));\r
+      }\r
+      else\r
+      {\r
+        alignFrame.addSequences(al.getSequencesArray());\r
+        alignFrame.statusBar.setText(MessageManager\r
+                .getString("label.successfully_pasted_alignment_file"));\r
+      }\r
+    }\r
+  }\r
+\r
+  /**\r
+   * Check whether the new alignment could be mapped to the current one as\r
+   * cDNA/protein, if so offer the option to open as split frame view. Returns\r
+   * true if a split frame view is opened, false if not.\r
+   * \r
+   * @param al\r
+   * @return\r
+   */\r
+  protected boolean openSplitFrame(AlignmentI al, String format)\r
+  {\r
+    final AlignmentI thisAlignment = this.alignFrame.getAlignViewport().getAlignment();\r
+    if (thisAlignment.isNucleotide() == al.isNucleotide())\r
+    {\r
+      // both nucleotide or both protein\r
+      return false;\r
+    }\r
+    AlignmentI protein = thisAlignment.isNucleotide() ? al : thisAlignment;\r
+    AlignmentI dna = thisAlignment.isNucleotide() ? thisAlignment : al;\r
+    boolean mapped = AlignmentUtils.mapProteinToCdna(protein, dna);\r
+    if (!mapped)\r
+    {\r
+      return false;\r
+    }\r
+\r
+    /*\r
+     * A mapping is possible; ask user if they want a split frame.\r
+     */\r
+    String title = MessageManager.getString("label.open_split_window");\r
+    final JVDialog dialog = new JVDialog((JFrame) this.getParent(), title,\r
+            true, 100, 400);\r
+    dialog.ok.setLabel(MessageManager.getString("action.yes"));\r
+    dialog.cancel.setLabel(MessageManager.getString("action.no"));\r
+    JPanel question = new JPanel(new BorderLayout());\r
+    final String text = MessageManager\r
+            .getString("label.open_split_window?");\r
+    question.add(new JLabel(text, JLabel.CENTER), BorderLayout.CENTER);\r
+    dialog.setMainPanel(question);\r
+    dialog.setVisible(true);\r
+    dialog.toFront();\r
+    \r
+    if (!dialog.accept)\r
+    {\r
+      return false;\r
+    }\r
+\r
+    /*\r
+     * Open SplitFrame with DNA above and protein below, including the alignment\r
+     * from textbox and a copy of the original.\r
+     */\r
+    final JalviewLite applet = this.alignFrame.viewport.applet;\r
+    AlignFrame copyFrame = new AlignFrame(\r
+            this.alignFrame.viewport.getAlignment(), applet,\r
+            alignFrame.getTitle(), false, false);\r
+    AlignFrame newFrame = new AlignFrame(al, alignFrame.viewport.applet,\r
+            "Cut & Paste input - " + format, false, false);\r
+    AlignFrame dnaFrame = al.isNucleotide() ? newFrame : copyFrame;\r
+    AlignFrame proteinFrame = al.isNucleotide() ? copyFrame\r
+            : newFrame;\r
+    SplitFrame sf = new SplitFrame(dnaFrame, proteinFrame);\r
+    sf.addToDisplay(false, applet);\r
+    return true;\r
+  }\r
+\r
+  /**\r
+   * Parse the text as a TCoffee score file, if successful add scores as\r
+   * alignment annotations.\r
+   */\r
+  protected void loadAnnotations()\r
+  {\r
+    AlignFile tcf = null;\r
+    try\r
+    {\r
+      tcf = GenericFileAdapter.newTCoffeeScoreFile(textarea.getText(),\r
+              AppletFormatAdapter.PASTE);\r
+      if (tcf.isValid())\r
+      {\r
+        if (tcf.annotateAlignment(alignFrame.viewport.getAlignment(),\r
+                true))\r
+        {\r
+          alignFrame.tcoffeeColour.setEnabled(true);\r
+          alignFrame.alignPanel.fontChanged();\r
+          alignFrame.changeColour(new TCoffeeColourScheme(\r
+                  alignFrame.viewport.getAlignment()));\r
+          alignFrame.statusBar\r
+                  .setText(MessageManager\r
+                          .getString("label.successfully_pasted_tcoffee_scores_to_alignment"));\r
+        }\r
+        else\r
+        {\r
+          // file valid but didn't get added to alignment for some reason\r
+          alignFrame.statusBar.setText(MessageManager.formatMessage(\r
+                  "label.failed_add_tcoffee_scores",\r
+                  new Object[]\r
+                  { (tcf.getWarningMessage() != null ? tcf\r
+                          .getWarningMessage() : "") }));\r
+        }\r
+      }\r
+      else\r
+      {\r
+        tcf = null;\r
+      }\r
+    } catch (Exception x)\r
+    {\r
+      tcf = null;\r
+    }\r
+    if (tcf == null)\r
+    {\r
+      if (new AnnotationFile().annotateAlignmentView(alignFrame.viewport,\r
+              textarea.getText(), AppletFormatAdapter.PASTE))\r
+      {\r
+        alignFrame.alignPanel.fontChanged();\r
+        alignFrame.alignPanel.setScrollValues(0, 0);\r
+        alignFrame.statusBar\r
+                .setText(MessageManager\r
+                        .getString("label.successfully_pasted_annotation_to_alignment"));\r
+\r
+      }\r
+      else\r
+      {\r
+        if (!alignFrame.parseFeaturesFile(textarea.getText(),\r
+                AppletFormatAdapter.PASTE))\r
+        {\r
+          alignFrame.statusBar\r
+                  .setText(MessageManager\r
+                          .getString("label.couldnt_parse_pasted_text_as_valid_annotation_feature_GFF_tcoffee_file"));\r
+        }\r
+      }\r
+    }\r
+  }\r
+\r
+  /**\r
+   * Open a Jmol viewer (if available), failing that the built-in PDB viewer,\r
+   * passing the input text as the PDB file data.\r
+   * \r
+   * @param text\r
+   */\r
+  protected void openPdbViewer(String text)\r
+  {\r
+    PDBEntry pdb = new PDBEntry();\r
+    pdb.setFile(text);\r
+\r
+//    if (alignFrame.alignPanel.av.applet.jmolAvailable)\r
+//    {\r
+      new AppletJmol(pdb, new SequenceI[]\r
+      { seq }, null, alignFrame.alignPanel, AppletFormatAdapter.PASTE);\r
+//    }\r
+//    else\r
+//    {\r
+//      new MCview.AppletPDBViewer(pdb, new SequenceI[]\r
+//      { seq }, null, alignFrame.alignPanel, AppletFormatAdapter.PASTE);\r
+//    }\r
+  }\r
+\r
+  protected void cancel()\r
+  {\r
+    textarea.setText("");\r
+    if (this.getParent() instanceof JFrame)\r
+    {\r
+      ((JFrame) this.getParent()).setVisible(false);\r
+    }\r
+    else\r
+    {\r
+      ((JDialog) this.getParent()).setVisible(false);\r
+    }\r
+  }\r
+\r
+  protected JTextArea textarea = new JTextArea();\r
+\r
+  JButton accept = new JButton("New Window");\r
+\r
+  JButton addSequences = new JButton("Add to Current Alignment");\r
+\r
+  JButton cancel = new JButton("Close");\r
+\r
+  protected JPanel buttonPanel = new JPanel();\r
+\r
+  BorderLayout borderLayout1 = new BorderLayout();\r
+\r
+  private void jbInit() throws Exception\r
+  {\r
+    textarea.setFont(new java.awt.Font("Monospaced", Font.PLAIN, 10));\r
+    textarea.setText(MessageManager\r
+            .getString("label.paste_your_alignment_file"));\r
+    textarea.addMouseListener(this);\r
+    this.setLayout(borderLayout1);\r
+    accept.addActionListener(this);\r
+    addSequences.addActionListener(this);\r
+    cancel.addActionListener(this);\r
+    this.add(buttonPanel, BorderLayout.SOUTH);\r
+    buttonPanel.add(accept, null);\r
+    buttonPanel.add(addSequences);\r
+    buttonPanel.add(cancel, null);\r
+    this.add(textarea, java.awt.BorderLayout.CENTER);\r
+  }\r
+\r
+  public void mousePressed(MouseEvent evt)\r
+  {\r
+    if (textarea.getText().startsWith(\r
+            MessageManager.getString("label.paste_your")))\r
+    {\r
+      textarea.setText("");\r
+    }\r
+  }\r
+\r
+  public void mouseReleased(MouseEvent evt)\r
+  {\r
+  }\r
+\r
+  public void mouseClicked(MouseEvent evt)\r
+  {\r
+  }\r
+\r
+  public void mouseEntered(MouseEvent evt)\r
+  {\r
+  }\r
+\r
+  public void mouseExited(MouseEvent evt)\r
+  {\r
+  }\r
+}\r