001 // License: GPL. For details, see LICENSE file.
002 package org.openstreetmap.josm.gui.mappaint.xml;
003
004 import org.openstreetmap.josm.gui.mappaint.Range;
005
006 public 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 }