2 * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3 * Copyright (C) $$Year-Rel$$ The Jalview Authors
5 * This file is part of Jalview.
7 * Jalview is free software: you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation, either version 3
10 * of the License, or (at your option) any later version.
12 * Jalview is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty
14 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
19 * The Jalview Authors are detailed in the 'AUTHORS' file.
21 package jalview.renderer;
23 import jalview.api.AlignViewportI;
24 import jalview.datamodel.SequenceGroup;
25 import jalview.datamodel.SequenceI;
26 import jalview.renderer.seqfeatures.FeatureColourFinder;
27 import jalview.schemes.ColourSchemeI;
29 import java.awt.Color;
31 public class ResidueColourFinder
33 private ResidueShaderI shader;
35 public ResidueColourFinder()
39 public ResidueColourFinder(AlignViewportI viewport, ColourSchemeI cs)
41 shader = new ResidueShader(cs);
42 // TODO what if consensus is still calculating - or changes?
43 shader.setConsensus(viewport.getSequenceConsensusHash());
47 * Get the colour of a residue in a sequence
50 * true if the viewport's Show Boxes setting is true
52 * the viewport's colour scheme
54 * all the groups which seq participates in
56 * the sequence containing the residue
58 * the position of the residue in the sequence
60 * FeatureColourFinder for the viewport
61 * @return colour of the residue
63 public Color getResidueColour(boolean showBoxes, ResidueShaderI colourScheme,
64 SequenceGroup[] allGroups,
65 final SequenceI seq, int position, FeatureColourFinder finder)
68 * override alignment colour scheme if one set on construction of this
72 colourScheme = shader;
74 Color col = getResidueBoxColour(showBoxes, colourScheme, allGroups, seq,
77 // if there's a FeatureColourFinder we might override the residue colour
78 // here with feature colouring
81 col = finder.findFeatureColour(col, seq, position);
87 * Get the residue colour without accounting for any features
90 * true if the viewport's Show Boxes setting is true
92 * the viewport's colour scheme
94 * all the groups which seq participates in
96 * the sequence containing the residue
98 * the position of the residue in the sequence
101 protected Color getResidueBoxColour(boolean showBoxes,
102 ResidueShaderI shader,
103 SequenceGroup[] allGroups,
104 SequenceI seq, int i)
106 SequenceGroup currentSequenceGroup = getCurrentSequenceGroup(allGroups,
108 if (currentSequenceGroup != null)
110 if (currentSequenceGroup.getDisplayBoxes())
112 return getBoxColour(currentSequenceGroup.getGroupColourScheme(),
118 return getBoxColour(shader, seq, i);
125 * Search all the groups for a sequence to find the one which a given res
129 * all the groups a sequence participates in
131 * the residue to search for
132 * @return a sequence group for res, or null if no sequence group applies
134 public SequenceGroup getCurrentSequenceGroup(SequenceGroup[] allGroups,
137 if (allGroups == null)
142 for (int i = 0; i < allGroups.length; i++)
144 if ((allGroups[i].getStartRes() <= res)
145 && (allGroups[i].getEndRes() >= res))
147 return (allGroups[i]);
158 * the viewport's colour scheme
160 * the sequence containing the residue
162 * the position of the residue in the sequence
164 public Color getBoxColour(ResidueShaderI shader, SequenceI seq, int i)
166 return shader.findColour(seq.getCharAt(i), i, seq);