1 package tim.prune.function.estimate;
3 import java.awt.Component;
4 import java.awt.GridLayout;
6 import javax.swing.BorderFactory;
7 import javax.swing.JLabel;
8 import javax.swing.JPanel;
10 import tim.prune.I18nManager;
11 import tim.prune.gui.DisplayUtils;
14 * Display panel for showing estimation parameters
15 * in a standard grid form
17 public class ParametersPanel extends JPanel
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;
32 * @param inTitleKey key to use for title of panel
34 public ParametersPanel(String inTitleKey)
36 this(inTitleKey, false);
41 * @param inTitleKey key to use for title of panel
42 * @param inShowAvgError true to show average error line
44 public ParametersPanel(String inTitleKey, boolean inShowAvgError)
47 _showAverageError = inShowAvgError;
48 if (inTitleKey != null) {
49 setBorder(BorderFactory.createTitledBorder(I18nManager.getText(inTitleKey)));
51 setLayout(new GridLayout(0, 3, 3, 3));
55 private void addLabels()
58 _fsUnitsLabel = new JLabel(I18nManager.getText("dialog.estimatetime.parameters.timefor") + " 5km : ");
59 _fsUnitsLabel.setAlignmentX(Component.RIGHT_ALIGNMENT);
61 _flatSpeedLabel = new JLabel("60 minutes"); // (filled in later)
64 // Headers for gentle and steep
66 JLabel gentleLabel = new JLabel(I18nManager.getText("dialog.estimatetime.gentle"));
68 JLabel steepLabel = new JLabel(I18nManager.getText("dialog.estimatetime.steep"));
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);
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);
87 if (_showAverageError)
89 JLabel errorLabel = new JLabel(I18nManager.getText("dialog.learnestimationparams.averageerror") + ": ");
90 errorLabel.setAlignmentX(Component.RIGHT_ALIGNMENT);
92 _averageErrorLabel = new JLabel("22 minutes"); // (filled in later)
93 add(_averageErrorLabel);
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
103 private void updateParameters(EstimationParameters inParams, double inAverageError, boolean inShowError)
105 if (inParams == null || !inParams.isValid())
107 _flatSpeedLabel.setText("");
108 _gentleClimbLabel.setText(""); _steepClimbLabel.setText("");
109 _gentleDescentLabel.setText(""); _steepDescentLabel.setText("");
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);
127 if (_averageErrorLabel != null)
129 if (inParams == null || !inParams.isValid() || !inShowError)
131 _averageErrorLabel.setText("");
135 _averageErrorLabel.setText(DisplayUtils.formatOneDp(inAverageError) + " %");
141 * Just show the parameters, with no average error
142 * @param inParams parameters to show
144 public void updateParameters(EstimationParameters inParams)
146 updateParameters(inParams, 0.0, false);
150 * Show the parameters and the average error
151 * @param inParams parameters to show
152 * @param inAverageError average error as percentage
154 public void updateParameters(EstimationParameters inParams, double inAverageError)
156 updateParameters(inParams, inAverageError, true);