]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - src/tim/prune/gui/DisplayUtils.java
Moved source into separate src directory due to popular request
[GpsPrune.git] / src / tim / prune / gui / DisplayUtils.java
diff --git a/src/tim/prune/gui/DisplayUtils.java b/src/tim/prune/gui/DisplayUtils.java
new file mode 100644 (file)
index 0000000..25640d8
--- /dev/null
@@ -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();
+       }
+}