1 package jalview.viewmodel.styles;
3 import jalview.api.ViewStyleI;
6 import java.lang.reflect.Method;
7 import java.util.HashMap;
10 * A container for holding alignment view properties. View properties are
11 * data-independent, which means they can be safely copied between views
12 * involving different alignment data without causing exceptions in the
18 public class ViewStyle implements ViewStyleI
21 private boolean abovePIDThreshold = false;
30 * gui state - changes to colour scheme propagated to all groups
32 private boolean colourAppliesToAllGroups;
35 * centre columnar annotation labels in displayed alignment annotation
37 boolean centreColumnLabels = false;
39 private boolean showdbrefs;
41 private boolean shownpfeats;
43 // --------END Structure Conservation
46 * colour according to the reference sequence defined on the alignment
48 private boolean colourByReferenceSeq = false;
50 boolean conservationColourSelected = false;
53 * show the reference sequence in the alignment view
55 private boolean displayReferenceSeq = false;
57 private int increment;
60 * display gap characters
62 boolean renderGaps = true;
64 private boolean rightAlignIds = false;
66 boolean scaleAboveWrapped = false;
68 boolean scaleLeftWrapped = true;
70 boolean scaleRightWrapped = true;
72 boolean seqNameItalics;
75 * show annotation tracks on the alignment
77 private boolean showAnnotation = true;
80 * render each residue in a coloured box
82 boolean showBoxes = true;
85 * Colour sequence text
87 boolean showColourText = false;
92 boolean showHiddenMarkers = true;
95 * show /start-end in ID panel
97 boolean showJVSuffix = true;
100 * scale features height according to score
102 boolean showSeqFeaturesHeight;
105 * display setting for showing/hiding sequence features on alignment view
107 boolean showSequenceFeatures = false;
110 * display sequence symbols
112 boolean showText = true;
115 * show non-conserved residues only
117 protected boolean showUnconserved = false;
119 Color textColour = Color.black;
121 Color textColour2 = Color.white;
124 * PID or consensus threshold
129 * threshold for switching between textColour & textColour2
131 int thresholdTextColour = 0;
134 * upper case characters in sequence are shown in bold
136 boolean upperCasebold = false;
139 * name of base font for view
141 private String fontName;
145 private int fontSize;
147 public ViewStyle(ViewStyleI viewStyle)
149 ViewStyle.configureFrom(this, viewStyle);
156 private static HashMap<String, Method> getters, isErs, setters;
159 getters = new HashMap<String, Method>();
160 isErs = new HashMap<String, Method>();
161 setters = new HashMap<String, Method>();
162 // Match Getters and Setters
163 for (Method m : ViewStyleI.class.getMethods())
165 if (m.getDeclaringClass() == ViewStyleI.class)
167 if (m.getName().startsWith("get"))
169 getters.put(m.getName().substring(3), m);
171 if (m.getName().startsWith("is"))
173 isErs.put(m.getName().substring(2), m);
175 if (m.getName().startsWith("set"))
177 setters.put(m.getName().substring(3), m);
183 private static void configureFrom(ViewStyle us, ViewStyleI viewStyle)
185 // try and do the set thing
186 for (String prop : setters.keySet())
188 Method getter = getters.get(prop);
189 Method setter = setters.get(prop);
192 getter = isErs.get(prop);
194 if (getter != null && setter != null)
198 setter.invoke(us, getter.invoke(viewStyle));
199 } catch (Exception q)
201 System.err.println("Unexpected exception setting view property "
202 + prop + " by reflection");
210 private static boolean equivalent(ViewStyle us, ViewStyleI them)
212 // look for properties we can set
213 for (String prop : setters.keySet())
215 Method getter = getters.get(prop);
218 getter = isErs.get(prop);
224 if (!getter.invoke(them).equals(getter.invoke(us)))
228 } catch (Exception q)
230 System.err.println("Unexpected exception testing equivalence of property "
231 + prop + " by reflection");
240 public boolean equals(ViewStyleI other)
242 return other == null ? false : equivalent(this, other);
246 * @return the upperCasebold
249 public boolean isUpperCasebold()
251 return upperCasebold;
255 * @param upperCasebold
256 * the upperCasebold to set
259 public void setUpperCasebold(boolean upperCasebold)
261 this.upperCasebold = upperCasebold;
267 boolean wrapAlignment = false;
270 * number columns in wrapped alignment
274 private int fontStyle;
279 * @return true if percent identity threshold is applied to shading
282 public boolean getAbovePIDThreshold()
284 return abovePIDThreshold;
290 * @return DOCUMENT ME!
293 public int getCharHeight()
301 * @return DOCUMENT ME!
304 public int getCharWidth()
312 * @return flag indicating if colourchanges propagated to all groups
315 public boolean getColourAppliesToAllGroups()
317 return colourAppliesToAllGroups;
323 * @return DOCUMENT ME!
326 public boolean getColourText()
328 return showColourText;
334 * @return true if conservation based shading is enabled
337 public boolean getConservationSelected()
339 return conservationColourSelected;
345 * @return get scalar for bleaching colourschemes by conservation
348 public int getIncrement()
356 * @return DOCUMENT ME!
359 public boolean getScaleAboveWrapped()
361 return scaleAboveWrapped;
367 * @return DOCUMENT ME!
370 public boolean getScaleLeftWrapped()
372 return scaleLeftWrapped;
378 * @return DOCUMENT ME!
381 public boolean getScaleRightWrapped()
383 return scaleRightWrapped;
389 * @return DOCUMENT ME!
392 public boolean getShowBoxes()
398 public boolean getShowHiddenMarkers()
400 return showHiddenMarkers;
406 * @return DOCUMENT ME!
409 public boolean getShowJVSuffix()
417 * @return DOCUMENT ME!
420 public boolean getShowText()
426 public boolean getShowUnconserved()
428 return showUnconserved;
432 * @return the textColour
435 public Color getTextColour()
441 * @return the textColour2
444 public Color getTextColour2()
452 * @return DOCUMENT ME!
455 public int getThreshold()
461 * @return the thresholdTextColour
464 public int getThresholdTextColour()
466 return thresholdTextColour;
472 * @return DOCUMENT ME!
475 public boolean getWrapAlignment()
477 return wrapAlignment;
483 * @return DOCUMENT ME!
486 public int getWrappedWidth()
492 public boolean isColourByReferenceSeq()
494 return colourByReferenceSeq;
498 * @return the conservationColourSelected
501 public boolean isConservationColourSelected()
503 return conservationColourSelected;
507 public boolean isDisplayReferenceSeq()
509 return displayReferenceSeq;
513 * @return the renderGaps
516 public boolean isRenderGaps()
522 public boolean isRightAlignIds()
524 return rightAlignIds;
528 * @return the seqNameItalics
531 public boolean isSeqNameItalics()
533 return seqNameItalics;
537 public boolean isShowAnnotation()
539 return showAnnotation;
543 * @return the showColourText
546 public boolean isShowColourText()
548 return showColourText;
552 * @return the showSeqFeaturesHeight
555 public boolean isShowSeqFeaturesHeight()
557 return showSeqFeaturesHeight;
561 public boolean isShowSequenceFeatures()
563 return showSequenceFeatures;
567 public boolean isShowSequenceFeaturesHeight()
570 return showSeqFeaturesHeight;
578 * indicate if percent identity threshold is applied to shading
581 public void setAbovePIDThreshold(boolean b)
583 abovePIDThreshold = b;
594 public void setCharHeight(int h)
606 public void setCharWidth(int w)
614 * indicating if subsequent colourscheme changes will be propagated
618 public void setColourAppliesToAllGroups(boolean b)
620 colourAppliesToAllGroups = b;
624 public void setColourByReferenceSeq(boolean colourByReferenceSeq)
626 this.colourByReferenceSeq = colourByReferenceSeq;
636 public void setColourText(boolean state)
638 showColourText = state;
642 * @param conservationColourSelected
643 * the conservationColourSelected to set
646 public void setConservationColourSelected(
647 boolean conservationColourSelected)
649 this.conservationColourSelected = conservationColourSelected;
656 * enable conservation based shading
659 public void setConservationSelected(boolean b)
661 conservationColourSelected = b;
665 public void setDisplayReferenceSeq(boolean displayReferenceSeq)
667 this.displayReferenceSeq = displayReferenceSeq;
673 * set the scalar for bleaching colourschemes according to degree of
677 public void setIncrement(int inc)
689 public void setRenderGaps(boolean state)
695 public void setRightAlignIds(boolean rightAlignIds)
697 this.rightAlignIds = rightAlignIds;
707 public void setScaleAboveWrapped(boolean b)
709 scaleAboveWrapped = b;
719 public void setScaleLeftWrapped(boolean b)
721 scaleLeftWrapped = b;
727 * @param scaleRightWrapped
732 public void setScaleRightWrapped(boolean b)
734 scaleRightWrapped = b;
738 public void setSeqNameItalics(boolean italics)
740 seqNameItalics = italics;
744 public void setShowAnnotation(boolean b)
756 public void setShowBoxes(boolean state)
762 * @param showColourText
763 * the showColourText to set
766 public void setShowColourText(boolean showColourText)
768 this.showColourText = showColourText;
772 public void setShowHiddenMarkers(boolean show)
774 showHiddenMarkers = show;
784 public void setShowJVSuffix(boolean b)
790 public void setShowSeqFeaturesHeight(boolean selected)
792 showSeqFeaturesHeight = selected;
800 * features are displayed if true
803 public void setShowSequenceFeatures(boolean b)
805 showSequenceFeatures = b;
815 public void setShowText(boolean state)
821 public void setShowUnconserved(boolean showunconserved)
823 showUnconserved = showunconserved;
828 * the textColour to set
831 public void setTextColour(Color textColour)
833 this.textColour = textColour;
838 * the textColour2 to set
841 public void setTextColour2(Color textColour2)
843 this.textColour2 = textColour2;
853 public void setThreshold(int thresh)
859 * @param thresholdTextColour
860 * the thresholdTextColour to set
863 public void setThresholdTextColour(int thresholdTextColour)
865 this.thresholdTextColour = thresholdTextColour;
875 public void setWrapAlignment(boolean state)
877 wrapAlignment = state;
887 public void setWrappedWidth(int w)
889 this.wrappedWidth = w;
893 public boolean sameStyle(ViewStyleI them)
895 return equivalent(this, them);
899 public String getFontName()
905 public int getFontSize()
911 public int getFontStyle()
917 public void setFontName(String name)
923 public void setFontSize(int size)
930 public void setFontStyle(int style)
936 public int getIdWidth()
946 public void setIdWidth(int idWidth)
948 this.idWidth = idWidth;
952 * @return the centreColumnLabels
955 public boolean isCentreColumnLabels()
957 return centreColumnLabels;
961 * @param centreColumnLabels
962 * the centreColumnLabels to set
965 public void setCentreColumnLabels(boolean centreColumnLabels)
967 this.centreColumnLabels = centreColumnLabels;
971 * @return the showdbrefs
974 public boolean isShowDBRefs()
981 * the showdbrefs to set
984 public void setShowDBRefs(boolean showdbrefs)
986 this.showdbrefs = showdbrefs;
990 * @return the shownpfeats
993 public boolean isShowNPFeats()
1000 * the shownpfeats to set
1003 public void setShowNPFeats(boolean shownpfeats)
1005 this.shownpfeats = shownpfeats;