import java.awt.Container;
import java.awt.Dimension;
+import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Rectangle;
protected void openLinkedAlignment(AlignmentI al, String title)
{
String[] options = new String[] { MessageManager.getString("action.no"),
- MessageManager.getString("label.split_window"),
- MessageManager.getString("label.new_window"), };
+ MessageManager.getString("label.split_window")
+ + "(update new alignment)",
+ MessageManager.getString("label.new_window"),
+ MessageManager.getString(
+ "label.split_window") + "(update this alignment)",
+ MessageManager.getString(
+ "label.split_window") + "(leave both unchanged)" };
final String question = JvSwingUtils.wrapTooltip(true,
MessageManager.getString("label.open_split_window?"));
final AlignViewport us = this;
.setResponseHandler(0, () -> {
addDataToAlignment(al);
}).setResponseHandler(1, () -> {
- us.openLinkedAlignmentAs(al, title, true);
+ us.openLinkedAlignmentAs(al, title, true, 1);
}).setResponseHandler(2, () -> {
- us.openLinkedAlignmentAs(al, title, false);
+ us.openLinkedAlignmentAs(al, title, false, 1);
+ }).setResponseHandler(3, () -> {
+ us.openLinkedAlignmentAs(al, title, true, 2);
+ }).setResponseHandler(4, () -> {
+ us.openLinkedAlignmentAs(al, title, true, 0);
});
+ dialog.setLayout(new FlowLayout(FlowLayout.CENTER));
+ dialog.setPreferredSize(new Dimension(350,300));
dialog.showDialog(question,
MessageManager.getString("label.open_split_window"),
JvOptionPane.DEFAULT_OPTION, JvOptionPane.PLAIN_MESSAGE, null,
options, options[0]);
}
- protected void openLinkedAlignmentAs(AlignmentI al, String title,
- boolean newWindowOrSplitPane)
+ /**
+ * link given alignment to the alignment in this viewport and open
+ * @param al - alignment containing sequences to link to this alignment
+ * @param title
+ * @param newWindowOrSplitPane
+ * @param alignAs TODO
+ * @param alignAs - 0 - don't modify either alignment, 1 - align al according to us, 2- align us according to al
+ * @return alignFrame holding al
+ */
+ protected AlignFrame openLinkedAlignmentAs(AlignmentI al, String title,
+ boolean newWindowOrSplitPane, int alignAs)
{
/*
* Identify protein and dna alignments. Make a copy of this one if opening
AlignmentI thisAlignment = newWindowOrSplitPane
? new Alignment(getAlignment())
: getAlignment();
- AlignmentI protein = al.isNucleotide() ? thisAlignment : al;
- final AlignmentI cdna = al.isNucleotide() ? al : thisAlignment;
+
+
+ if (!al.isNucleotide() && !thisAlignment.isNucleotide())
+ {
+ // link AA to 3di or other kind of 'alternative' 1:1 mapping alignment
+ if (al.getDataset()==null)
+ {
+ al.setDataset(thisAlignment.getDataset());
+ }
+ AlignmentUtils.map3diPeptideToProteinAligment(thisAlignment,al);
+ if (thisAlignment.getCodonFrames().isEmpty()) {thisAlignment.getCodonFrames().addAll(al.getCodonFrames()); }
+ else {al.getCodonFrames().addAll(thisAlignment.getCodonFrames()); };
- /*
- * Map sequences. At least one should get mapped as we have already passed
- * the test for 'mappability'. Any mappings made will be added to the
- * protein alignment. Note creating dataset sequences on the new alignment
- * is a pre-requisite for building mappings.
- */
- al.setDataset(null);
- AlignmentUtils.mapProteinAlignmentToCdna(protein, cdna);
+ }
+ else
+ {
+ // shouldn't we be merging dataset here ?
+ // always create dataset for imported alignment before doing anything else..
+ al.setDataset(null);
+ // link CODON triplets to Protein
+ AlignmentI protein = al.isNucleotide() ? thisAlignment : al;
+ final AlignmentI cdna = al.isNucleotide() ? al : thisAlignment;
+
+ /*
+ * Map sequences. At least one should get mapped as we have already passed
+ * the test for 'mappability'. Any mappings made will be added to the
+ * protein alignment. Note creating dataset sequences on the new alignment
+ * is a pre-requisite for building mappings.
+ */
+ AlignmentUtils.mapProteinAlignmentToCdna(protein, cdna);
+ }
+
/*
* Create the AlignFrame for the added alignment. If it is protein, mappings
* are registered with StructureSelectionManager as a side-effect.
if (newWindowOrSplitPane)
{
- al.alignAs(thisAlignment);
- protein = openSplitFrame(newAlignFrame, thisAlignment);
+ if (alignAs==1) {
+ al.alignAs(thisAlignment);
+ }
+ if (alignAs==2) {
+ thisAlignment.alignAs(al);
+ }
+ AlignmentI mapped = openSplitFrame(newAlignFrame, thisAlignment);
}
+ return newAlignFrame;
}
/**
*/
protected boolean noReferencesTo(AlignedCodonFrame acf)
{
- AlignFrame[] frames = Desktop.getAlignFrames();
+ AlignFrame[] frames = Desktop.getDesktopAlignFrames();
if (frames == null)
{
return true;
{
this.viewName = viewName;
}
+
}