package jetbrains.mps.lang.editor.diagram.runtime.jetpad.views; /*Generated by MPS */ import jetbrains.jetpad.projectional.view.GroupView; import jetbrains.jetpad.model.property.Property; import jetbrains.jetpad.model.property.ValueProperty; import jetbrains.jetpad.model.collections.list.ObservableSingleItemList; import jetbrains.jetpad.mapper.Mapper; import jetbrains.jetpad.mapper.Synchronizers; import jetbrains.jetpad.model.collections.list.ObservableList; import jetbrains.jetpad.projectional.view.View; import jetbrains.jetpad.projectional.diagram.util.SubList; public abstract class AbstractDecoratorView extends GroupView { protected static final int SELECTION_SQUARE_HALF_WIDTH = 3; public final Property<Boolean> hasError = new ValueProperty<Boolean>(false); public final Property<Boolean> isSelected = new ValueProperty<Boolean>(false); protected ObservableSingleItemList<Boolean> errorDecorator = new ObservableSingleItemList<Boolean>(); protected ObservableSingleItemList<Boolean> selectionDecorator = new ObservableSingleItemList<Boolean>(); private GroupView myDecoratorsContainer = new GroupView(); public AbstractDecoratorView() { children().add(myDecoratorsContainer); new Mapper<AbstractDecoratorView, AbstractDecoratorView>(this, this) { @Override protected void registerSynchronizers(Mapper.SynchronizersConfiguration configuration) { super.registerSynchronizers(configuration); configuration.add(Synchronizers.forProperty(hasError, new Runnable() { public void run() { if (hasError.get()) { errorDecorator.setItem(Boolean.TRUE); } else { errorDecorator.setItem(null); } } })); configuration.add(Synchronizers.forProperty(isSelected, new Runnable() { public void run() { if (isSelected.get()) { selectionDecorator.setItem(Boolean.TRUE); } else { selectionDecorator.setItem(null); } } })); } }.attachRoot(); } protected ObservableList<View> childSubList() { return new SubList<View>() { protected ObservableList<View> getBaseList() { return myDecoratorsContainer.children(); } }; } }