package jetbrains.mps.samples.componentDependencies.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.PortCell; import jetbrains.jetpad.mapper.Mapper; 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.projectional.view.View; import jetbrains.jetpad.mapper.Synchronizers; import jetbrains.jetpad.model.property.WritableProperty; import jetbrains.mps.editor.runtime.selection.SelectionUtil; import jetbrains.mps.internal.collections.runtime.Sequence; import jetbrains.jetpad.geometry.Rectangle; import jetbrains.mps.nodeEditor.cells.jetpad.DiagramCell; import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes; import jetbrains.mps.lang.editor.diagram.runtime.jetpad.views.PortDecoratorView; import jetbrains.jetpad.model.property.ReadableProperty; /*package*/ class InPort_diagram_EditorBuilder_a extends AbstractEditorBuilder { @NotNull private SNode myNode; public InPort_diagram_EditorBuilder_a(@NotNull EditorContext context, @NotNull SNode node) { super(context); myNode = node; } @NotNull @Override public SNode getNode() { return myNode; } /*package*/ EditorCell createCell() { return createDiagramPort_a45455_a(); } private EditorCell createDiagramPort_a45455_a() { final EditorCell editorCell = new InPort_diagram_EditorBuilder_a.PortCellImpl_a45455_a(getEditorContext(), myNode); editorCell.setCellId("DiagramPort_a45455_a"); editorCell.setBig(true); editorCell.setCellContext(getCellFactory().getCellContext()); return editorCell; } private class PortCellImpl_a45455_a extends PortCell { private PortCellImpl_a45455_a(EditorContext editorContext, SNode node) { super(editorContext, node); synchronize(); } public Mapper<SNode, RectView> createMapper() { return new Mapper<SNode, RectView>(getSNode(), createPortView()) { @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); 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 void synchronize() { } private RectView createPortView() { RectView portView = new RectView(); configureView(portView, new _FunctionTypes._return_P0_E0<Boolean>() { public Boolean invoke() { return true; } }); portView.prop(JetpadUtils.SOURCE).set(getSNode()); portView.focusable().set(true); return portView; } public Mapper<SNode, PortDecoratorView> createDecorationMapper() { return new Mapper<SNode, PortDecoratorView>(getSNode(), new PortDecoratorView()) { @Override protected void registerSynchronizers(Mapper.SynchronizersConfiguration configuration) { super.registerSynchronizers(configuration); DiagramCell diagramCell = getDiagramCell(); if (diagramCell == null) { return; } final Mapper<? super SNode, ?> descendantMapper = getDiagramCell().getRootMapper().getDescendantMapper(getSNode()); if (descendantMapper == null) { return; } { configuration.add(Synchronizers.forProperty(myErrorItem, getTarget().hasError)); configuration.add(Synchronizers.forProperty(((View) descendantMapper.getTarget()).focused(), getTarget().isSelected)); ReadableProperty<Rectangle> bounds = ((View) descendantMapper.getTarget()).bounds(); configuration.add(Synchronizers.forProperty(bounds, getTarget().bounds)); } } }; } } }