Base java event POC

This commit is contained in:
2019-03-19 21:17:08 +01:00
parent 95cb82d419
commit 51885d8c53
16 changed files with 587 additions and 0 deletions

View 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();
}
}