-/*
- * 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