]> gitweb.fperrin.net Git - GpsPrune.git/blob - src/tim/prune/function/estimate/ParametersPanel.java
3632831070b39ee5fdc029421104a2fda2ba1c9b
[GpsPrune.git] / src / tim / prune / function / estimate / ParametersPanel.java
1 package tim.prune.function.estimate;
2
3 import java.awt.Component;
4 import java.awt.GridLayout;
5
6 import javax.swing.BorderFactory;
7 import javax.swing.JLabel;
8 import javax.swing.JPanel;
9
10 import tim.prune.I18nManager;
11 import tim.prune.gui.DisplayUtils;
12
13 /**
14  * Display panel for showing estimation parameters
15  * in a standard grid form
16  */
17 public class ParametersPanel extends JPanel
18 {
19         /** Flag for whether average error should be shown */
20         private boolean _showAverageError = false;
21         /** Labels for calculated parameters */
22         private JLabel _fsUnitsLabel = null, _flatSpeedLabel = null;
23         private JLabel _climbUnitsLabel = null;
24         private JLabel _gentleClimbLabel = null, _steepClimbLabel = null;
25         private JLabel _descentUnitsLabel = null;
26         private JLabel _gentleDescentLabel = null, _steepDescentLabel = null;
27         private JLabel _averageErrorLabel = null;
28
29
30         /**
31          * Constructor
32          * @param inTitleKey key to use for title of panel
33          */
34         public ParametersPanel(String inTitleKey)
35         {
36                 this(inTitleKey, false);
37         }
38
39         /**
40          * Constructor
41          * @param inTitleKey key to use for title of panel
42          * @param inShowAvgError true to show average error line
43          */
44         public ParametersPanel(String inTitleKey, boolean inShowAvgError)
45         {
46                 super();
47                 _showAverageError = inShowAvgError;
48                 if (inTitleKey != null) {
49                         setBorder(BorderFactory.createTitledBorder(I18nManager.getText(inTitleKey)));
50                 }
51                 setLayout(new GridLayout(0, 3, 3, 3));
52                 addLabels();
53         }
54
55         private void addLabels()
56         {
57                 // flat speed
58                 _fsUnitsLabel = new JLabel(I18nManager.getText("dialog.estimatetime.parameters.timefor") + " 5km : ");
59                 _fsUnitsLabel.setAlignmentX(Component.RIGHT_ALIGNMENT);
60                 add(_fsUnitsLabel);
61                 _flatSpeedLabel = new JLabel("60 minutes"); // (filled in later)
62                 add(_flatSpeedLabel);
63                 add(new JLabel(""));
64                 // Headers for gentle and steep
65                 add(new JLabel(""));
66                 JLabel gentleLabel = new JLabel(I18nManager.getText("dialog.estimatetime.gentle"));
67                 add(gentleLabel);
68                 JLabel steepLabel = new JLabel(I18nManager.getText("dialog.estimatetime.steep"));
69                 add(steepLabel);
70                 // Climb
71                 _climbUnitsLabel = new JLabel("Climb 100m: ");
72                 _climbUnitsLabel.setAlignmentX(Component.RIGHT_ALIGNMENT);
73                 add(_climbUnitsLabel);
74                 _gentleClimbLabel = new JLabel("22 minutes"); // (filled in later)
75                 add(_gentleClimbLabel);
76                 _steepClimbLabel = new JLabel("22 minutes"); // (filled in later)
77                 add(_steepClimbLabel);
78                 // Descent
79                 _descentUnitsLabel = new JLabel(I18nManager.getText("dialog.estimatetime.parameters.timefor") + ": ");
80                 _descentUnitsLabel.setAlignmentX(Component.RIGHT_ALIGNMENT);
81                 add(_descentUnitsLabel);
82                 _gentleDescentLabel = new JLabel("22 minutes"); // (filled in later)
83                 add(_gentleDescentLabel);
84                 _steepDescentLabel = new JLabel("22 minutes"); // (filled in later)
85                 add(_steepDescentLabel);
86                 // Average error
87                 if (_showAverageError)
88                 {
89                         JLabel errorLabel = new JLabel(I18nManager.getText("dialog.learnestimationparams.averageerror") + ": ");
90                         errorLabel.setAlignmentX(Component.RIGHT_ALIGNMENT);
91                         add(errorLabel);
92                         _averageErrorLabel = new JLabel("22 minutes"); // (filled in later)
93                         add(_averageErrorLabel);
94                 }
95         }
96
97         /**
98          * Update the labels using the given parameters
99          * @param inParams the parameters used or calculated
100          * @param inAverageError average error as percentage
101          * @param inShowError true to show this error value, false otherwise
102          */
103         private void updateParameters(EstimationParameters inParams, double inAverageError, boolean inShowError)
104         {
105                 if (inParams == null || !inParams.isValid())
106                 {
107                         _flatSpeedLabel.setText("");
108                         _gentleClimbLabel.setText(""); _steepClimbLabel.setText("");
109                         _gentleDescentLabel.setText(""); _steepDescentLabel.setText("");
110                 }
111                 else
112                 {
113                         final String minsText = " " + I18nManager.getText("units.minutes");
114                         String[] values = inParams.getStrings(); // these strings are already formatted locally
115                         _fsUnitsLabel.setText(I18nManager.getText("dialog.estimatetime.parameters.timefor") +
116                                 " " + EstimationParameters.getStandardDistance() + ": ");
117                         _flatSpeedLabel.setText(values[0] + minsText);
118                         final String heightString = " " + EstimationParameters.getStandardClimb() + ": ";
119                         _climbUnitsLabel.setText(I18nManager.getText("dialog.estimatetime.climb") + heightString);
120                         _gentleClimbLabel.setText(values[1] + minsText);
121                         _steepClimbLabel.setText(values[2] + minsText);
122                         _descentUnitsLabel.setText(I18nManager.getText("dialog.estimatetime.descent") + heightString);
123                         _gentleDescentLabel.setText(values[3] + minsText);
124                         _steepDescentLabel.setText(values[4] + minsText);
125                 }
126                 // Average error
127                 if (_averageErrorLabel != null)
128                 {
129                         if (inParams == null || !inParams.isValid() || !inShowError)
130                         {
131                                 _averageErrorLabel.setText("");
132                         }
133                         else
134                         {
135                                 _averageErrorLabel.setText(DisplayUtils.formatOneDp(inAverageError) + " %");
136                         }
137                 }
138         }
139
140         /**
141          * Just show the parameters, with no average error
142          * @param inParams parameters to show
143          */
144         public void updateParameters(EstimationParameters inParams)
145         {
146                 updateParameters(inParams, 0.0, false);
147         }
148
149         /**
150          * Show the parameters and the average error
151          * @param inParams parameters to show
152          * @param inAverageError average error as percentage
153          */
154         public void updateParameters(EstimationParameters inParams, double inAverageError)
155         {
156                 updateParameters(inParams, inAverageError, true);
157         }
158 }