/// <inheritdoc /> protected override void InitializeFolderNodeLabels(FolderNodeState state, IFoldingView foldingView, INode viewNode, INode masterNode) { state.ClearLabels(); if (CopyLabels) { var labels = masterNode.Labels; if (labels.Count > 0) { for (var i = 0; i < labels.Count; i++) { var label = labels[i]; // If the node is a choreographyNode, just copy all Labels if (masterNode.Style is ChoreographyNodeStyle) { state.AddLabel(label.Text, label.LayoutParameter, label.Style, label.PreferredSize, label.Tag); } else { // if subProcessNode, create new Layout & Style var labelStyle = CreateLabelStyle(foldingView, null, label); var labelModel = new InteriorStretchLabelModel { Insets = new InsetsD(3, 3, 3, 3) }; var labelLayoutParameter = labelModel.CreateParameter(InteriorStretchLabelModel.Position.Center); state.AddLabel(label.Text, labelLayoutParameter ?? label.LayoutParameter, labelStyle ?? label.Style, label.PreferredSize, label.Tag); } } } } }
public override void UpdateFolderNodeState(FolderNodeState state, IFoldingView foldingView, INode viewNode, INode masterNode) { SynchronizeLabels(state, foldingView, viewNode, masterNode); // Copys the changed master Style to the state state.Style = masterNode.Style; }
/// <inheritdoc /> protected override void InitializeFolderNodePorts(FolderNodeState state, IFoldingView foldingView, INode viewNode, INode masterNode) { foreach (var port in viewNode.Ports) { var masterPort = foldingView.GetMasterItem(port); var newStyle = CreatePortStyle(foldingView, port, masterPort); var portState = state.GetFoldingPortState(masterPort); if (newStyle != null) { portState.Style = newStyle; } var newLocationParameter = CreatePortLocationParameter(foldingView, port, masterPort); if (newLocationParameter != null) { portState.LocationParameter = newLocationParameter; } if (masterPort.Labels.Count > 0) { for (var i = 0; i < masterPort.Labels.Count; i++) { var label = masterPort.Labels[i]; var labelStyle = CreateLabelStyle(foldingView, null, label); var labelLayoutParameter = CreateLabelLayoutParameter(foldingView, null, label); portState.AddLabel(label.Text, labelLayoutParameter ?? label.LayoutParameter, labelStyle ?? label.Style, label.PreferredSize, label.Tag); } } } }
/// <summary> /// Called by <see cref="UpdateFolderNodeState" /> to synchronize all labels, if <see cref="CopyLabels" /> /// is enabled. Also synchronizes all port labels of ports connected to the node. /// </summary> /// <remarks>This will adjust the label text property.</remarks> /// <param name="state">The node view state whose labels should be synchronized.</param> /// <param name="foldingView">The folding view.</param> /// <param name="viewNode">The local node instance.</param> /// <param name="masterNode">The master node.</param> protected override void SynchronizeLabels(FolderNodeState state, IFoldingView foldingView, INode viewNode, INode masterNode) { if (CopyLabels) { if (masterNode.Labels.Count > 0 && state.Labels.Count > 0) { for (var i = 0; i < masterNode.Labels.Count; i++) { var masterLabel = masterNode.Labels[i]; var labelViewState = state.Labels[i]; labelViewState.Text = masterLabel.Text; labelViewState.PreferredSize = masterLabel.PreferredSize; labelViewState.Tag = masterLabel.Tag; } } if (masterNode.Ports.Count > 0) { for (var j = 0; j < masterNode.Ports.Count; j++) { var port = masterNode.Ports[j]; if (port.Labels.Count > 0) { for (var i = 0; i < port.Labels.Count; i++) { var masterLabel = port.Labels[i]; var labelViewState = state.Ports[j].Labels[i]; labelViewState.Text = masterLabel.Text; labelViewState.PreferredSize = masterLabel.PreferredSize; labelViewState.Tag = masterLabel.Tag; } } } } } }