Ignore:
Timestamp:
2014-06-10T13:02:24+02:00 (10 years ago)
Author:
bastiK
Message:

mapcss: improve implicit type conversion for eval expressions

makes JOSM_pref function usable for types string, bool, float and color

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/mappaint/Cascade.java

    r7083 r7238  
    2323    protected Map<String, Object> prop = new HashMap<>();
    2424
    25     private static final Pattern HEX_COLOR_PATTERN = Pattern.compile("#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})");
     25    private static final Pattern HEX_COLOR_PATTERN = Pattern.compile("#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})");
    2626
    2727    public <T> T get(String key, T def, Class<T> klass) {
     
    106106            if (o instanceof Keyword)
    107107                return (T) ((Keyword) o).val;
     108            if (o instanceof Color) {
     109                Color c = (Color) o;
     110                int alpha = c.getAlpha();
     111                if (alpha != 255)
     112                    return (T) String.format("#%06x%02x", ((Color) o).getRGB() & 0x00ffffff, alpha);
     113                return (T) String.format("#%06x", ((Color) o).getRGB() & 0x00ffffff);
     114               
     115            }
    108116
    109117            return (T) o.toString();
     
    129137        if (o instanceof Boolean)
    130138            return (Boolean) o;
     139        String s = null;
    131140        if (o instanceof Keyword) {
    132             String s = ((Keyword) o).val;
    133             if ("true".equals(s) || "yes".equals(s))
    134                 return true;
    135             if ("false".equals(s) || "no".equals(s))
    136                 return false;
    137         }
     141            s = ((Keyword) o).val;
     142        } else if (o instanceof String) {
     143            s = (String) o;
     144        }
     145        if (s != null)
     146            return !(s.isEmpty() || "false".equals(s) || "no".equals(s) || "0".equals(s) || "0.0".equals(s));
     147        if (o instanceof Number)
     148            return ((Number) o).floatValue() == 0.0f;
     149        if (o instanceof List)
     150            return !((List) o).isEmpty();
     151        if (o instanceof float[])
     152            return ((float[]) o).length != 0;
     153       
    138154        return null;
    139155    }
Note: See TracChangeset for help on using the changeset viewer.