]> gitweb.fperrin.net Git - GpsPrune.git/blob - src/tim/prune/gui/DisplayUtils.java
Version 20.1, December 2020
[GpsPrune.git] / src / 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                         + " " + ((inNumSecs / 60) % 60) + I18nManager.getText("display.range.time.mins");
41                 if (inNumSecs < 86400000L) return "" + (inNumSecs / 86400L) + I18nManager.getText("display.range.time.days");
42                 return "big";
43         }
44
45         /**
46          * @param inNumber number to format
47          * @return formatted number to one decimal place
48          */
49         public static String formatOneDp(double inNumber)
50         {
51                 return FORMAT_ONE_DP.format(inNumber);
52         }
53
54         /**
55          * Format a number to a sensible precision
56          * @param inVal value to format
57          * @return formatted String using local format
58          */
59         public static String roundedNumber(double inVal)
60         {
61                 // Set precision of formatter
62                 int numDigits = 0;
63                 if (inVal < 1.0)
64                         numDigits = 3;
65                 else if (inVal < 10.0)
66                         numDigits = 2;
67                 else if (inVal < 100.0)
68                         numDigits = 1;
69                 // set formatter
70                 FORMAT_FLEX.setMaximumFractionDigits(numDigits);
71                 FORMAT_FLEX.setMinimumFractionDigits(numDigits);
72                 return FORMAT_FLEX.format(inVal);
73         }
74
75         /**
76          * Convert the given hour and minute values into a string H:MM
77          * @param inHour hour of day, 0-24
78          * @param inMinute minute, 0-59
79          * @return string, either H:MM or HH:MM
80          */
81         public static String makeTimeString(int inHour, int inMinute)
82         {
83                 StringBuilder sb = new StringBuilder();
84                 final int hour = (inHour >= 0 && inHour <= 24) ? inHour : 0;
85                 sb.append(hour);
86
87                 sb.append(':');
88
89                 final int minute = (inMinute >= 0 && inMinute <= 59) ? inMinute : 0;
90                 if (minute <= 9) {sb.append('0');}
91                 sb.append(minute);
92                 return sb.toString();
93         }
94 }