]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - src/tim/prune/function/estimate/ParametersPanel.java
Moved source into separate src directory due to popular request
[GpsPrune.git] / src / tim / prune / function / estimate / ParametersPanel.java
diff --git a/src/tim/prune/function/estimate/ParametersPanel.java b/src/tim/prune/function/estimate/ParametersPanel.java
new file mode 100644 (file)
index 0000000..3632831
--- /dev/null
@@ -0,0 +1,158 @@
+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);
+       }
+}