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