package jetbrains.mps.testHybridEditor.diagram.generated.editor;
/*Generated by MPS */
import jetbrains.mps.editor.runtime.descriptor.AbstractEditorBuilder;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.mps.openapi.model.SNode;
import jetbrains.mps.openapi.editor.EditorContext;
import jetbrains.mps.openapi.editor.cells.EditorCell;
import jetbrains.mps.nodeEditor.cells.jetpad.BlockCell;
import jetbrains.mps.nodeEditor.cells.jetpad.PropertyMapperCell;
import jetbrains.mps.nodeEditor.cells.jetpad.ReadableModelProperty;
import jetbrains.jetpad.model.collections.list.ObservableList;
import jetbrains.jetpad.model.collections.list.ObservableArrayList;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SPropertyOperations;
import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory;
import jetbrains.mps.util.Pair;
import org.jetbrains.mps.openapi.model.SNodeReference;
import jetbrains.mps.smodel.SNodePointer;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SLinkOperations;
import java.util.HashSet;
import jetbrains.jetpad.mapper.Mapper;
import jetbrains.jetpad.projectional.diagram.view.DiagramNodeView;
import jetbrains.jetpad.mapper.Synchronizers;
import jetbrains.jetpad.mapper.MapperFactory;
import jetbrains.jetpad.projectional.view.View;
import jetbrains.jetpad.projectional.view.RectView;
import jetbrains.jetpad.values.Color;
import jetbrains.jetpad.geometry.Vector;
import jetbrains.mps.nodeEditor.cells.jetpad.JetpadUtils;
import jetbrains.jetpad.model.property.WritableProperty;
import jetbrains.mps.editor.runtime.selection.SelectionUtil;
import jetbrains.mps.lang.editor.figures.sandbox.PolygonContentView;
import jetbrains.mps.lang.editor.diagram.runtime.jetpad.views.MovableContentView;
import jetbrains.jetpad.geometry.Rectangle;
import jetbrains.mps.internal.collections.runtime.Sequence;
import jetbrains.mps.nodeEditor.cells.jetpad.DiagramCell;
import jetbrains.mps.lang.editor.diagram.runtime.jetpad.views.NodeDecoratorView;
import jetbrains.jetpad.model.property.Properties;
import jetbrains.mps.lang.editor.diagram.runtime.jetpad.views.ResizableContentView;
import jetbrains.mps.lang.editor.diagram.runtime.jetpad.views.PortDecoratorView;
import java.util.Set;
import jetbrains.jetpad.model.property.ReadableProperty;
/*package*/ class BlockInstance_diagram_EditorBuilder_a extends AbstractEditorBuilder {
@NotNull
private SNode myNode;
public BlockInstance_diagram_EditorBuilder_a(@NotNull EditorContext context, @NotNull SNode node) {
super(context);
myNode = node;
}
@NotNull
@Override
public SNode getNode() {
return myNode;
}
/*package*/ EditorCell createCell() {
return createDiagramNode_79747v_a();
}
private EditorCell createDiagramNode_79747v_a() {
BlockCell editorCell = new BlockInstance_diagram_EditorBuilder_a.BlockCellImpl_79747v_a(getEditorContext(), myNode);
editorCell.setCellId("DiagramNode_79747v_a");
editorCell.setBig(true);
editorCell.setCellContext(getCellFactory().getCellContext());
BlockActionMap.setCellActions(editorCell, myNode, getEditorContext());
return editorCell;
}
private class BlockCellImpl_79747v_a extends BlockCell {
private final PropertyMapperCell<String> myPropertyCell_79747v_a0a;
private final ReadableModelProperty<String> myProperty_79747v_a1a;
private final PropertyMapperCell<Integer> myPropertyCell_79747v_a2a;
private final PropertyMapperCell<Integer> myPropertyCell_79747v_a3a;
private final PropertyMapperCell<Integer> myPropertyCell_79747v_a4a;
private final PropertyMapperCell<Integer> myPropertyCell_79747v_a5a;
private final ObservableList<SNode> myInputPorts = new ObservableArrayList<SNode>();
private final ObservableList<SNode> myOutputPorts = new ObservableArrayList<SNode>();
private BlockCellImpl_79747v_a(EditorContext editorContext, final SNode node) {
super(editorContext, node);
myPropertyCell_79747v_a0a = new PropertyMapperCell<String>(editorContext, node) {
protected String getModelPropertyValueImpl() {
return SPropertyOperations.getString(node, MetaAdapterFactory.getProperty(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L, 0x110396ec041L, "name"));
}
protected void setModelPropertyValueImpl(String value) {
SPropertyOperations.set(node, MetaAdapterFactory.getProperty(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L, 0x110396ec041L, "name"), value);
}
};
addEditorCell(myPropertyCell_79747v_a0a);
myPropertyCell_79747v_a0a.getEditorComponent().getUpdater().getCurrentUpdateSession().registerCleanDependency(myPropertyCell_79747v_a0a, new Pair<SNodeReference, String>(new SNodePointer(node), "name"));
myProperty_79747v_a1a = new ReadableModelProperty<String>() {
protected String getModelPropertyValue() {
return SPropertyOperations.getString(SLinkOperations.getTarget(getSNode(), MetaAdapterFactory.getReferenceLink(0x913a1d639e1948faL, 0xad03e33ecccd3814L, 0x20a804e2ec43f49dL, 0x20a804e2ec4404a9L, "metaBlock")), MetaAdapterFactory.getProperty(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L, 0x110396ec041L, "name"));
}
};
addModelProperty(myProperty_79747v_a1a);
myPropertyCell_79747v_a2a = new PropertyMapperCell<Integer>(editorContext, node) {
protected Integer getModelPropertyValueImpl() {
return SPropertyOperations.getInteger(node, MetaAdapterFactory.getProperty(0x913a1d639e1948faL, 0xad03e33ecccd3814L, 0x20a804e2ec43f49dL, 0x20a804e2ec440489L, "x"));
}
protected void setModelPropertyValueImpl(Integer value) {
SPropertyOperations.set(node, MetaAdapterFactory.getProperty(0x913a1d639e1948faL, 0xad03e33ecccd3814L, 0x20a804e2ec43f49dL, 0x20a804e2ec440489L, "x"), "" + (value));
}
};
addEditorCell(myPropertyCell_79747v_a2a);
myPropertyCell_79747v_a2a.getEditorComponent().getUpdater().getCurrentUpdateSession().registerCleanDependency(myPropertyCell_79747v_a2a, new Pair<SNodeReference, String>(new SNodePointer(node), "x"));
myPropertyCell_79747v_a3a = new PropertyMapperCell<Integer>(editorContext, node) {
protected Integer getModelPropertyValueImpl() {
return SPropertyOperations.getInteger(node, MetaAdapterFactory.getProperty(0x913a1d639e1948faL, 0xad03e33ecccd3814L, 0x20a804e2ec43f49dL, 0x20a804e2ec44048aL, "y"));
}
protected void setModelPropertyValueImpl(Integer value) {
SPropertyOperations.set(node, MetaAdapterFactory.getProperty(0x913a1d639e1948faL, 0xad03e33ecccd3814L, 0x20a804e2ec43f49dL, 0x20a804e2ec44048aL, "y"), "" + (value));
}
};
addEditorCell(myPropertyCell_79747v_a3a);
myPropertyCell_79747v_a3a.getEditorComponent().getUpdater().getCurrentUpdateSession().registerCleanDependency(myPropertyCell_79747v_a3a, new Pair<SNodeReference, String>(new SNodePointer(node), "y"));
myPropertyCell_79747v_a4a = new PropertyMapperCell<Integer>(editorContext, node) {
protected Integer getModelPropertyValueImpl() {
return SPropertyOperations.getInteger(node, MetaAdapterFactory.getProperty(0x913a1d639e1948faL, 0xad03e33ecccd3814L, 0x20a804e2ec43f49dL, 0x2c11e15d8177197eL, "width"));
}
protected void setModelPropertyValueImpl(Integer value) {
SPropertyOperations.set(node, MetaAdapterFactory.getProperty(0x913a1d639e1948faL, 0xad03e33ecccd3814L, 0x20a804e2ec43f49dL, 0x2c11e15d8177197eL, "width"), "" + (value));
}
};
addEditorCell(myPropertyCell_79747v_a4a);
myPropertyCell_79747v_a4a.getEditorComponent().getUpdater().getCurrentUpdateSession().registerCleanDependency(myPropertyCell_79747v_a4a, new Pair<SNodeReference, String>(new SNodePointer(node), "width"));
myPropertyCell_79747v_a5a = new PropertyMapperCell<Integer>(editorContext, node) {
protected Integer getModelPropertyValueImpl() {
return SPropertyOperations.getInteger(node, MetaAdapterFactory.getProperty(0x913a1d639e1948faL, 0xad03e33ecccd3814L, 0x20a804e2ec43f49dL, 0x2c11e15d817719aeL, "height"));
}
protected void setModelPropertyValueImpl(Integer value) {
SPropertyOperations.set(node, MetaAdapterFactory.getProperty(0x913a1d639e1948faL, 0xad03e33ecccd3814L, 0x20a804e2ec43f49dL, 0x2c11e15d817719aeL, "height"), "" + (value));
}
};
addEditorCell(myPropertyCell_79747v_a5a);
myPropertyCell_79747v_a5a.getEditorComponent().getUpdater().getCurrentUpdateSession().registerCleanDependency(myPropertyCell_79747v_a5a, new Pair<SNodeReference, String>(new SNodePointer(node), "height"));
synchronize();
}
public void synchronize() {
super.synchronizeViewWithModel();
myPropertyCell_79747v_a0a.synchronize();
myPropertyCell_79747v_a2a.synchronize();
myPropertyCell_79747v_a3a.synchronize();
myPropertyCell_79747v_a4a.synchronize();
myPropertyCell_79747v_a5a.synchronize();
syncPortObjects(SLinkOperations.getChildren(SLinkOperations.getTarget(getSNode(), MetaAdapterFactory.getReferenceLink(0x913a1d639e1948faL, 0xad03e33ecccd3814L, 0x20a804e2ec43f49dL, 0x20a804e2ec4404a9L, "metaBlock")), MetaAdapterFactory.getContainmentLink(0x913a1d639e1948faL, 0xad03e33ecccd3814L, 0x20a804e2ec40c2c8L, 0x20a804e2ec410486L, "inMetaPorts")), myInputPorts.listIterator(), new HashSet<SNode>(myInputPorts));
syncPortObjects(SLinkOperations.getChildren(SLinkOperations.getTarget(getSNode(), MetaAdapterFactory.getReferenceLink(0x913a1d639e1948faL, 0xad03e33ecccd3814L, 0x20a804e2ec43f49dL, 0x20a804e2ec4404a9L, "metaBlock")), MetaAdapterFactory.getContainmentLink(0x913a1d639e1948faL, 0xad03e33ecccd3814L, 0x20a804e2ec40c2c8L, 0x2cd0b06754c8ec0cL, "outMetaPorts")), myOutputPorts.listIterator(), new HashSet<SNode>(myOutputPorts));
}
public Mapper<SNode, DiagramNodeView> createMapper() {
return new Mapper<SNode, DiagramNodeView>(getSNode(), createDiagramNodeView()) {
@Override
protected void registerSynchronizers(Mapper.SynchronizersConfiguration configuration) {
super.registerSynchronizers(configuration);
configuration.add(Synchronizers.forObservableRole(this, myInputPorts, getTarget().inputs.children(), new MapperFactory<SNode, View>() {
public Mapper<? extends SNode, ? extends View> createMapper(SNode id) {
return new Mapper<SNode, RectView>(id, createPortView(id)) {
@Override
protected void registerSynchronizers(Mapper.SynchronizersConfiguration configuration) {
super.registerSynchronizers(configuration);
getTarget().background().set(Color.LIGHT_GRAY);
getTarget().dimension().set(new Vector(10, 10));
getTarget().prop(JetpadUtils.CONNECTABLE).set(Boolean.TRUE);
configuration.add(Synchronizers.forProperty(getTarget().focused(), new WritableProperty<Boolean>() {
public void set(Boolean isFocused) {
if (isFocused && !(isSelected())) {
SelectionUtil.selectCell(getContext(), getSNode(), getCellId());
}
}
}));
}
};
}
private RectView createPortView(SNode id) {
RectView view = new RectView();
view.prop(JetpadUtils.SOURCE).set(getSNode());
view.prop(JetpadUtils.ID).set(id);
view.focusable().set(true);
return view;
}
}));
configuration.add(Synchronizers.forObservableRole(this, myOutputPorts, getTarget().outputs.children(), new MapperFactory<SNode, View>() {
public Mapper<? extends SNode, ? extends View> createMapper(SNode id) {
return new Mapper<SNode, RectView>(id, createPortView(id)) {
@Override
protected void registerSynchronizers(Mapper.SynchronizersConfiguration configuration) {
super.registerSynchronizers(configuration);
getTarget().background().set(Color.GRAY);
getTarget().dimension().set(new Vector(10, 10));
getTarget().prop(JetpadUtils.CONNECTION_SOURCE).set(Boolean.TRUE);
getTarget().prop(JetpadUtils.CONNECTABLE).set(Boolean.TRUE);
configuration.add(Synchronizers.forProperty(getTarget().focused(), new WritableProperty<Boolean>() {
public void set(Boolean isFocused) {
if (isFocused && !(isSelected())) {
SelectionUtil.selectCell(getContext(), getSNode(), getCellId());
}
}
}));
}
};
}
private RectView createPortView(SNode id) {
RectView view = new RectView();
view.prop(JetpadUtils.SOURCE).set(getSNode());
view.prop(JetpadUtils.ID).set(id);
view.focusable().set(true);
return view;
}
}));
final DiagramNodeView diagramNodeView = getTarget();
configuration.add(Synchronizers.forConstantRole(this, getContentViewMapperSource(), getTarget().contentView.children(), new MapperFactory<String, PolygonContentView>() {
public Mapper<? extends String, ? extends PolygonContentView> createMapper(String block) {
return new Mapper<String, PolygonContentView>(block, new PolygonContentView()) {
@Override
protected void registerSynchronizers(Mapper.SynchronizersConfiguration configuration) {
super.registerSynchronizers(configuration);
configuration.add(Synchronizers.forProperty(getTarget().prop(MovableContentView.POSITION_X), new Runnable() {
public void run() {
updatePositionsFromModel(getTarget(), diagramNodeView);
}
}));
configuration.add(Synchronizers.forProperty(getTarget().prop(MovableContentView.POSITION_Y), new Runnable() {
public void run() {
updatePositionsFromModel(getTarget(), diagramNodeView);
}
}));
configuration.add(Synchronizers.forProperty(getTarget().bounds(), new WritableProperty<Rectangle>() {
public void set(Rectangle bounds) {
getTarget().prop(MovableContentView.POSITION_X).set(bounds.origin.x);
getTarget().prop(MovableContentView.POSITION_Y).set(bounds.origin.y);
}
}));
myPropertyCell_79747v_a0a.registerSynchronizers(configuration, getTarget().text());
configuration.add(Synchronizers.forProperty(myProperty_79747v_a1a, getTarget().metaText()));
myPropertyCell_79747v_a2a.registerSynchronizers(configuration, getTarget().prop(MovableContentView.POSITION_X));
myPropertyCell_79747v_a3a.registerSynchronizers(configuration, getTarget().prop(MovableContentView.POSITION_Y));
myPropertyCell_79747v_a4a.registerSynchronizers(configuration, getTarget().contentWidth);
myPropertyCell_79747v_a5a.registerSynchronizers(configuration, getTarget().contentHeight);
}
};
}
}));
final View targetView = this.getTarget();
configuration.add(Synchronizers.forProperty(targetView.focused(), new WritableProperty<Boolean>() {
public void set(Boolean isFocused) {
if (isFocused && !(isSelected())) {
SelectionUtil.selectCell(getContext(), getSNode(), getCellId());
}
}
}));
configuration.add(Synchronizers.forProperty(mySelectedItem, new WritableProperty<Boolean>() {
public void set(Boolean isSelected) {
if (isSelected) {
for (View view : Sequence.fromIterable(JetpadUtils.getAllChildren(targetView))) {
if (view.focused().get()) {
return;
}
}
targetView.container().focusedView().set(targetView);
} else if (!(isSelected) && targetView.focused().get()) {
targetView.container().focusedView().set(null);
}
}
}));
configuration.add(Synchronizers.forProperty(targetView.bounds(), new WritableProperty<Rectangle>() {
public void set(Rectangle rect) {
DiagramCell diagramCell = getDiagramCell();
if (diagramCell == null) {
return;
}
setX(rect.origin.x + diagramCell.getX());
setY(rect.origin.y + diagramCell.getY());
setWidth(rect.dimension.x);
setHeight(rect.dimension.y);
}
}));
}
};
}
public Mapper<SNode, NodeDecoratorView> createDecorationMapper() {
return new Mapper<SNode, NodeDecoratorView>(getSNode(), new NodeDecoratorView()) {
@Override
protected void registerSynchronizers(Mapper.SynchronizersConfiguration configuration) {
super.registerSynchronizers(configuration);
DiagramCell diagramCell = getDiagramCell();
if (diagramCell == null) {
return;
}
final Mapper<SNode, DiagramNodeView> blockMapper = getBlockMapper();
if (blockMapper == null) {
return;
}
configuration.add(Synchronizers.forProperty(myErrorItem, getTarget().hasError));
configuration.add(Synchronizers.forProperty(blockMapper.getTarget().focused(), getTarget().isSelected));
final PolygonContentView contentView = (PolygonContentView) getContentView();
configuration.add(Synchronizers.forProperty(contentView.bounds(), getTarget().bounds));
configuration.add(Synchronizers.forProperty(Properties.constant(Boolean.TRUE), getTarget().resizable));
configuration.add(Synchronizers.forProperty(getTarget().boundsDelta, new WritableProperty<Rectangle>() {
public void set(Rectangle delta) {
if (delta == null) {
return;
}
Vector positionDelta = delta.origin;
Vector sizeDelta = delta.dimension;
blockMapper.getTarget().move(positionDelta);
contentView.prop(ResizableContentView.PREFERRED_SIZE).set(contentView.prop(ResizableContentView.PREFERRED_SIZE).get().add(sizeDelta));
}
}));
configuration.add(Synchronizers.forObservableRole(this, myInputPorts, getTarget().inputPortDecotatorView.children(), new MapperFactory<SNode, PortDecoratorView>() {
public Mapper<? extends SNode, ? extends PortDecoratorView> createMapper(final SNode id) {
return new Mapper<SNode, PortDecoratorView>(id, new PortDecoratorView()) {
@Override
protected void registerSynchronizers(Mapper.SynchronizersConfiguration configuration) {
DiagramCell diagramCell = getDiagramCell();
if (diagramCell == null) {
return;
}
Mapper<? super SNode, ?> blockDescendantMapper = getDiagramCell().getRootMapper().getDescendantMapper(getSNode());
if (blockDescendantMapper == null) {
return;
}
Set<Mapper<? super SNode, ?>> mappers = blockDescendantMapper.getMappingContext().getMappers(blockDescendantMapper, id);
if (mappers.isEmpty()) {
return;
}
final Mapper<SNode, View> descendantMapper = ((Mapper<SNode, View>) mappers.iterator().next());
configuration.add(Synchronizers.forProperty(((View) descendantMapper.getTarget()).focused(), getTarget().isSelected));
ReadableProperty<Rectangle> bounds = ((View) descendantMapper.getTarget()).bounds();
configuration.add(Synchronizers.forProperty(bounds, getTarget().bounds));
}
};
}
}));
configuration.add(Synchronizers.forObservableRole(this, myOutputPorts, getTarget().outputPortDecotatorView.children(), new MapperFactory<SNode, PortDecoratorView>() {
public Mapper<? extends SNode, ? extends PortDecoratorView> createMapper(final SNode id) {
return new Mapper<SNode, PortDecoratorView>(id, new PortDecoratorView()) {
@Override
protected void registerSynchronizers(Mapper.SynchronizersConfiguration configuration) {
DiagramCell diagramCell = getDiagramCell();
if (diagramCell == null) {
return;
}
Mapper<? super SNode, ?> blockDescendantMapper = getDiagramCell().getRootMapper().getDescendantMapper(getSNode());
if (blockDescendantMapper == null) {
return;
}
Set<Mapper<? super SNode, ?>> mappers = blockDescendantMapper.getMappingContext().getMappers(blockDescendantMapper, id);
if (mappers.isEmpty()) {
return;
}
final Mapper<SNode, View> descendantMapper = ((Mapper<SNode, View>) mappers.iterator().next());
configuration.add(Synchronizers.forProperty(((View) descendantMapper.getTarget()).focused(), getTarget().isSelected));
ReadableProperty<Rectangle> bounds = ((View) descendantMapper.getTarget()).bounds();
configuration.add(Synchronizers.forProperty(bounds, getTarget().bounds));
}
};
}
}));
}
};
}
}
}