package jetbrains.mps.lang.editor.figures.library;
/*Generated by MPS */
import jetbrains.jetpad.projectional.view.PolyLineView;
import jetbrains.jetpad.model.property.Property;
import jetbrains.jetpad.model.property.ValueProperty;
import jetbrains.jetpad.values.Color;
import jetbrains.jetpad.projectional.view.View;
import jetbrains.jetpad.geometry.Vector;
import jetbrains.jetpad.mapper.MapperFactory;
import jetbrains.jetpad.mapper.Mapper;
import jetbrains.jetpad.mapper.Synchronizers;
public class BoxFigure extends AbstractVerticalLayoutFigure {
private PolyLineView myPolyLine = new PolyLineView();
public Property<Integer> lineWidth = new ValueProperty<Integer>(1);
public BoxFigure() {
this(new BoxFigure.BoxFigureMapperFactory());
}
protected BoxFigure(BoxFigure.BoxFigureMapperFactory mapperFactory) {
myPolyLine.color().set(Color.GRAY);
children().add(myPolyLine);
if (mapperFactory != null) {
mapperFactory.createMapper(this).attachRoot();
}
}
protected boolean isExcludedFromLayout(View childView) {
return super.isExcludedFromLayout(childView) || childView == myPolyLine;
}
private void adjustPolyLinePoints() {
int width = figureWidth.get();
int height = figureHeight.get();
int lw = lineWidth.get();
int leftInset = lw / 2;
int rightInset = lw - leftInset;
Vector origin = bounds().get().origin;
myPolyLine.points.clear();
myPolyLine.points.add(new Vector(leftInset, leftInset).add(origin));
myPolyLine.points.add(new Vector(width - rightInset, leftInset).add(origin));
myPolyLine.points.add(new Vector(width - rightInset, height - rightInset).add(origin));
myPolyLine.points.add(new Vector(leftInset, height - rightInset).add(origin));
myPolyLine.points.add(new Vector(leftInset, leftInset).add(origin));
}
private static class BoxFigureMapperFactory implements MapperFactory<BoxFigure, BoxFigure> {
public Mapper<? extends BoxFigure, ? extends BoxFigure> createMapper(BoxFigure figure) {
return new BoxFigure.BoxFigureMapper<BoxFigure>(figure);
}
}
protected static class BoxFigureMapper<T extends BoxFigure> extends AbstractVerticalLayoutFigure.AbstractVerticalLayoutFigureMapper<T> {
protected BoxFigureMapper(T figure) {
super(figure);
}
@Override
protected void registerSynchronizers(Mapper.SynchronizersConfiguration configuration) {
super.registerSynchronizers(configuration);
final BoxFigure source = getSource();
configuration.add(Synchronizers.forProperty(source.figureWidth, new Runnable() {
public void run() {
source.adjustPolyLinePoints();
}
}));
configuration.add(Synchronizers.forProperty(source.figureHeight, new Runnable() {
public void run() {
source.adjustPolyLinePoints();
}
}));
configuration.add(Synchronizers.forProperty(source.lineWidth, new Runnable() {
public void run() {
source.adjustPolyLinePoints();
}
}));
configuration.add(Synchronizers.forProperty(source.lineWidth, source.myPolyLine.width()));
}
}
}