]> gitweb.fperrin.net Git - GpsPrune.git/blob - tim/prune/gui/DisplayUtils.java
Version 15, March 2013
[GpsPrune.git] / tim / prune / gui / DisplayUtils.java
1 package tim.prune.gui;
2
3 import java.text.NumberFormat;
4
5 import tim.prune.I18nManager;
6
7 /**
8  * Class to provide general display util methods
9  */
10 public abstract class DisplayUtils
11 {
12         /** Number formatter for one decimal place */
13         private static final NumberFormat FORMAT_ONE_DP = NumberFormat.getNumberInstance();
14
15         /** Static block to initialise the one d.p. formatter */
16         static
17         {
18                 FORMAT_ONE_DP.setMaximumFractionDigits(1);
19                 FORMAT_ONE_DP.setMinimumFractionDigits(1);
20         }
21         /** Flexible number formatter with different decimal places */
22         private static final NumberFormat FORMAT_FLEX = NumberFormat.getNumberInstance();
23
24
25         /**
26          * Build a String to describe a time duration
27          * @param inNumSecs number of seconds
28          * @return time as a string, days, hours, mins, secs as appropriate
29          */
30         public static String buildDurationString(long inNumSecs)
31         {
32                 if (inNumSecs <= 0L) return "";
33                 if (inNumSecs < 60L) return "" + inNumSecs + I18nManager.getText("display.range.time.secs");
34                 if (inNumSecs < 3600L) return "" + (inNumSecs / 60) + I18nManager.getText("display.range.time.mins")
35                         + " " + (inNumSecs % 60) + I18nManager.getText("display.range.time.secs");
36                 if (inNumSecs < 86400L) return "" + (inNumSecs / 60 / 60) + I18nManager.getText("display.range.time.hours")
37                         + " " + ((inNumSecs / 60) % 60) + I18nManager.getText("display.range.time.mins");
38                 if (inNumSecs < 432000L) return "" + (inNumSecs / 86400L) + I18nManager.getText("display.range.time.days")
39                         + " " + (inNumSecs / 60 / 60) % 24 + I18nManager.getText("display.range.time.hours");
40                 if (inNumSecs < 86400000L) return "" + (inNumSecs / 86400L) + I18nManager.getText("display.range.time.days");
41                 return "big";
42         }
43
44         /**
45          * @param inNumber number to format
46          * @return formatted number to one decimal place
47          */
48         public static String formatOneDp(double inNumber)
49         {
50                 return FORMAT_ONE_DP.format(inNumber);
51         }
52
53         /**
54          * Format a number to a sensible precision
55          * @param inVal value to format
56          * @return formatted String using local format
57          */
58         public static String roundedNumber(double inVal)
59         {
60                 // Set precision of formatter
61                 int numDigits = 0;
62                 if (inVal < 1.0)
63                         numDigits = 3;
64                 else if (inVal < 10.0)
65                         numDigits = 2;
66                 else if (inVal < 100.0)
67                         numDigits = 1;
68                 // set formatter
69                 FORMAT_FLEX.setMaximumFractionDigits(numDigits);
70                 FORMAT_FLEX.setMinimumFractionDigits(numDigits);
71                 return FORMAT_FLEX.format(inVal);
72         }
73 }