Add delete shape operation

This commit is contained in:
2025-02-19 10:50:27 +01:00
parent 98b05e435e
commit b4eac668c8
5 changed files with 48 additions and 8 deletions

View File

@@ -6,12 +6,14 @@ import ovh.gasser.newshapes.Selection;
import ovh.gasser.newshapes.shapes.SCollection;
import ovh.gasser.newshapes.shapes.Shape;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Optional;
public class Controller {
private final static Logger logger = LoggerFactory.getLogger(ShapesView.class);
private final static Logger logger = LoggerFactory.getLogger(Controller.class);
private final ShapesView view;
private final Shape model;
private Selection selection;
@@ -19,6 +21,7 @@ public class Controller {
Controller(ShapesView view, Shape model) {
this.view = view;
this.model = model;
var adapter = new MouseAdapter() {
@Override
public void mousePressed(MouseEvent evt) {
@@ -32,6 +35,16 @@ public class Controller {
};
this.view.addMouseMotionListener(adapter);
this.view.addMouseListener(adapter);
this.view.setFocusable(true);
boolean res = this.view.requestFocusInWindow();
assert res;
this.view.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
handleKeyPressed(e);
}
});
}
private void handleMouseDragged(MouseEvent evt) {
@@ -55,6 +68,26 @@ public class Controller {
view.repaint();
}
private void handleKeyPressed(KeyEvent evt) {
switch (evt.getKeyCode()) {
case KeyEvent.VK_DELETE:
deleteSelected();
break;
default:
logger.warn("Pressed unhandled key: {}", evt.getKeyChar());
break;
}
}
private void deleteSelected() {
if (selection == null) return;
logger.debug("Deleting selected shape(s)");
var sc = (SCollection) this.model;
sc.remove(selection.shape);
selection = null;
view.repaint();
}
private void resetSelection() {
logger.debug("Un-selecting {}", selection.shape);
selection.unselect();