X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fviewmodel%2FAlignmentViewport.java;h=c4ae76d1060f9c88418600834fbefb0eeeff86b7;hb=8d44c38e7028bcce53c0370dec67baa5d8d209c9;hp=d6aa400e9daa425449fc1d360734bf40d164edbd;hpb=ed2283c5f54da377a2a2fdbdb7aec75ed7041714;p=jalview.git diff --git a/src/jalview/viewmodel/AlignmentViewport.java b/src/jalview/viewmodel/AlignmentViewport.java index d6aa400..c4ae76d 100644 --- a/src/jalview/viewmodel/AlignmentViewport.java +++ b/src/jalview/viewmodel/AlignmentViewport.java @@ -20,17 +20,6 @@ */ package jalview.viewmodel; -import java.awt.Color; -import java.util.ArrayDeque; -import java.util.ArrayList; -import java.util.BitSet; -import java.util.Deque; -import java.util.HashMap; -import java.util.Hashtable; -import java.util.List; -import java.util.Map; -import java.util.Set; - import jalview.analysis.AnnotationSorter.SequenceAnnotationOrder; import jalview.analysis.Conservation; import jalview.api.AlignCalcManagerI; @@ -67,6 +56,17 @@ import jalview.workers.ComplementConsensusThread; import jalview.workers.ConsensusThread; import jalview.workers.StrucConsensusThread; +import java.awt.Color; +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.BitSet; +import java.util.Deque; +import java.util.HashMap; +import java.util.Hashtable; +import java.util.List; +import java.util.Map; +import java.util.Set; + /** * base class holding visualization and analysis attributes and common logic for * an active alignment view displayed in the GUI @@ -75,7 +75,7 @@ import jalview.workers.StrucConsensusThread; * */ public abstract class AlignmentViewport implements AlignViewportI, - ViewStyleI, CommandListener, VamsasSource + CommandListener, VamsasSource { protected ViewStyleI viewStyle = new ViewStyle(); @@ -95,6 +95,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @param name * @see jalview.api.ViewStyleI#setFontName(java.lang.String) */ + @Override public void setFontName(String name) { viewStyle.setFontName(name); @@ -104,6 +105,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @param style * @see jalview.api.ViewStyleI#setFontStyle(int) */ + @Override public void setFontStyle(int style) { viewStyle.setFontStyle(style); @@ -113,6 +115,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @param size * @see jalview.api.ViewStyleI#setFontSize(int) */ + @Override public void setFontSize(int size) { viewStyle.setFontSize(size); @@ -122,6 +125,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @return * @see jalview.api.ViewStyleI#getFontStyle() */ + @Override public int getFontStyle() { return viewStyle.getFontStyle(); @@ -131,6 +135,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @return * @see jalview.api.ViewStyleI#getFontName() */ + @Override public String getFontName() { return viewStyle.getFontName(); @@ -140,6 +145,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @return * @see jalview.api.ViewStyleI#getFontSize() */ + @Override public int getFontSize() { return viewStyle.getFontSize(); @@ -149,6 +155,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @param upperCasebold * @see jalview.api.ViewStyleI#setUpperCasebold(boolean) */ + @Override public void setUpperCasebold(boolean upperCasebold) { viewStyle.setUpperCasebold(upperCasebold); @@ -158,6 +165,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @return * @see jalview.api.ViewStyleI#isUpperCasebold() */ + @Override public boolean isUpperCasebold() { return viewStyle.isUpperCasebold(); @@ -167,6 +175,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @return * @see jalview.api.ViewStyleI#isSeqNameItalics() */ + @Override public boolean isSeqNameItalics() { return viewStyle.isSeqNameItalics(); @@ -176,6 +185,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @param colourByReferenceSeq * @see jalview.api.ViewStyleI#setColourByReferenceSeq(boolean) */ + @Override public void setColourByReferenceSeq(boolean colourByReferenceSeq) { viewStyle.setColourByReferenceSeq(colourByReferenceSeq); @@ -185,6 +195,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @param b * @see jalview.api.ViewStyleI#setColourAppliesToAllGroups(boolean) */ + @Override public void setColourAppliesToAllGroups(boolean b) { viewStyle.setColourAppliesToAllGroups(b); @@ -194,6 +205,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @return * @see jalview.api.ViewStyleI#getColourAppliesToAllGroups() */ + @Override public boolean getColourAppliesToAllGroups() { return viewStyle.getColourAppliesToAllGroups(); @@ -203,6 +215,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @return * @see jalview.api.ViewStyleI#getAbovePIDThreshold() */ + @Override public boolean getAbovePIDThreshold() { return viewStyle.getAbovePIDThreshold(); @@ -212,6 +225,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @param inc * @see jalview.api.ViewStyleI#setIncrement(int) */ + @Override public void setIncrement(int inc) { viewStyle.setIncrement(inc); @@ -221,6 +235,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @return * @see jalview.api.ViewStyleI#getIncrement() */ + @Override public int getIncrement() { return viewStyle.getIncrement(); @@ -230,6 +245,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @param b * @see jalview.api.ViewStyleI#setConservationSelected(boolean) */ + @Override public void setConservationSelected(boolean b) { viewStyle.setConservationSelected(b); @@ -239,6 +255,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @param show * @see jalview.api.ViewStyleI#setShowHiddenMarkers(boolean) */ + @Override public void setShowHiddenMarkers(boolean show) { viewStyle.setShowHiddenMarkers(show); @@ -248,6 +265,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @return * @see jalview.api.ViewStyleI#getShowHiddenMarkers() */ + @Override public boolean getShowHiddenMarkers() { return viewStyle.getShowHiddenMarkers(); @@ -257,6 +275,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @param b * @see jalview.api.ViewStyleI#setScaleRightWrapped(boolean) */ + @Override public void setScaleRightWrapped(boolean b) { viewStyle.setScaleRightWrapped(b); @@ -266,6 +285,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @param b * @see jalview.api.ViewStyleI#setScaleLeftWrapped(boolean) */ + @Override public void setScaleLeftWrapped(boolean b) { viewStyle.setScaleLeftWrapped(b); @@ -275,6 +295,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @param b * @see jalview.api.ViewStyleI#setScaleAboveWrapped(boolean) */ + @Override public void setScaleAboveWrapped(boolean b) { viewStyle.setScaleAboveWrapped(b); @@ -284,6 +305,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @return * @see jalview.api.ViewStyleI#getScaleLeftWrapped() */ + @Override public boolean getScaleLeftWrapped() { return viewStyle.getScaleLeftWrapped(); @@ -293,6 +315,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @return * @see jalview.api.ViewStyleI#getScaleAboveWrapped() */ + @Override public boolean getScaleAboveWrapped() { return viewStyle.getScaleAboveWrapped(); @@ -302,6 +325,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @return * @see jalview.api.ViewStyleI#getScaleRightWrapped() */ + @Override public boolean getScaleRightWrapped() { return viewStyle.getScaleRightWrapped(); @@ -311,6 +335,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @param b * @see jalview.api.ViewStyleI#setAbovePIDThreshold(boolean) */ + @Override public void setAbovePIDThreshold(boolean b) { viewStyle.setAbovePIDThreshold(b); @@ -320,6 +345,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @param thresh * @see jalview.api.ViewStyleI#setThreshold(int) */ + @Override public void setThreshold(int thresh) { viewStyle.setThreshold(thresh); @@ -329,6 +355,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @return * @see jalview.api.ViewStyleI#getThreshold() */ + @Override public int getThreshold() { return viewStyle.getThreshold(); @@ -338,6 +365,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @return * @see jalview.api.ViewStyleI#getShowJVSuffix() */ + @Override public boolean getShowJVSuffix() { return viewStyle.getShowJVSuffix(); @@ -347,6 +375,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @param b * @see jalview.api.ViewStyleI#setShowJVSuffix(boolean) */ + @Override public void setShowJVSuffix(boolean b) { viewStyle.setShowJVSuffix(b); @@ -356,6 +385,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @param state * @see jalview.api.ViewStyleI#setWrapAlignment(boolean) */ + @Override public void setWrapAlignment(boolean state) { viewStyle.setWrapAlignment(state); @@ -365,6 +395,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @param state * @see jalview.api.ViewStyleI#setShowText(boolean) */ + @Override public void setShowText(boolean state) { viewStyle.setShowText(state); @@ -374,6 +405,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @param state * @see jalview.api.ViewStyleI#setRenderGaps(boolean) */ + @Override public void setRenderGaps(boolean state) { viewStyle.setRenderGaps(state); @@ -383,6 +415,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @return * @see jalview.api.ViewStyleI#getColourText() */ + @Override public boolean getColourText() { return viewStyle.getColourText(); @@ -392,6 +425,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @param state * @see jalview.api.ViewStyleI#setColourText(boolean) */ + @Override public void setColourText(boolean state) { viewStyle.setColourText(state); @@ -401,6 +435,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @return * @see jalview.api.ViewStyleI#getWrapAlignment() */ + @Override public boolean getWrapAlignment() { return viewStyle.getWrapAlignment(); @@ -410,6 +445,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @return * @see jalview.api.ViewStyleI#getShowText() */ + @Override public boolean getShowText() { return viewStyle.getShowText(); @@ -419,6 +455,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @return * @see jalview.api.ViewStyleI#getWrappedWidth() */ + @Override public int getWrappedWidth() { return viewStyle.getWrappedWidth(); @@ -428,6 +465,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @param w * @see jalview.api.ViewStyleI#setWrappedWidth(int) */ + @Override public void setWrappedWidth(int w) { viewStyle.setWrappedWidth(w); @@ -437,6 +475,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @return * @see jalview.api.ViewStyleI#getCharHeight() */ + @Override public int getCharHeight() { return viewStyle.getCharHeight(); @@ -446,6 +485,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @param h * @see jalview.api.ViewStyleI#setCharHeight(int) */ + @Override public void setCharHeight(int h) { viewStyle.setCharHeight(h); @@ -455,6 +495,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @return * @see jalview.api.ViewStyleI#getCharWidth() */ + @Override public int getCharWidth() { return viewStyle.getCharWidth(); @@ -464,6 +505,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @param w * @see jalview.api.ViewStyleI#setCharWidth(int) */ + @Override public void setCharWidth(int w) { viewStyle.setCharWidth(w); @@ -473,6 +515,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @return * @see jalview.api.ViewStyleI#getShowBoxes() */ + @Override public boolean getShowBoxes() { return viewStyle.getShowBoxes(); @@ -482,6 +525,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @return * @see jalview.api.ViewStyleI#getShowUnconserved() */ + @Override public boolean getShowUnconserved() { return viewStyle.getShowUnconserved(); @@ -491,6 +535,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @param showunconserved * @see jalview.api.ViewStyleI#setShowUnconserved(boolean) */ + @Override public void setShowUnconserved(boolean showunconserved) { viewStyle.setShowUnconserved(showunconserved); @@ -500,21 +545,13 @@ public abstract class AlignmentViewport implements AlignViewportI, * @param default1 * @see jalview.api.ViewStyleI#setSeqNameItalics(boolean) */ + @Override public void setSeqNameItalics(boolean default1) { viewStyle.setSeqNameItalics(default1); } /** - * @param selected - * @see jalview.api.ViewStyleI#setShowSeqFeaturesHeight(boolean) - */ - public void setShowSeqFeaturesHeight(boolean selected) - { - viewStyle.setShowSeqFeaturesHeight(selected); - } - - /** * alignment displayed in the viewport. Please use get/setter */ protected AlignmentI alignment; @@ -549,7 +586,6 @@ public abstract class AlignmentViewport implements AlignViewportI, return isDataset; } - private Map hiddenRepSequences; protected ColumnSelection colSel = new ColumnSelection(); @@ -562,12 +598,11 @@ public abstract class AlignmentViewport implements AlignViewportI, protected ColourSchemeI globalColourScheme = null; - @Override public void setGlobalColourScheme(ColourSchemeI cs) { // TODO: logic refactored from AlignFrame changeColour - - // autorecalc stuff should be changed to rely on the worker system + // TODO: autorecalc stuff should be changed to rely on the worker system // check to see if we should implement a changeColour(cs) method rather than // put th logic in here // - means that caller decides if they want to just modify state and defer @@ -639,7 +674,6 @@ public abstract class AlignmentViewport implements AlignViewportI, } } } - } @Override @@ -988,7 +1022,6 @@ public abstract class AlignmentViewport implements AlignViewportI, */ public boolean sortByTree = false; - /** * * @@ -1064,12 +1097,10 @@ public abstract class AlignmentViewport implements AlignViewportI, // hasHiddenColumns = colSel.hasHiddenColumns(); } - protected boolean hasHiddenRows = false; - @Override public boolean hasHiddenRows() { - return hasHiddenRows; + return alignment.getHiddenSequences().getSize() > 0; } protected SequenceGroup selectionGroup; @@ -1162,7 +1193,7 @@ public abstract class AlignmentViewport implements AlignViewportI, */ public boolean isColSelChanged(boolean b) { - int hc = (colSel == null || colSel.size() == 0) ? -1 : colSel + int hc = (colSel == null || colSel.isEmpty()) ? -1 : colSel .hashCode(); if (hc != -1 && hc != colselhash) { @@ -1257,7 +1288,7 @@ public abstract class AlignmentViewport implements AlignViewportI, public void hideSelectedColumns() { - if (colSel.size() < 1) + if (colSel.isEmpty()) { return; } @@ -1308,7 +1339,6 @@ public abstract class AlignmentViewport implements AlignViewportI, setSequenceAnnotationsVisible(seq, true); } - hasHiddenRows = false; hiddenRepSequences = null; firePropertyChange("alignment", null, alignment.getSequences()); @@ -1321,8 +1351,7 @@ public abstract class AlignmentViewport implements AlignViewportI, public void showSequence(int index) { List tmp = alignment.getHiddenSequences().showSequence( - index, - hiddenRepSequences); + index, hiddenRepSequences); if (tmp.size() > 0) { if (selectionGroup == null) @@ -1336,12 +1365,6 @@ public abstract class AlignmentViewport implements AlignViewportI, selectionGroup.addSequence(seq, false); setSequenceAnnotationsVisible(seq, true); } - // JBPNote: refactor: only update flag if we modified visiblity (used to - // do this regardless) - if (alignment.getHiddenSequences().getSize() < 1) - { - hasHiddenRows = false; - } firePropertyChange("alignment", null, alignment.getSequences()); sendSelection(); } @@ -1370,7 +1393,6 @@ public abstract class AlignmentViewport implements AlignViewportI, alignment.getHiddenSequences().hideSequence(seq[i]); setSequenceAnnotationsVisible(seq[i], false); } - hasHiddenRows = true; firePropertyChange("alignment", null, alignment.getSequences()); } } @@ -1430,8 +1452,9 @@ public abstract class AlignmentViewport implements AlignViewportI, public boolean isHiddenRepSequence(SequenceI seq) { - return alignment.getSeqrep()==seq || (hiddenRepSequences != null - && hiddenRepSequences.containsKey(seq)); + return alignment.getSeqrep() == seq + || (hiddenRepSequences != null && hiddenRepSequences + .containsKey(seq)); } public SequenceGroup getRepresentedSequences(SequenceI seq) @@ -1453,7 +1476,6 @@ public abstract class AlignmentViewport implements AlignViewportI, colSel.invertColumnSelection(0, alignment.getWidth()); } - @Override public SequenceI[] getSelectionAsNewSequence() { @@ -1481,7 +1503,6 @@ public abstract class AlignmentViewport implements AlignViewportI, return sequences; } - @Override public SequenceI[] getSequenceSelection() { @@ -1497,16 +1518,13 @@ public abstract class AlignmentViewport implements AlignViewportI, return sequences; } - @Override - public CigarArray getViewAsCigars( - boolean selectedRegionOnly) + public CigarArray getViewAsCigars(boolean selectedRegionOnly) { return new CigarArray(alignment, colSel, (selectedRegionOnly ? selectionGroup : null)); } - @Override public jalview.datamodel.AlignmentView getAlignmentView( boolean selectedOnly) @@ -1514,7 +1532,6 @@ public abstract class AlignmentViewport implements AlignViewportI, return getAlignmentView(selectedOnly, false); } - @Override public jalview.datamodel.AlignmentView getAlignmentView( boolean selectedOnly, boolean markGroups) @@ -1524,7 +1541,6 @@ public abstract class AlignmentViewport implements AlignViewportI, markGroups); } - @Override public String[] getViewAsString(boolean selectedRegionOnly) { @@ -1562,7 +1578,6 @@ public abstract class AlignmentViewport implements AlignViewportI, return selection; } - @Override public List getVisibleRegionBoundaries(int min, int max) { @@ -1590,8 +1605,7 @@ public abstract class AlignmentViewport implements AlignViewportI, } } - regions.add(new int[] - { start, end }); + regions.add(new int[] { start, end }); if (colSel != null && colSel.hasHiddenColumns()) { @@ -1606,19 +1620,23 @@ public abstract class AlignmentViewport implements AlignViewportI, } @Override - public List getVisibleAlignmentAnnotation(boolean selectedOnly) + public List getVisibleAlignmentAnnotation( + boolean selectedOnly) { ArrayList ala = new ArrayList(); AlignmentAnnotation[] aa; - if ((aa=alignment.getAlignmentAnnotation())!=null) + if ((aa = alignment.getAlignmentAnnotation()) != null) { - for (AlignmentAnnotation annot:aa) + for (AlignmentAnnotation annot : aa) { AlignmentAnnotation clone = new AlignmentAnnotation(annot); - if (selectedOnly && selectionGroup!=null) + if (selectedOnly && selectionGroup != null) + { + colSel.makeVisibleAnnotation(selectionGroup.getStartRes(), + selectionGroup.getEndRes(), clone); + } + else { - colSel.makeVisibleAnnotation(selectionGroup.getStartRes(), selectionGroup.getEndRes(),clone); - } else { colSel.makeVisibleAnnotation(clone); } ala.add(clone); @@ -1627,14 +1645,12 @@ public abstract class AlignmentViewport implements AlignViewportI, return ala; } - @Override public boolean isPadGaps() { return padGaps; } - @Override public void setPadGaps(boolean padGaps) { @@ -1962,6 +1978,7 @@ public abstract class AlignmentViewport implements AlignViewportI, } oldrfs.clear(); } + @Override public boolean isDisplayReferenceSeq() { @@ -2070,7 +2087,8 @@ public abstract class AlignmentViewport implements AlignViewportI, @Override public boolean areFeaturesDisplayed() { - return featuresDisplayed != null && featuresDisplayed.getRegisterdFeaturesCount()>0; + return featuresDisplayed != null + && featuresDisplayed.getRegisterdFeaturesCount() > 0; } /** @@ -2084,6 +2102,7 @@ public abstract class AlignmentViewport implements AlignViewportI, { viewStyle.setShowSequenceFeatures(b); } + @Override public boolean isShowSequenceFeatures() { @@ -2093,7 +2112,7 @@ public abstract class AlignmentViewport implements AlignViewportI, @Override public void setShowSequenceFeaturesHeight(boolean selected) { - viewStyle.setShowSeqFeaturesHeight(selected); + viewStyle.setShowSequenceFeaturesHeight(selected); } @Override @@ -2102,8 +2121,6 @@ public abstract class AlignmentViewport implements AlignViewportI, return viewStyle.isShowSequenceFeaturesHeight(); } - - @Override public void setShowAnnotation(boolean b) { @@ -2144,6 +2161,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @return * @see jalview.api.ViewStyleI#getTextColour() */ + @Override public Color getTextColour() { return viewStyle.getTextColour(); @@ -2153,6 +2171,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @return * @see jalview.api.ViewStyleI#getTextColour2() */ + @Override public Color getTextColour2() { return viewStyle.getTextColour2(); @@ -2162,6 +2181,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @return * @see jalview.api.ViewStyleI#getThresholdTextColour() */ + @Override public int getThresholdTextColour() { return viewStyle.getThresholdTextColour(); @@ -2171,6 +2191,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @return * @see jalview.api.ViewStyleI#isConservationColourSelected() */ + @Override public boolean isConservationColourSelected() { return viewStyle.isConservationColourSelected(); @@ -2180,6 +2201,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @return * @see jalview.api.ViewStyleI#isRenderGaps() */ + @Override public boolean isRenderGaps() { return viewStyle.isRenderGaps(); @@ -2189,23 +2211,17 @@ public abstract class AlignmentViewport implements AlignViewportI, * @return * @see jalview.api.ViewStyleI#isShowColourText() */ + @Override public boolean isShowColourText() { return viewStyle.isShowColourText(); } - /** - * @return - * @see jalview.api.ViewStyleI#isShowSeqFeaturesHeight() - */ - public boolean isShowSeqFeaturesHeight() - { - return viewStyle.isShowSeqFeaturesHeight(); - } /** * @param conservationColourSelected * @see jalview.api.ViewStyleI#setConservationColourSelected(boolean) */ + @Override public void setConservationColourSelected( boolean conservationColourSelected) { @@ -2216,6 +2232,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @param showColourText * @see jalview.api.ViewStyleI#setShowColourText(boolean) */ + @Override public void setShowColourText(boolean showColourText) { viewStyle.setShowColourText(showColourText); @@ -2225,6 +2242,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @param textColour * @see jalview.api.ViewStyleI#setTextColour(java.awt.Color) */ + @Override public void setTextColour(Color textColour) { viewStyle.setTextColour(textColour); @@ -2234,6 +2252,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @param thresholdTextColour * @see jalview.api.ViewStyleI#setThresholdTextColour(int) */ + @Override public void setThresholdTextColour(int thresholdTextColour) { viewStyle.setThresholdTextColour(thresholdTextColour); @@ -2243,6 +2262,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @param textColour2 * @see jalview.api.ViewStyleI#setTextColour2(java.awt.Color) */ + @Override public void setTextColour2(Color textColour2) { viewStyle.setTextColour2(textColour2); @@ -2270,6 +2290,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @return * @see jalview.api.ViewStyleI#getIdWidth() */ + @Override public int getIdWidth() { return viewStyle.getIdWidth(); @@ -2279,6 +2300,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @param i * @see jalview.api.ViewStyleI#setIdWidth(int) */ + @Override public void setIdWidth(int i) { viewStyle.setIdWidth(i); @@ -2288,6 +2310,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @return * @see jalview.api.ViewStyleI#isCentreColumnLabels() */ + @Override public boolean isCentreColumnLabels() { return viewStyle.isCentreColumnLabels(); @@ -2297,6 +2320,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @param centreColumnLabels * @see jalview.api.ViewStyleI#setCentreColumnLabels(boolean) */ + @Override public void setCentreColumnLabels(boolean centreColumnLabels) { viewStyle.setCentreColumnLabels(centreColumnLabels); @@ -2306,6 +2330,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @param showdbrefs * @see jalview.api.ViewStyleI#setShowDBRefs(boolean) */ + @Override public void setShowDBRefs(boolean showdbrefs) { viewStyle.setShowDBRefs(showdbrefs); @@ -2315,6 +2340,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @return * @see jalview.api.ViewStyleI#isShowDBRefs() */ + @Override public boolean isShowDBRefs() { return viewStyle.isShowDBRefs(); @@ -2324,6 +2350,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @return * @see jalview.api.ViewStyleI#isShowNPFeats() */ + @Override public boolean isShowNPFeats() { return viewStyle.isShowNPFeats(); @@ -2333,6 +2360,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * @param shownpfeats * @see jalview.api.ViewStyleI#setShowNPFeats(boolean) */ + @Override public void setShowNPFeats(boolean shownpfeats) { viewStyle.setShowNPFeats(shownpfeats); @@ -2356,7 +2384,8 @@ public abstract class AlignmentViewport implements AlignViewportI, protected void broadcastCommand(CommandI command, boolean undo) { - getStructureSelectionManager().commandPerformed(command, undo, getVamsasSource()); + getStructureSelectionManager().commandPerformed(command, undo, + getVamsasSource()); } /** @@ -2464,6 +2493,7 @@ public abstract class AlignmentViewport implements AlignViewportI, return startRes; } + @Override public int getEndRes() { return endRes; @@ -2527,21 +2557,21 @@ public abstract class AlignmentViewport implements AlignViewportI, */ protected int findComplementScrollTarget(SearchResults sr) { - final AlignViewportI codingComplement = getCodingComplement(); - if (codingComplement == null || !codingComplement.isFollowHighlight()) + final AlignViewportI complement = getCodingComplement(); + if (complement == null || !complement.isFollowHighlight()) { return 0; } boolean iAmProtein = !getAlignment().isNucleotide(); - AlignmentI proteinAlignment = iAmProtein ? getAlignment() - : codingComplement.getAlignment(); + AlignmentI proteinAlignment = iAmProtein ? getAlignment() : complement + .getAlignment(); if (proteinAlignment == null) { return 0; } final Set mappings = proteinAlignment .getCodonFrames(); - + /* * Heuristic: find the first mapped sequence (if any) with a non-gapped * residue in the middle column of the visible region. Scroll the @@ -2549,10 +2579,21 @@ public abstract class AlignmentViewport implements AlignViewportI, */ int seqOffset = 0; SequenceI sequence = null; + + /* + * locate 'middle' column (true middle if an odd number visible, left of + * middle if an even number visible) + */ int middleColumn = getStartRes() + (getEndRes() - getStartRes()) / 2; final HiddenSequences hiddenSequences = getAlignment() .getHiddenSequences(); - for (int seqNo = getStartSeq(); seqNo < getEndSeq(); seqNo++, seqOffset++) + + /* + * searching to the bottom of the alignment gives smoother scrolling across + * all gapped visible regions + */ + int lastSeq = alignment.getHeight() - 1; + for (int seqNo = getStartSeq(); seqNo < lastSeq; seqNo++, seqOffset++) { sequence = getAlignment().getSequenceAt(seqNo); if (hiddenSequences != null && hiddenSequences.isHidden(sequence)) @@ -2570,7 +2611,7 @@ public abstract class AlignmentViewport implements AlignViewportI, break; } } - + if (sequence == null) { /*