001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.mappaint.xml;
003
004import org.openstreetmap.josm.gui.mappaint.Range;
005
006public class LinemodPrototype extends LinePrototype implements Comparable<LinemodPrototype> {
007
008    public boolean over;
009
010    public enum WidthMode { ABSOLUTE, PERCENT, OFFSET }
011    public WidthMode widthMode;
012
013    public LinemodPrototype(LinemodPrototype s, Range range) {
014        super(s, range);
015        this.over = s.over;
016        this.widthMode = s.widthMode;
017    }
018
019    public LinemodPrototype() { init(); }
020
021    @Override
022    public void init()
023    {
024        super.init();
025        over = true;
026        widthMode = WidthMode.ABSOLUTE;
027    }
028
029    // get width for overlays
030    public float getWidth(float ref)
031    {
032        float res;
033        if(widthMode == WidthMode.ABSOLUTE) {
034            res = width;
035        } else if(widthMode == WidthMode.OFFSET) {
036            res = ref + width;
037        } else
038        {
039            if(width < 0) {
040                res = 0;
041            } else {
042                res = ref*width/100;
043            }
044        }
045        return res <= 0 ? 1 : res;
046    }
047
048    @Override
049    public int getWidth() {
050        throw new UnsupportedOperationException();
051    }
052
053    @Override
054    public int compareTo(LinemodPrototype s) {
055        if(s.priority != priority)
056            return s.priority > priority ? 1 : -1;
057            if(!over && s.over)
058                return -1;
059            // we have no idea how to order other objects :-)
060            return 0;
061    }
062}