improve bulk selection #2
@ -127,7 +127,7 @@ public class MarioKartWorldTracker {
|
|||||||
panel.setCompletionState(false);
|
panel.setCompletionState(false);
|
||||||
}, null));
|
}, null));
|
||||||
bulk.add(item("Bulk Mark", T -> {
|
bulk.add(item("Bulk Mark", T -> {
|
||||||
panel.startBulkMarking(panel.getMousePosition());
|
panel.startBulkMarking();
|
||||||
}, KeyStroke.getKeyStroke('m')));
|
}, KeyStroke.getKeyStroke('m')));
|
||||||
bar.add(bulk);
|
bar.add(bulk);
|
||||||
JMenu fuckups = new JMenu("I Fucked up");
|
JMenu fuckups = new JMenu("I Fucked up");
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package speiger.src.ui;
|
package speiger.src.ui;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
|
import java.awt.Cursor;
|
||||||
import java.awt.EventQueue;
|
import java.awt.EventQueue;
|
||||||
import java.awt.Graphics;
|
import java.awt.Graphics;
|
||||||
import java.awt.Graphics2D;
|
import java.awt.Graphics2D;
|
||||||
@ -34,6 +35,8 @@ public class MapPanel extends JPanel {
|
|||||||
Point lastDrag = null;
|
Point lastDrag = null;
|
||||||
Point startPos;
|
Point startPos;
|
||||||
Point lastPos;
|
Point lastPos;
|
||||||
|
Point dragStart = null;
|
||||||
|
boolean bulkSelectionBegin;
|
||||||
Image map = new ImageIcon(MapPanel.class.getResource("/assets/images/map.png")).getImage();
|
Image map = new ImageIcon(MapPanel.class.getResource("/assets/images/map.png")).getImage();
|
||||||
Image[] medal = new Image[] {
|
Image[] medal = new Image[] {
|
||||||
new ImageIcon(MapPanel.class.getResource("/assets/images/medal.png")).getImage(),
|
new ImageIcon(MapPanel.class.getResource("/assets/images/medal.png")).getImage(),
|
||||||
@ -88,7 +91,14 @@ public class MapPanel extends JPanel {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mousePressed(MouseEvent e) {
|
public void mousePressed(MouseEvent e) {
|
||||||
|
if (bulkSelectionBegin && startPos == null) {
|
||||||
|
startPos = screenToMap(e.getPoint());
|
||||||
|
bulkSelectionBegin = false;
|
||||||
|
repaint();
|
||||||
|
return;
|
||||||
|
}
|
||||||
lastDrag = e.getPoint();
|
lastDrag = e.getPoint();
|
||||||
|
dragStart = lastDrag;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -106,6 +116,10 @@ public class MapPanel extends JPanel {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mouseDragged(MouseEvent e) {
|
public void mouseDragged(MouseEvent e) {
|
||||||
|
if (startPos != null) {
|
||||||
|
lastPos = screenToMap(e.getPoint());
|
||||||
|
repaint();
|
||||||
|
}
|
||||||
if(lastDrag == null) return;
|
if(lastDrag == null) return;
|
||||||
offset.translate((int)(e.getX() - lastDrag.getX()), (int)(e.getY() - lastDrag.getY()));
|
offset.translate((int)(e.getX() - lastDrag.getX()), (int)(e.getY() - lastDrag.getY()));
|
||||||
lastDrag = e.getPoint();
|
lastDrag = e.getPoint();
|
||||||
@ -113,23 +127,37 @@ public class MapPanel extends JPanel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mouseClicked(MouseEvent e) {
|
public void mouseReleased(MouseEvent e) {
|
||||||
if(startPos != null) {
|
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) {
|
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");
|
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<Marker> markers = getMarkers(getMarkedArea(), zoom);
|
List<Marker> markers = getMarkers(getMarkedArea(), zoom);
|
||||||
if(markers.isEmpty()) return;
|
if(markers.isEmpty()) return;
|
||||||
boolean completion = result == 0;
|
boolean completion = result == JOptionPane.OK_OPTION;
|
||||||
Registry.INSTANCE.setBulkOperation(true);
|
Registry.INSTANCE.setBulkOperation(true);
|
||||||
markers.forEach(T -> T.setCompletion(completion));
|
markers.forEach(T -> T.setCompletion(completion));
|
||||||
Registry.INSTANCE.setBulkOperation(false);
|
Registry.INSTANCE.setBulkOperation(false);
|
||||||
startPos = null;
|
startPos = null;
|
||||||
repaint();
|
repaint();
|
||||||
}
|
}
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void mouseClicked(MouseEvent e) {
|
||||||
Point hover = screenToMap(e.getPoint());
|
Point hover = screenToMap(e.getPoint());
|
||||||
Marker marker = findMarker(hover, zoom);
|
Marker marker = findMarker(hover, zoom);
|
||||||
if(marker == null) return;
|
if(marker == null) return;
|
||||||
@ -153,8 +181,9 @@ public class MapPanel extends JPanel {
|
|||||||
this.progressUpdate = run;
|
this.progressUpdate = run;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void startBulkMarking(Point point) {
|
public void startBulkMarking() {
|
||||||
this.startPos = this.screenToMap(point);
|
bulkSelectionBegin = true;
|
||||||
|
setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onImported() {
|
public void onImported() {
|
||||||
@ -214,20 +243,9 @@ public class MapPanel extends JPanel {
|
|||||||
marker.drawHover(g2, (float)zoom);
|
marker.drawHover(g2, (float)zoom);
|
||||||
}
|
}
|
||||||
if(startPos != null && lastPos != null) {
|
if(startPos != null && lastPos != null) {
|
||||||
Point start = new Point(startPos);
|
Rectangle rect = getMarkedArea();
|
||||||
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;
|
|
||||||
}
|
|
||||||
g2.setColor(Color.BLUE);
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user