From 9e46ad50d0c09e4e7fefab748b27b1c41f5c94ba Mon Sep 17 00:00:00 2001 From: Meduris Date: Wed, 6 Aug 2025 23:27:21 +0200 Subject: [PATCH] allow dragging to select bulk area while still allowing to click to select the two corners --- src/main/java/speiger/src/ui/MapPanel.java | 32 ++++++++++++++++------ 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/src/main/java/speiger/src/ui/MapPanel.java b/src/main/java/speiger/src/ui/MapPanel.java index 52aee63..5887134 100644 --- a/src/main/java/speiger/src/ui/MapPanel.java +++ b/src/main/java/speiger/src/ui/MapPanel.java @@ -35,6 +35,7 @@ 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[] { @@ -90,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 @@ -108,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(); @@ -115,13 +127,15 @@ public class MapPanel extends JPanel { } @Override - public void mouseClicked(MouseEvent e) { - if (bulkSelectionBegin && startPos == null) { - startPos = screenToMap(e.getPoint()); - bulkSelectionBegin = false; - repaint(); + public void mouseReleased(MouseEvent e) { + if (lastDrag != null && !e.getPoint().equals(dragStart)) { + lastDrag = null; + dragStart = null; return; - } else if(startPos != null) { + } + + 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"); @@ -139,9 +153,11 @@ public class MapPanel extends JPanel { startPos = null; repaint(); } - return; } - + } + + @Override + public void mouseClicked(MouseEvent e) { Point hover = screenToMap(e.getPoint()); Marker marker = findMarker(hover, zoom); if(marker == null) return;