Base java event POC
This commit is contained in:
70
src/main/java/ovh/gasser/newshapes/ui/Controller.java
Normal file
70
src/main/java/ovh/gasser/newshapes/ui/Controller.java
Normal file
@@ -0,0 +1,70 @@
|
||||
package ovh.gasser.newshapes.ui;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import ovh.gasser.newshapes.Selection;
|
||||
import ovh.gasser.newshapes.shapes.SCollection;
|
||||
import ovh.gasser.newshapes.shapes.Shape;
|
||||
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.util.Optional;
|
||||
|
||||
public class Controller {
|
||||
private final Logger logger = LoggerFactory.getLogger(ShapesView.class);
|
||||
private final ShapesView view;
|
||||
private final Shape model;
|
||||
private Selection selection;
|
||||
|
||||
Controller(ShapesView view, Shape model) {
|
||||
this.view = view;
|
||||
this.model = model;
|
||||
var adapter = new MouseAdapter() {
|
||||
@Override
|
||||
public void mousePressed(MouseEvent evt) {
|
||||
handleMousePressed(evt);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseDragged(MouseEvent evt) {
|
||||
handleMouseDragged(evt);
|
||||
}
|
||||
};
|
||||
this.view.addMouseMotionListener(adapter);
|
||||
this.view.addMouseListener(adapter);
|
||||
}
|
||||
|
||||
private void handleMouseDragged(MouseEvent evt) {
|
||||
if (selection != null) selection.shape.setLoc(evt.getPoint());
|
||||
view.repaint();
|
||||
}
|
||||
|
||||
private void handleMousePressed(MouseEvent evt) {
|
||||
var sc = (SCollection) this.model;
|
||||
getTarget(evt, sc)
|
||||
.ifPresentOrElse(
|
||||
s -> {
|
||||
if (selection != null) resetSelection();
|
||||
selection = new Selection(s, true);
|
||||
this.logger.debug("Selecting {}", selection.shape);
|
||||
},
|
||||
() -> {
|
||||
if (selection != null) resetSelection();
|
||||
}
|
||||
);
|
||||
view.repaint();
|
||||
}
|
||||
|
||||
private void resetSelection() {
|
||||
this.logger.debug("Un-selecting {}", selection.shape);
|
||||
selection.unselect();
|
||||
selection = null;
|
||||
}
|
||||
|
||||
private Optional<Shape> getTarget(MouseEvent evt, SCollection sc) {
|
||||
return sc.stream()
|
||||
.filter(s -> s.getBounds().contains(evt.getPoint()))
|
||||
.findFirst();
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user