Changeset 4113 in josm for trunk/src/org/openstreetmap/josm/gui
- Timestamp:
- 2011-06-01T21:50:26+02:00 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
r4068 r4113 51 51 import org.openstreetmap.josm.data.osm.Node; 52 52 import org.openstreetmap.josm.data.osm.OsmPrimitive; 53 import org.openstreetmap.josm.data.osm.OsmPrimitiveComparator; 53 54 import org.openstreetmap.josm.data.osm.OsmPrimitiveType; 54 55 import org.openstreetmap.josm.data.osm.Relation; … … 916 917 } 917 918 918 /** Comparator, comparing by type and objects display names */ 919 static private class OsmPrimitiveComparator implements Comparator<OsmPrimitive> { 920 final private HashMap<OsmPrimitive, String> cache= new HashMap<OsmPrimitive, String>(); 921 final private DefaultNameFormatter df = DefaultNameFormatter.getInstance(); 922 923 private String cachedName(OsmPrimitive p) { 924 String name = cache.get(p); 925 if (name == null) { 926 name = p.getDisplayName(df); 927 cache.put(p, name); 928 } 929 return name; 930 } 931 932 private int compareName(OsmPrimitive a, OsmPrimitive b) { 933 String an = cachedName(a); 934 String bn = cachedName(b); 935 // make sure display names starting with digits are the end of the 936 // list 937 if (Character.isDigit(an.charAt(0)) && Character.isDigit(bn.charAt(0))) 938 return an.compareTo(bn); 939 else if (Character.isDigit(an.charAt(0)) && !Character.isDigit(bn.charAt(0))) 940 return 1; 941 else if (!Character.isDigit(an.charAt(0)) && Character.isDigit(bn.charAt(0))) 942 return -1; 943 return an.compareTo(bn); 919 /** Quicker comparator, comparing just by type and ID's */ 920 static private class OsmPrimitiveQuickComparator implements Comparator<OsmPrimitive> { 921 922 private int compareId(OsmPrimitive a, OsmPrimitive b) { 923 long id_a=a.getUniqueId(); 924 long id_b=b.getUniqueId(); 925 if (id_a<id_b) return -1; 926 if (id_a>id_b) return 1; 927 return 0; 944 928 } 945 929 … … 956 940 public int compare(OsmPrimitive a, OsmPrimitive b) { 957 941 if (a.getType().equals(b.getType())) 958 return compareName(a, b);959 return compareType(a, b);960 }961 }962 963 /** Quicker comparator, comparing just by type and ID's */964 static private class OsmPrimitiveQuickComparator implements Comparator<OsmPrimitive> {965 966 private int compareId(OsmPrimitive a, OsmPrimitive b) {967 long id_a=a.getUniqueId();968 long id_b=b.getUniqueId();969 if (id_a<id_b) return -1;970 if (id_a>id_b) return 1;971 return 0;972 }973 974 private int compareType(OsmPrimitive a, OsmPrimitive b) {975 // show ways before relations, then nodes976 if (a.getType().equals(OsmPrimitiveType.WAY)) return -1;977 if (a.getType().equals(OsmPrimitiveType.NODE)) return 1;978 // a is a relation979 if (b.getType().equals(OsmPrimitiveType.WAY)) return 1;980 // b is a node981 return -1;982 }983 984 public int compare(OsmPrimitive a, OsmPrimitive b) {985 if (a.getType().equals(b.getType()))986 942 return compareId(a, b); 987 943 return compareType(a, b);
Note:
See TracChangeset
for help on using the changeset viewer.