diff --git a/src/main/java/speiger/src/MarioKartWorldTracker.java b/src/main/java/speiger/src/MarioKartWorldTracker.java index 6bc9973..0e16d74 100644 --- a/src/main/java/speiger/src/MarioKartWorldTracker.java +++ b/src/main/java/speiger/src/MarioKartWorldTracker.java @@ -127,7 +127,7 @@ public class MarioKartWorldTracker { panel.setCompletionState(false); }, null)); bulk.add(item("Bulk Mark", T -> { - panel.startBulkMarking(panel.getMousePosition()); + panel.startBulkMarking(); }, KeyStroke.getKeyStroke('m'))); bar.add(bulk); JMenu fuckups = new JMenu("I Fucked up"); diff --git a/src/main/java/speiger/src/ui/MapPanel.java b/src/main/java/speiger/src/ui/MapPanel.java index 72ad299..5887134 100644 --- a/src/main/java/speiger/src/ui/MapPanel.java +++ b/src/main/java/speiger/src/ui/MapPanel.java @@ -1,6 +1,7 @@ package speiger.src.ui; import java.awt.Color; +import java.awt.Cursor; import java.awt.EventQueue; import java.awt.Graphics; import java.awt.Graphics2D; @@ -34,6 +35,8 @@ public class MapPanel extends JPanel { Point lastDrag = null; Point startPos; Point lastPos; + Point dragStart = null; + boolean bulkSelectionBegin; Image map = new ImageIcon(MapPanel.class.getResource("/assets/images/map.png")).getImage(); Image[] medal = new Image[] { new ImageIcon(MapPanel.class.getResource("/assets/images/medal.png")).getImage(), @@ -88,7 +91,14 @@ public class MapPanel extends JPanel { @Override public void mousePressed(MouseEvent e) { + if (bulkSelectionBegin && startPos == null) { + startPos = screenToMap(e.getPoint()); + bulkSelectionBegin = false; + repaint(); + return; + } lastDrag = e.getPoint(); + dragStart = lastDrag; } @Override @@ -106,6 +116,10 @@ public class MapPanel extends JPanel { @Override public void mouseDragged(MouseEvent e) { + if (startPos != null) { + lastPos = screenToMap(e.getPoint()); + repaint(); + } if(lastDrag == null) return; offset.translate((int)(e.getX() - lastDrag.getX()), (int)(e.getY() - lastDrag.getY())); lastDrag = e.getPoint(); @@ -113,23 +127,37 @@ public class MapPanel extends JPanel { } @Override - public void mouseClicked(MouseEvent e) { - if(startPos != null) { + public void mouseReleased(MouseEvent e) { + if (lastDrag != null && !e.getPoint().equals(dragStart)) { + lastDrag = null; + dragStart = null; + return; + } + + dragStart = null; + if(startPos != null && !startPos.equals(screenToMap(e.getPoint()))) { if(e.getButton() == 1) { + setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); int result = JOptionPane.showOptionDialog(frame, "What do you want to do?", "Bulk Marking", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, new Object[] {"Complete", "Uncomplete", "Cancel"}, "Complete"); - if(result == 2) return; + if(result == JOptionPane.CANCEL_OPTION || result == JOptionPane.CLOSED_OPTION) { + startPos = null; + repaint(); + return; + } List markers = getMarkers(getMarkedArea(), zoom); if(markers.isEmpty()) return; - boolean completion = result == 0; + boolean completion = result == JOptionPane.OK_OPTION; Registry.INSTANCE.setBulkOperation(true); markers.forEach(T -> T.setCompletion(completion)); Registry.INSTANCE.setBulkOperation(false); startPos = null; repaint(); } - return; } - + } + + @Override + public void mouseClicked(MouseEvent e) { Point hover = screenToMap(e.getPoint()); Marker marker = findMarker(hover, zoom); if(marker == null) return; @@ -153,8 +181,9 @@ public class MapPanel extends JPanel { this.progressUpdate = run; } - public void startBulkMarking(Point point) { - this.startPos = this.screenToMap(point); + public void startBulkMarking() { + bulkSelectionBegin = true; + setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR)); } public void onImported() { @@ -214,20 +243,9 @@ public class MapPanel extends JPanel { marker.drawHover(g2, (float)zoom); } if(startPos != null && lastPos != null) { - Point start = new Point(startPos); - Point end = new Point(lastPos); - if(start.x > end.x) { - int x = start.x; - start.x = end.x; - end.x = x; - } - if(start.y > end.y) { - int y = start.y; - start.y = end.y; - end.y = y; - } + Rectangle rect = getMarkedArea(); g2.setColor(Color.BLUE); - g2.drawRect(start.x, start.y, end.x-start.x, end.y-start.y); + g2.drawRect(rect.x, rect.y, rect.width, rect.height); } }