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}