package jalview.viewmodel.styles; import java.awt.Color; import java.lang.reflect.Method; import java.util.HashMap; import jalview.api.ViewStyleI; /** * A container for holding alignment view properties. View properties are * data-independent, which means they can be safely copied between views * involving different alignment data without causing exceptions in the * rendering system. * * @author jprocter * */ public class ViewStyle implements ViewStyleI { private boolean abovePIDThreshold = false; int charHeight; int charWidth; int idWidth = -1; /** * gui state - changes to colour scheme propagated to all groups */ private boolean colourAppliesToAllGroups; /** * centre columnar annotation labels in displayed alignment annotation */ boolean centreColumnLabels = false; private boolean showdbrefs; private boolean shownpfeats; // --------END Structure Conservation /** * colour according to the reference sequence defined on the alignment */ private boolean colourByReferenceSeq = false; boolean conservationColourSelected = false; /** * show the reference sequence in the alignment view */ private boolean displayReferenceSeq = false; private int increment; /** * display gap characters */ boolean renderGaps = true; private boolean rightAlignIds = false; boolean scaleAboveWrapped = false; boolean scaleLeftWrapped = true; boolean scaleRightWrapped = true; boolean seqNameItalics; /** * show annotation tracks on the alignment */ private boolean showAnnotation = true; /** * render each residue in a coloured box */ boolean showBoxes = true; /** * Colour sequence text */ boolean showColourText = false; /** * show blue triangles */ boolean showHiddenMarkers = true; /** * show /start-end in ID panel */ boolean showJVSuffix = true; /** * scale features height according to score */ boolean showSeqFeaturesHeight; /** * display setting for showing/hiding sequence features on alignment view */ boolean showSequenceFeatures = false; /** * display sequence symbols */ boolean showText = true; /** * show non-conserved residues only */ protected boolean showUnconserved = false; Color textColour = Color.black; Color textColour2 = Color.white; /** * PID or consensus threshold */ int threshold; /** * threshold for switching between textColour & textColour2 */ int thresholdTextColour = 0; /** * upper case characters in sequence are shown in bold */ boolean upperCasebold = false; /** * name of base font for view */ private String fontName; /** * size for base font */ private int fontSize; /* * If true, scale protein residues to 3 times width of cDNA bases (in * SplitFrame views only) */ private boolean scaleProteinAsCdna = true; public ViewStyle(ViewStyleI viewStyle) { ViewStyle.configureFrom(this, viewStyle); } public ViewStyle() { } private static HashMap getters, isErs, setters; static { getters = new HashMap(); isErs = new HashMap(); setters = new HashMap(); // Match Getters and Setters for (Method m : ViewStyleI.class.getMethods()) { if (m.getDeclaringClass() == ViewStyleI.class) { if (m.getName().startsWith("get")) { getters.put(m.getName().substring(3), m); } if (m.getName().startsWith("is")) { isErs.put(m.getName().substring(2), m); } if (m.getName().startsWith("set")) { setters.put(m.getName().substring(3), m); } } } } private static void configureFrom(ViewStyle us, ViewStyleI viewStyle) { // try and do the set thing for (String prop : setters.keySet()) { Method getter = getters.get(prop); Method setter = setters.get(prop); if (getter == null) { getter = isErs.get(prop); } if (getter != null && setter != null) { try { setter.invoke(us, getter.invoke(viewStyle)); } catch (Exception q) { System.err.println("Unexpected exception setting view property " + prop + " by reflection"); q.printStackTrace(); } } } } private static boolean equivalent(ViewStyle us, ViewStyleI them) { // look for properties we can set for (String prop : setters.keySet()) { Method getter = getters.get(prop); if (getter == null) { getter = isErs.get(prop); } if (getter != null) { try { if (!getter.invoke(them).equals(getter.invoke(us))) { return false; } } catch (Exception q) { System.err.println("Unexpected exception testing equivalence of property " + prop + " by reflection"); q.printStackTrace(); } } } return true; } public boolean equals(ViewStyleI other) { return other == null ? false : equivalent(this, other); } /** * @return the upperCasebold */ @Override public boolean isUpperCasebold() { return upperCasebold; } /** * @param upperCasebold * the upperCasebold to set */ @Override public void setUpperCasebold(boolean upperCasebold) { this.upperCasebold = upperCasebold; } /** * flag for wrapping */ boolean wrapAlignment = false; /** * number columns in wrapped alignment */ int wrappedWidth; private int fontStyle; /** * GUI state * * @return true if percent identity threshold is applied to shading */ @Override public boolean getAbovePIDThreshold() { return abovePIDThreshold; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ @Override public int getCharHeight() { return charHeight; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ @Override public int getCharWidth() { return charWidth; } /** * * * @return flag indicating if colourchanges propagated to all groups */ @Override public boolean getColourAppliesToAllGroups() { return colourAppliesToAllGroups; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ @Override public boolean getColourText() { return showColourText; } /** * GUI state * * @return true if conservation based shading is enabled */ @Override public boolean getConservationSelected() { return conservationColourSelected; } /** * GUI State * * @return get scalar for bleaching colourschemes by conservation */ @Override public int getIncrement() { return increment; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ @Override public boolean getScaleAboveWrapped() { return scaleAboveWrapped; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ @Override public boolean getScaleLeftWrapped() { return scaleLeftWrapped; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ @Override public boolean getScaleRightWrapped() { return scaleRightWrapped; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ @Override public boolean getShowBoxes() { return showBoxes; } @Override public boolean getShowHiddenMarkers() { return showHiddenMarkers; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ @Override public boolean getShowJVSuffix() { return showJVSuffix; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ @Override public boolean getShowText() { return showText; } @Override public boolean getShowUnconserved() { return showUnconserved; } /** * @return the textColour */ @Override public Color getTextColour() { return textColour; } /** * @return the textColour2 */ @Override public Color getTextColour2() { return textColour2; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ @Override public int getThreshold() { return threshold; } /** * @return the thresholdTextColour */ @Override public int getThresholdTextColour() { return thresholdTextColour; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ @Override public boolean getWrapAlignment() { return wrapAlignment; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ @Override public int getWrappedWidth() { return wrappedWidth; } @Override public boolean isColourByReferenceSeq() { return colourByReferenceSeq; } /** * @return the conservationColourSelected */ @Override public boolean isConservationColourSelected() { return conservationColourSelected; } @Override public boolean isDisplayReferenceSeq() { return displayReferenceSeq; } /** * @return the renderGaps */ @Override public boolean isRenderGaps() { return renderGaps; } @Override public boolean isRightAlignIds() { return rightAlignIds; } /** * @return the seqNameItalics */ @Override public boolean isSeqNameItalics() { return seqNameItalics; } @Override public boolean isShowAnnotation() { return showAnnotation; } /** * @return the showColourText */ @Override public boolean isShowColourText() { return showColourText; } /** * @return the showSeqFeaturesHeight */ @Override public boolean isShowSeqFeaturesHeight() { return showSeqFeaturesHeight; } @Override public boolean isShowSequenceFeatures() { return showSequenceFeatures; } @Override public boolean isShowSequenceFeaturesHeight() { return showSeqFeaturesHeight; } /** * GUI state * * * @param b * indicate if percent identity threshold is applied to shading */ @Override public void setAbovePIDThreshold(boolean b) { abovePIDThreshold = b; } /** * DOCUMENT ME! * * @param h * DOCUMENT ME! */ @Override public void setCharHeight(int h) { this.charHeight = h; } /** * DOCUMENT ME! * * @param w * DOCUMENT ME! */ @Override public void setCharWidth(int w) { this.charWidth = w; } /** * @param value * indicating if subsequent colourscheme changes will be propagated * to all groups */ @Override public void setColourAppliesToAllGroups(boolean b) { colourAppliesToAllGroups = b; } @Override public void setColourByReferenceSeq(boolean colourByReferenceSeq) { this.colourByReferenceSeq = colourByReferenceSeq; } /** * DOCUMENT ME! * * @param state * DOCUMENT ME! */ @Override public void setColourText(boolean state) { showColourText = state; } /** * @param conservationColourSelected * the conservationColourSelected to set */ @Override public void setConservationColourSelected( boolean conservationColourSelected) { this.conservationColourSelected = conservationColourSelected; } /** * GUI state * * @param b * enable conservation based shading */ @Override public void setConservationSelected(boolean b) { conservationColourSelected = b; } @Override public void setDisplayReferenceSeq(boolean displayReferenceSeq) { this.displayReferenceSeq = displayReferenceSeq; } /** * * @param inc * set the scalar for bleaching colourschemes according to degree of * conservation */ @Override public void setIncrement(int inc) { increment = inc; } /** * DOCUMENT ME! * * @param state * DOCUMENT ME! */ @Override public void setRenderGaps(boolean state) { renderGaps = state; } @Override public void setRightAlignIds(boolean rightAlignIds) { this.rightAlignIds = rightAlignIds; } /** * DOCUMENT ME! * * @param b * DOCUMENT ME! */ @Override public void setScaleAboveWrapped(boolean b) { scaleAboveWrapped = b; } /** * DOCUMENT ME! * * @param b * DOCUMENT ME! */ @Override public void setScaleLeftWrapped(boolean b) { scaleLeftWrapped = b; } /** * * * @param scaleRightWrapped * - true or false */ @Override public void setScaleRightWrapped(boolean b) { scaleRightWrapped = b; } @Override public void setSeqNameItalics(boolean italics) { seqNameItalics = italics; } @Override public void setShowAnnotation(boolean b) { showAnnotation = b; } /** * DOCUMENT ME! * * @param state * DOCUMENT ME! */ @Override public void setShowBoxes(boolean state) { showBoxes = state; } /** * @param showColourText * the showColourText to set */ @Override public void setShowColourText(boolean showColourText) { this.showColourText = showColourText; } @Override public void setShowHiddenMarkers(boolean show) { showHiddenMarkers = show; } /** * DOCUMENT ME! * * @param b * DOCUMENT ME! */ @Override public void setShowJVSuffix(boolean b) { showJVSuffix = b; } @Override public void setShowSeqFeaturesHeight(boolean selected) { showSeqFeaturesHeight = selected; } /** * set the flag * * @param b * features are displayed if true */ @Override public void setShowSequenceFeatures(boolean b) { showSequenceFeatures = b; } /** * DOCUMENT ME! * * @param state * DOCUMENT ME! */ @Override public void setShowText(boolean state) { showText = state; } @Override public void setShowUnconserved(boolean showunconserved) { showUnconserved = showunconserved; } /** * @param textColour * the textColour to set */ @Override public void setTextColour(Color textColour) { this.textColour = textColour; } /** * @param textColour2 * the textColour2 to set */ @Override public void setTextColour2(Color textColour2) { this.textColour2 = textColour2; } /** * DOCUMENT ME! * * @param thresh * DOCUMENT ME! */ @Override public void setThreshold(int thresh) { threshold = thresh; } /** * @param thresholdTextColour * the thresholdTextColour to set */ @Override public void setThresholdTextColour(int thresholdTextColour) { this.thresholdTextColour = thresholdTextColour; } /** * DOCUMENT ME! * * @param state * DOCUMENT ME! */ @Override public void setWrapAlignment(boolean state) { wrapAlignment = state; } /** * DOCUMENT ME! * * @param w * DOCUMENT ME! */ @Override public void setWrappedWidth(int w) { this.wrappedWidth = w; } @Override public boolean sameStyle(ViewStyleI them) { return equivalent(this, them); } @Override public String getFontName() { return fontName; } @Override public int getFontSize() { return fontSize; } @Override public int getFontStyle() { return fontStyle; } @Override public void setFontName(String name) { fontName = name; } @Override public void setFontSize(int size) { fontSize = size; } @Override public void setFontStyle(int style) { fontStyle = style; } @Override public int getIdWidth() { return idWidth; } /** * @param idWidth * the idWidth to set */ @Override public void setIdWidth(int idWidth) { this.idWidth = idWidth; } /** * @return the centreColumnLabels */ @Override public boolean isCentreColumnLabels() { return centreColumnLabels; } /** * @param centreColumnLabels * the centreColumnLabels to set */ @Override public void setCentreColumnLabels(boolean centreColumnLabels) { this.centreColumnLabels = centreColumnLabels; } /** * @return the showdbrefs */ @Override public boolean isShowDBRefs() { return showdbrefs; } /** * @param showdbrefs * the showdbrefs to set */ @Override public void setShowDBRefs(boolean showdbrefs) { this.showdbrefs = showdbrefs; } /** * @return the shownpfeats */ @Override public boolean isShowNPFeats() { return shownpfeats; } /** * @param shownpfeats * the shownpfeats to set */ @Override public void setShowNPFeats(boolean shownpfeats) { this.shownpfeats = shownpfeats; } @Override public boolean isScaleProteinAsCdna() { return this.scaleProteinAsCdna; } @Override public void setScaleProteinAsCdna(boolean b) { this.scaleProteinAsCdna = b; } }