package jetbrains.mps.samples.componentDependencies.editor;
/*Generated by MPS */
import jetbrains.mps.lang.editor.figures.library.NamedBoxFigure;
import jetbrains.jetpad.cell.TextCell;
import jetbrains.jetpad.values.Color;
import jetbrains.jetpad.cell.toView.CellView;
import jetbrains.jetpad.model.property.Property;
import jetbrains.jetpad.mapper.MapperFactory;
import jetbrains.jetpad.mapper.Mapper;
import jetbrains.jetpad.mapper.Synchronizers;
import jetbrains.jetpad.model.property.WritableProperty;
import jetbrains.jetpad.projectional.view.View;
import jetbrains.jetpad.projectional.diagram.view.DiagramNodeView;
import jetbrains.jetpad.projectional.diagram.base.GridDirection;
public class CustomNamedBoxFigure extends NamedBoxFigure {
private TextCell myCell = new TextCell();
public CustomNamedBoxFigure() {
this(new CustomNamedBoxFigure.CustomNamedBoxFigureMapperFactory());
background().set(Color.LIGHT_YELLOW);
}
public CustomNamedBoxFigure(CustomNamedBoxFigure.CustomNamedBoxFigureMapperFactory factory) {
CellView cellView = new CellView();
myCell.textColor().set(Color.BLACK);
myCell.text().set("<<No text>>");
cellView.cell.set(myCell);
children().add(cellView);
if (factory != null) {
factory.createMapper(this).attachRoot();
}
}
public Property<String> idText() {
return myCell.text();
}
private static class CustomNamedBoxFigureMapperFactory implements MapperFactory<CustomNamedBoxFigure, CustomNamedBoxFigure> {
public Mapper<? extends CustomNamedBoxFigure, ? extends CustomNamedBoxFigure> createMapper(final CustomNamedBoxFigure figure) {
return new NamedBoxFigure.NamedBoxFigureMapper<CustomNamedBoxFigure>(figure) {
@Override
protected void registerSynchronizers(Mapper.SynchronizersConfiguration configuration) {
super.registerSynchronizers(configuration);
configuration.add(Synchronizers.forProperty(figure.parent(), new WritableProperty<View>() {
public void set(View parentView) {
while (parentView != null) {
if (parentView instanceof DiagramNodeView) {
((DiagramNodeView) parentView).setPortsDirection(GridDirection.DOWN);
}
parentView = parentView.parent().get();
}
}
}));
}
};
}
}
}