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;
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.Track;
import tim.prune.data.Unit;
import tim.prune.data.UnitSetLibrary;
+import tim.prune.tips.TipManager;
/**
* Abstract superclass of the two correlator functions
{
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<String> _distUnitsDropdown = null;
private JButton _nextButton = null, _backButton = null;
protected JButton _okButton = null;
+
/**
* Constructor
* @param inApp App object to report actions to
_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);
}
&& 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);
}
}
}
- /**
- * @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
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);
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);
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);
distLimitPanel.add(_limitDistBox);
String[] distUnitsOptions = {I18nManager.getText("units.kilometres"), I18nManager.getText("units.metres"),
I18nManager.getText("units.miles")};
- _distUnitsDropdown = new JComboBox(distUnitsOptions);
+ _distUnitsDropdown = new JComboBox<String>(distUnitsOptions);
_distUnitsDropdown.addItemListener(optionsChangedListener);
distLimitPanel.add(_distUnitsDropdown);
limitsPanel.add(distLimitPanel);
*/
private boolean isCardEnabled(int inCardNum)
{
- if (_cardEnabled == null) {_cardEnabled = getCardEnabledFlags();}
+ if (_cardEnabled == null) {
+ _cardEnabled = getCardEnabledFlags();
+ }
return (inCardNum >= 0 && inCardNum < _cardEnabled.length && _cardEnabled[inCardNum]);
}
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());
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());
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<numPoints; i++)
{
Timestamp pointStamp = point.getTimestamp();
if (pointStamp != null && pointStamp.isValid())
{
- long numSeconds = pointStamp.getSecondsSince(mediaStamp);
+ long numSeconds = pointStamp.getSecondsSince(mediaStamp, _timezone)
+ + inOffset.getTotalSeconds();
pair.addPoint(point, numSeconds);
}
}