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;
371 * @return true if percent identity threshold is applied to shading
374 public boolean getAbovePIDThreshold()
376 return abovePIDThreshold;
382 * @return DOCUMENT ME!
385 public int getCharHeight()
393 * @return DOCUMENT ME!
396 public int getCharWidth()
404 * @return flag indicating if colourchanges propagated to all groups
407 public boolean getColourAppliesToAllGroups()
409 return colourAppliesToAllGroups;
415 * @return DOCUMENT ME!
418 public boolean getColourText()
420 return showColourText;
426 * @return true if conservation based shading is enabled
429 public boolean getConservationSelected()
431 return conservationColourSelected;
437 * @return get scalar for bleaching colourschemes by conservation
440 public int getIncrement()
448 * @return DOCUMENT ME!
451 public boolean getScaleAboveWrapped()
453 return scaleAboveWrapped;
459 * @return DOCUMENT ME!
462 public boolean getScaleLeftWrapped()
464 return scaleLeftWrapped;
470 * @return DOCUMENT ME!
473 public boolean getScaleRightWrapped()
475 return scaleRightWrapped;
481 * @return DOCUMENT ME!
484 public boolean getShowBoxes()
490 public boolean getShowHiddenMarkers()
492 return showHiddenMarkers;
498 * @return DOCUMENT ME!
501 public boolean getShowJVSuffix()
509 * @return DOCUMENT ME!
512 public boolean getShowText()
518 public boolean getShowUnconserved()
520 return showUnconserved;
524 * @return the textColour
527 public Color getTextColour()
533 * @return the textColour2
536 public Color getTextColour2()
544 * @return DOCUMENT ME!
547 public int getThreshold()
553 * @return the thresholdTextColour
556 public int getThresholdTextColour()
558 return thresholdTextColour;
564 * @return DOCUMENT ME!
567 public boolean getWrapAlignment()
569 return wrapAlignment;
575 * @return DOCUMENT ME!
578 public int getWrappedWidth()
584 public boolean isColourByReferenceSeq()
586 return colourByReferenceSeq;
590 * @return the conservationColourSelected
593 public boolean isConservationColourSelected()
595 return conservationColourSelected;
599 public boolean isDisplayReferenceSeq()
601 return displayReferenceSeq;
605 * @return the renderGaps
608 public boolean isRenderGaps()
614 public boolean isRightAlignIds()
616 return rightAlignIds;
620 * @return the seqNameItalics
623 public boolean isSeqNameItalics()
625 return seqNameItalics;
629 public boolean isShowAnnotation()
631 return showAnnotation;
635 * @return the showColourText
638 public boolean isShowColourText()
640 return showColourText;
644 * @return the showSeqFeaturesHeight
647 public boolean isShowSequenceFeaturesHeight()
649 return showSeqFeaturesHeight;
653 public boolean isShowSequenceFeatures()
655 return showSequenceFeatures;
663 * indicate if percent identity threshold is applied to shading
666 public void setAbovePIDThreshold(boolean b)
668 abovePIDThreshold = b;
678 public void setCharHeight(int h)
690 public void setCharWidth(int w)
697 * indicating if subsequent colourscheme changes will be propagated
701 public void setColourAppliesToAllGroups(boolean b)
703 colourAppliesToAllGroups = b;
707 public void setColourByReferenceSeq(boolean colourByReferenceSeq)
709 this.colourByReferenceSeq = colourByReferenceSeq;
719 public void setColourText(boolean state)
721 showColourText = state;
725 * @param conservationColourSelected
726 * the conservationColourSelected to set
729 public void setConservationColourSelected(
730 boolean conservationColourSelected)
732 this.conservationColourSelected = conservationColourSelected;
739 * enable conservation based shading
742 public void setConservationSelected(boolean b)
744 conservationColourSelected = b;
748 public void setDisplayReferenceSeq(boolean displayReferenceSeq)
750 this.displayReferenceSeq = displayReferenceSeq;
756 * set the scalar for bleaching colourschemes according to degree of
760 public void setIncrement(int inc)
772 public void setRenderGaps(boolean state)
778 public void setRightAlignIds(boolean rightAlignIds)
780 this.rightAlignIds = rightAlignIds;
790 public void setScaleAboveWrapped(boolean b)
792 scaleAboveWrapped = b;
802 public void setScaleLeftWrapped(boolean b)
804 scaleLeftWrapped = b;
810 * @param scaleRightWrapped
815 public void setScaleRightWrapped(boolean b)
817 scaleRightWrapped = b;
821 public void setSeqNameItalics(boolean italics)
823 seqNameItalics = italics;
827 public void setShowAnnotation(boolean b)
839 public void setShowBoxes(boolean state)
845 * @param showColourText
846 * the showColourText to set
849 public void setShowColourText(boolean showColourText)
851 this.showColourText = showColourText;
855 public void setShowHiddenMarkers(boolean show)
857 showHiddenMarkers = show;
867 public void setShowJVSuffix(boolean b)
873 public void setShowSequenceFeaturesHeight(boolean selected)
875 showSeqFeaturesHeight = selected;
883 * features are displayed if true
886 public void setShowSequenceFeatures(boolean b)
888 showSequenceFeatures = b;
898 public void setShowText(boolean state)
904 public void setShowUnconserved(boolean showunconserved)
906 showUnconserved = showunconserved;
911 * the textColour to set
914 public void setTextColour(Color textColour)
916 this.textColour = textColour;
921 * the textColour2 to set
924 public void setTextColour2(Color textColour2)
926 this.textColour2 = textColour2;
936 public void setThreshold(int thresh)
942 * @param thresholdTextColour
943 * the thresholdTextColour to set
946 public void setThresholdTextColour(int thresholdTextColour)
948 this.thresholdTextColour = thresholdTextColour;
958 public void setWrapAlignment(boolean state)
960 wrapAlignment = state;
970 public void setWrappedWidth(int w)
972 this.wrappedWidth = w;
976 public boolean sameStyle(ViewStyleI that)
978 return this.equals(that);
982 public String getFontName()
988 public int getFontSize()
994 public int getFontStyle()
1000 public void setFontName(String name)
1006 public void setFontSize(int size)
1013 public void setFontStyle(int style)
1019 public int getIdWidth()
1026 * the idWidth to set
1029 public void setIdWidth(int idWidth)
1031 this.idWidth = idWidth;
1035 * @return the centreColumnLabels
1038 public boolean isCentreColumnLabels()
1040 return centreColumnLabels;
1044 * @param centreColumnLabels
1045 * the centreColumnLabels to set
1048 public void setCentreColumnLabels(boolean centreColumnLabels)
1050 this.centreColumnLabels = centreColumnLabels;
1054 * @return the showdbrefs
1057 public boolean isShowDBRefs()
1064 * the showdbrefs to set
1067 public void setShowDBRefs(boolean showdbrefs)
1069 this.showdbrefs = showdbrefs;
1073 * @return the shownpfeats
1076 public boolean isShowNPFeats()
1082 * @param shownpfeats
1083 * the shownpfeats to set
1086 public void setShowNPFeats(boolean shownpfeats)
1088 this.shownpfeats = shownpfeats;
1092 public boolean isScaleProteinAsCdna()
1094 return this.scaleProteinAsCdna;
1098 public void setScaleProteinAsCdna(boolean b)
1100 this.scaleProteinAsCdna = b;
1104 public boolean isProteinFontAsCdna()
1106 return proteinFontAsCdna;
1110 public void setProteinFontAsCdna(boolean b)
1112 proteinFontAsCdna = b;