public void QueryPossibleConnections(SelectionMenu menu,DiagramViewModel diagramViewModel,
ConnectorViewModel startConnector,
Vector2 mousePosition)
{
var currentGraph = InvertApplication.Container.Resolve<WorkspaceService>().CurrentWorkspace.CurrentGraph;
var allowedFilterNodes = FilterExtensions.AllowedFilterNodes[currentGraph.CurrentFilter.GetType()];
foreach (var item in allowedFilterNodes)
{
if (item.IsInterface) continue;
if (item.IsAbstract) continue;
var node = Activator.CreateInstance(item) as IDiagramNode;
node.Repository = diagramViewModel.CurrentRepository;
node.GraphId = currentGraph.Identifier;
var vm = InvertGraphEditor.Container.GetNodeViewModel(node, diagramViewModel) as DiagramNodeViewModel;
if (vm == null) continue;
vm.IsCollapsed = false;
var connectors = new List<ConnectorViewModel>();
vm.GetConnectors(connectors);
var config = InvertGraphEditor.Container.Resolve<NodeConfigBase>(item.Name);
var name = config == null ? item.Name : config.Name;
foreach (var connector in connectors)
{
foreach (var strategy in InvertGraphEditor.ConnectionStrategies)
{
var connection = strategy.Connect(diagramViewModel, startConnector, connector);
if (connection == null) continue;
var node1 = node;
var message = string.Format("Create {0}", name);
//if (!string.IsNullOrEmpty(connector.Name))
//{
// message += string.Format(" and connect to {0}", connector.Name);
//}
var value = new KeyValuePair<IDiagramNode, ConnectionViewModel>(node1, connection);
var qaItem = new SelectionMenuItem("Connect", message,() =>
{
diagramViewModel.AddNode(value.Key, mousePosition);
connection.Apply(value.Value as ConnectionViewModel);
value.Key.IsSelected = true;
value.Key.IsEditing = true;
value.Key.Name = "";
});
menu.AddItem(qaItem);
}
}
}
}