From f9c4f5e685191e2c09d6c04ddfed5555bbcd255a Mon Sep 17 00:00:00 2001 From: Meduris Date: Tue, 5 Aug 2025 23:37:40 +0200 Subject: [PATCH] improve bulk selection only start with first click after starting bulk selection remove redundant rectangle calc code change cursor while bulk selection is active --- .../speiger/src/MarioKartWorldTracker.java | 2 +- src/main/java/speiger/src/ui/MapPanel.java | 38 ++++++++++--------- 2 files changed, 21 insertions(+), 19 deletions(-) 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..52aee63 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,7 @@ public class MapPanel extends JPanel { Point lastDrag = null; Point startPos; Point lastPos; + 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(), @@ -114,13 +116,23 @@ public class MapPanel extends JPanel { @Override public void mouseClicked(MouseEvent e) { - if(startPos != null) { + if (bulkSelectionBegin && startPos == null) { + startPos = screenToMap(e.getPoint()); + bulkSelectionBegin = false; + repaint(); + return; + } else if(startPos != null) { 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); @@ -153,8 +165,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 +227,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); } }