X-Git-Url: https://gitweb.fperrin.net/?a=blobdiff_plain;f=tim%2Fprune%2Fcorrelate%2FCorrelator.java;h=0aaafc36577628a1165b5867f539555b2c06abcd;hb=92dad5df664287acb51728e9ea599f150765d34a;hp=248be18b11b49e24cef3cd59ab983e91c164859f;hpb=f35b6d628f68e3b5ef19965ad8988d0dd1eb8efa;p=GpsPrune.git diff --git a/tim/prune/correlate/Correlator.java b/tim/prune/correlate/Correlator.java index 248be18..0aaafc3 100644 --- a/tim/prune/correlate/Correlator.java +++ b/tim/prune/correlate/Correlator.java @@ -6,8 +6,8 @@ import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.util.Calendar; import java.util.Iterator; +import java.util.TimeZone; import java.util.TreeSet; import javax.swing.BorderFactory; @@ -27,14 +27,18 @@ import javax.swing.JTextField; import tim.prune.App; import tim.prune.GenericFunction; import tim.prune.I18nManager; +import tim.prune.config.TimezoneHelper; import tim.prune.data.DataPoint; import tim.prune.data.Distance; import tim.prune.data.Field; -import tim.prune.data.MediaFile; +import tim.prune.data.MediaObject; import tim.prune.data.MediaList; import tim.prune.data.TimeDifference; import tim.prune.data.Timestamp; import tim.prune.data.Track; +import tim.prune.data.Unit; +import tim.prune.data.UnitSetLibrary; +import tim.prune.tips.TipManager; /** * Abstract superclass of the two correlator functions @@ -43,20 +47,21 @@ public abstract class Correlator extends GenericFunction { protected JDialog _dialog; private CardStack _cards = null; - private JLabel _tipLabel = null; private JTable _selectionTable = null; protected JTable _previewTable = null; private boolean _previewEnabled = false; // flag required to enable preview function on final panel private boolean[] _cardEnabled = null; // flag for each card + private TimeZone _timezone = null; private JTextField _offsetHourBox = null, _offsetMinBox = null, _offsetSecBox = null; private JRadioButton _mediaLaterOption = null, _pointLaterOption = null; private JRadioButton _timeLimitRadio = null, _distLimitRadio = null; private JTextField _limitMinBox = null, _limitSecBox = null; private JTextField _limitDistBox = null; - private JComboBox _distUnitsDropdown = null; + private JComboBox _distUnitsDropdown = null; private JButton _nextButton = null, _backButton = null; protected JButton _okButton = null; + /** * Constructor * @param inApp App object to report actions to @@ -108,13 +113,20 @@ public abstract class Correlator extends GenericFunction _dialog.getContentPane().add(makeDialogContents()); _dialog.pack(); } + _okButton.setEnabled(false); + // Init timezone to the currently selected one + _timezone = TimezoneHelper.getSelectedTimezone(); // Go to first available card int card = 0; _cardEnabled = null; - while (!isCardEnabled(card)) {card++;} + while (!isCardEnabled(card)) { + card++; + } _cards.showCard(card); showCard(0); // does set up and next/prev enabling - _okButton.setEnabled(false); + if (!isCardEnabled(1)) { + _app.showTip(TipManager.Tip_ManuallyCorrelateOne); + } _dialog.setVisible(true); } @@ -194,13 +206,13 @@ public abstract class Correlator extends GenericFunction int numMedia = mediaList.getNumMedia(); for (int i=0; i(distUnitsOptions); _distUnitsDropdown.addItemListener(optionsChangedListener); distLimitPanel.add(_distUnitsDropdown); limitsPanel.add(distLimitPanel); @@ -464,7 +464,9 @@ public abstract class Correlator extends GenericFunction */ private boolean isCardEnabled(int inCardNum) { - if (_cardEnabled == null) {_cardEnabled = getCardEnabledFlags();} + if (_cardEnabled == null) { + _cardEnabled = getCardEnabledFlags(); + } return (inCardNum >= 0 && inCardNum < _cardEnabled.length && _cardEnabled[inCardNum]); } @@ -515,6 +517,18 @@ public abstract class Correlator extends GenericFunction _okButton.setEnabled(inCardNum == 2 && ((MediaPreviewTableModel) _previewTable.getModel()).hasAnySelected()); } + /** + * Enable or disable the edit boxes according to the radio button selections + */ + private void enableEditBoxes() + { + // enable/disable text field for distance input + _limitDistBox.setEnabled(_distLimitRadio.isSelected()); + // and for time limits + _limitMinBox.setEnabled(_timeLimitRadio.isSelected()); + _limitSecBox.setEnabled(_timeLimitRadio.isSelected()); + } + /** * Parse the time limit values entered and validate them * @return TimeDifference object describing limit @@ -556,9 +570,9 @@ public abstract class Correlator extends GenericFunction /** * @return the selected distance units from the dropdown */ - protected Distance.Units getSelectedDistanceUnits() + protected Unit getSelectedDistanceUnits() { - final Distance.Units[] distUnits = {Distance.Units.KILOMETRES, Distance.Units.METRES, Distance.Units.MILES}; + final Unit[] distUnits = {UnitSetLibrary.UNITS_KILOMETRES, UnitSetLibrary.UNITS_METRES, UnitSetLibrary.UNITS_MILES}; return distUnits[_distUnitsDropdown.getSelectedIndex()]; } @@ -569,7 +583,9 @@ public abstract class Correlator extends GenericFunction public void createPreview(boolean inFromButton) { // Exit if still on first panel - if (!_previewEnabled) {return;} + if (!_previewEnabled) { + return; + } // Create a TimeDifference based on the edit boxes int numHours = getValue(_offsetHourBox.getText()); int numMins = getValue(_offsetMinBox.getText()); @@ -583,18 +599,14 @@ public abstract class Correlator extends GenericFunction * @param inTimeDiff time difference to use for time offsets * @param inFirstMedia first media object to use for calculating timezone */ - protected void setupPreviewCard(TimeDifference inTimeDiff, MediaFile inFirstMedia) + protected void setupPreviewCard(TimeDifference inTimeDiff, MediaObject inFirstMedia) { _previewEnabled = false; TimeDifference timeDiff = inTimeDiff; if (timeDiff == null) { - // No time difference available, so calculate based on computer's time zone - Timestamp tstamp = null; - if (inFirstMedia != null) { - tstamp = inFirstMedia.getTimestamp(); - } - timeDiff = getTimezoneOffset(tstamp); + // No time difference available, so try with zero + timeDiff = new TimeDifference(0L); } // Use time difference to set edit boxes _offsetHourBox.setText("" + timeDiff.getNumHours()); @@ -603,6 +615,7 @@ public abstract class Correlator extends GenericFunction _mediaLaterOption.setSelected(timeDiff.getIsPositive()); _pointLaterOption.setSelected(!timeDiff.getIsPositive()); _previewEnabled = true; + enableEditBoxes(); createPreview(timeDiff, true); } @@ -619,7 +632,7 @@ public abstract class Correlator extends GenericFunction * @param inMedia media object * @return normally just returns the media timestamp, overridden by audio correlator */ - protected Timestamp getMediaTimestamp(MediaFile inMedia) + protected Timestamp getMediaTimestamp(MediaObject inMedia) { return inMedia.getTimestamp(); } @@ -631,22 +644,26 @@ public abstract class Correlator extends GenericFunction * @param inOffset time offset to apply * @return point pair resulting from correlation */ - protected PointMediaPair getPointPairForMedia(Track inTrack, MediaFile inMedia, TimeDifference inOffset) + protected PointMediaPair getPointPairForMedia(Track inTrack, MediaObject inMedia, TimeDifference inOffset) { PointMediaPair pair = new PointMediaPair(inMedia); - // Add/subtract offset to media timestamp - Timestamp mediaStamp = getMediaTimestamp(inMedia).createMinusOffset(inOffset); - int numPoints = inTrack.getNumPoints(); - for (int i=0; i