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