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