001// License: GPL. For details, see Readme.txt file.
002package org.openstreetmap.gui.jmapviewer;
003
004import java.awt.Color;
005import java.awt.Font;
006import java.awt.Graphics;
007import java.awt.Point;
008import java.awt.Stroke;
009
010import javax.swing.UIManager;
011
012public abstract class MapObjectImpl {
013    private Layer layer;
014    private String name;
015    private Style style;
016    private Boolean visible;
017
018    public MapObjectImpl(String name) {
019        this(null, name, null);
020    }
021
022    public MapObjectImpl(Layer layer) {
023        this(layer, null, null);
024    }
025
026    public MapObjectImpl(Layer layer, String name, Style style) {
027        super();
028        this.layer = layer;
029        this.name = name;
030        this.style = style;
031    }
032
033    public Layer getLayer() {
034        return layer;
035    }
036
037    public void setLayer(Layer layer) {
038        this.layer = layer;
039    }
040
041    public Style getStyle() {
042        return style;
043    }
044
045    public Style getStyleAssigned() {
046        return style == null ? (layer == null ? null : layer.getStyle()) : style;
047    }
048
049    public void setStyle(Style style) {
050        this.style = style;
051    }
052
053    public Color getColor() {
054        Style styleAssigned = getStyleAssigned();
055        return styleAssigned == null ? null : getStyleAssigned().getColor();
056    }
057
058    public void setColor(Color color) {
059        if (style == null && color != null) style = new Style();
060        if (style != null) style.setColor(color);
061    }
062
063    public Color getBackColor() {
064        Style styleAssigned = getStyleAssigned();
065        return styleAssigned == null ? null : getStyleAssigned().getBackColor();
066    }
067
068    public void setBackColor(Color backColor) {
069        if (style == null && backColor != null) style = new Style();
070        if (style != null) style.setBackColor(backColor);
071    }
072
073    public Stroke getStroke() {
074        Style styleAssigned = getStyleAssigned();
075        return styleAssigned == null ? null : getStyleAssigned().getStroke();
076    }
077
078    public void setStroke(Stroke stroke) {
079        if (style == null && stroke != null) style = new Style();
080        if (style != null) style.setStroke(stroke);
081    }
082
083    public Font getFont() {
084        Style styleAssigned = getStyleAssigned();
085        return styleAssigned == null ? null : getStyleAssigned().getFont();
086    }
087
088    public void setFont(Font font) {
089        if (style == null && font != null) style = new Style();
090        if (style != null) style.setFont(font);
091    }
092
093    private boolean isVisibleLayer() {
094        return layer == null || layer.isVisible() == null ? true : layer.isVisible();
095    }
096
097    public boolean isVisible() {
098        return visible == null ? isVisibleLayer() : visible.booleanValue();
099    }
100
101    public void setVisible(Boolean visible) {
102        this.visible = visible;
103    }
104
105    public String getName() {
106        return name;
107    }
108
109    public void setName(String txt) {
110        this.name = txt;
111    }
112
113    public static Font getDefaultFont() {
114        Font f = UIManager.getDefaults().getFont("TextField.font");
115        if (f == null) {
116            f = Font.decode(null);
117        }
118        return new Font(f.getName(), Font.BOLD, f.getSize());
119    }
120
121    public void paintText(Graphics g, Point position) {
122        if (name != null && g != null && position != null) {
123            if (getFont() == null) {
124                Font f = getDefaultFont();
125                setFont(new Font(f.getName(), Font.BOLD, f.getSize()));
126            }
127            g.setColor(Color.DARK_GRAY);
128            g.setFont(getFont());
129            g.drawString(name, position.x+MapMarkerDot.DOT_RADIUS+2, position.y+MapMarkerDot.DOT_RADIUS);
130        }
131    }
132}