+ /**
+ * When table selection changes, need to update model and go to the selected field
+ */
+ private void fieldSelected()
+ {
+ int rowNum = _table.getSelectedRow();
+ if (rowNum == _prevRowIndex) {return;} // selection hasn't changed
+ // Check the current values
+ if (_prevRowIndex >= 0)
+ {
+ Field prevField = _track.getFieldList().getField(_prevRowIndex);
+ boolean littleField = prevField.isBuiltIn() && prevField != Field.DESCRIPTION;
+ String newValue = littleField ? _valueField.getText() : _valueArea.getText();
+ // Update the model from the current GUI values
+ _model.updateValue(_prevRowIndex, newValue);
+ }
+
+ if (rowNum < 0)
+ {
+ _fieldnameLabel.setText("");
+ }
+ else
+ {
+ String currValue = _model.getValue(rowNum);
+ Field field = _track.getFieldList().getField(rowNum);
+ _fieldnameLabel.setText(makeFieldLabel(field, _point));
+ _fieldnameLabel.setVisible(true);
+ boolean littleField = field.isBuiltIn() && field != Field.DESCRIPTION;
+ if (littleField) {
+ _valueField.setText(currValue);
+ }
+ else {
+ _valueArea.setText(currValue);
+ }
+ _valueField.setVisible(littleField);
+ _valueAreaPane.setVisible(!littleField);
+ if (littleField) {
+ _valueField.requestFocus();
+ }
+ else {
+ _valueArea.requestFocus();
+ }
+ }
+ _prevRowIndex = rowNum;
+ }
+
+ /**
+ * @param inField field
+ * @param inPoint current point
+ * @return label string for above the entry field / area
+ */
+ private static String makeFieldLabel(Field inField, DataPoint inPoint)
+ {
+ String label = I18nManager.getText("dialog.pointedit.table.field") + ": " + inField.getName();
+ // Add units if the field is altitude / speed / vspeed
+ if (inField == Field.ALTITUDE)
+ {
+ label += makeUnitsLabel(inPoint.hasAltitude() ? inPoint.getAltitude().getUnit() : Config.getUnitSet().getAltitudeUnit());
+ }
+ else if (inField == Field.SPEED)
+ {
+ label += makeUnitsLabel(inPoint.hasHSpeed() ? inPoint.getHSpeed().getUnit() : Config.getUnitSet().getSpeedUnit());
+ }
+ else if (inField == Field.VERTICAL_SPEED)
+ {
+ label += makeUnitsLabel(inPoint.hasVSpeed() ? inPoint.getVSpeed().getUnit() : Config.getUnitSet().getVerticalSpeedUnit());
+ }
+ return label;
+ }
+
+ /**
+ * @param inUnit units for altitude / speed
+ * @return addition to the field label to describe the units
+ */
+ private static String makeUnitsLabel(Unit inUnit)
+ {
+ if (inUnit == null) return "";
+ return " (" + I18nManager.getText(inUnit.getShortnameKey()) + ")";
+ }
+