X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fviewmodel%2FAlignmentViewport.java;h=67db6fcc48c096a8b53fb4511661bcaf04434cf7;hb=67f546e39d0c247fef34a5fbb7ac841be7bae5be;hp=0fa4a3c55e05a15eae76b327e0a8d5be53a6e085;hpb=5b977aa5b8443f3a5e1bfdc1ef84bf1c4b91631f;p=jalview.git diff --git a/src/jalview/viewmodel/AlignmentViewport.java b/src/jalview/viewmodel/AlignmentViewport.java index 0fa4a3c..67db6fc 100644 --- a/src/jalview/viewmodel/AlignmentViewport.java +++ b/src/jalview/viewmodel/AlignmentViewport.java @@ -20,25 +20,27 @@ */ package jalview.viewmodel; -import jalview.analysis.AAFrequency; import jalview.analysis.Conservation; import jalview.api.AlignCalcManagerI; import jalview.api.AlignViewportI; import jalview.api.AlignmentViewPanel; +import jalview.api.FeaturesDisplayedI; +import jalview.api.ViewStyleI; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.AlignmentI; import jalview.datamodel.AlignmentView; import jalview.datamodel.Annotation; +import jalview.datamodel.CigarArray; import jalview.datamodel.ColumnSelection; import jalview.datamodel.Sequence; import jalview.datamodel.SequenceCollectionI; import jalview.datamodel.SequenceGroup; import jalview.datamodel.SequenceI; import jalview.schemes.Blosum62ColourScheme; -import jalview.schemes.ClustalxColourScheme; import jalview.schemes.ColourSchemeI; import jalview.schemes.PIDColourScheme; import jalview.schemes.ResidueProperties; +import jalview.viewmodel.styles.ViewStyle; import jalview.workers.AlignCalcManager; import jalview.workers.ConsensusThread; import jalview.workers.StrucConsensusThread; @@ -46,10 +48,10 @@ import jalview.workers.StrucConsensusThread; import java.awt.Color; import java.util.ArrayList; import java.util.BitSet; +import java.util.HashMap; import java.util.Hashtable; import java.util.List; import java.util.Map; -import java.util.Vector; /** * base class holding visualization and analysis attributes and common logic for @@ -58,152 +60,490 @@ import java.util.Vector; * @author jimp * */ -public abstract class AlignmentViewport implements AlignViewportI +public abstract class AlignmentViewport implements AlignViewportI, + ViewStyleI { + protected ViewStyleI viewStyle = new ViewStyle(); + /** - * alignment displayed in the viewport. Please use get/setter + * A viewport that hosts the cDna view of this (protein), or vice versa (if + * set). */ - protected AlignmentI alignment; + AlignViewportI codingComplement = null; - protected String sequenceSetID; + /** + * @param name + * @see jalview.api.ViewStyleI#setFontName(java.lang.String) + */ + public void setFontName(String name) + { + viewStyle.setFontName(name); + } /** - * probably unused indicator that view is of a dataset rather than an - * alignment + * @param style + * @see jalview.api.ViewStyleI#setFontStyle(int) */ - protected boolean isDataset = false; + public void setFontStyle(int style) + { + viewStyle.setFontStyle(style); + } - private Map hiddenRepSequences; + /** + * @param size + * @see jalview.api.ViewStyleI#setFontSize(int) + */ + public void setFontSize(int size) + { + viewStyle.setFontSize(size); + } - protected ColumnSelection colSel = new ColumnSelection(); + /** + * @return + * @see jalview.api.ViewStyleI#getFontStyle() + */ + public int getFontStyle() + { + return viewStyle.getFontStyle(); + } - public boolean autoCalculateConsensus = true; + /** + * @return + * @see jalview.api.ViewStyleI#getFontName() + */ + public String getFontName() + { + return viewStyle.getFontName(); + } - protected boolean autoCalculateStrucConsensus = true; + /** + * @return + * @see jalview.api.ViewStyleI#getFontSize() + */ + public int getFontSize() + { + return viewStyle.getFontSize(); + } - protected boolean ignoreGapsInConsensusCalculation = false; + /** + * @param upperCasebold + * @see jalview.api.ViewStyleI#setUpperCasebold(boolean) + */ + public void setUpperCasebold(boolean upperCasebold) + { + viewStyle.setUpperCasebold(upperCasebold); + } - protected ColourSchemeI globalColourScheme = null; + /** + * @return + * @see jalview.api.ViewStyleI#isUpperCasebold() + */ + public boolean isUpperCasebold() + { + return viewStyle.isUpperCasebold(); + } /** - * gui state - changes to colour scheme propagated to all groups + * @return + * @see jalview.api.ViewStyleI#isSeqNameItalics() */ - private boolean colourAppliesToAllGroups; + public boolean isSeqNameItalics() + { + return viewStyle.isSeqNameItalics(); + } /** - * @param value - * indicating if subsequent colourscheme changes will be propagated - * to all groups + * @param colourByReferenceSeq + * @see jalview.api.ViewStyleI#setColourByReferenceSeq(boolean) + */ + public void setColourByReferenceSeq(boolean colourByReferenceSeq) + { + viewStyle.setColourByReferenceSeq(colourByReferenceSeq); + } + + /** + * @param b + * @see jalview.api.ViewStyleI#setColourAppliesToAllGroups(boolean) */ public void setColourAppliesToAllGroups(boolean b) { - colourAppliesToAllGroups = b; + viewStyle.setColourAppliesToAllGroups(b); } /** - * - * - * @return flag indicating if colourchanges propagated to all groups + * @return + * @see jalview.api.ViewStyleI#getColourAppliesToAllGroups() */ public boolean getColourAppliesToAllGroups() { - return colourAppliesToAllGroups; + return viewStyle.getColourAppliesToAllGroups(); } - boolean abovePIDThreshold = false; - /** - * GUI state - * - * @return true if percent identity threshold is applied to shading + * @return + * @see jalview.api.ViewStyleI#getAbovePIDThreshold() */ public boolean getAbovePIDThreshold() { - return abovePIDThreshold; + return viewStyle.getAbovePIDThreshold(); + } + + /** + * @param inc + * @see jalview.api.ViewStyleI#setIncrement(int) + */ + public void setIncrement(int inc) + { + viewStyle.setIncrement(inc); + } + + /** + * @return + * @see jalview.api.ViewStyleI#getIncrement() + */ + public int getIncrement() + { + return viewStyle.getIncrement(); } /** - * GUI state - * - * * @param b - * indicate if percent identity threshold is applied to shading + * @see jalview.api.ViewStyleI#setConservationSelected(boolean) */ - public void setAbovePIDThreshold(boolean b) + public void setConservationSelected(boolean b) + { + viewStyle.setConservationSelected(b); + } + + /** + * @param show + * @see jalview.api.ViewStyleI#setShowHiddenMarkers(boolean) + */ + public void setShowHiddenMarkers(boolean show) { - abovePIDThreshold = b; + viewStyle.setShowHiddenMarkers(show); } - int threshold; + /** + * @return + * @see jalview.api.ViewStyleI#getShowHiddenMarkers() + */ + public boolean getShowHiddenMarkers() + { + return viewStyle.getShowHiddenMarkers(); + } + + /** + * @param b + * @see jalview.api.ViewStyleI#setScaleRightWrapped(boolean) + */ + public void setScaleRightWrapped(boolean b) + { + viewStyle.setScaleRightWrapped(b); + } + + /** + * @param b + * @see jalview.api.ViewStyleI#setScaleLeftWrapped(boolean) + */ + public void setScaleLeftWrapped(boolean b) + { + viewStyle.setScaleLeftWrapped(b); + } + + /** + * @param b + * @see jalview.api.ViewStyleI#setScaleAboveWrapped(boolean) + */ + public void setScaleAboveWrapped(boolean b) + { + viewStyle.setScaleAboveWrapped(b); + } + + /** + * @return + * @see jalview.api.ViewStyleI#getScaleLeftWrapped() + */ + public boolean getScaleLeftWrapped() + { + return viewStyle.getScaleLeftWrapped(); + } + + /** + * @return + * @see jalview.api.ViewStyleI#getScaleAboveWrapped() + */ + public boolean getScaleAboveWrapped() + { + return viewStyle.getScaleAboveWrapped(); + } + + /** + * @return + * @see jalview.api.ViewStyleI#getScaleRightWrapped() + */ + public boolean getScaleRightWrapped() + { + return viewStyle.getScaleRightWrapped(); + } + + /** + * @param b + * @see jalview.api.ViewStyleI#setAbovePIDThreshold(boolean) + */ + public void setAbovePIDThreshold(boolean b) + { + viewStyle.setAbovePIDThreshold(b); + } /** - * DOCUMENT ME! - * * @param thresh - * DOCUMENT ME! + * @see jalview.api.ViewStyleI#setThreshold(int) */ public void setThreshold(int thresh) { - threshold = thresh; + viewStyle.setThreshold(thresh); } /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! + * @return + * @see jalview.api.ViewStyleI#getThreshold() */ public int getThreshold() { - return threshold; + return viewStyle.getThreshold(); } - int increment; + /** + * @return + * @see jalview.api.ViewStyleI#getShowJVSuffix() + */ + public boolean getShowJVSuffix() + { + return viewStyle.getShowJVSuffix(); + } /** - * - * @param inc - * set the scalar for bleaching colourschemes according to degree of - * conservation + * @param b + * @see jalview.api.ViewStyleI#setShowJVSuffix(boolean) */ - public void setIncrement(int inc) + public void setShowJVSuffix(boolean b) { - increment = inc; + viewStyle.setShowJVSuffix(b); } /** - * GUI State - * - * @return get scalar for bleaching colourschemes by conservation + * @param state + * @see jalview.api.ViewStyleI#setWrapAlignment(boolean) */ - public int getIncrement() + public void setWrapAlignment(boolean state) { - return increment; + viewStyle.setWrapAlignment(state); } - boolean conservationColourSelected = false; + /** + * @param state + * @see jalview.api.ViewStyleI#setShowText(boolean) + */ + public void setShowText(boolean state) + { + viewStyle.setShowText(state); + } /** - * GUI state - * - * @return true if conservation based shading is enabled + * @param state + * @see jalview.api.ViewStyleI#setRenderGaps(boolean) */ - public boolean getConservationSelected() + public void setRenderGaps(boolean state) { - return conservationColourSelected; + viewStyle.setRenderGaps(state); } /** - * GUI state - * - * @param b - * enable conservation based shading + * @return + * @see jalview.api.ViewStyleI#getColourText() */ - public void setConservationSelected(boolean b) + public boolean getColourText() + { + return viewStyle.getColourText(); + } + + /** + * @param state + * @see jalview.api.ViewStyleI#setColourText(boolean) + */ + public void setColourText(boolean state) { - conservationColourSelected = b; + viewStyle.setColourText(state); + } + + /** + * @return + * @see jalview.api.ViewStyleI#getWrapAlignment() + */ + public boolean getWrapAlignment() + { + return viewStyle.getWrapAlignment(); + } + + /** + * @return + * @see jalview.api.ViewStyleI#getShowText() + */ + public boolean getShowText() + { + return viewStyle.getShowText(); + } + + /** + * @return + * @see jalview.api.ViewStyleI#getWrappedWidth() + */ + public int getWrappedWidth() + { + return viewStyle.getWrappedWidth(); + } + + /** + * @param w + * @see jalview.api.ViewStyleI#setWrappedWidth(int) + */ + public void setWrappedWidth(int w) + { + viewStyle.setWrappedWidth(w); + } + + /** + * @return + * @see jalview.api.ViewStyleI#getCharHeight() + */ + public int getCharHeight() + { + return viewStyle.getCharHeight(); + } + + /** + * @param h + * @see jalview.api.ViewStyleI#setCharHeight(int) + */ + public void setCharHeight(int h) + { + viewStyle.setCharHeight(h); + } + + /** + * @return + * @see jalview.api.ViewStyleI#getCharWidth() + */ + public int getCharWidth() + { + return viewStyle.getCharWidth(); + } + + /** + * @param w + * @see jalview.api.ViewStyleI#setCharWidth(int) + */ + public void setCharWidth(int w) + { + viewStyle.setCharWidth(w); + } + + /** + * @return + * @see jalview.api.ViewStyleI#getShowBoxes() + */ + public boolean getShowBoxes() + { + return viewStyle.getShowBoxes(); + } + + /** + * @return + * @see jalview.api.ViewStyleI#getShowUnconserved() + */ + public boolean getShowUnconserved() + { + return viewStyle.getShowUnconserved(); + } + + /** + * @param showunconserved + * @see jalview.api.ViewStyleI#setShowUnconserved(boolean) + */ + public void setShowUnconserved(boolean showunconserved) + { + viewStyle.setShowUnconserved(showunconserved); + } + + /** + * @param default1 + * @see jalview.api.ViewStyleI#setSeqNameItalics(boolean) + */ + 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; + + @Override + public AlignmentI getAlignment() + { + return alignment; } @Override + public char getGapCharacter() + { + return alignment.getGapCharacter(); + } + + protected String sequenceSetID; + + /** + * probably unused indicator that view is of a dataset rather than an + * alignment + */ + protected boolean isDataset = false; + + public void setDataset(boolean b) + { + isDataset = b; + } + + public boolean isDataset() + { + return isDataset; + } + + + private Map hiddenRepSequences; + + protected ColumnSelection colSel = new ColumnSelection(); + + public boolean autoCalculateConsensus = true; + + protected boolean autoCalculateStrucConsensus = true; + + protected boolean ignoreGapsInConsensusCalculation = false; + + protected ColourSchemeI globalColourScheme = null; + + + @Override public void setGlobalColourScheme(ColourSchemeI cs) { // TODO: logic refactored from AlignFrame changeColour - @@ -222,7 +562,8 @@ public abstract class AlignmentViewport implements AlignViewportI || cs instanceof Blosum62ColourScheme) { recalc = true; - cs.setThreshold(threshold, ignoreGapsInConsensusCalculation); + cs.setThreshold(viewStyle.getThreshold(), + ignoreGapsInConsensusCalculation); } else { @@ -249,12 +590,13 @@ public abstract class AlignmentViewport implements AlignViewportI if (getAbovePIDThreshold() || cs instanceof PIDColourScheme || cs instanceof Blosum62ColourScheme) { - sg.cs.setThreshold(threshold, getIgnoreGapsConsensus()); + sg.cs.setThreshold(viewStyle.getThreshold(), + isIgnoreGapsConsensus()); recalc = true; } else { - sg.cs.setThreshold(0, getIgnoreGapsConsensus()); + sg.cs.setThreshold(0, isIgnoreGapsConsensus()); } if (getConservationSelected()) @@ -447,7 +789,9 @@ public abstract class AlignmentViewport implements AlignViewportI AlignmentAnnotation alignmentAnnotation) { if (!alignmentAnnotation.autoCalculated) + { return false; + } if (calculator.workingInvolvedWith(alignmentAnnotation)) { // System.err.println("grey out ("+alignmentAnnotation.label+")"); @@ -576,11 +920,6 @@ public abstract class AlignmentViewport implements AlignViewportI } /** - * show non-conserved residues only - */ - protected boolean showUnconserved = false; - - /** * when set, updateAlignment will always ensure sequences are of equal length */ private boolean padGaps = false; @@ -590,24 +929,6 @@ public abstract class AlignmentViewport implements AlignViewportI */ public boolean sortByTree = false; - public boolean getShowUnconserved() - { - return showUnconserved; - } - - public void setShowUnconserved(boolean showunconserved) - { - showUnconserved = showunconserved; - } - - /** - * @param showNonconserved - * the showUnconserved to set - */ - public void setShowunconserved(boolean displayNonconserved) - { - this.showUnconserved = displayNonconserved; - } /** * @@ -636,10 +957,6 @@ public abstract class AlignmentViewport implements AlignViewportI public void setHiddenColumns(ColumnSelection colsel) { this.colSel = colsel; - if (colSel.getHiddenColumns() != null) - { - hasHiddenColumns = true; - } } @Override @@ -648,9 +965,14 @@ public abstract class AlignmentViewport implements AlignViewportI return colSel; } + @Override public void setColumnSelection(ColumnSelection colSel) { this.colSel = colSel; + if (colSel != null) + { + updateHiddenColumns(); + } } /** @@ -670,15 +992,22 @@ public abstract class AlignmentViewport implements AlignViewportI this.hiddenRepSequences = hiddenRepSequences; } - protected boolean hasHiddenColumns = false; + @Override + public boolean hasHiddenColumns() + { + return colSel != null && colSel.hasHiddenColumns(); + } public void updateHiddenColumns() { - hasHiddenColumns = colSel.getHiddenColumns() != null; + // this method doesn't really do anything now. But - it could, since a + // column Selection could be in the process of modification + // hasHiddenColumns = colSel.hasHiddenColumns(); } protected boolean hasHiddenRows = false; + @Override public boolean hasHiddenRows() { return hasHiddenRows; @@ -696,6 +1025,7 @@ public abstract class AlignmentViewport implements AlignViewportI sequenceSetID = new String(newid); } + @Override public String getSequenceSetId() { if (sequenceSetID == null) @@ -786,7 +1116,7 @@ public abstract class AlignmentViewport implements AlignViewportI } @Override - public boolean getIgnoreGapsConsensus() + public boolean isIgnoreGapsConsensus() { return ignoreGapsInConsensusCalculation; } @@ -803,7 +1133,7 @@ public abstract class AlignmentViewport implements AlignViewportI protected boolean showConsensus = true; - Hashtable sequenceColours; + private Map sequenceColours = new HashMap(); /** * Property change listener for changes in alignment @@ -857,7 +1187,6 @@ public abstract class AlignmentViewport implements AlignViewportI colSel.hideSelectedColumns(); setSelectionGroup(null); - hasHiddenColumns = true; } public void hideColumns(int start, int end) @@ -870,23 +1199,17 @@ public abstract class AlignmentViewport implements AlignViewportI { colSel.hideColumns(start, end); } - - hasHiddenColumns = true; } public void showColumn(int col) { colSel.revealHiddenColumns(col); - if (colSel.getHiddenColumns() == null) - { - hasHiddenColumns = false; - } + } public void showAllHiddenColumns() { colSel.revealAllHiddenColumns(); - hasHiddenColumns = false; } // common hide/show seq stuff @@ -899,11 +1222,12 @@ public abstract class AlignmentViewport implements AlignViewportI selectionGroup = new SequenceGroup(); selectionGroup.setEndRes(alignment.getWidth() - 1); } - Vector tmp = alignment.getHiddenSequences().showAll( + List tmp = alignment.getHiddenSequences().showAll( hiddenRepSequences); - for (int t = 0; t < tmp.size(); t++) + for (SequenceI seq : tmp) { - selectionGroup.addSequence((SequenceI) tmp.elementAt(t), false); + selectionGroup.addSequence(seq, false); + setSequenceAnnotationsVisible(seq, true); } hasHiddenRows = false; @@ -918,7 +1242,8 @@ public abstract class AlignmentViewport implements AlignViewportI public void showSequence(int index) { - Vector tmp = alignment.getHiddenSequences().showSequence(index, + List tmp = alignment.getHiddenSequences().showSequence( + index, hiddenRepSequences); if (tmp.size() > 0) { @@ -928,9 +1253,10 @@ public abstract class AlignmentViewport implements AlignViewportI selectionGroup.setEndRes(alignment.getWidth() - 1); } - for (int t = 0; t < tmp.size(); t++) + for (SequenceI seq : tmp) { - selectionGroup.addSequence((SequenceI) tmp.elementAt(t), false); + selectionGroup.addSequence(seq, false); + setSequenceAnnotationsVisible(seq, true); } // JBPNote: refactor: only update flag if we modified visiblity (used to // do this regardless) @@ -964,12 +1290,30 @@ public abstract class AlignmentViewport implements AlignViewportI for (int i = 0; i < seq.length; i++) { alignment.getHiddenSequences().hideSequence(seq[i]); + setSequenceAnnotationsVisible(seq[i], false); } hasHiddenRows = true; firePropertyChange("alignment", null, alignment.getSequences()); } } + /** + * Set visibility for any annotations for the given sequence. + * + * @param sequenceI + */ + protected void setSequenceAnnotationsVisible(SequenceI sequenceI, + boolean visible) + { + for (AlignmentAnnotation ann : alignment.getAlignmentAnnotation()) + { + if (ann.sequenceRef == sequenceI) + { + ann.visible = visible; + } + } + } + public void hideRepSequences(SequenceI repSequence, SequenceGroup sg) { int sSize = sg.getSize(); @@ -1008,8 +1352,8 @@ public abstract class AlignmentViewport implements AlignViewportI public boolean isHiddenRepSequence(SequenceI seq) { - return hiddenRepSequences != null - && hiddenRepSequences.containsKey(seq); + return alignment.getSeqrep()==seq || (hiddenRepSequences != null + && hiddenRepSequences.containsKey(seq)); } public SequenceGroup getRepresentedSequences(SequenceI seq) @@ -1018,32 +1362,21 @@ public abstract class AlignmentViewport implements AlignViewportI : hiddenRepSequences.get(seq)); } + @Override public int adjustForHiddenSeqs(int alignmentIndex) { return alignment.getHiddenSequences().adjustForHiddenSeqs( alignmentIndex); } - // Selection manipulation - /** - * broadcast selection to any interested parties - */ - public abstract void sendSelection(); - + @Override public void invertColumnSelection() { colSel.invertColumnSelection(0, alignment.getWidth()); } - /** - * This method returns an array of new SequenceI objects derived from the - * whole alignment or just the current selection with start and end points - * adjusted - * - * @note if you need references to the actual SequenceI objects in the - * alignment or currently selected then use getSequenceSelection() - * @return selection as new sequenceI objects - */ + + @Override public SequenceI[] getSelectionAsNewSequence() { SequenceI[] sequences; @@ -1072,12 +1405,7 @@ public abstract class AlignmentViewport implements AlignViewportI return sequences; } - /** - * get the currently selected sequence objects or all the sequences in the - * alignment. - * - * @return array of references to sequence objects - */ + @Override public SequenceI[] getSequenceSelection() { @@ -1093,31 +1421,16 @@ public abstract class AlignmentViewport implements AlignViewportI return sequences; } - /** - * This method returns the visible alignment as text, as seen on the GUI, ie - * if columns are hidden they will not be returned in the result. Use this for - * calculating trees, PCA, redundancy etc on views which contain hidden - * columns. - * - * @return String[] - */ + @Override - public jalview.datamodel.CigarArray getViewAsCigars( + public CigarArray getViewAsCigars( boolean selectedRegionOnly) { - return new jalview.datamodel.CigarArray(alignment, - (hasHiddenColumns ? colSel : null), + return new CigarArray(alignment, colSel, (selectedRegionOnly ? selectionGroup : null)); } - /** - * return a compact representation of the current alignment selection to pass - * to an analysis function - * - * @param selectedOnly - * boolean true to just return the selected view - * @return AlignmentView - */ + @Override public jalview.datamodel.AlignmentView getAlignmentView( boolean selectedOnly) @@ -1125,34 +1438,17 @@ public abstract class AlignmentViewport implements AlignViewportI return getAlignmentView(selectedOnly, false); } - /** - * return a compact representation of the current alignment selection to pass - * to an analysis function - * - * @param selectedOnly - * boolean true to just return the selected view - * @param markGroups - * boolean true to annotate the alignment view with groups on the - * alignment (and intersecting with selected region if selectedOnly - * is true) - * @return AlignmentView - */ + @Override public jalview.datamodel.AlignmentView getAlignmentView( boolean selectedOnly, boolean markGroups) { return new AlignmentView(alignment, colSel, selectionGroup, - hasHiddenColumns, selectedOnly, markGroups); + colSel != null && colSel.hasHiddenColumns(), selectedOnly, + markGroups); } - /** - * This method returns the visible alignment as text, as seen on the GUI, ie - * if columns are hidden they will not be returned in the result. Use this for - * calculating trees, PCA, redundancy etc on views which contain hidden - * columns. - * - * @return String[] - */ + @Override public String[] getViewAsString(boolean selectedRegionOnly) { @@ -1175,7 +1471,7 @@ public abstract class AlignmentViewport implements AlignViewportI } selection = new String[iSize]; - if (hasHiddenColumns) + if (colSel != null && colSel.hasHiddenColumns()) { selection = colSel.getVisibleSequenceStrings(start, end, seqs); } @@ -1190,24 +1486,17 @@ public abstract class AlignmentViewport implements AlignViewportI return selection; } - /** - * return visible region boundaries within given column range - * - * @param min - * first column (inclusive, from 0) - * @param max - * last column (exclusive) - * @return int[][] range of {start,end} visible positions - */ - public int[][] getVisibleRegionBoundaries(int min, int max) + + @Override + public List getVisibleRegionBoundaries(int min, int max) { - Vector regions = new Vector(); + ArrayList regions = new ArrayList(); int start = min; int end = max; do { - if (hasHiddenColumns) + if (colSel != null && colSel.hasHiddenColumns()) { if (start == 0) { @@ -1225,10 +1514,10 @@ public abstract class AlignmentViewport implements AlignViewportI } } - regions.addElement(new int[] + regions.add(new int[] { start, end }); - if (hasHiddenColumns) + if (colSel != null && colSel.hasHiddenColumns()) { start = colSel.adjustForHiddenColumns(end); start = colSel.getHiddenBoundaryLeft(start) + 1; @@ -1237,10 +1526,7 @@ public abstract class AlignmentViewport implements AlignViewportI int[][] startEnd = new int[regions.size()][2]; - regions.copyInto(startEnd); - - return startEnd; - + return regions; } @Override @@ -1265,18 +1551,15 @@ public abstract class AlignmentViewport implements AlignViewportI return ala; } - /** - * @return the padGaps - */ + + @Override public boolean isPadGaps() { return padGaps; } - /** - * @param padGaps - * the padGaps to set - */ + + @Override public void setPadGaps(boolean padGaps) { this.padGaps = padGaps; @@ -1288,6 +1571,7 @@ public abstract class AlignmentViewport implements AlignViewportI * * @param ap */ + @Override public void alignmentChanged(AlignmentViewPanel ap) { if (isPadGaps()) @@ -1449,6 +1733,7 @@ public abstract class AlignmentViewport implements AlignViewportI * * @see jalview.api.AlignViewportI#calcPanelHeight() */ + @Override public int calcPanelHeight() { // setHeight of panels @@ -1580,30 +1865,34 @@ public abstract class AlignmentViewport implements AlignViewportI } oldrfs.clear(); } + @Override + public boolean isDisplayReferenceSeq() + { + return alignment.hasSeqrep() && viewStyle.isDisplayReferenceSeq(); + } + + @Override + public void setDisplayReferenceSeq(boolean displayReferenceSeq) + { + viewStyle.setDisplayReferenceSeq(displayReferenceSeq); + } + + @Override + public boolean isColourByReferenceSeq() + { + return alignment.hasSeqrep() && viewStyle.isColourByReferenceSeq(); + } @Override public Color getSequenceColour(SequenceI seq) { - Color sqc = Color.white; - if (sequenceColours != null) - { - sqc = (Color) sequenceColours.get(seq); - if (sqc == null) - { - sqc = Color.white; - } - } - return sqc; + Color sqc = sequenceColours.get(seq); + return (sqc == null ? Color.white : sqc); } @Override public void setSequenceColour(SequenceI seq, Color col) { - if (sequenceColours == null) - { - sequenceColours = new Hashtable(); - } - if (col == null) { sequenceColours.remove(seq); @@ -1617,10 +1906,6 @@ public abstract class AlignmentViewport implements AlignViewportI @Override public void updateSequenceIdColours() { - if (sequenceColours == null) - { - sequenceColours = new Hashtable(); - } for (SequenceGroup sg : alignment.getGroups()) { if (sg.idColour != null) @@ -1636,6 +1921,325 @@ public abstract class AlignmentViewport implements AlignViewportI @Override public void clearSequenceColours() { - sequenceColours = null; + sequenceColours.clear(); }; + + @Override + public AlignViewportI getCodingComplement() + { + return this.codingComplement; + } + + /** + * Set this as the (cDna/protein) complement of the given viewport. Also + * ensures the reverse relationship is set on the given viewport. + */ + @Override + public void setCodingComplement(AlignViewportI av) + { + if (this == av) + { + System.err.println("Ignoring recursive setCodingComplement request"); + } + else + { + this.codingComplement = av; + // avoid infinite recursion! + if (av.getCodingComplement() != this) + { + av.setCodingComplement(this); + } + } + } + + @Override + public boolean isNucleotide() + { + return getAlignment() == null ? false : getAlignment().isNucleotide(); + } + + FeaturesDisplayedI featuresDisplayed = null; + + @Override + public FeaturesDisplayedI getFeaturesDisplayed() + { + return featuresDisplayed; + } + + @Override + public void setFeaturesDisplayed(FeaturesDisplayedI featuresDisplayedI) + { + featuresDisplayed = featuresDisplayedI; + } + + @Override + public boolean areFeaturesDisplayed() + { + return featuresDisplayed != null && featuresDisplayed.getRegisterdFeaturesCount()>0; + } + + /** + * set the flag + * + * @param b + * features are displayed if true + */ + @Override + public void setShowSequenceFeatures(boolean b) + { + viewStyle.setShowSequenceFeatures(b); + } + @Override + public boolean isShowSequenceFeatures() + { + return viewStyle.isShowSequenceFeatures(); + } + + @Override + public void setShowSequenceFeaturesHeight(boolean selected) + { + viewStyle.setShowSeqFeaturesHeight(selected); + } + + @Override + public boolean isShowSequenceFeaturesHeight() + { + return viewStyle.isShowSequenceFeaturesHeight(); + } + + + + @Override + public void setShowAnnotation(boolean b) + { + viewStyle.setShowAnnotation(b); + } + + @Override + public boolean isShowAnnotation() + { + return viewStyle.isShowAnnotation(); + } + + @Override + public boolean isRightAlignIds() + { + return viewStyle.isRightAlignIds(); + } + + @Override + public void setRightAlignIds(boolean rightAlignIds) + { + viewStyle.setRightAlignIds(rightAlignIds); + } + + @Override + public boolean getConservationSelected() + { + return viewStyle.getConservationSelected(); + } + + @Override + public void setShowBoxes(boolean state) + { + viewStyle.setShowBoxes(state); + } + + /** + * @return + * @see jalview.api.ViewStyleI#getTextColour() + */ + public Color getTextColour() + { + return viewStyle.getTextColour(); + } + + /** + * @return + * @see jalview.api.ViewStyleI#getTextColour2() + */ + public Color getTextColour2() + { + return viewStyle.getTextColour2(); + } + + /** + * @return + * @see jalview.api.ViewStyleI#getThresholdTextColour() + */ + public int getThresholdTextColour() + { + return viewStyle.getThresholdTextColour(); + } + + /** + * @return + * @see jalview.api.ViewStyleI#isConservationColourSelected() + */ + public boolean isConservationColourSelected() + { + return viewStyle.isConservationColourSelected(); + } + + /** + * @return + * @see jalview.api.ViewStyleI#isRenderGaps() + */ + public boolean isRenderGaps() + { + return viewStyle.isRenderGaps(); + } + + /** + * @return + * @see jalview.api.ViewStyleI#isShowColourText() + */ + 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) + */ + public void setConservationColourSelected( + boolean conservationColourSelected) + { + viewStyle.setConservationColourSelected(conservationColourSelected); + } + + /** + * @param showColourText + * @see jalview.api.ViewStyleI#setShowColourText(boolean) + */ + public void setShowColourText(boolean showColourText) + { + viewStyle.setShowColourText(showColourText); + } + + /** + * @param textColour + * @see jalview.api.ViewStyleI#setTextColour(java.awt.Color) + */ + public void setTextColour(Color textColour) + { + viewStyle.setTextColour(textColour); + } + + /** + * @param thresholdTextColour + * @see jalview.api.ViewStyleI#setThresholdTextColour(int) + */ + public void setThresholdTextColour(int thresholdTextColour) + { + viewStyle.setThresholdTextColour(thresholdTextColour); + } + + /** + * @param textColour2 + * @see jalview.api.ViewStyleI#setTextColour2(java.awt.Color) + */ + public void setTextColour2(Color textColour2) + { + viewStyle.setTextColour2(textColour2); + } + + @Override + public ViewStyleI getViewStyle() + { + return new ViewStyle(viewStyle); + } + + @Override + public void setViewStyle(ViewStyleI settingsForView) + { + viewStyle = new ViewStyle(settingsForView); + } + + @Override + public boolean sameStyle(ViewStyleI them) + { + return viewStyle.sameStyle(them); + } + + /** + * @return + * @see jalview.api.ViewStyleI#getIdWidth() + */ + public int getIdWidth() + { + return viewStyle.getIdWidth(); + } + + /** + * @param i + * @see jalview.api.ViewStyleI#setIdWidth(int) + */ + public void setIdWidth(int i) + { + viewStyle.setIdWidth(i); + } + + /** + * @return + * @see jalview.api.ViewStyleI#isCentreColumnLabels() + */ + public boolean isCentreColumnLabels() + { + return viewStyle.isCentreColumnLabels(); + } + + /** + * @param centreColumnLabels + * @see jalview.api.ViewStyleI#setCentreColumnLabels(boolean) + */ + public void setCentreColumnLabels(boolean centreColumnLabels) + { + viewStyle.setCentreColumnLabels(centreColumnLabels); + } + + /** + * @param showdbrefs + * @see jalview.api.ViewStyleI#setShowDBRefs(boolean) + */ + public void setShowDBRefs(boolean showdbrefs) + { + viewStyle.setShowDBRefs(showdbrefs); + } + + /** + * @return + * @see jalview.api.ViewStyleI#isShowDBRefs() + */ + public boolean isShowDBRefs() + { + return viewStyle.isShowDBRefs(); + } + + /** + * @return + * @see jalview.api.ViewStyleI#isShowNPFeats() + */ + public boolean isShowNPFeats() + { + return viewStyle.isShowNPFeats(); + } + + /** + * @param shownpfeats + * @see jalview.api.ViewStyleI#setShowNPFeats(boolean) + */ + public void setShowNPFeats(boolean shownpfeats) + { + viewStyle.setShowNPFeats(shownpfeats); + } }