in diagram/src/main/java/jetbrains/jetpad/projectional/diagram/view/RootTrait.java [30:104]
static {
final ViewPropertySpec<Vector> prevPoint = new ViewPropertySpec<>("prevLocation");
final ViewPropertySpec<MoveHandler> moveHandler = new ViewPropertySpec<>("currentMoveHandler");
ViewTraitBuilder builder = new ViewTraitBuilder();
builder.on(ViewEvents.MOUSE_PRESSED, new ViewEventHandler<MouseEvent>() {
@Override
public void handle(View view, MouseEvent e) {
view.getProp(prevPoint).set(e.getLocation());
View current = view.viewAt(e.getLocation());
while (current != null) {
MoveHandler mh = current.getProp(MOVE_HANDLER).get();
view.getProp(moveHandler).set(mh);
if (mh != null) break;
current = current.getParent();
}
ViewContainer container = view.container();
View target = container.root().viewAt(e.getLocation());
while (target != null) {
if (target.focusable().get()) {
container.focusedView().set(target);
e.consume();
return;
}
target = target.getParent();
}
container.focusedView().set(null);
e.consume();
}
});
builder.on(ViewEvents.MOUSE_RELEASED, new ViewEventHandler<MouseEvent>() {
@Override
public void handle(View view, MouseEvent e) {
view.getProp(prevPoint).set(null);
view.getProp(moveHandler).set(null);
}
});
builder.on(ViewEvents.MOUSE_DRAGGED, new ViewEventHandler<MouseEvent>() {
@Override
public void handle(View view, MouseEvent e) {
MoveHandler mh = view.getProp(moveHandler).get();
if (mh != null) {
mh.move(e.getLocation().sub(view.getProp(prevPoint).get()));
}
view.getProp(prevPoint).set(e.getLocation());
}
});
builder.on(ViewEvents.KEY_PRESSED, new ViewEventHandler<KeyEvent>() {
@Override
public void handle(View view, KeyEvent e) {
if (e.is(Key.DELETE) || e.is(Key.BACKSPACE)) {
ViewContainer vc = view.container();
View current = vc.focusedView().get();
while (current != null) {
DeleteHandler dh = current.getProp(DELETE_HANDLER).get();
if (dh != null && dh.canDelete()) {
dh.delete();
e.consume();
return;
}
current = current.getParent();
}
}
}
});
ROOT_TRAIT = builder.build();
}