protected void onAttach()

in cell/src/main/java/jetbrains/jetpad/cell/toView/IndentRootCellMapper.java [127:187]


  protected void onAttach(MappingContext ctx) {
    super.onAttach(ctx);

    for (Cell child : getSource().children()) {
      myIndentUpdater.childAdded(child);
    }
    myIndentUpdater.initialized();

    myRegistration = getSource().addListener(new IndentContainerCellListener() {
      @Override
      public void childAdded(CollectionItemEvent<? extends Cell> event) {
        Cell cell = event.getNewItem();
        myIndentUpdater.childAdded(cell);
      }

      @Override
      public void childRemoved(CollectionItemEvent<? extends Cell> event) {
        Cell cell = event.getOldItem();
        myIndentUpdater.childRemoved(cell);
      }

      @Override
      public void propertyChanged(Cell cell, final CellPropertySpec<?> prop, final PropertyChangeEvent<?> event) {
        if (CounterUtil.isCounterProp(prop)) {
          updateCounters(cell, prop, event);
        } else if (prop == Cell.VISIBLE) {
          myIndentUpdater.visibilityChanged(cell, (PropertyChangeEvent<Boolean>) event);
        } else if (Cell.isPopupProp(prop)) {
          IndentRootCellMapper.this.onEvent((PropertyChangeEvent<Cell>) event);
        } else if (prop == Cell.BACKGROUND) {
          updateBackground(cell);
        }
      }

      private void updateCounters(Cell cell, final CellPropertySpec<?> prop, final PropertyChangeEvent<?> event) {
        IndentUtil.iterateLeaves(cell, new Handler<Cell>() {
          @Override
          public void handle(Cell item) {
            BaseCellMapper<?, ?> mapper = (BaseCellMapper<?, ?>) getDescendantMapper(item);
            if (mapper == null) {
              throw new IllegalStateException();
            }
            if (CounterUtil.update(mapper, prop, event)) {
              mapper.refreshProperties();
            }
          }
        });
      }

      private void updateBackground(Cell cell) {
        IndentUtil.iterateLeaves(cell, new Handler<Cell>() {
          @Override
          public void handle(Cell item) {
            BaseCellMapper<?, ?> mapper = (BaseCellMapper<?, ?>) getDescendantMapper(item);
            mapper.setAncestorBackground(AncestorUtil.getAncestorBackground(getSource(), item));
            mapper.refreshProperties();
          }
        });
      }
    });
  }