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.viewmodel.styles;
23 import jalview.api.ViewStyleI;
25 import java.awt.Color;
28 * A container for holding alignment view properties. View properties are
29 * data-independent, which means they can be safely copied between views
30 * involving different alignment data without causing exceptions in the
36 public class ViewStyle implements ViewStyleI
38 private boolean abovePIDThreshold = false;
47 * gui state - changes to colour scheme propagated to all groups
49 private boolean colourAppliesToAllGroups;
52 * centre columnar annotation labels in displayed alignment annotation
54 boolean centreColumnLabels = false;
56 private boolean showdbrefs;
58 private boolean shownpfeats;
60 // --------END Structure Conservation
63 * colour according to the reference sequence defined on the alignment
65 private boolean colourByReferenceSeq = false;
67 boolean conservationColourSelected = false;
70 * show the reference sequence in the alignment view
72 private boolean displayReferenceSeq = false;
74 private int increment;
77 * display gap characters
79 boolean renderGaps = true;
81 private boolean rightAlignIds = false;
83 boolean scaleAboveWrapped = false;
85 boolean scaleLeftWrapped = true;
87 boolean scaleRightWrapped = true;
89 boolean seqNameItalics;
92 * show annotation tracks on the alignment
94 private boolean showAnnotation = true;
97 * render each residue in a coloured box
99 boolean showBoxes = true;
102 * Colour sequence text
104 boolean showColourText = false;
107 * show blue triangles
109 boolean showHiddenMarkers = true;
112 * show /start-end in ID panel
114 boolean showJVSuffix = true;
117 * scale features height according to score
119 boolean showSeqFeaturesHeight;
122 * display setting for showing/hiding sequence features on alignment view
124 boolean showSequenceFeatures = false;
127 * display sequence symbols
129 boolean showText = true;
132 * show non-conserved residues only
134 protected boolean showUnconserved = false;
136 Color textColour = Color.black;
138 Color textColour2 = Color.white;
141 * PID or consensus threshold
146 * threshold for switching between textColour & textColour2
148 int thresholdTextColour = 0;
151 * upper case characters in sequence are shown in bold
153 boolean upperCasebold = false;
156 * name of base font for view
158 private String fontName;
163 private int fontSize;
166 * If true, scale protein residues to 3 times width of cDNA bases (in
167 * SplitFrame views only)
169 private boolean scaleProteinAsCdna = true;
172 * if true, font changes to protein or cDNA are applied to both
173 * sides of a split screen
175 private boolean proteinFontAsCdna = true;
182 public ViewStyle(ViewStyleI vs)
184 setAbovePIDThreshold(vs.getAbovePIDThreshold());
185 setCentreColumnLabels(vs.isCentreColumnLabels());
186 setCharHeight(vs.getCharHeight());
187 setCharWidth(vs.getCharWidth());
188 setColourAppliesToAllGroups(vs.getColourAppliesToAllGroups());
189 setColourByReferenceSeq(vs.isColourByReferenceSeq());
190 setColourText(vs.getColourText());
191 setConservationColourSelected(vs.isConservationColourSelected());
192 setConservationSelected(vs.getConservationSelected());
193 setDisplayReferenceSeq(vs.isDisplayReferenceSeq());
194 setFontName(vs.getFontName());
195 setFontSize(vs.getFontSize());
196 setFontStyle(vs.getFontStyle());
197 setIdWidth(vs.getIdWidth());
198 setIncrement(vs.getIncrement());
199 setRenderGaps(vs.isRenderGaps());
200 setRightAlignIds(vs.isRightAlignIds());
201 setScaleAboveWrapped(vs.getScaleAboveWrapped());
202 setScaleLeftWrapped(vs.getScaleLeftWrapped());
203 setScaleProteinAsCdna(vs.isScaleProteinAsCdna());
204 setProteinFontAsCdna(vs.isProteinFontAsCdna());
205 setScaleRightWrapped(vs.getScaleRightWrapped());
206 setSeqNameItalics(vs.isSeqNameItalics());
207 setShowAnnotation(vs.isShowAnnotation());
208 setShowBoxes(vs.getShowBoxes());
209 setShowColourText(vs.isShowColourText());
210 setShowDBRefs(vs.isShowDBRefs());
211 setShowHiddenMarkers(vs.getShowHiddenMarkers());
212 setShowJVSuffix(vs.getShowJVSuffix());
213 setShowNPFeats(vs.isShowNPFeats());
214 setShowSequenceFeaturesHeight(vs.isShowSequenceFeaturesHeight());
215 setShowSequenceFeatures(vs.isShowSequenceFeatures());
216 setShowText(vs.getShowText());
217 setShowUnconserved(vs.getShowUnconserved());
218 setTextColour(vs.getTextColour());
219 setTextColour2(vs.getTextColour2());
220 setThreshold(vs.getThreshold());
221 setThresholdTextColour(vs.getThresholdTextColour());
222 setUpperCasebold(vs.isUpperCasebold());
223 setWrapAlignment(vs.getWrapAlignment());
224 setWrappedWidth(vs.getWrappedWidth());
225 // ViewStyle.configureFrom(this, viewStyle);
233 * Returns true if all attributes of the ViewStyles have the same value
236 public boolean equals(Object other)
238 if (other == null || !(other instanceof ViewStyle))
242 ViewStyle vs = (ViewStyle) other;
244 boolean match = (getAbovePIDThreshold() == vs.getAbovePIDThreshold()
245 && isCentreColumnLabels() == vs.isCentreColumnLabels()
246 && getCharHeight() == vs.getCharHeight()
247 && getCharWidth() == vs.getCharWidth()
248 && getColourAppliesToAllGroups() == vs
249 .getColourAppliesToAllGroups()
250 && isColourByReferenceSeq() == vs.isColourByReferenceSeq()
251 && getColourText() == vs.getColourText()
252 && isConservationColourSelected() == vs
253 .isConservationColourSelected()
254 && getConservationSelected() == vs.getConservationSelected()
255 && isDisplayReferenceSeq() == vs.isDisplayReferenceSeq()
256 && getFontSize() == vs.getFontSize()
257 && getFontStyle() == vs.getFontStyle()
258 && getIdWidth() == vs.getIdWidth()
259 && getIncrement() == vs.getIncrement()
260 && isRenderGaps() == vs.isRenderGaps()
261 && isRightAlignIds() == vs.isRightAlignIds()
262 && getScaleAboveWrapped() == vs.getScaleAboveWrapped()
263 && getScaleLeftWrapped() == vs.getScaleLeftWrapped()
264 && isScaleProteinAsCdna() == vs.isScaleProteinAsCdna()
265 && isProteinFontAsCdna() == vs.isProteinFontAsCdna()
266 && getScaleRightWrapped() == vs.getScaleRightWrapped()
267 && isSeqNameItalics() == vs.isSeqNameItalics()
268 && isShowAnnotation() == vs.isShowAnnotation()
269 && getShowBoxes() == vs.getShowBoxes()
270 && isShowColourText() == vs.isShowColourText()
271 && isShowDBRefs() == vs.isShowDBRefs()
272 && getShowHiddenMarkers() == vs.getShowHiddenMarkers()
273 && getShowJVSuffix() == vs.getShowJVSuffix()
274 && isShowNPFeats() == vs.isShowNPFeats()
275 && isShowSequenceFeaturesHeight() == vs
276 .isShowSequenceFeaturesHeight()
277 && isShowSequenceFeatures() == vs.isShowSequenceFeatures()
278 && getShowText() == vs.getShowText()
279 && getShowUnconserved() == vs.getShowUnconserved()
280 && getThreshold() == vs.getThreshold()
281 && getThresholdTextColour() == vs.getThresholdTextColour()
282 && isUpperCasebold() == vs.isUpperCasebold()
283 && getWrapAlignment() == vs.getWrapAlignment()
284 && getWrappedWidth() == vs.getWrappedWidth());
286 * and compare non-primitive types; syntax below will match null with null
289 match = match && String.valueOf(getFontName())
290 .equals(String.valueOf(vs.getFontName()));
291 match = match && String.valueOf(getTextColour())
292 .equals(String.valueOf(vs.getTextColour()));
293 match = match && String.valueOf(getTextColour2())
294 .equals(String.valueOf(vs.getTextColour2()));
296 // return equivalent(this, (ViewStyle) other);
300 * Overridden to ensure that whenever vs1.equals(vs2) then vs1.hashCode() ==
304 public int hashCode()
307 * No need to include all properties, just a selection...
311 // Boolean.hashCode returns 1231 or 1237
312 hash += m++ * Boolean.valueOf(this.abovePIDThreshold).hashCode();
313 hash += m++ * Boolean.valueOf(this.centreColumnLabels).hashCode();
314 hash += m++ * Boolean.valueOf(this.colourAppliesToAllGroups).hashCode();
315 hash += m++ * Boolean.valueOf(this.displayReferenceSeq).hashCode();
316 hash += m++ * Boolean.valueOf(this.renderGaps).hashCode();
317 hash += m++ * Boolean.valueOf(this.rightAlignIds).hashCode();
318 hash += m++ * Boolean.valueOf(this.scaleProteinAsCdna).hashCode();
319 hash += m++ * Boolean.valueOf(this.scaleRightWrapped).hashCode();
320 hash += m++ * Boolean.valueOf(this.seqNameItalics).hashCode();
321 hash += m++ * Boolean.valueOf(this.showAnnotation).hashCode();
322 hash += m++ * Boolean.valueOf(this.showBoxes).hashCode();
323 hash += m++ * Boolean.valueOf(this.showdbrefs).hashCode();
324 hash += m++ * Boolean.valueOf(this.showJVSuffix).hashCode();
325 hash += m++ * Boolean.valueOf(this.showSequenceFeatures).hashCode();
326 hash += m++ * Boolean.valueOf(this.showUnconserved).hashCode();
327 hash += m++ * Boolean.valueOf(this.wrapAlignment).hashCode();
328 hash += m++ * this.charHeight;
329 hash += m++ * this.charWidth;
330 hash += m++ * fontSize;
331 hash += m++ * fontStyle;
332 hash += m++ * idWidth;
333 hash += String.valueOf(this.fontName).hashCode();
338 * @return the upperCasebold
341 public boolean isUpperCasebold()
343 return upperCasebold;
347 * @param upperCasebold
348 * the upperCasebold to set
351 public void setUpperCasebold(boolean upperCasebold)
353 this.upperCasebold = upperCasebold;
359 boolean wrapAlignment = false;
362 * number columns in wrapped alignment
366 private int fontStyle;
368 private boolean showComplementFeatures;
373 * @return true if percent identity threshold is applied to shading
376 public boolean getAbovePIDThreshold()
378 return abovePIDThreshold;
384 * @return DOCUMENT ME!
387 public int getCharHeight()
395 * @return DOCUMENT ME!
398 public int getCharWidth()
406 * @return flag indicating if colourchanges propagated to all groups
409 public boolean getColourAppliesToAllGroups()
411 return colourAppliesToAllGroups;
417 * @return DOCUMENT ME!
420 public boolean getColourText()
422 return showColourText;
428 * @return true if conservation based shading is enabled
431 public boolean getConservationSelected()
433 return conservationColourSelected;
439 * @return get scalar for bleaching colourschemes by conservation
442 public int getIncrement()
450 * @return DOCUMENT ME!
453 public boolean getScaleAboveWrapped()
455 return scaleAboveWrapped;
461 * @return DOCUMENT ME!
464 public boolean getScaleLeftWrapped()
466 return scaleLeftWrapped;
472 * @return DOCUMENT ME!
475 public boolean getScaleRightWrapped()
477 return scaleRightWrapped;
483 * @return DOCUMENT ME!
486 public boolean getShowBoxes()
492 public boolean getShowHiddenMarkers()
494 return showHiddenMarkers;
500 * @return DOCUMENT ME!
503 public boolean getShowJVSuffix()
511 * @return DOCUMENT ME!
514 public boolean getShowText()
520 public boolean getShowUnconserved()
522 return showUnconserved;
526 * @return the textColour
529 public Color getTextColour()
535 * @return the textColour2
538 public Color getTextColour2()
546 * @return DOCUMENT ME!
549 public int getThreshold()
555 * @return the thresholdTextColour
558 public int getThresholdTextColour()
560 return thresholdTextColour;
566 * @return DOCUMENT ME!
569 public boolean getWrapAlignment()
571 return wrapAlignment;
577 * @return DOCUMENT ME!
580 public int getWrappedWidth()
586 public boolean isColourByReferenceSeq()
588 return colourByReferenceSeq;
592 * @return the conservationColourSelected
595 public boolean isConservationColourSelected()
597 return conservationColourSelected;
601 public boolean isDisplayReferenceSeq()
603 return displayReferenceSeq;
607 * @return the renderGaps
610 public boolean isRenderGaps()
616 public boolean isRightAlignIds()
618 return rightAlignIds;
622 * @return the seqNameItalics
625 public boolean isSeqNameItalics()
627 return seqNameItalics;
631 public boolean isShowAnnotation()
633 return showAnnotation;
637 * @return the showColourText
640 public boolean isShowColourText()
642 return showColourText;
646 * @return the showSeqFeaturesHeight
649 public boolean isShowSequenceFeaturesHeight()
651 return showSeqFeaturesHeight;
655 public boolean isShowSequenceFeatures()
657 return showSequenceFeatures;
665 * indicate if percent identity threshold is applied to shading
668 public void setAbovePIDThreshold(boolean b)
670 abovePIDThreshold = b;
680 public void setCharHeight(int h)
692 public void setCharWidth(int w)
699 * indicating if subsequent colourscheme changes will be propagated
703 public void setColourAppliesToAllGroups(boolean b)
705 colourAppliesToAllGroups = b;
709 public void setColourByReferenceSeq(boolean colourByReferenceSeq)
711 this.colourByReferenceSeq = colourByReferenceSeq;
721 public void setColourText(boolean state)
723 showColourText = state;
727 * @param conservationColourSelected
728 * the conservationColourSelected to set
731 public void setConservationColourSelected(
732 boolean conservationColourSelected)
734 this.conservationColourSelected = conservationColourSelected;
741 * enable conservation based shading
744 public void setConservationSelected(boolean b)
746 conservationColourSelected = b;
750 public void setDisplayReferenceSeq(boolean displayReferenceSeq)
752 this.displayReferenceSeq = displayReferenceSeq;
758 * set the scalar for bleaching colourschemes according to degree of
762 public void setIncrement(int inc)
774 public void setRenderGaps(boolean state)
780 public void setRightAlignIds(boolean rightAlignIds)
782 this.rightAlignIds = rightAlignIds;
792 public void setScaleAboveWrapped(boolean b)
794 scaleAboveWrapped = b;
804 public void setScaleLeftWrapped(boolean b)
806 scaleLeftWrapped = b;
812 * @param scaleRightWrapped
817 public void setScaleRightWrapped(boolean b)
819 scaleRightWrapped = b;
823 public void setSeqNameItalics(boolean italics)
825 seqNameItalics = italics;
829 public void setShowAnnotation(boolean b)
841 public void setShowBoxes(boolean state)
847 * @param showColourText
848 * the showColourText to set
851 public void setShowColourText(boolean showColourText)
853 this.showColourText = showColourText;
857 public void setShowHiddenMarkers(boolean show)
859 showHiddenMarkers = show;
869 public void setShowJVSuffix(boolean b)
875 public void setShowSequenceFeaturesHeight(boolean selected)
877 showSeqFeaturesHeight = selected;
885 * features are displayed if true
888 public void setShowSequenceFeatures(boolean b)
890 showSequenceFeatures = b;
900 public void setShowText(boolean state)
906 public void setShowUnconserved(boolean showunconserved)
908 showUnconserved = showunconserved;
913 * the textColour to set
916 public void setTextColour(Color textColour)
918 this.textColour = textColour;
923 * the textColour2 to set
926 public void setTextColour2(Color textColour2)
928 this.textColour2 = textColour2;
938 public void setThreshold(int thresh)
944 * @param thresholdTextColour
945 * the thresholdTextColour to set
948 public void setThresholdTextColour(int thresholdTextColour)
950 this.thresholdTextColour = thresholdTextColour;
960 public void setWrapAlignment(boolean state)
962 wrapAlignment = state;
972 public void setWrappedWidth(int w)
974 this.wrappedWidth = w;
978 public boolean sameStyle(ViewStyleI that)
980 return this.equals(that);
984 public String getFontName()
990 public int getFontSize()
996 public int getFontStyle()
1002 public void setFontName(String name)
1008 public void setFontSize(int size)
1015 public void setFontStyle(int style)
1021 public int getIdWidth()
1028 * the idWidth to set
1031 public void setIdWidth(int idWidth)
1033 this.idWidth = idWidth;
1037 * @return the centreColumnLabels
1040 public boolean isCentreColumnLabels()
1042 return centreColumnLabels;
1046 * @param centreColumnLabels
1047 * the centreColumnLabels to set
1050 public void setCentreColumnLabels(boolean centreColumnLabels)
1052 this.centreColumnLabels = centreColumnLabels;
1056 * @return the showdbrefs
1059 public boolean isShowDBRefs()
1066 * the showdbrefs to set
1069 public void setShowDBRefs(boolean showdbrefs)
1071 this.showdbrefs = showdbrefs;
1075 * @return the shownpfeats
1078 public boolean isShowNPFeats()
1084 * @param shownpfeats
1085 * the shownpfeats to set
1088 public void setShowNPFeats(boolean shownpfeats)
1090 this.shownpfeats = shownpfeats;
1094 public boolean isScaleProteinAsCdna()
1096 return this.scaleProteinAsCdna;
1100 public void setScaleProteinAsCdna(boolean b)
1102 this.scaleProteinAsCdna = b;
1106 public boolean isProteinFontAsCdna()
1108 return proteinFontAsCdna;
1112 public void setProteinFontAsCdna(boolean b)
1114 proteinFontAsCdna = b;
1118 public void setShowComplementFeatures(boolean b)
1120 showComplementFeatures = b;
1124 public boolean isShowComplementFeatures()
1126 return showComplementFeatures;