diff --git a/Core/src/org/sleuthkit/autopsy/geolocation/GeolocationTopComponent.java b/Core/src/org/sleuthkit/autopsy/geolocation/GeolocationTopComponent.java index 0ac8f01dd8..e1a02339e4 100755 --- a/Core/src/org/sleuthkit/autopsy/geolocation/GeolocationTopComponent.java +++ b/Core/src/org/sleuthkit/autopsy/geolocation/GeolocationTopComponent.java @@ -194,6 +194,7 @@ public final class GeolocationTopComponent extends TopComponent { @Override public void open() { super.open(); + mapPanel.clearWaypoints(); geoFilterPanel.clearDataSourceList(); geoFilterPanel.updateDataSourceList(); try { @@ -288,7 +289,7 @@ public final class GeolocationTopComponent extends TopComponent { DateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy-HH-mm-ss", Locale.US); Date date = new Date(); String dateNoTime = dateFormat.format(date); - String reportPath = String.format(REPORT_PATH_FMT_STR, currentCase.getReportDirectory(), currentCase.getDisplayName(), "Goggle Earth KML", dateNoTime); + String reportPath = String.format(REPORT_PATH_FMT_STR, currentCase.getReportDirectory(), currentCase.getDisplayName(), "Google Earth KML", dateNoTime); // Create the root reports directory. try { FileUtil.createFolder(new File(reportPath)); diff --git a/Core/src/org/sleuthkit/autopsy/geolocation/MapPanMouseInputListener.java b/Core/src/org/sleuthkit/autopsy/geolocation/MapPanMouseInputListener.java new file mode 100755 index 0000000000..9f75b13d2a --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/geolocation/MapPanMouseInputListener.java @@ -0,0 +1,115 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2019 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.geolocation; + +import java.awt.Cursor; +import java.awt.Point; +import java.awt.event.MouseEvent; +import java.awt.geom.Point2D; +import javax.swing.SwingUtilities; +import javax.swing.event.MouseInputAdapter; +import org.jxmapviewer.JXMapViewer; + +/** + * MouseInputListener for panning a JXMapViewer + * + * This class is adapted from org.jxmapviewer.input.PanMouseInputListener. + */ +final class MapPanMouseInputListener extends MouseInputAdapter { + + private Point prev; + private final JXMapViewer viewer; + private Cursor priorCursor; + private boolean dragging = false; + + /** + * Construct a new listener. + * + * @param viewer + */ + MapPanMouseInputListener(JXMapViewer viewer) { + this.viewer = viewer; + } + + @Override + public void mousePressed(MouseEvent evt) { + if (!SwingUtilities.isLeftMouseButton(evt)) { + return; + } + if (!viewer.isPanningEnabled()) { + return; + } + + // Store the current click point and current cursor + prev = evt.getPoint(); + priorCursor = viewer.getCursor(); + } + + @Override + public void mouseDragged(MouseEvent evt) { + if (!SwingUtilities.isLeftMouseButton(evt)) { + return; + } + + if (!viewer.isPanningEnabled()) { + return; + } + + // If the map wasn't previously being dragged, set the cursor + if (!dragging) { + viewer.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); + dragging = true; + } + + // Figure out the new map center + Point current = evt.getPoint(); + double x = viewer.getCenter().getX(); + double y = viewer.getCenter().getY(); + + if (prev != null) { + x += prev.x - current.x; + y += prev.y - current.y; + } + + int maxHeight = (int) (viewer.getTileFactory().getMapSize(viewer.getZoom()).getHeight() * viewer + .getTileFactory().getTileSize(viewer.getZoom())); + if (y > maxHeight) { + y = maxHeight; + } + + prev = current; + viewer.setCenter(new Point2D.Double(x, y)); + viewer.repaint(); + } + + @Override + public void mouseReleased(MouseEvent evt) { + if (!SwingUtilities.isLeftMouseButton(evt)) { + return; + } + + prev = null; + + // If we were dragging set the cursor back + if (dragging) { + viewer.setCursor(priorCursor); + dragging = false; + } + } +} diff --git a/Core/src/org/sleuthkit/autopsy/geolocation/MapPanel.java b/Core/src/org/sleuthkit/autopsy/geolocation/MapPanel.java index 48bb3ee81b..eec5e8a7a0 100755 --- a/Core/src/org/sleuthkit/autopsy/geolocation/MapPanel.java +++ b/Core/src/org/sleuthkit/autopsy/geolocation/MapPanel.java @@ -26,7 +26,6 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; -import java.awt.event.MouseEvent; import java.awt.geom.Point2D; import java.awt.image.BufferedImage; import java.beans.PropertyChangeEvent; @@ -54,7 +53,6 @@ import org.jxmapviewer.JXMapViewer; import org.jxmapviewer.OSMTileFactoryInfo; import org.jxmapviewer.VirtualEarthTileFactoryInfo; import org.jxmapviewer.input.CenterMapListener; -import org.jxmapviewer.input.PanMouseInputListener; import org.jxmapviewer.input.ZoomMouseWheelListenerCursor; import org.jxmapviewer.viewer.DefaultTileFactory; import org.jxmapviewer.viewer.GeoPosition; @@ -140,6 +138,8 @@ final public class MapPanel extends javax.swing.JPanel { } } }); + + } /** @@ -172,7 +172,7 @@ final public class MapPanel extends javax.swing.JPanel { mapViewer.setTileFactory(tileFactory); // Add Mouse interactions - MouseInputListener mia = new PanMouseInputListener(mapViewer); + MouseInputListener mia = new MapPanMouseInputListener(mapViewer); mapViewer.addMouseListener(mia); mapViewer.addMouseMotionListener(mia);