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 setShowComplementFeatures(vs.isShowComplementFeatures());
217 setShowText(vs.getShowText());
218 setShowUnconserved(vs.getShowUnconserved());
219 setTextColour(vs.getTextColour());
220 setTextColour2(vs.getTextColour2());
221 setThreshold(vs.getThreshold());
222 setThresholdTextColour(vs.getThresholdTextColour());
223 setUpperCasebold(vs.isUpperCasebold());
224 setWrapAlignment(vs.getWrapAlignment());
225 setWrappedWidth(vs.getWrappedWidth());
226 // ViewStyle.configureFrom(this, viewStyle);
234 * Returns true if all attributes of the ViewStyles have the same value
237 public boolean equals(Object other)
239 if (other == null || !(other instanceof ViewStyle))
243 ViewStyle vs = (ViewStyle) other;
245 boolean match = (getAbovePIDThreshold() == vs.getAbovePIDThreshold()
246 && isCentreColumnLabels() == vs.isCentreColumnLabels()
247 && getCharHeight() == vs.getCharHeight()
248 && getCharWidth() == vs.getCharWidth()
249 && getColourAppliesToAllGroups() == vs
250 .getColourAppliesToAllGroups()
251 && isColourByReferenceSeq() == vs.isColourByReferenceSeq()
252 && getColourText() == vs.getColourText()
253 && isConservationColourSelected() == vs
254 .isConservationColourSelected()
255 && getConservationSelected() == vs.getConservationSelected()
256 && isDisplayReferenceSeq() == vs.isDisplayReferenceSeq()
257 && getFontSize() == vs.getFontSize()
258 && getFontStyle() == vs.getFontStyle()
259 && getIdWidth() == vs.getIdWidth()
260 && getIncrement() == vs.getIncrement()
261 && isRenderGaps() == vs.isRenderGaps()
262 && isRightAlignIds() == vs.isRightAlignIds()
263 && getScaleAboveWrapped() == vs.getScaleAboveWrapped()
264 && getScaleLeftWrapped() == vs.getScaleLeftWrapped()
265 && isScaleProteinAsCdna() == vs.isScaleProteinAsCdna()
266 && isProteinFontAsCdna() == vs.isProteinFontAsCdna()
267 && getScaleRightWrapped() == vs.getScaleRightWrapped()
268 && isSeqNameItalics() == vs.isSeqNameItalics()
269 && isShowAnnotation() == vs.isShowAnnotation()
270 && getShowBoxes() == vs.getShowBoxes()
271 && isShowColourText() == vs.isShowColourText()
272 && isShowDBRefs() == vs.isShowDBRefs()
273 && getShowHiddenMarkers() == vs.getShowHiddenMarkers()
274 && getShowJVSuffix() == vs.getShowJVSuffix()
275 && isShowNPFeats() == vs.isShowNPFeats()
276 && isShowSequenceFeaturesHeight() == vs
277 .isShowSequenceFeaturesHeight()
278 && isShowSequenceFeatures() == vs.isShowSequenceFeatures()
279 && isShowComplementFeatures() == vs.isShowComplementFeatures()
280 && getShowText() == vs.getShowText()
281 && getShowUnconserved() == vs.getShowUnconserved()
282 && getThreshold() == vs.getThreshold()
283 && getThresholdTextColour() == vs.getThresholdTextColour()
284 && isUpperCasebold() == vs.isUpperCasebold()
285 && getWrapAlignment() == vs.getWrapAlignment()
286 && getWrappedWidth() == vs.getWrappedWidth());
288 * and compare non-primitive types; syntax below will match null with null
291 match = match && String.valueOf(getFontName())
292 .equals(String.valueOf(vs.getFontName()));
293 match = match && String.valueOf(getTextColour())
294 .equals(String.valueOf(vs.getTextColour()));
295 match = match && String.valueOf(getTextColour2())
296 .equals(String.valueOf(vs.getTextColour2()));
298 // return equivalent(this, (ViewStyle) other);
302 * Overridden to ensure that whenever vs1.equals(vs2) then vs1.hashCode() ==
306 public int hashCode()
309 * No need to include all properties, just a selection...
313 // Boolean.hashCode returns 1231 or 1237
314 hash += m++ * Boolean.valueOf(this.abovePIDThreshold).hashCode();
315 hash += m++ * Boolean.valueOf(this.centreColumnLabels).hashCode();
316 hash += m++ * Boolean.valueOf(this.colourAppliesToAllGroups).hashCode();
317 hash += m++ * Boolean.valueOf(this.displayReferenceSeq).hashCode();
318 hash += m++ * Boolean.valueOf(this.renderGaps).hashCode();
319 hash += m++ * Boolean.valueOf(this.rightAlignIds).hashCode();
320 hash += m++ * Boolean.valueOf(this.scaleProteinAsCdna).hashCode();
321 hash += m++ * Boolean.valueOf(this.scaleRightWrapped).hashCode();
322 hash += m++ * Boolean.valueOf(this.seqNameItalics).hashCode();
323 hash += m++ * Boolean.valueOf(this.showAnnotation).hashCode();
324 hash += m++ * Boolean.valueOf(this.showBoxes).hashCode();
325 hash += m++ * Boolean.valueOf(this.showdbrefs).hashCode();
326 hash += m++ * Boolean.valueOf(this.showJVSuffix).hashCode();
327 hash += m++ * Boolean.valueOf(this.showSequenceFeatures).hashCode();
328 hash += m++ * Boolean.valueOf(this.showUnconserved).hashCode();
329 hash += m++ * Boolean.valueOf(this.wrapAlignment).hashCode();
330 hash += m++ * this.charHeight;
331 hash += m++ * this.charWidth;
332 hash += m++ * fontSize;
333 hash += m++ * fontStyle;
334 hash += m++ * idWidth;
335 hash += String.valueOf(this.fontName).hashCode();
340 * @return the upperCasebold
343 public boolean isUpperCasebold()
345 return upperCasebold;
349 * @param upperCasebold
350 * the upperCasebold to set
353 public void setUpperCasebold(boolean upperCasebold)
355 this.upperCasebold = upperCasebold;
361 boolean wrapAlignment = false;
364 * number columns in wrapped alignment
368 private int fontStyle;
370 private boolean showComplementFeatures;
372 private boolean showComplementFeaturesOnTop;
377 * @return true if percent identity threshold is applied to shading
380 public boolean getAbovePIDThreshold()
382 return abovePIDThreshold;
388 * @return DOCUMENT ME!
391 public int getCharHeight()
399 * @return DOCUMENT ME!
402 public int getCharWidth()
410 * @return flag indicating if colourchanges propagated to all groups
413 public boolean getColourAppliesToAllGroups()
415 return colourAppliesToAllGroups;
421 * @return DOCUMENT ME!
424 public boolean getColourText()
426 return showColourText;
432 * @return true if conservation based shading is enabled
435 public boolean getConservationSelected()
437 return conservationColourSelected;
443 * @return get scalar for bleaching colourschemes by conservation
446 public int getIncrement()
454 * @return DOCUMENT ME!
457 public boolean getScaleAboveWrapped()
459 return scaleAboveWrapped;
465 * @return DOCUMENT ME!
468 public boolean getScaleLeftWrapped()
470 return scaleLeftWrapped;
476 * @return DOCUMENT ME!
479 public boolean getScaleRightWrapped()
481 return scaleRightWrapped;
487 * @return DOCUMENT ME!
490 public boolean getShowBoxes()
496 public boolean getShowHiddenMarkers()
498 return showHiddenMarkers;
504 * @return DOCUMENT ME!
507 public boolean getShowJVSuffix()
515 * @return DOCUMENT ME!
518 public boolean getShowText()
524 public boolean getShowUnconserved()
526 return showUnconserved;
530 * @return the textColour
533 public Color getTextColour()
539 * @return the textColour2
542 public Color getTextColour2()
550 * @return DOCUMENT ME!
553 public int getThreshold()
559 * @return the thresholdTextColour
562 public int getThresholdTextColour()
564 return thresholdTextColour;
570 * @return DOCUMENT ME!
573 public boolean getWrapAlignment()
575 return wrapAlignment;
581 * @return DOCUMENT ME!
584 public int getWrappedWidth()
590 public boolean isColourByReferenceSeq()
592 return colourByReferenceSeq;
596 * @return the conservationColourSelected
599 public boolean isConservationColourSelected()
601 return conservationColourSelected;
605 public boolean isDisplayReferenceSeq()
607 return displayReferenceSeq;
611 * @return the renderGaps
614 public boolean isRenderGaps()
620 public boolean isRightAlignIds()
622 return rightAlignIds;
626 * @return the seqNameItalics
629 public boolean isSeqNameItalics()
631 return seqNameItalics;
635 public boolean isShowAnnotation()
637 return showAnnotation;
641 * @return the showColourText
644 public boolean isShowColourText()
646 return showColourText;
650 * @return the showSeqFeaturesHeight
653 public boolean isShowSequenceFeaturesHeight()
655 return showSeqFeaturesHeight;
659 public boolean isShowSequenceFeatures()
661 return showSequenceFeatures;
669 * indicate if percent identity threshold is applied to shading
672 public void setAbovePIDThreshold(boolean b)
674 abovePIDThreshold = b;
684 public void setCharHeight(int h)
696 public void setCharWidth(int w)
703 * indicating if subsequent colourscheme changes will be propagated
707 public void setColourAppliesToAllGroups(boolean b)
709 colourAppliesToAllGroups = b;
713 public void setColourByReferenceSeq(boolean colourByReferenceSeq)
715 this.colourByReferenceSeq = colourByReferenceSeq;
725 public void setColourText(boolean state)
727 showColourText = state;
731 * @param conservationColourSelected
732 * the conservationColourSelected to set
735 public void setConservationColourSelected(
736 boolean conservationColourSelected)
738 this.conservationColourSelected = conservationColourSelected;
745 * enable conservation based shading
748 public void setConservationSelected(boolean b)
750 conservationColourSelected = b;
754 public void setDisplayReferenceSeq(boolean displayReferenceSeq)
756 this.displayReferenceSeq = displayReferenceSeq;
762 * set the scalar for bleaching colourschemes according to degree of
766 public void setIncrement(int inc)
778 public void setRenderGaps(boolean state)
784 public void setRightAlignIds(boolean rightAlignIds)
786 this.rightAlignIds = rightAlignIds;
796 public void setScaleAboveWrapped(boolean b)
798 scaleAboveWrapped = b;
808 public void setScaleLeftWrapped(boolean b)
810 scaleLeftWrapped = b;
816 * @param scaleRightWrapped
821 public void setScaleRightWrapped(boolean b)
823 scaleRightWrapped = b;
827 public void setSeqNameItalics(boolean italics)
829 seqNameItalics = italics;
833 public void setShowAnnotation(boolean b)
845 public void setShowBoxes(boolean state)
851 * @param showColourText
852 * the showColourText to set
855 public void setShowColourText(boolean showColourText)
857 this.showColourText = showColourText;
861 public void setShowHiddenMarkers(boolean show)
863 showHiddenMarkers = show;
873 public void setShowJVSuffix(boolean b)
879 public void setShowSequenceFeaturesHeight(boolean selected)
881 showSeqFeaturesHeight = selected;
889 * features are displayed if true
892 public void setShowSequenceFeatures(boolean b)
894 showSequenceFeatures = b;
904 public void setShowText(boolean state)
910 public void setShowUnconserved(boolean showunconserved)
912 showUnconserved = showunconserved;
917 * the textColour to set
920 public void setTextColour(Color textColour)
922 this.textColour = textColour;
927 * the textColour2 to set
930 public void setTextColour2(Color textColour2)
932 this.textColour2 = textColour2;
942 public void setThreshold(int thresh)
948 * @param thresholdTextColour
949 * the thresholdTextColour to set
952 public void setThresholdTextColour(int thresholdTextColour)
954 this.thresholdTextColour = thresholdTextColour;
964 public void setWrapAlignment(boolean state)
966 wrapAlignment = state;
976 public void setWrappedWidth(int w)
978 this.wrappedWidth = w;
982 public boolean sameStyle(ViewStyleI that)
984 return this.equals(that);
988 public String getFontName()
994 public int getFontSize()
1000 public int getFontStyle()
1006 public void setFontName(String name)
1012 public void setFontSize(int size)
1019 public void setFontStyle(int style)
1025 public int getIdWidth()
1032 * the idWidth to set
1035 public void setIdWidth(int idWidth)
1037 this.idWidth = idWidth;
1041 * @return the centreColumnLabels
1044 public boolean isCentreColumnLabels()
1046 return centreColumnLabels;
1050 * @param centreColumnLabels
1051 * the centreColumnLabels to set
1054 public void setCentreColumnLabels(boolean centreColumnLabels)
1056 this.centreColumnLabels = centreColumnLabels;
1060 * @return the showdbrefs
1063 public boolean isShowDBRefs()
1070 * the showdbrefs to set
1073 public void setShowDBRefs(boolean showdbrefs)
1075 this.showdbrefs = showdbrefs;
1079 * @return the shownpfeats
1082 public boolean isShowNPFeats()
1088 * @param shownpfeats
1089 * the shownpfeats to set
1092 public void setShowNPFeats(boolean shownpfeats)
1094 this.shownpfeats = shownpfeats;
1098 public boolean isScaleProteinAsCdna()
1100 return this.scaleProteinAsCdna;
1104 public void setScaleProteinAsCdna(boolean b)
1106 this.scaleProteinAsCdna = b;
1110 public boolean isProteinFontAsCdna()
1112 return proteinFontAsCdna;
1116 public void setProteinFontAsCdna(boolean b)
1118 proteinFontAsCdna = b;
1122 public void setShowComplementFeatures(boolean b)
1124 showComplementFeatures = b;
1128 public boolean isShowComplementFeatures()
1130 return showComplementFeatures;
1134 public void setShowComplementFeaturesOnTop(boolean b)
1136 showComplementFeaturesOnTop = b;
1140 public boolean isShowComplementFeaturesOnTop()
1142 return showComplementFeaturesOnTop;