1 package jalview.viewmodel.styles;
4 import java.lang.reflect.Method;
5 import java.util.HashMap;
7 import jalview.api.ViewStyleI;
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;
146 private int fontSize;
149 * If true, scale protein residues to 3 times width of cDNA bases (in
150 * SplitFrame views only)
152 private boolean scaleProteinAsCdna = true;
154 public ViewStyle(ViewStyleI viewStyle)
156 ViewStyle.configureFrom(this, viewStyle);
163 private static HashMap<String, Method> getters, isErs, setters;
166 getters = new HashMap<String, Method>();
167 isErs = new HashMap<String, Method>();
168 setters = new HashMap<String, Method>();
169 // Match Getters and Setters
170 for (Method m : ViewStyleI.class.getMethods())
172 if (m.getDeclaringClass() == ViewStyleI.class)
174 if (m.getName().startsWith("get"))
176 getters.put(m.getName().substring(3), m);
178 if (m.getName().startsWith("is"))
180 isErs.put(m.getName().substring(2), m);
182 if (m.getName().startsWith("set"))
184 setters.put(m.getName().substring(3), m);
190 private static void configureFrom(ViewStyle us, ViewStyleI viewStyle)
192 // try and do the set thing
193 for (String prop : setters.keySet())
195 Method getter = getters.get(prop);
196 Method setter = setters.get(prop);
199 getter = isErs.get(prop);
201 if (getter != null && setter != null)
205 setter.invoke(us, getter.invoke(viewStyle));
206 } catch (Exception q)
208 System.err.println("Unexpected exception setting view property "
209 + prop + " by reflection");
217 private static boolean equivalent(ViewStyle us, ViewStyleI them)
219 // look for properties we can set
220 for (String prop : setters.keySet())
222 Method getter = getters.get(prop);
225 getter = isErs.get(prop);
231 if (!getter.invoke(them).equals(getter.invoke(us)))
235 } catch (Exception q)
237 System.err.println("Unexpected exception testing equivalence of property "
238 + prop + " by reflection");
247 public boolean equals(ViewStyleI other)
249 return other == null ? false : equivalent(this, other);
253 * @return the upperCasebold
256 public boolean isUpperCasebold()
258 return upperCasebold;
262 * @param upperCasebold
263 * the upperCasebold to set
266 public void setUpperCasebold(boolean upperCasebold)
268 this.upperCasebold = upperCasebold;
274 boolean wrapAlignment = false;
277 * number columns in wrapped alignment
281 private int fontStyle;
286 * @return true if percent identity threshold is applied to shading
289 public boolean getAbovePIDThreshold()
291 return abovePIDThreshold;
297 * @return DOCUMENT ME!
300 public int getCharHeight()
308 * @return DOCUMENT ME!
311 public int getCharWidth()
319 * @return flag indicating if colourchanges propagated to all groups
322 public boolean getColourAppliesToAllGroups()
324 return colourAppliesToAllGroups;
330 * @return DOCUMENT ME!
333 public boolean getColourText()
335 return showColourText;
341 * @return true if conservation based shading is enabled
344 public boolean getConservationSelected()
346 return conservationColourSelected;
352 * @return get scalar for bleaching colourschemes by conservation
355 public int getIncrement()
363 * @return DOCUMENT ME!
366 public boolean getScaleAboveWrapped()
368 return scaleAboveWrapped;
374 * @return DOCUMENT ME!
377 public boolean getScaleLeftWrapped()
379 return scaleLeftWrapped;
385 * @return DOCUMENT ME!
388 public boolean getScaleRightWrapped()
390 return scaleRightWrapped;
396 * @return DOCUMENT ME!
399 public boolean getShowBoxes()
405 public boolean getShowHiddenMarkers()
407 return showHiddenMarkers;
413 * @return DOCUMENT ME!
416 public boolean getShowJVSuffix()
424 * @return DOCUMENT ME!
427 public boolean getShowText()
433 public boolean getShowUnconserved()
435 return showUnconserved;
439 * @return the textColour
442 public Color getTextColour()
448 * @return the textColour2
451 public Color getTextColour2()
459 * @return DOCUMENT ME!
462 public int getThreshold()
468 * @return the thresholdTextColour
471 public int getThresholdTextColour()
473 return thresholdTextColour;
479 * @return DOCUMENT ME!
482 public boolean getWrapAlignment()
484 return wrapAlignment;
490 * @return DOCUMENT ME!
493 public int getWrappedWidth()
499 public boolean isColourByReferenceSeq()
501 return colourByReferenceSeq;
505 * @return the conservationColourSelected
508 public boolean isConservationColourSelected()
510 return conservationColourSelected;
514 public boolean isDisplayReferenceSeq()
516 return displayReferenceSeq;
520 * @return the renderGaps
523 public boolean isRenderGaps()
529 public boolean isRightAlignIds()
531 return rightAlignIds;
535 * @return the seqNameItalics
538 public boolean isSeqNameItalics()
540 return seqNameItalics;
544 public boolean isShowAnnotation()
546 return showAnnotation;
550 * @return the showColourText
553 public boolean isShowColourText()
555 return showColourText;
559 * @return the showSeqFeaturesHeight
562 public boolean isShowSeqFeaturesHeight()
564 return showSeqFeaturesHeight;
568 public boolean isShowSequenceFeatures()
570 return showSequenceFeatures;
574 public boolean isShowSequenceFeaturesHeight()
577 return showSeqFeaturesHeight;
585 * indicate if percent identity threshold is applied to shading
588 public void setAbovePIDThreshold(boolean b)
590 abovePIDThreshold = b;
601 public void setCharHeight(int h)
613 public void setCharWidth(int w)
621 * indicating if subsequent colourscheme changes will be propagated
625 public void setColourAppliesToAllGroups(boolean b)
627 colourAppliesToAllGroups = b;
631 public void setColourByReferenceSeq(boolean colourByReferenceSeq)
633 this.colourByReferenceSeq = colourByReferenceSeq;
643 public void setColourText(boolean state)
645 showColourText = state;
649 * @param conservationColourSelected
650 * the conservationColourSelected to set
653 public void setConservationColourSelected(
654 boolean conservationColourSelected)
656 this.conservationColourSelected = conservationColourSelected;
663 * enable conservation based shading
666 public void setConservationSelected(boolean b)
668 conservationColourSelected = b;
672 public void setDisplayReferenceSeq(boolean displayReferenceSeq)
674 this.displayReferenceSeq = displayReferenceSeq;
680 * set the scalar for bleaching colourschemes according to degree of
684 public void setIncrement(int inc)
696 public void setRenderGaps(boolean state)
702 public void setRightAlignIds(boolean rightAlignIds)
704 this.rightAlignIds = rightAlignIds;
714 public void setScaleAboveWrapped(boolean b)
716 scaleAboveWrapped = b;
726 public void setScaleLeftWrapped(boolean b)
728 scaleLeftWrapped = b;
734 * @param scaleRightWrapped
739 public void setScaleRightWrapped(boolean b)
741 scaleRightWrapped = b;
745 public void setSeqNameItalics(boolean italics)
747 seqNameItalics = italics;
751 public void setShowAnnotation(boolean b)
763 public void setShowBoxes(boolean state)
769 * @param showColourText
770 * the showColourText to set
773 public void setShowColourText(boolean showColourText)
775 this.showColourText = showColourText;
779 public void setShowHiddenMarkers(boolean show)
781 showHiddenMarkers = show;
791 public void setShowJVSuffix(boolean b)
797 public void setShowSeqFeaturesHeight(boolean selected)
799 showSeqFeaturesHeight = selected;
807 * features are displayed if true
810 public void setShowSequenceFeatures(boolean b)
812 showSequenceFeatures = b;
822 public void setShowText(boolean state)
828 public void setShowUnconserved(boolean showunconserved)
830 showUnconserved = showunconserved;
835 * the textColour to set
838 public void setTextColour(Color textColour)
840 this.textColour = textColour;
845 * the textColour2 to set
848 public void setTextColour2(Color textColour2)
850 this.textColour2 = textColour2;
860 public void setThreshold(int thresh)
866 * @param thresholdTextColour
867 * the thresholdTextColour to set
870 public void setThresholdTextColour(int thresholdTextColour)
872 this.thresholdTextColour = thresholdTextColour;
882 public void setWrapAlignment(boolean state)
884 wrapAlignment = state;
894 public void setWrappedWidth(int w)
896 this.wrappedWidth = w;
900 public boolean sameStyle(ViewStyleI them)
902 return equivalent(this, them);
906 public String getFontName()
912 public int getFontSize()
918 public int getFontStyle()
924 public void setFontName(String name)
930 public void setFontSize(int size)
937 public void setFontStyle(int style)
943 public int getIdWidth()
953 public void setIdWidth(int idWidth)
955 this.idWidth = idWidth;
959 * @return the centreColumnLabels
962 public boolean isCentreColumnLabels()
964 return centreColumnLabels;
968 * @param centreColumnLabels
969 * the centreColumnLabels to set
972 public void setCentreColumnLabels(boolean centreColumnLabels)
974 this.centreColumnLabels = centreColumnLabels;
978 * @return the showdbrefs
981 public boolean isShowDBRefs()
988 * the showdbrefs to set
991 public void setShowDBRefs(boolean showdbrefs)
993 this.showdbrefs = showdbrefs;
997 * @return the shownpfeats
1000 public boolean isShowNPFeats()
1006 * @param shownpfeats
1007 * the shownpfeats to set
1010 public void setShowNPFeats(boolean shownpfeats)
1012 this.shownpfeats = shownpfeats;
1016 public boolean isScaleProteinAsCdna()
1018 return this.scaleProteinAsCdna;
1022 public void setScaleProteinAsCdna(boolean b)
1024 this.scaleProteinAsCdna = b;