001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.mappaint;
003
004import org.openstreetmap.josm.data.osm.OsmPrimitive;
005import org.openstreetmap.josm.data.osm.Way;
006import org.openstreetmap.josm.data.osm.visitor.paint.MapPaintSettings;
007import org.openstreetmap.josm.data.osm.visitor.paint.StyledMapRenderer;
008import org.openstreetmap.josm.data.osm.visitor.paint.PaintColors;
009import org.openstreetmap.josm.tools.Utils;
010
011public class LineTextElemStyle extends ElemStyle {
012
013    private TextElement text;
014
015    protected LineTextElemStyle(Cascade c, TextElement text) {
016        super(c, 4.9f);
017        this.text = text;
018    }
019    public static LineTextElemStyle create(Environment env) {
020        Cascade c = env.mc.getCascade(env.layer);
021
022        Keyword textPos = c.get(TEXT_POSITION, null, Keyword.class);
023        if (textPos != null && !Utils.equal(textPos.val, "line"))
024            return null;
025
026        TextElement text = TextElement.create(c, PaintColors.TEXT.get(), false);
027        if (text == null)
028            return null;
029        return new LineTextElemStyle(c, text);
030    }
031
032    @Override
033    public void paintPrimitive(OsmPrimitive primitive, MapPaintSettings paintSettings, StyledMapRenderer painter, boolean selected, boolean member) {
034        Way w = (Way)primitive;
035        painter.drawTextOnPath(w, text);
036    }
037
038    @Override
039    public boolean equals(Object obj) {
040        if (obj == null || getClass() != obj.getClass())
041            return false;
042        if (!super.equals(obj))
043            return false;
044        final LineTextElemStyle other = (LineTextElemStyle) obj;
045        return Utils.equal(text, other.text);
046    }
047
048    @Override
049    public int hashCode() {
050        return text.hashCode();
051    }
052
053    @Override
054    public String toString() {
055        return "LineTextElemStyle{" + super.toString() + "text=" + text + "}";
056    }
057
058}