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