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.EditorCell_Collection; import jetbrains.mps.nodeEditor.cellLayout.CellLayout_Horizontal; import jetbrains.mps.openapi.editor.style.Style; import jetbrains.mps.editor.runtime.style.StyleImpl; import jetbrains.mps.editor.runtime.style.StyleAttributes; import jetbrains.mps.nodeEditor.cells.jetpad.DiagramCell; import jetbrains.mps.nodeEditor.cellMenu.CompositeSubstituteInfo; import jetbrains.mps.nodeEditor.cellMenu.BasicCellContext; import jetbrains.mps.nodeEditor.cellMenu.SubstituteInfoPartExt; import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory; import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SPropertyOperations; import jetbrains.jetpad.mapper.Mapper; import jetbrains.jetpad.projectional.diagram.view.DiagramView; import jetbrains.jetpad.mapper.Synchronizers; import jetbrains.jetpad.mapper.MapperFactory; import jetbrains.jetpad.projectional.view.View; import jetbrains.mps.nodeEditor.cells.jetpad.BlockCell; import jetbrains.jetpad.projectional.diagram.view.Connection; import jetbrains.mps.nodeEditor.cells.jetpad.ConnectorCell; import jetbrains.jetpad.model.property.WritableProperty; import jetbrains.jetpad.projectional.view.ViewContainer; import jetbrains.mps.lang.editor.diagram.runtime.jetpad.views.DiagramDecoratorView; import java.util.Set; import java.util.HashSet; import java.util.ListIterator; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SLinkOperations; import jetbrains.mps.internal.collections.runtime.ListSequence; import jetbrains.mps.internal.collections.runtime.ITranslator2; import jetbrains.jetpad.projectional.diagram.view.ConnectionRoutingView; import jetbrains.jetpad.projectional.diagram.layout.OrthogonalRouter; /*package*/ class ComponentSet_diagram_EditorBuilder_a extends AbstractEditorBuilder { @NotNull private SNode myNode; public ComponentSet_diagram_EditorBuilder_a(@NotNull EditorContext context, @NotNull SNode node) { super(context); myNode = node; } @NotNull @Override public SNode getNode() { return myNode; } /*package*/ EditorCell createCell() { return createCollection_amytw9_a(); } private EditorCell createCollection_amytw9_a() { EditorCell_Collection editorCell = new EditorCell_Collection(getEditorContext(), myNode, new CellLayout_Horizontal()); editorCell.setCanBeSynchronized(true); editorCell.setCellId("Collection_amytw9_a"); editorCell.setBig(true); editorCell.setCellContext(getCellFactory().getCellContext()); Style style = new StyleImpl(); style.set(StyleAttributes.SELECTABLE, false); editorCell.getStyle().putAll(style); editorCell.addEditorCell(createCollection_amytw9_a0()); return editorCell; } private EditorCell createCollection_amytw9_a0() { EditorCell_Collection editorCell = new EditorCell_Collection(getEditorContext(), myNode, new CellLayout_Horizontal()); editorCell.setCellId("Collection_amytw9_a0"); Style style = new StyleImpl(); style.set(StyleAttributes.SELECTABLE, false); editorCell.getStyle().putAll(style); editorCell.addEditorCell(createDiagram_amytw9_a0a()); return editorCell; } private EditorCell createDiagram_amytw9_a0a() { DiagramCell editorCell = new ComponentSet_diagram_EditorBuilder_a.DiagramCellImpl_amytw9_a0a(getEditorContext(), myNode); editorCell.setCellId("Diagram_amytw9_a0a"); return editorCell; } private class DiagramCellImpl_amytw9_a0a extends DiagramCell { private DiagramCellImpl_amytw9_a0a(EditorContext editorContext, SNode node) { super(editorContext, node); setSubstituteInfo(new CompositeSubstituteInfo(editorContext, new BasicCellContext(node), new SubstituteInfoPartExt[]{createNewDiagramNodeActions(getSNode(), MetaAdapterFactory.getConcept(0x3066bc0924384300L, 0xa9365bd59917ae9bL, 0x565e19763814f144L, "jetbrains.mps.samples.componentDependencies.structure.Component"), MetaAdapterFactory.getContainmentLink(0x3066bc0924384300L, 0xa9365bd59917ae9bL, 0x565e19763814242bL, 0x565e197638146fa8L, "component"), new _FunctionTypes._void_P3_E0<SNode, Integer, Integer>() { public void invoke(SNode node, Integer x, Integer y) { SPropertyOperations.set(node, MetaAdapterFactory.getProperty(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L, 0x110396ec041L, "name"), "New component"); SPropertyOperations.set(node, MetaAdapterFactory.getProperty(0x3066bc0924384300L, 0xa9365bd59917ae9bL, 0x565e19763814f144L, 0x565e1976381bdb4dL, "x"), "" + (x)); SPropertyOperations.set(node, MetaAdapterFactory.getProperty(0x3066bc0924384300L, 0xa9365bd59917ae9bL, 0x565e19763814f144L, 0x565e1976381bdb4fL, "y"), "" + (y)); } })})); synchronize(); } protected SubstituteInfoPartExt[] createPaletteBlockSubstituteInfoPartExts() { return new SubstituteInfoPartExt[]{createNewDiagramNodeActions(getSNode(), MetaAdapterFactory.getConcept(0x3066bc0924384300L, 0xa9365bd59917ae9bL, 0x565e19763814f144L, "jetbrains.mps.samples.componentDependencies.structure.Component"), MetaAdapterFactory.getContainmentLink(0x3066bc0924384300L, 0xa9365bd59917ae9bL, 0x565e19763814242bL, 0x565e197638146fa8L, "component"), new _FunctionTypes._void_P3_E0<SNode, Integer, Integer>() { public void invoke(SNode node, Integer x, Integer y) { SPropertyOperations.set(node, MetaAdapterFactory.getProperty(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L, 0x110396ec041L, "name"), "New component"); SPropertyOperations.set(node, MetaAdapterFactory.getProperty(0x3066bc0924384300L, 0xa9365bd59917ae9bL, 0x565e19763814f144L, 0x565e1976381bdb4dL, "x"), "" + (x)); SPropertyOperations.set(node, MetaAdapterFactory.getProperty(0x3066bc0924384300L, 0xa9365bd59917ae9bL, 0x565e19763814f144L, 0x565e1976381bdb4fL, "y"), "" + (y)); } })}; } protected SubstituteInfoPartExt[] createPaletteConnectorSubstituteInfoPartExts() { return new SubstituteInfoPartExt[]{}; } public Mapper<SNode, DiagramView> createMapper(SNode node) { return new Mapper<SNode, DiagramView>(node, createDiagramView()) { @Override protected void registerSynchronizers(Mapper.SynchronizersConfiguration configuration) { super.registerSynchronizers(configuration); configuration.add(Synchronizers.forObservableRole(this, myBlocks, getTarget().itemsView.children(), new MapperFactory<SNode, View>() { public Mapper<? extends SNode, ? extends View> createMapper(SNode node) { return ((BlockCell) getDirectChildCell(node)).createMapper(); } })); configuration.add(Synchronizers.forObservableRole(this, myConnectors, getTarget().connections, new MapperFactory<SNode, Connection>() { public Mapper<? extends SNode, ? extends Connection> createMapper(SNode node) { return ((ConnectorCell) getDirectChildCell(node)).createMapper(); } })); configuration.add(Synchronizers.forProperty(myIsShowingDragFeedBack, new WritableProperty<Boolean>() { public void set(Boolean showDragFeedBack) { if (showDragFeedBack) { getTarget().connections.add(myDragConnection); } else { getTarget().connections.remove(myDragConnection); } } })); configuration.add(Synchronizers.forProperty(mySelectedItem, new WritableProperty<Boolean>() { public void set(Boolean isSelected) { ViewContainer viewContainer = getTarget().container(); if (viewContainer != null) { if (isSelected && !(viewContainer.root().focused().get())) { viewContainer.focusedView().set(viewContainer.root()); } else if (!(isSelected) && viewContainer.root().focused().get()) { viewContainer.focusedView().set(null); } } } })); } }; } public Mapper<SNode, DiagramDecoratorView> createDecorationMapper(SNode node) { return new Mapper<SNode, DiagramDecoratorView>(getSNode(), new DiagramDecoratorView()) { @Override protected void registerSynchronizers(Mapper.SynchronizersConfiguration configuration) { super.registerSynchronizers(configuration); configuration.add(Synchronizers.forObservableRole(this, myBlocks, getTarget().itemsDecotatorView.children(), new MapperFactory<SNode, View>() { public Mapper<? extends SNode, ? extends View> createMapper(SNode node) { return ((BlockCell) getDirectChildCell(node)).createDecorationMapper(); } })); configuration.add(Synchronizers.forObservableRole(this, myConnectors, getTarget().connectorsDecotatorView.children(), new MapperFactory<SNode, View>() { public Mapper<? extends SNode, ? extends View> createMapper(SNode node) { return ((ConnectorCell) getDirectChildCell(node)).createDecorationMapper(); } })); } }; } public void synchronize() { Set<SNode> existingBlocks = new HashSet<SNode>(myBlocks); ListIterator<SNode> blocksIterator = myBlocks.listIterator(); Set<SNode> existingConnectors = new HashSet<SNode>(myConnectors); ListIterator<SNode> connectorsIterator = myConnectors.listIterator(); syncDiagramElements(SLinkOperations.getChildren(getSNode(), MetaAdapterFactory.getContainmentLink(0x3066bc0924384300L, 0xa9365bd59917ae9bL, 0x565e19763814242bL, 0x565e197638146fa8L, "component")), blocksIterator, existingBlocks, connectorsIterator, existingConnectors); syncDiagramElements(ListSequence.fromList(SLinkOperations.getChildren(getSNode(), MetaAdapterFactory.getContainmentLink(0x3066bc0924384300L, 0xa9365bd59917ae9bL, 0x565e19763814242bL, 0x565e197638146fa8L, "component"))).translate(new ITranslator2<SNode, SNode>() { public Iterable<SNode> translate(SNode it) { return SLinkOperations.getChildren(it, MetaAdapterFactory.getContainmentLink(0x3066bc0924384300L, 0xa9365bd59917ae9bL, 0x565e19763814f144L, 0x565e19763814f147L, "dep")); } }), blocksIterator, existingBlocks, connectorsIterator, existingConnectors); purgeTailNodes(blocksIterator); purgeTailNodes(connectorsIterator); } private DiagramView createDiagramView() { ConnectionRoutingView diagramView = new ConnectionRoutingView(new OrthogonalRouter()); return diagramView; } } }