X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fappletgui%2FSplitFrame.java;h=777e307e2d1b68b8525767f7d1b2de1d8341c571;hb=483ecb5e4541537778844529cc93204f9124b68d;hp=4fbf65adfbd03efc48858a9e73958a1ccf42277e;hpb=f69e96788c2ae3a08f56c4461d8d197a3b3a06a2;p=jalview.git diff --git a/src/jalview/appletgui/SplitFrame.java b/src/jalview/appletgui/SplitFrame.java index 4fbf65a..777e307 100644 --- a/src/jalview/appletgui/SplitFrame.java +++ b/src/jalview/appletgui/SplitFrame.java @@ -1,16 +1,36 @@ +/* + * 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 . + * 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 { @@ -23,12 +43,14 @@ 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(); } @@ -49,28 +71,24 @@ public class SplitFrame extends EmbmenuFrame 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); @@ -99,9 +117,10 @@ public class SplitFrame extends EmbmenuFrame */ 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; /* @@ -115,14 +134,14 @@ public class SplitFrame extends EmbmenuFrame 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)); } /* @@ -148,8 +167,8 @@ public class SplitFrame extends EmbmenuFrame 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); @@ -168,9 +187,9 @@ public class SplitFrame extends EmbmenuFrame 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); } /** @@ -190,11 +209,30 @@ public class SplitFrame extends EmbmenuFrame 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; } }