public ListItemProperty()

in model/src/main/java/jetbrains/jetpad/model/property/ListItemProperty.java [38:82]


  public ListItemProperty(ObservableList<ValueT> list, int index) {
    if (index < 0 || index >= list.size()) {
      throw new IndexOutOfBoundsException("Can’t point to a non-existent item");
    }
    this.myList = list;
    this.index.set(index);

    myReg = list.addListener(new CollectionAdapter<ValueT>() {
      @Override
      public void onItemAdded(CollectionItemEvent<? extends ValueT> event) {
        if (event.getIndex() <= ListItemProperty.this.getIndex().get()) {
          ListItemProperty.this.index.set(ListItemProperty.this.getIndex().get() + 1);
        }
      }

      @Override
      public void onItemSet(CollectionItemEvent<? extends ValueT> event) {
        if (event.getIndex() == ListItemProperty.this.getIndex().get()) {
          final PropertyChangeEvent<ValueT> e = new PropertyChangeEvent<>(event.getOldItem(), event.getNewItem());
          myHandlers.fire(new ListenerCaller<EventHandler<? super PropertyChangeEvent<ValueT>>>() {
            @Override
            public void call(EventHandler<? super PropertyChangeEvent<ValueT>> l) {
              l.onEvent(e);
            }
          });
        }
      }

      @Override
      public void onItemRemoved(CollectionItemEvent<? extends ValueT> event) {
        if (event.getIndex() < ListItemProperty.this.getIndex().get()) {
          ListItemProperty.this.index.set(ListItemProperty.this.getIndex().get() - 1);
        } else if (event.getIndex() == ListItemProperty.this.getIndex().get()) {
          invalidate();
          final PropertyChangeEvent<ValueT> e = new PropertyChangeEvent<>(event.getOldItem(), null);
          myHandlers.fire(new ListenerCaller<EventHandler<? super PropertyChangeEvent<ValueT>>>() {
            @Override
            public void call(EventHandler<? super PropertyChangeEvent<ValueT>> l) {
              l.onEvent(e);
            }
          });
        }
      }
    });
  }