static

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