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.analysis.AlignmentUtils.MappingResult;
+import jalview.api.AlignmentViewPanel;
import jalview.api.ViewStyleI;
import jalview.bin.JalviewLite;
import jalview.datamodel.AlignmentI;
import jalview.structure.StructureSelectionManager;
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.GridLayout;
-import java.awt.MouseInfo;
-import java.awt.Panel;
-import java.awt.Point;
-import java.awt.Rectangle;
-
public class SplitFrame extends EmbmenuFrame
{
private static final long serialVersionUID = 1L;
AlignViewport protein = !topAlignment.isNucleotide() ? topViewport
: (!bottomAlignment.isNucleotide() ? bottomViewport : null);
- MappingResult mapped = AlignmentUtils.mapProteinToCdna(
+ boolean mapped = AlignmentUtils.mapProteinToCdna(
protein.getAlignment(), cdna.getAlignment());
- if (mapped != MappingResult.NotMapped)
+ if (mapped)
{
final StructureSelectionManager ssm = StructureSelectionManager
.getStructureSelectionManager(topViewport.applet);
topViewport.setCodingComplement(bottomViewport);
ssm.addCommandListener(cdna);
ssm.addCommandListener(protein);
+
+ /*
+ * Now mappings exist, can compute cDNA consensus on protein alignment
+ */
+ protein.initComplementConsensus();
+ AlignmentViewPanel ap = topAlignment.isNucleotide() ? bottomFrame.alignPanel
+ : topFrame.alignPanel;
+ protein.updateConsensus(ap);
}
- setCharacterWidth(protein, cdna);
+ adjustLayout();
}
/**
}
/**
- * Expand protein to 3 times character width of dna
- *
- * @param protein
- * @param cdna
+ * Make any adjustments to the layout
*/
- protected void setCharacterWidth(AlignViewport protein, AlignViewport cdna)
+ protected void adjustLayout()
{
+ AlignViewport cdna = topFrame.getAlignViewport().getAlignment()
+ .isNucleotide() ? topFrame.viewport : bottomFrame.viewport;
+ AlignViewport protein = cdna == topFrame.viewport ? bottomFrame.viewport
+ : topFrame.viewport;
+
+ /*
+ * Ensure sequence ids are the same width for good alignment.
+ */
+ // TODO should do this via av.getViewStyle/setViewStyle
+ // however at present av.viewStyle is not set in IdPanel.fontChanged
+ int w1 = topFrame.alignPanel.idPanel.idCanvas.getWidth();
+ int w2 = bottomFrame.alignPanel.idPanel.idCanvas.getWidth();
+ int w3 = Math.max(w1, w2);
+ if (w1 != w3)
+ {
+ Dimension d = topFrame.alignPanel.idPanel.idCanvas.getSize();
+ 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));
+ }
+
+ /*
+ * Expand protein to 3 times character width of dna
+ */
if (protein != null && cdna != null)
{
ViewStyleI vs = protein.getViewStyle();
*/
public void addToDisplay(boolean embedded, JalviewLite applet)
{
- createAlignFrameWindow(embedded, applet);
+ createSplitFrameWindow(embedded, applet);
validate();
topFrame.alignPanel.adjustAnnotationHeight();
topFrame.alignPanel.paintAlignment(true);
* @param embed
* @param applet
*/
- public void createAlignFrameWindow(boolean embed, JalviewLite applet)
+ protected void createSplitFrameWindow(boolean embed, JalviewLite applet)
{
if (embed)
{
else
{
this.add(outermost);
- int width = Math.max(topFrame.DEFAULT_WIDTH,
- bottomFrame.DEFAULT_WIDTH);
- int height = topFrame.DEFAULT_HEIGHT + bottomFrame.DEFAULT_HEIGHT;
+ int width = Math.max(topFrame.frameWidth,
+ bottomFrame.frameWidth);
+ int height = topFrame.frameHeight + bottomFrame.frameHeight;
jalview.bin.JalviewLite
.addFrame(this, this.getTitle(), width, height);
}