+package tim.prune.function.estimate;
+
+import java.awt.Component;
+import java.awt.GridLayout;
+
+import javax.swing.BorderFactory;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import tim.prune.I18nManager;
+import tim.prune.gui.DisplayUtils;
+
+/**
+ * Display panel for showing estimation parameters
+ * in a standard grid form
+ */
+public class ParametersPanel extends JPanel
+{
+ /** Flag for whether average error should be shown */
+ private boolean _showAverageError = false;
+ /** Labels for calculated parameters */
+ private JLabel _fsUnitsLabel = null, _flatSpeedLabel = null;
+ private JLabel _climbUnitsLabel = null;
+ private JLabel _gentleClimbLabel = null, _steepClimbLabel = null;
+ private JLabel _descentUnitsLabel = null;
+ private JLabel _gentleDescentLabel = null, _steepDescentLabel = null;
+ private JLabel _averageErrorLabel = null;
+
+
+ /**
+ * Constructor
+ * @param inTitleKey key to use for title of panel
+ */
+ public ParametersPanel(String inTitleKey)
+ {
+ this(inTitleKey, false);
+ }
+
+ /**
+ * Constructor
+ * @param inTitleKey key to use for title of panel
+ * @param inShowAvgError true to show average error line
+ */
+ public ParametersPanel(String inTitleKey, boolean inShowAvgError)
+ {
+ super();
+ _showAverageError = inShowAvgError;
+ if (inTitleKey != null) {
+ setBorder(BorderFactory.createTitledBorder(I18nManager.getText(inTitleKey)));
+ }
+ setLayout(new GridLayout(0, 3, 3, 3));
+ addLabels();
+ }
+
+ private void addLabels()
+ {
+ // flat speed
+ _fsUnitsLabel = new JLabel(I18nManager.getText("dialog.estimatetime.parameters.timefor") + " 5km : ");
+ _fsUnitsLabel.setAlignmentX(Component.RIGHT_ALIGNMENT);
+ add(_fsUnitsLabel);
+ _flatSpeedLabel = new JLabel("60 minutes"); // (filled in later)
+ add(_flatSpeedLabel);
+ add(new JLabel(""));
+ // Headers for gentle and steep
+ add(new JLabel(""));
+ JLabel gentleLabel = new JLabel(I18nManager.getText("dialog.estimatetime.gentle"));
+ add(gentleLabel);
+ JLabel steepLabel = new JLabel(I18nManager.getText("dialog.estimatetime.steep"));
+ add(steepLabel);
+ // Climb
+ _climbUnitsLabel = new JLabel("Climb 100m: ");
+ _climbUnitsLabel.setAlignmentX(Component.RIGHT_ALIGNMENT);
+ add(_climbUnitsLabel);
+ _gentleClimbLabel = new JLabel("22 minutes"); // (filled in later)
+ add(_gentleClimbLabel);
+ _steepClimbLabel = new JLabel("22 minutes"); // (filled in later)
+ add(_steepClimbLabel);
+ // Descent
+ _descentUnitsLabel = new JLabel(I18nManager.getText("dialog.estimatetime.parameters.timefor") + ": ");
+ _descentUnitsLabel.setAlignmentX(Component.RIGHT_ALIGNMENT);
+ add(_descentUnitsLabel);
+ _gentleDescentLabel = new JLabel("22 minutes"); // (filled in later)
+ add(_gentleDescentLabel);
+ _steepDescentLabel = new JLabel("22 minutes"); // (filled in later)
+ add(_steepDescentLabel);
+ // Average error
+ if (_showAverageError)
+ {
+ JLabel errorLabel = new JLabel(I18nManager.getText("dialog.learnestimationparams.averageerror") + ": ");
+ errorLabel.setAlignmentX(Component.RIGHT_ALIGNMENT);
+ add(errorLabel);
+ _averageErrorLabel = new JLabel("22 minutes"); // (filled in later)
+ add(_averageErrorLabel);
+ }
+ }
+
+ /**
+ * Update the labels using the given parameters
+ * @param inParams the parameters used or calculated
+ * @param inAverageError average error as percentage
+ * @param inShowError true to show this error value, false otherwise
+ */
+ private void updateParameters(EstimationParameters inParams, double inAverageError, boolean inShowError)
+ {
+ if (inParams == null || !inParams.isValid())
+ {
+ _flatSpeedLabel.setText("");
+ _gentleClimbLabel.setText(""); _steepClimbLabel.setText("");
+ _gentleDescentLabel.setText(""); _steepDescentLabel.setText("");
+ }
+ else
+ {
+ final String minsText = " " + I18nManager.getText("units.minutes");
+ String[] values = inParams.getStrings(); // these strings are already formatted locally
+ _fsUnitsLabel.setText(I18nManager.getText("dialog.estimatetime.parameters.timefor") +
+ " " + EstimationParameters.getStandardDistance() + ": ");
+ _flatSpeedLabel.setText(values[0] + minsText);
+ final String heightString = " " + EstimationParameters.getStandardClimb() + ": ";
+ _climbUnitsLabel.setText(I18nManager.getText("dialog.estimatetime.climb") + heightString);
+ _gentleClimbLabel.setText(values[1] + minsText);
+ _steepClimbLabel.setText(values[2] + minsText);
+ _descentUnitsLabel.setText(I18nManager.getText("dialog.estimatetime.descent") + heightString);
+ _gentleDescentLabel.setText(values[3] + minsText);
+ _steepDescentLabel.setText(values[4] + minsText);
+ }
+ // Average error
+ if (_averageErrorLabel != null)
+ {
+ if (inParams == null || !inParams.isValid() || !inShowError)
+ {
+ _averageErrorLabel.setText("");
+ }
+ else
+ {
+ _averageErrorLabel.setText(DisplayUtils.formatOneDp(inAverageError) + " %");
+ }
+ }
+ }
+
+ /**
+ * Just show the parameters, with no average error
+ * @param inParams parameters to show
+ */
+ public void updateParameters(EstimationParameters inParams)
+ {
+ updateParameters(inParams, 0.0, false);
+ }
+
+ /**
+ * Show the parameters and the average error
+ * @param inParams parameters to show
+ * @param inAverageError average error as percentage
+ */
+ public void updateParameters(EstimationParameters inParams, double inAverageError)
+ {
+ updateParameters(inParams, inAverageError, true);
+ }
+}