/** * $Id: mxStylesheet.java,v 1.1 2012/11/15 13:26:46 gaudenz Exp $ * Copyright (c) 2007, Gaudenz Alder */ package com.mxgraph.view; import java.util.Hashtable; import java.util.Map; import com.mxgraph.util.mxConstants; /** * Defines the appearance of the cells in a graph. The following example * changes the font size for all vertices by changing the default vertex * style in-place: * <code> * getDefaultVertexStyle().put(mxConstants.STYLE_FONTSIZE, 16); * </code> * * To change the default font size for all cells, set * mxConstants.DEFAULT_FONTSIZE. */ public class mxStylesheet { /** * Shared immutable empty hashtable (for undefined cell styles). */ public static final Map<String, Object> EMPTY_STYLE = new Hashtable<String, Object>(); /** * Maps from names to styles. */ protected Map<String, Map<String, Object>> styles = new Hashtable<String, Map<String, Object>>(); /** * Constructs a new stylesheet and assigns default styles. */ public mxStylesheet() { setDefaultVertexStyle(createDefaultVertexStyle()); setDefaultEdgeStyle(createDefaultEdgeStyle()); } /** * Returns all styles as map of name, hashtable pairs. * * @return All styles in this stylesheet. */ public Map<String, Map<String, Object>> getStyles() { return styles; } /** * Sets all styles in the stylesheet. */ public void setStyles(Map<String, Map<String, Object>> styles) { this.styles = styles; } /** * Creates and returns the default vertex style. * * @return Returns the default vertex style. */ protected Map<String, Object> createDefaultVertexStyle() { Map<String, Object> style = new Hashtable<String, Object>(); style.put(mxConstants.STYLE_SHAPE, mxConstants.SHAPE_RECTANGLE); style.put(mxConstants.STYLE_PERIMETER, mxPerimeter.RectanglePerimeter); style.put(mxConstants.STYLE_VERTICAL_ALIGN, mxConstants.ALIGN_MIDDLE); style.put(mxConstants.STYLE_ALIGN, mxConstants.ALIGN_CENTER); style.put(mxConstants.STYLE_FILLCOLOR, "#C3D9FF"); style.put(mxConstants.STYLE_STROKECOLOR, "#6482B9"); style.put(mxConstants.STYLE_FONTCOLOR, "#774400"); return style; } /** * Creates and returns the default edge style. * * @return Returns the default edge style. */ protected Map<String, Object> createDefaultEdgeStyle() { Map<String, Object> style = new Hashtable<String, Object>(); style.put(mxConstants.STYLE_SHAPE, mxConstants.SHAPE_CONNECTOR); style.put(mxConstants.STYLE_ENDARROW, mxConstants.ARROW_CLASSIC); style.put(mxConstants.STYLE_VERTICAL_ALIGN, mxConstants.ALIGN_MIDDLE); style.put(mxConstants.STYLE_ALIGN, mxConstants.ALIGN_CENTER); style.put(mxConstants.STYLE_STROKECOLOR, "#6482B9"); style.put(mxConstants.STYLE_FONTCOLOR, "#446299"); return style; } /** * Returns the default style for vertices. * * @return Returns the default vertex style. */ public Map<String, Object> getDefaultVertexStyle() { return styles.get("defaultVertex"); } /** * Sets the default style for vertices. * * @param value Style to be used for vertices. */ public void setDefaultVertexStyle(Map<String, Object> value) { putCellStyle("defaultVertex", value); } /** * Returns the default style for edges. * * @return Returns the default edge style. */ public Map<String, Object> getDefaultEdgeStyle() { return styles.get("defaultEdge"); } /** * Sets the default style for edges. * * @param value Style to be used for edges. */ public void setDefaultEdgeStyle(Map<String, Object> value) { putCellStyle("defaultEdge", value); } /** * Stores the specified style under the given name. * * @param name Name for the style to be stored. * @param style Key, value pairs that define the style. */ public void putCellStyle(String name, Map<String, Object> style) { styles.put(name, style); } /** * Returns the cell style for the specified cell or the given defaultStyle * if no style can be found for the given stylename. * * @param name String of the form [(stylename|key=value);] that represents the * style. * @param defaultStyle Default style to be returned if no style can be found. * @return Returns the style for the given formatted cell style. */ public Map<String, Object> getCellStyle(String name, Map<String, Object> defaultStyle) { Map<String, Object> style = defaultStyle; if (name != null && name.length() > 0) { String[] pairs = name.split(";"); if (style != null && !name.startsWith(";")) { style = new Hashtable<String, Object>(style); } else { style = new Hashtable<String, Object>(); } for (int i = 0; i < pairs.length; i++) { String tmp = pairs[i]; int c = tmp.indexOf('='); if (c >= 0) { String key = tmp.substring(0, c); String value = tmp.substring(c + 1); if (value.equals(mxConstants.NONE)) { style.remove(key); } else { style.put(key, value); } } else { Map<String, Object> tmpStyle = styles.get(tmp); if (tmpStyle != null) { style.putAll(tmpStyle); } } } } return style; } }