public void AddRoutersToCanvas() { WorkingArea.Children.Clear(); InitControllerUI(); connections.Clear(); controllerConnections.Clear(); foreach (Router router in routers) { WorkingRouter routerControl = new WorkingRouter(router); routerControl.OnRouterMove += UpdateLinksOnRouterMove; routerControl.OnRouterMove += UpdateControllerLinkOnRouterMove; routerControl.PreviewMouseDown += workingRouter_Click; WorkingArea.Children.Add(routerControl); if (router != null) { Canvas.SetLeft(routerControl, router.PositionX); Canvas.SetTop(routerControl, router.PositionY); } routerViewModels.Add(routerControl); controllerConnections.Add(CreateControllerConnectionViewModel(routerControl)); } }
public ConnectionViewModel(WorkingRouter routerFrom, WorkingRouter routerTo, Line line, Link link) { RouterFrom = routerFrom; RouterTo = routerTo; Line = line; Link = link; Link.MetricChanged += OnMetricChanged; }
public void UpdateControllerLinkOnRouterMove(WorkingRouter routerView) { var controllerConnectionViewModel = controllerConnections.FirstOrDefault(x => x.Router == routerView); if (controllerConnectionViewModel == null) { return; } var line = controllerConnectionViewModel.Line; line.X1 = controllerUI.PositionX + routerPositionCorrective; line.Y1 = controllerUI.PositionY + routerPositionCorrective; line.X2 = routerView.Router.PositionX + routerPositionCorrective; line.Y2 = routerView.Router.PositionY + routerPositionCorrective; }
private void btnAddRouter_Click(object sender, RoutedEventArgs e) { var router = Controller.Instance.AddNewRouter(); routers.Add(router); WorkingRouter routerControl = new WorkingRouter(router); routerControl.OnRouterMove += UpdateLinksOnRouterMove; routerControl.OnRouterMove += UpdateControllerLinkOnRouterMove; routerControl.PreviewMouseDown += workingRouter_Click; routerViewModels.Add(routerControl); WorkingArea.Children.Add(routerControl); controllerConnections.Add(CreateControllerConnectionViewModel(routerControl)); var a = 5; }
public void UpdateLinksOnRouterMove(WorkingRouter routerView) { //update links to router var connectionFrom = connections.Where(x => x.RouterFrom == routerView).ToList(); foreach (var connection in connectionFrom) { var line = connection.Line; line.X1 = connection.RouterFrom.Router.PositionX + routerPositionCorrective; line.Y1 = connection.RouterFrom.Router.PositionY + routerPositionCorrective; } var connectionTo = connections.Where(x => x.RouterTo == routerView).ToList(); foreach (var connection in connectionTo) { var line = connection.Line; line.X2 = connection.RouterTo.Router.PositionX + routerPositionCorrective; line.Y2 = connection.RouterTo.Router.PositionY + routerPositionCorrective; } }
private ControllerConnectionViewModel CreateControllerConnectionViewModel(WorkingRouter router) { Line line = new Line(); line.X1 = router.Router.PositionX + routerPositionCorrective; line.Y1 = router.Router.PositionY + routerPositionCorrective; line.X2 = controllerUI.PositionX + routerPositionCorrective; line.Y2 = controllerUI.PositionY + routerPositionCorrective; line.Stroke = new SolidColorBrush(Colors.Blue); line.StrokeDashArray = new DoubleCollection(new double[1] { 15 }); line.StrokeThickness = 0.5; WorkingArea.Children.Add(line); return(new ControllerConnectionViewModel { Line = line, Router = router }); }
//Handle router click events and do different actions depending on state public void workingRouter_Click(object sender, RoutedEventArgs e) { if (programState == ProgramState.Edition) { WorkingRouter senderRouter = (WorkingRouter)sender; switch (editorState) { case EditorState.RouterDelete: var listOfConnections = connections.Where(x => x.RouterFrom == senderRouter || x.RouterTo == senderRouter); //delete links from canvas foreach (var connection in listOfConnections) { links.Remove(connection.Link); WorkingArea.Children.Remove(connection.Line); } connections.RemoveAll(x => x.RouterFrom == senderRouter || x.RouterTo == senderRouter); routers.Remove(senderRouter.Router); routerViewModels.Remove(senderRouter); WorkingArea.Children.Remove(senderRouter); var controllerConnection = controllerConnections.FirstOrDefault(x => x.Router == senderRouter); if (controllerConnection != null) { WorkingArea.Children.Remove(controllerConnection.Line); controllerConnections.Remove(controllerConnection); } Controller.Instance.RemoveRouter(senderRouter.Router); break; case EditorState.LinkAdd: if (!linkDrawingStarted) { if (senderRouter.Router.GetFirstFreeInterface() == null) { NoInterfacesMessageBox(); return; } linkDrawingStarted = true; routerFrom = senderRouter; } else //confirm link { //check self clicking if (senderRouter == routerFrom) { return; } //check free interfaces if (senderRouter.Router.GetFirstFreeInterface() == null) { NoInterfacesMessageBox(); return; } //check routers already connected if (senderRouter.Router.GetLinkToRouter(routerFrom.Router) != null) { MessageBox.Show("This routers are already connected"); return; } var tempLine = new Line(); tempLine.MouseLeftButtonDown += link_Click; tempLine.X1 = routerFrom.Router.PositionX + routerPositionCorrective; tempLine.Y1 = routerFrom.Router.PositionY + routerPositionCorrective; tempLine.X2 = senderRouter.Router.PositionX + routerPositionCorrective; tempLine.Y2 = senderRouter.Router.PositionY + routerPositionCorrective; tempLine.Stroke = new SolidColorBrush(Colors.Black); //Controller.Instance.Con Controller.Instance.CreateConnections(routerFrom.Router, senderRouter.Router); var link = routerFrom.Router.GetLinkToRouter(senderRouter.Router); connections.Add(new ConnectionViewModel(routerFrom, senderRouter, tempLine, link)); links.Add(link); WorkingArea.Children.Add(tempLine); linkDrawingStarted = false; routerFrom = null; } break; } } }