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); } }