--- /dev/null
+package tim.prune.gui;
+
+import tim.prune.data.Coordinate;
+
+/**
+ * Functions for display of coordinates in gui
+ */
+public abstract class CoordDisplay
+{
+
+ /**
+ * Construct an appropriate coordinate label using the selected format
+ * @param inCoordinate coordinate
+ * @param inFormat selected display format
+ * @return language-sensitive string
+ */
+ public static String makeCoordinateLabel(Coordinate inCoordinate, int inFormat)
+ {
+ String coord = inCoordinate.output(inFormat);
+ // Fix broken degree signs (due to unicode mangling)
+ final char brokenDeg = 65533;
+ if (coord.indexOf(brokenDeg) >= 0)
+ {
+ coord = coord.replaceAll(String.valueOf(brokenDeg), "\u00B0");
+ }
+ return restrictDP(coord);
+ }
+
+
+ /**
+ * Restrict the given coordinate to a limited number of decimal places for display
+ * @param inCoord coordinate string
+ * @return chopped string
+ */
+ private static String restrictDP(String inCoord)
+ {
+ final int DECIMAL_PLACES = 7;
+ if (inCoord == null) return "";
+ String result = inCoord;
+ final int dotPos = Math.max(inCoord.lastIndexOf('.'), inCoord.lastIndexOf(','));
+ if (dotPos >= 0)
+ {
+ final int chopPos = dotPos + DECIMAL_PLACES;
+ if (chopPos < (inCoord.length()-1))
+ {
+ result = inCoord.substring(0, chopPos);
+ // Maybe there's an exponential in there too which needs to be appended
+ int expPos = inCoord.toUpperCase().indexOf("E", chopPos);
+ if (expPos > 0 && expPos < (inCoord.length()-1))
+ {
+ result += inCoord.substring(expPos);
+ }
+ }
+ }
+ return result;
+ }
+
+}