X-Git-Url: http://gitweb.fperrin.net/?a=blobdiff_plain;f=tim%2Fprune%2Fcorrelate%2FCorrelator.java;h=0aaafc36577628a1165b5867f539555b2c06abcd;hb=92dad5df664287acb51728e9ea599f150765d34a;hp=85b96e92304b0a5f1da3ea470272d8d165582972;hpb=4d5796d02a15808311c09448d79e6e7d1de9d636;p=GpsPrune.git diff --git a/tim/prune/correlate/Correlator.java b/tim/prune/correlate/Correlator.java index 85b96e9..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,6 +27,7 @@ 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; @@ -37,6 +38,7 @@ 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 @@ -45,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 @@ -110,14 +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); - _tipLabel.setVisible(!isCardEnabled(1)); + if (!isCardEnabled(1)) { + _app.showTip(TipManager.Tip_ManuallyCorrelateOne); + } _dialog.setVisible(true); } @@ -203,7 +212,7 @@ public abstract class Correlator extends GenericFunction && media.getOriginalStatus() == MediaObject.Status.NOT_CONNECTED) { // Calculate time difference, add to table model - long timeDiff = getMediaTimestamp(media).getSecondsSince(media.getDataPoint().getTimestamp()); + long timeDiff = getMediaTimestamp(media).getSecondsSince(media.getDataPoint().getTimestamp(), _timezone); model.addMedia(media, timeDiff); } } @@ -240,27 +249,6 @@ public abstract class Correlator extends GenericFunction } - /** - * @param inFirstTimestamp timestamp of first photo / audio object, or null if not available - * @return time difference of local time zone from UTC when the first photo was taken - */ - private static TimeDifference getTimezoneOffset(Timestamp inFirstTimestamp) - { - Calendar cal = null; - // Use first timestamp if available - if (inFirstTimestamp != null) { - cal = inFirstTimestamp.getCalendar(); - } - else { - // No photo or no timestamp, just use current time - cal = Calendar.getInstance(); - } - // Both time zone offset and dst offset are based on milliseconds, so convert to seconds - TimeDifference timeDiff = new TimeDifference((cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET)) / 1000); - return timeDiff; - } - - /** * Calculate the median index to select from the table * @param inModel table model @@ -339,9 +327,6 @@ public abstract class Correlator extends GenericFunction card2.setLayout(new BorderLayout()); JPanel card2Top = new JPanel(); card2Top.setLayout(new BoxLayout(card2Top, BoxLayout.Y_AXIS)); - _tipLabel = new JLabel(I18nManager.getText("dialog.correlate.options.tip")); - _tipLabel.setBorder(BorderFactory.createEmptyBorder(8, 6, 5, 6)); - card2Top.add(_tipLabel); JLabel introLabel = new JLabel(I18nManager.getText("dialog.correlate.options.intro")); introLabel.setBorder(BorderFactory.createEmptyBorder(8, 6, 5, 6)); card2Top.add(introLabel); @@ -400,7 +385,7 @@ public abstract class Correlator extends GenericFunction noTimeLimitRadio.addItemListener(optionsChangedListener); noTimeLimitRadio.addActionListener(radioListener); timeLimitPanel.add(noTimeLimitRadio); - _timeLimitRadio = new JRadioButton(I18nManager.getText("dialog.correlate.options.timelimit") + " : "); + _timeLimitRadio = new JRadioButton(I18nManager.getText("dialog.correlate.options.timelimit") + ": "); _timeLimitRadio.addItemListener(optionsChangedListener); _timeLimitRadio.addActionListener(radioListener); timeLimitPanel.add(_timeLimitRadio); @@ -421,7 +406,7 @@ public abstract class Correlator extends GenericFunction noDistLimitRadio.addItemListener(optionsChangedListener); noDistLimitRadio.addActionListener(radioListener); distLimitPanel.add(noDistLimitRadio); - _distLimitRadio = new JRadioButton(I18nManager.getText("dialog.correlate.options.distancelimit")); + _distLimitRadio = new JRadioButton(I18nManager.getText("dialog.correlate.options.distancelimit") + ": "); _distLimitRadio.addItemListener(optionsChangedListener); _distLimitRadio.addActionListener(radioListener); distLimitPanel.add(_distLimitRadio); @@ -431,7 +416,7 @@ public abstract class Correlator extends GenericFunction distLimitPanel.add(_limitDistBox); String[] distUnitsOptions = {I18nManager.getText("units.kilometres"), I18nManager.getText("units.metres"), I18nManager.getText("units.miles")}; - _distUnitsDropdown = new JComboBox(distUnitsOptions); + _distUnitsDropdown = new JComboBox(distUnitsOptions); _distUnitsDropdown.addItemListener(optionsChangedListener); distLimitPanel.add(_distUnitsDropdown); limitsPanel.add(distLimitPanel); @@ -479,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]); } @@ -596,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()); @@ -616,12 +605,8 @@ public abstract class Correlator extends GenericFunction 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()); @@ -665,7 +650,7 @@ public abstract class Correlator extends GenericFunction if (inMedia.hasTimestamp()) { // Add/subtract offset to media timestamp - Timestamp mediaStamp = getMediaTimestamp(inMedia).createMinusOffset(inOffset); + Timestamp mediaStamp = getMediaTimestamp(inMedia); int numPoints = inTrack.getNumPoints(); for (int i=0; i