// License: GPL. For details, see Readme.txt file. package org.openstreetmap.gui.jmapviewer; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Point; import java.awt.Stroke; import javax.swing.UIManager; public abstract class MapObjectImpl { private Layer layer; private String name; private Style style; private Boolean visible; public MapObjectImpl(String name) { this(null, name, null); } public MapObjectImpl(Layer layer) { this(layer, null, null); } public MapObjectImpl(Layer layer, String name, Style style) { super(); this.layer = layer; this.name = name; this.style = style; } public Layer getLayer() { return layer; } public void setLayer(Layer layer) { this.layer = layer; } public Style getStyle() { return style; } public Style getStyleAssigned() { return style == null ? (layer == null ? null : layer.getStyle()) : style; } public void setStyle(Style style) { this.style = style; } public Color getColor() { Style styleAssigned = getStyleAssigned(); return styleAssigned == null ? null : getStyleAssigned().getColor(); } public void setColor(Color color) { if (style == null && color != null) style = new Style(); if (style != null) style.setColor(color); } public Color getBackColor() { Style styleAssigned = getStyleAssigned(); return styleAssigned == null ? null : getStyleAssigned().getBackColor(); } public void setBackColor(Color backColor) { if (style == null && backColor != null) style = new Style(); if (style != null) style.setBackColor(backColor); } public Stroke getStroke() { Style styleAssigned = getStyleAssigned(); return styleAssigned == null ? null : getStyleAssigned().getStroke(); } public void setStroke(Stroke stroke) { if (style == null && stroke != null) style = new Style(); if (style != null) style.setStroke(stroke); } public Font getFont() { Style styleAssigned = getStyleAssigned(); return styleAssigned == null ? null : getStyleAssigned().getFont(); } public void setFont(Font font) { if (style == null && font != null) style = new Style(); if (style != null) style.setFont(font); } private boolean isVisibleLayer() { return layer == null || layer.isVisible() == null ? true : layer.isVisible(); } public boolean isVisible() { return visible == null ? isVisibleLayer() : visible.booleanValue(); } public void setVisible(Boolean visible) { this.visible = visible; } public String getName() { return name; } public void setName(String txt) { this.name = txt; } public static Font getDefaultFont() { Font f = UIManager.getDefaults().getFont("TextField.font"); if (f == null) { f = Font.decode(null); } return new Font(f.getName(), Font.BOLD, f.getSize()); } public void paintText(Graphics g, Point position) { if (name != null && g != null && position != null) { if (getFont() == null) { Font f = getDefaultFont(); setFont(new Font(f.getName(), Font.BOLD, f.getSize())); } g.setColor(Color.DARK_GRAY); g.setFont(getFont()); g.drawString(name, position.x+MapMarkerDot.DOT_RADIUS+2, position.y+MapMarkerDot.DOT_RADIUS); } } }