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