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(); } }