/// <summary> /// Inserts the subconnectors. /// </summary> /// <param name="connector">The connector.</param> /// <param name="loadWhenNecessary">if set to <c>true</c> [load when necessary].</param> /// <param name="recursiveExpand">if set to <c>true</c> [recursive expand].</param> /// <param name="item">The item.</param> private void InsertSubconnectors(ExpressionConnectorViewModel connector, bool loadWhenNecessary, bool recursiveExpand, ExpressionConnector item) { var idx = ConnectorsIn.IndexOf(connector); var newConnectors = new List<ExpressionConnectorViewModel>(); foreach (var sc in item.GetSubconnectors().OrderBy(x => x.Name)) { item.SubconnectorsLoaded = true; var newConnector = new ExpressionConnectorViewModel(new ExpressionConnector(ConnectorType.In, sc), _diagramViewModel) { IndentLevel = connector.IndentLevel + 1 }; ConnectorsIn.Insert(++idx, newConnector); newConnectors.Add(newConnector); } if (recursiveExpand) { foreach (var newConnector in newConnectors) { var connectorItem = newConnector.Item as ExpressionConnector; if (connectorItem != null && connectorItem.IsConnectorsGroup && connectorItem.IsConnectorsGroupCollapsed) { continue; } ExpandSubconnectors(newConnector, loadWhenNecessary, true); } } }
/// <summary> /// Deletes the subconnectors. /// </summary> /// <param name="connector">The connector.</param> /// <param name="loadWhenNecessary">if set to <c>true</c> [load when necessary].</param> /// <param name="item">The item.</param> /// <param name="action">The action.</param> private void DeleteSubconnectors(ExpressionConnectorViewModel connector, bool loadWhenNecessary, ExpressionConnector item) { foreach (var sc in item.GetSubconnectors().OrderBy(x => x.Name)) { var node = ConnectorsIn.FirstOrDefault(x => x.Item.Id == sc.Id); if (node != null) { if (sc.HasSubfields) { var newConnector = new ExpressionConnectorViewModel(new ExpressionConnector(ConnectorType.Out, sc), _diagramViewModel) { IndentLevel = connector.IndentLevel }; CollapseSubconnectors(newConnector, loadWhenNecessary); } item.SubconnectorsLoaded = false; ConnectorsIn.Remove(node); } } item.IsConnectorsGroupCollapsed = !item.SubconnectorsLoaded; item.ClearSubconnectors(); }
/// <summary> /// Expands the subconnectors. /// </summary> /// <param name="connector">The connector.</param> /// <param name="loadWhenNecessary">if set to <c>true</c> [load when necessary].</param> /// <param name="recursiveExpand">if set to <c>true</c> [recursive expand].</param> private void ExpandSubconnectors(ExpressionConnectorViewModel connector, bool loadWhenNecessary, bool recursiveExpand) { var item = (ExpressionConnector)connector.Item; if (item.HasSubconnectors) { if (loadWhenNecessary) { _diagramViewModel.IsBusy = true; item.LoadSubconnectors(() => { InsertSubconnectors(connector, true, recursiveExpand, item); item.IsConnectorsGroupCollapsed = !item.SubconnectorsLoaded; _diagramViewModel.IsBusy = false; }); } else { InsertSubconnectors(connector, false, recursiveExpand, item); item.IsConnectorsGroupCollapsed = !item.SubconnectorsLoaded; } _diagramViewModel.Resize(); } }
/// <summary> /// Determines whether the specified connector has connection. /// </summary> /// <param name="connector">The connector.</param> private bool HasConnection(ExpressionConnectorViewModel connector) { var item = (ExpressionConnector)connector.Item; if (item.HasSubconnectors) { foreach (var sc in item.GetSubconnectors().OrderBy(x => x.Name)) { var node = ConnectorsIn.FirstOrDefault(x => x.Item.Id == sc.Id); if (node != null) { if (node.IsConnected) return true; if (sc.HasSubfields) { var newConnector = new ExpressionConnectorViewModel(new ExpressionConnector(ConnectorType.Out, sc), _diagramViewModel) { IndentLevel = connector.IndentLevel }; if (HasConnection(newConnector)) { return true; } } } } } return false; }
/// <summary> /// Collapses the subconnectors. /// </summary> /// <param name="connector">The connector.</param> /// <param name="loadWhenNecessary">if set to <c>true</c> [load when necessary].</param> private void CollapseSubconnectors(ExpressionConnectorViewModel connector, bool loadWhenNecessary) { var item = (ExpressionConnector)connector.Item; if (item.HasSubconnectors && loadWhenNecessary) { DeleteSubconnectors(connector, true, item); } _diagramViewModel.Resize(); }
/// <summary> /// Expands the subconnectors command execute. /// </summary> /// <param name="connector">The connector.</param> private void ExpandSubconnectorsCommandExecute(ExpressionConnectorViewModel connector) { ExpandSubconnectors(connector, true, false); }
/// <summary> /// Collapses the subconnectors command execute. /// </summary> /// <param name="connector">The connector.</param> private void CollapseSubconnectorsCommandExecute(ExpressionConnectorViewModel connector) { if (HasConnection(connector)) { _diagramViewModel.ThePopupFactory.NotifyFailure("Can not collapse.\nOne or more connections are used"); return; } CollapseSubconnectors(connector, true); }
/// <summary> /// Initializes a new instance of the <see cref="DestinationFieldsExpressionNode"/> class. /// </summary> /// <param name="diagramViewModel">The diagram view model.</param> /// <param name="expressionObject">The expression object.</param> /// <exception cref="System.ArgumentNullException">expressionObject</exception> public DestinationFieldsExpressionNode(IDiagramViewModel diagramViewModel, DestinationFieldList expressionObject) : base(expressionObject) { if (expressionObject == null) throw new ArgumentNullException("expressionObject"); _diagramViewModel = diagramViewModel; _connectorsIn.CollectionChanged += ConnectorsInCollectionChanged; IsValidFunc = n => true; UpdateAction = n => { }; foreach (var node in expressionObject.Fields) { var connector = new ExpressionConnectorViewModel(new ExpressionConnector(ConnectorType.In, node), diagramViewModel); ConnectorsIn.Add(connector); ExpandSubconnectors(connector, false, true); //ConnectorsIn.Add(new ExpressionConnectorViewModel(new ExpressionConnector(ConnectorType.In, node), diagramViewModel)); } }