+/*
+ * 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 java.awt.BorderLayout;
-import java.awt.Dimension;
-import java.awt.GridLayout;
-import java.awt.Panel;
-
-import jalview.analysis.AlignmentUtils;
import jalview.api.AlignmentViewPanel;
import jalview.api.ViewStyleI;
import jalview.bin.JalviewLite;
import jalview.datamodel.AlignmentI;
import jalview.structure.StructureSelectionManager;
+import jalview.viewmodel.AlignmentViewport;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.GridLayout;
+import java.awt.Panel;
public class SplitFrame extends EmbmenuFrame
{
private Panel outermost;
/**
- * Constructor
+ * Constructs the split frame placing cdna in the top half. No 'alignment' is
+ * performed here, this should be done by the calling client if wanted.
*/
public SplitFrame(AlignFrame af1, AlignFrame af2)
{
- topFrame = af1;
- bottomFrame = af2;
+ boolean af1IsNucleotide = af1.viewport.getAlignment().isNucleotide();
+ topFrame = af1IsNucleotide ? af1 : af2;
+ bottomFrame = topFrame == af1 ? af2 : af1;
init();
}
final AlignViewport bottomViewport = bottomFrame.viewport;
final AlignmentI topAlignment = topViewport.getAlignment();
final AlignmentI bottomAlignment = bottomViewport.getAlignment();
- AlignViewport cdna = topAlignment.isNucleotide() ? topViewport
+ AlignmentViewport cdna = topAlignment.isNucleotide() ? topViewport
: (bottomAlignment.isNucleotide() ? bottomViewport : null);
- AlignViewport protein = !topAlignment.isNucleotide() ? topViewport
+ AlignmentViewport protein = !topAlignment.isNucleotide() ? topViewport
: (!bottomAlignment.isNucleotide() ? bottomViewport : null);
- boolean mapped = AlignmentUtils.mapProteinToCdna(
- protein.getAlignment(), cdna.getAlignment());
- if (mapped)
- {
- final StructureSelectionManager ssm = StructureSelectionManager
- .getStructureSelectionManager(topViewport.applet);
- ssm.addMappings(protein.getAlignment().getCodonFrames());
- topViewport.setCodingComplement(bottomViewport);
- ssm.addCommandListener(cdna);
- ssm.addCommandListener(protein);
- }
+ final StructureSelectionManager ssm = StructureSelectionManager
+ .getStructureSelectionManager(topViewport.applet);
+ ssm.registerMappings(protein.getAlignment().getCodonFrames());
+ topViewport.setCodingComplement(bottomViewport);
+ ssm.addCommandListener(cdna);
+ ssm.addCommandListener(protein);
/*
- * Now mappings exist, can compute cDNA consensus on protein alignment
+ * Compute cDNA consensus on protein alignment
*/
protein.initComplementConsensus();
- AlignmentViewPanel ap = topAlignment.isNucleotide() ? bottomFrame.alignPanel
+ AlignmentViewPanel ap = topAlignment.isNucleotide()
+ ? bottomFrame.alignPanel
: topFrame.alignPanel;
protein.updateConsensus(ap);
*/
protected void adjustLayout()
{
- AlignViewport cdna = topFrame.getAlignViewport().getAlignment()
+ AlignmentViewport cdna = topFrame.getAlignViewport().getAlignment()
.isNucleotide() ? topFrame.viewport : bottomFrame.viewport;
- AlignViewport protein = cdna == topFrame.viewport ? bottomFrame.viewport
+ AlignmentViewport protein = cdna == topFrame.viewport
+ ? bottomFrame.viewport
: topFrame.viewport;
/*
if (w1 != w3)
{
Dimension d = topFrame.alignPanel.idPanel.idCanvas.getSize();
- topFrame.alignPanel.idPanel.idCanvas.setSize(new Dimension(w3,
- d.height));
+ topFrame.alignPanel.idPanel.idCanvas
+ .setSize(new Dimension(w3, d.height));
}
if (w2 != w3)
{
Dimension d = bottomFrame.alignPanel.idPanel.idCanvas.getSize();
- bottomFrame.alignPanel.idPanel.idCanvas.setSize(new Dimension(w3,
- d.height));
+ bottomFrame.alignPanel.idPanel.idCanvas
+ .setSize(new Dimension(w3, d.height));
}
/*
private void addAlignFrameComponents(AlignFrame af, Panel panel)
{
panel.setLayout(new BorderLayout());
- Panel menuPanel = af
- .makeEmbeddedPopupMenu(af.getMenuBar(), true, false);
+ Panel menuPanel = af.makeEmbeddedPopupMenu(af.getMenuBar(), true,
+ false);
panel.add(menuPanel, BorderLayout.NORTH);
panel.add(af.statusBar, BorderLayout.SOUTH);
panel.add(af.alignPanel, BorderLayout.CENTER);
createSplitFrameWindow(embedded, applet);
validate();
topFrame.alignPanel.adjustAnnotationHeight();
- topFrame.alignPanel.paintAlignment(true);
+ topFrame.alignPanel.paintAlignment(true, true);
bottomFrame.alignPanel.adjustAnnotationHeight();
- bottomFrame.alignPanel.paintAlignment(true);
+ bottomFrame.alignPanel.paintAlignment(true, true);
}
/**
else
{
this.add(outermost);
- int width = Math.max(topFrame.frameWidth,
- bottomFrame.frameWidth);
+ int width = Math.max(topFrame.frameWidth, bottomFrame.frameWidth);
int height = topFrame.frameHeight + bottomFrame.frameHeight;
- jalview.bin.JalviewLite
- .addFrame(this, this.getTitle(), width, height);
+ jalview.bin.JalviewLite.addFrame(this, this.getTitle(), width,
+ height);
+ }
+ }
+
+ /**
+ * Returns the contained AlignFrame complementary to the one given (or null if
+ * no match to top or bottom component).
+ *
+ * @param af
+ * @return
+ */
+ public AlignFrame getComplement(AlignFrame af)
+ {
+ if (topFrame == af)
+ {
+ return bottomFrame;
+ }
+ else if (bottomFrame == af)
+ {
+ return topFrame;
}
+ return null;
}
}