// License: Public Domain. For details, see LICENSE file.
package livegps;
import static org.openstreetmap.josm.tools.I18n.tr;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.KeyEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import org.openstreetmap.josm.gui.MapFrame;
import org.openstreetmap.josm.gui.dialogs.ToggleDialog;
import org.openstreetmap.josm.tools.Shortcut;
/**
* @author cdaller
*
*/
public class LiveGpsDialog extends ToggleDialog implements PropertyChangeListener {
private static final long serialVersionUID = 6183400754671501117L;
private JLabel statusLabel;
private JLabel wayLabel;
private JLabel latLabel;
private JLabel longLabel;
private JLabel courseLabel;
private JLabel speedLabel;
private JPanel panel;
private LiveGpsStatus status;
private LiveGpsData data;
public LiveGpsDialog(final MapFrame mapFrame) {
super(tr("Live GPS"), "livegps", tr("Show GPS data."),
Shortcut.registerShortcut("subwindow:livegps", tr("Toggle: {0}", tr("Live GPS")),
KeyEvent.VK_G, Shortcut.ALT_CTRL_SHIFT), 100);
panel = new JPanel();
panel.setLayout(new GridLayout(6, 2));
panel.add(new JLabel(tr("Status")));
panel.add(statusLabel = new JLabel());
panel.add(new JLabel(tr("Way Info")));
panel.add(wayLabel = new JLabel());
panel.add(new JLabel(tr("Latitude")));
panel.add(latLabel = new JLabel());
panel.add(new JLabel(tr("Longitude")));
panel.add(longLabel = new JLabel());
panel.add(new JLabel(tr("Speed")));
panel.add(speedLabel = new JLabel());
panel.add(new JLabel(tr("Course")));
panel.add(courseLabel = new JLabel());
createLayout(panel, true, null);
}
@Override
public void propertyChange(PropertyChangeEvent evt) {
if (!isVisible())
return;
if ("gpsdata".equals(evt.getPropertyName())) {
data = (LiveGpsData) evt.getNewValue();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
if (data.isFix()) {
panel.setBackground(Color.WHITE);
latLabel.setText(data.getLatitude() + "deg");
longLabel.setText(data.getLongitude() + "deg");
double mySpeed = data.getSpeed() * 3.6f;
speedLabel.setText((Math.round(mySpeed*100)/100) + "km/h");
courseLabel.setText(data.getCourse() + "deg");
String wayString = data.getWayInfo();
if (!wayString.isEmpty()) {
wayLabel.setText(wayString);
} else {
wayLabel.setText(tr("unknown"));
}
} else {
latLabel.setText("");
longLabel.setText("");
speedLabel.setText("");
courseLabel.setText("");
panel.setBackground(Color.RED);
}
} });
} else if ("gpsstatus".equals(evt.getPropertyName())) {
status = (LiveGpsStatus) evt.getNewValue();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
statusLabel.setText(status.getStatusMessage());
if (status.getStatus() != LiveGpsStatus.GpsStatus.CONNECTED) {
panel.setBackground(Color.RED);
} else {
panel.setBackground(Color.WHITE);
}
} });
}
}
}