Changeset 36330 in osm for applications/editors


Ignore:
Timestamp:
2024-09-05T10:36:28+02:00 (4 months ago)
Author:
stoecker
Message:

add target display, patch by Pauline Thiele

Location:
applications/editors/josm/plugins/livegps/src/livegps
Files:
2 added
5 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/livegps/src/livegps/LiveGPSPreferences.java

    r36257 r36330  
    66import java.awt.GridBagConstraints;
    77import java.awt.GridBagLayout;
     8
     9//import java.beans.PropertyChangeEvent;
     10//import java.beans.PropertyChangeListener;
    811
    912import javax.swing.Box;
     
    3437    /* option to use specify gpsd disabling */
    3538    public static final String C_DISABLED = "livegps.gpsd.disabled";
     39    /* option to use distance visualisation and set threshold */
     40    public static final String C_DISTANCE_VISUALISATION = "livegps.distance_visualisation";
     41    public static final String C_OFFSET_THRESHOLD = "livegps.offset_threshold";
     42    public static final double DEFAULT_THRESHOLD = 0.3;
    3643
    3744    public static final String C_LIVEGPS_COLOR_POSITION = "color.livegps.position";
     
    6168    private final JCheckBox disableGPSD = new JCheckBox(tr("Disable GPSD"));
    6269    private final JCheckBox showOffset = new JCheckBox(tr("Show Distance to nearest way"));
     70    private final JCheckBox showDistanceVisualisation = new JCheckBox(tr("Show distance visualisation"));
     71    private final JTextField threshold = new JTextField(5);
     72    private JLabel thresholdLabel;
    6373
    6474    public LiveGPSPreferences() {
     
    96106        panel.add(showOffset, GBC.eol().fill(GridBagConstraints.HORIZONTAL).insets(0, 0, 0, 5));
    97107
     108        showDistanceVisualisation.setSelected(Config.getPref().getBoolean(C_DISTANCE_VISUALISATION, false));
     109        panel.add(showDistanceVisualisation, GBC.eol().fill(GridBagConstraints.HORIZONTAL).insets(0, 0, 0, 5));
     110
     111        threshold.setText(String.valueOf(Config.getPref().getDouble(C_OFFSET_THRESHOLD, DEFAULT_THRESHOLD)));
     112        threshold.setToolTipText(tr("Threshold, default is {0}", DEFAULT_THRESHOLD));
     113        thresholdLabel = new JLabel(tr("Threshold"));
     114        panel.add(thresholdLabel, GBC.std());
     115        panel.add(threshold, GBC.eol().fill(GridBagConstraints.HORIZONTAL).insets(5, 0, 0, 5));
     116        threshold.setVisible(false);
     117        thresholdLabel.setVisible(false);
     118
     119        updateThreshold(); // beim Start
     120        showDistanceVisualisation.addActionListener(e -> updateThreshold()); // wenn sich was ändert
     121
    98122        panel.add(Box.createVerticalGlue(), GBC.eol().fill(GridBagConstraints.VERTICAL));
    99123        createPreferenceTabWithScrollPane(gui, panel);
     124    }
     125
     126    private void updateThreshold() {
     127        boolean isVisible = showDistanceVisualisation.isSelected();
     128
     129        threshold.setVisible(isVisible);
     130        thresholdLabel.setVisible(isVisible);
    100131    }
    101132
     
    107138        Config.getPref().putBoolean(C_DISABLED, disableGPSD.isSelected());
    108139        Config.getPref().putBoolean(C_WAYOFFSET, showOffset.isSelected());
     140        boolean oldVal = Config.getPref().getBoolean(C_DISTANCE_VISUALISATION, false);
     141        boolean newVal = showDistanceVisualisation.isSelected();
     142        Config.getPref().putBoolean(C_DISTANCE_VISUALISATION, newVal);
     143        Config.getPref().put(C_OFFSET_THRESHOLD, threshold.getText());
     144        if (oldVal != newVal) {
     145            LiveGpsDialog.updateCirclePanelVisibility();
     146        }
    109147        return false;
    110148    }
  • applications/editors/josm/plugins/livegps/src/livegps/LiveGpsData.java

    r36322 r36330  
    3232    private WayPoint waypoint;
    3333    private static final DecimalFormat offsetFormat = new DecimalFormat("0.00");
     34    private double offs = 0;
    3435
    3536    public LiveGpsData(double latitude, double longitude, float course, float speed) {
     
    165166        return getClass().getSimpleName() + "[fix=" + fix + ", lat=" + latLon.lat()
    166167        + ", long=" + latLon.lon() + ", speed=" + speed + ", course=" + course + ']';
     168    }
     169
     170    public void setOffset(double offs) {
     171        this.offs = offs;
     172    }
     173
     174    public double getOffset() {
     175        return this.offs;
    167176    }
    168177
     
    194203                }
    195204                if (Config.getPref().getBoolean(LiveGPSPreferences.C_WAYOFFSET, false)) {
    196                     double offs = Geometry.getDistanceWayNode(way, n);
     205                    offs = Geometry.getDistanceWayNode(way, n);
    197206                    WaySegment ws = Geometry.getClosestWaySegment(way, n);
    198207                    if (!Geometry.angleIsClockwise(ws.getFirstNode(), ws.getSecondNode(), n))
    199                         offs = -offs;
     208                        setOffset(-offs);
    200209                    /* I18N: side offset and way name for livegps way display with offset */
    201210                    wayString = tr("{0} ({1})", offsetFormat.format(offs), wayString);
  • applications/editors/josm/plugins/livegps/src/livegps/LiveGpsDialog.java

    r36121 r36330  
    55
    66import java.awt.Color;
    7 import java.awt.GridLayout;
     7import java.awt.BorderLayout;
     8import java.awt.GridBagLayout;
     9import java.awt.GridBagConstraints;
     10
    811import java.awt.event.KeyEvent;
     12
    913import java.beans.PropertyChangeEvent;
    1014import java.beans.PropertyChangeListener;
     
    1317import javax.swing.JPanel;
    1418import javax.swing.SwingUtilities;
     19import javax.swing.UIManager;
    1520
    1621import org.openstreetmap.josm.data.coor.conversion.CoordinateFormatManager;
     
    4348    private JLabel wayText;
    4449    private JPanel panel;
     50    private JPanel opanel;
     51    private Color backgroundColor;
    4552    private LiveGpsStatus status = new LiveGpsStatus(LiveGpsStatus.GpsStatus.CONNECTING, tr("Connecting"));
    4653    private LiveGpsStatus nmeaStatus = new LiveGpsStatus(LiveGpsStatus.GpsStatus.CONNECTING, tr("Connecting"));
    4754    private LiveGpsData data;
     55    private CirclePanel circlePanel;
     56
     57    private static volatile LiveGpsDialog dialog;
    4858
    4959    public LiveGpsDialog(final MapFrame mapFrame) {
     
    5161        Shortcut.registerShortcut("subwindow:livegps", tr("Toggle: {0}", tr("Live GPS")),
    5262        KeyEvent.VK_G, Shortcut.ALT_CTRL_SHIFT), 100);
     63
     64        dialog = this;
     65
     66        backgroundColor = UIManager.getColor("Panel.background");
     67
     68        opanel = new JPanel();
     69        opanel.setLayout(new BorderLayout());
     70
    5371        panel = new JPanel();
    54         panel.setLayout(new GridLayout(7, 2));
    55         panel.add(statusText = new JLabel(tr("Status gpsd")));
    56         panel.add(statusLabel = new JLabel());
    57         panel.add(nmeaStatusText = new JLabel(tr("Status NMEA")));
    58         panel.add(nmeaStatusLabel = new JLabel());
    59         panel.add(wayText = new JLabel(tr("Way Info")));
    60         panel.add(wayLabel = new JLabel());
    61         panel.add(latText = new JLabel(tr("Latitude")));
    62         panel.add(latLabel = new JLabel());
    63         panel.add(longText = new JLabel(tr("Longitude")));
    64         panel.add(longLabel = new JLabel());
    65         panel.add(new JLabel(tr("Speed")));
    66         panel.add(speedLabel = new JLabel());
    67         panel.add(new JLabel(tr("Course")));
    68         panel.add(courseLabel = new JLabel());
     72
     73        GridBagLayout layout = new GridBagLayout();
     74        panel.setLayout(layout);
     75        GridBagConstraints gbc = new GridBagConstraints();
     76
     77        // first column
     78        gbc.weightx = 0.3;
     79        gbc.gridx = 0;
     80        gbc.anchor = GridBagConstraints.WEST;
     81        gbc.fill = GridBagConstraints.HORIZONTAL;
     82
     83        panel.add(statusText = new JLabel("Status gpsd "), gbc);
     84        panel.add(nmeaStatusText = new JLabel("Status NMEA "), gbc);
     85        panel.add(wayText = new JLabel("Way Info"), gbc);
     86        panel.add(latText = new JLabel("Latitude"), gbc);
     87        panel.add(longText = new JLabel("Longitude"), gbc);
     88        panel.add(new JLabel(tr("Speed")), gbc);
     89        panel.add(new JLabel(tr("Course")), gbc);
     90
     91        // second column
     92        gbc.weightx = 0.7;
     93        gbc.gridx = 1;
     94        gbc.fill = GridBagConstraints.HORIZONTAL;
     95
     96        panel.add(statusLabel = new JLabel(), gbc);
     97        panel.add(nmeaStatusLabel = new JLabel(), gbc);
     98        panel.add(wayLabel = new JLabel(), gbc);
     99        panel.add(latLabel = new JLabel(), gbc);
     100        panel.add(longLabel = new JLabel(), gbc);
     101        panel.add(speedLabel = new JLabel(), gbc);
     102        panel.add(courseLabel = new JLabel(), gbc);
     103
     104        opanel.add(panel, BorderLayout.NORTH);
     105
     106        addPropertyChangeListener(new PropertyChangeListener() {
     107            @Override
     108            public void propertyChange(PropertyChangeEvent evt) {
     109                updateCirclePanelVisibility();
     110            }
     111        });
     112
     113        circlePanel = new CirclePanel(0);
     114        opanel.add(circlePanel, BorderLayout.CENTER);
     115
    69116        setStatusVisibility(true);
    70117        if (Config.getPref().getBoolean(LiveGPSPreferences.C_WAYOFFSET, false)) {
     
    74121            wayText.setText(tr("Way Info"));
    75122        }
    76         createLayout(panel, true, null);
     123        createLayout(opanel, true, null);
     124    }
     125
     126    public static void updateCirclePanelVisibility() {
     127        if (dialog != null) {
     128            boolean vis = Config.getPref().getBoolean(LiveGPSPreferences.C_DISTANCE_VISUALISATION, false);
     129
     130            dialog.circlePanel.setVisible(vis);
     131
     132            dialog.circlePanel.revalidate();
     133            dialog.circlePanel.repaint();
     134        }
    77135    }
    78136
     
    108166            public void run() {
    109167                if (data.isFix()) {
    110                     panel.setBackground(Color.WHITE);
     168                    panel.setBackground(backgroundColor);
    111169                    ICoordinateFormat mCord = CoordinateFormatManager.getDefaultFormat();
    112170                    if (ProjectedCoordinateFormat.INSTANCE.equals(mCord)) {
     
    126184                    String wayString = data.getWayInfo();
    127185                    if (!wayString.isEmpty()) {
    128                         wayLabel.setText(wayString);
     186                        wayLabel.setText(tr("<html><body width={0}>{1}</html>", (int) getWidth()*0.8, wayString));
     187
     188                        circlePanel.setOffset(data.getOffset());
     189                        circlePanel.setBackground(backgroundColor);
     190                        circlePanel.validate();
     191                        circlePanel.repaint();
     192
    129193                    } else {
    130194                        wayLabel.setText(tr("unknown"));
     
    136200                        wayText.setText(tr("Way Info"));
    137201                    }
     202
    138203                } else {
    139204                    latLabel.setText("");
     
    143208                    panel.setBackground(Color.RED);
    144209                }
    145             } });
     210            }
     211
     212            });
    146213        } else if ("gpsstatus".equals(evt.getPropertyName())) {
    147214            LiveGpsStatus oldStatus = status;
     
    162229                    panel.setBackground(Color.RED);
    163230                } else {
    164                     panel.setBackground(Color.WHITE);
     231                    panel.setBackground(backgroundColor);
    165232                }
    166233            } });
  • applications/editors/josm/plugins/livegps/src/livegps/LiveGpsPlugin.java

    r36120 r36330  
    4848    private LiveGpsLayer lgpslayer = null;
    4949
     50    /**
     51     * Main action to start data capture
     52     */
    5053    public class CaptureAction extends JosmAction {
    5154        public CaptureAction() {
     
    6568    }
    6669
     70    /**
     71     * Center view to newest data
     72     */
    6773    public class CenterAction extends JosmAction {
    6874        public CenterAction() {
     
    8288    }
    8389
     90    /**
     91     * Automatically center view to newest data
     92     */
    8493    public class AutoCenterAction extends JosmAction {
    8594        public AutoCenterAction() {
  • applications/editors/josm/plugins/livegps/src/livegps/LiveGpsStatus.java

    r36107 r36330  
    77 */
    88public class LiveGpsStatus {
     9    /**
     10     * Possible status of LiveGPS data input
     11     */
    912    public enum GpsStatus {
    1013        CONNECTING, CONNECTED, DISCONNECTED, CONNECTION_FAILED
Note: See TracChangeset for help on using the changeset viewer.