X-Git-Url: http://gitweb.fperrin.net/?p=GpsPrune.git;a=blobdiff_plain;f=src%2Ftim%2Fprune%2Fgui%2FDisplayUtils.java;fp=src%2Ftim%2Fprune%2Fgui%2FDisplayUtils.java;h=25640d8e5072bfc2e70acfc3e26c7de208a494e3;hp=0000000000000000000000000000000000000000;hb=ce6f2161b8596f7018d6a76bff79bc9e571f35fd;hpb=2d8cb72e84d5cc1089ce77baf1e34ea3ea2f8465 diff --git a/src/tim/prune/gui/DisplayUtils.java b/src/tim/prune/gui/DisplayUtils.java new file mode 100644 index 0000000..25640d8 --- /dev/null +++ b/src/tim/prune/gui/DisplayUtils.java @@ -0,0 +1,93 @@ +package tim.prune.gui; + +import java.text.NumberFormat; + +import tim.prune.I18nManager; + +/** + * Class to provide general display util methods + */ +public abstract class DisplayUtils +{ + /** Number formatter for one decimal place */ + private static final NumberFormat FORMAT_ONE_DP = NumberFormat.getNumberInstance(); + + /** Static block to initialise the one d.p. formatter */ + static + { + FORMAT_ONE_DP.setMaximumFractionDigits(1); + FORMAT_ONE_DP.setMinimumFractionDigits(1); + } + /** Flexible number formatter with different decimal places */ + private static final NumberFormat FORMAT_FLEX = NumberFormat.getNumberInstance(); + + + /** + * Build a String to describe a time duration + * @param inNumSecs number of seconds + * @return time as a string, days, hours, mins, secs as appropriate + */ + public static String buildDurationString(long inNumSecs) + { + if (inNumSecs <= 0L) return ""; + if (inNumSecs < 60L) return "" + inNumSecs + I18nManager.getText("display.range.time.secs"); + if (inNumSecs < 3600L) return "" + (inNumSecs / 60) + I18nManager.getText("display.range.time.mins") + + " " + (inNumSecs % 60) + I18nManager.getText("display.range.time.secs"); + if (inNumSecs < 86400L) return "" + (inNumSecs / 60 / 60) + I18nManager.getText("display.range.time.hours") + + " " + ((inNumSecs / 60) % 60) + I18nManager.getText("display.range.time.mins"); + if (inNumSecs < 432000L) return "" + (inNumSecs / 86400L) + I18nManager.getText("display.range.time.days") + + " " + (inNumSecs / 60 / 60) % 24 + I18nManager.getText("display.range.time.hours"); + if (inNumSecs < 86400000L) return "" + (inNumSecs / 86400L) + I18nManager.getText("display.range.time.days"); + return "big"; + } + + /** + * @param inNumber number to format + * @return formatted number to one decimal place + */ + public static String formatOneDp(double inNumber) + { + return FORMAT_ONE_DP.format(inNumber); + } + + /** + * Format a number to a sensible precision + * @param inVal value to format + * @return formatted String using local format + */ + public static String roundedNumber(double inVal) + { + // Set precision of formatter + int numDigits = 0; + if (inVal < 1.0) + numDigits = 3; + else if (inVal < 10.0) + numDigits = 2; + else if (inVal < 100.0) + numDigits = 1; + // set formatter + FORMAT_FLEX.setMaximumFractionDigits(numDigits); + FORMAT_FLEX.setMinimumFractionDigits(numDigits); + return FORMAT_FLEX.format(inVal); + } + + /** + * Convert the given hour and minute values into a string H:MM + * @param inHour hour of day, 0-24 + * @param inMinute minute, 0-59 + * @return string, either H:MM or HH:MM + */ + public static String makeTimeString(int inHour, int inMinute) + { + StringBuilder sb = new StringBuilder(); + final int hour = (inHour >= 0 && inHour <= 24) ? inHour : 0; + sb.append(hour); + + sb.append(':'); + + final int minute = (inMinute >= 0 && inMinute <= 59) ? inMinute : 0; + if (minute <= 9) {sb.append('0');} + sb.append(minute); + return sb.toString(); + } +}