Exemple #1
0
        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));
            }
        }
Exemple #2
0
 public ConnectionViewModel(WorkingRouter routerFrom, WorkingRouter routerTo, Line line, Link link)
 {
     RouterFrom          = routerFrom;
     RouterTo            = routerTo;
     Line                = line;
     Link                = link;
     Link.MetricChanged += OnMetricChanged;
 }
Exemple #3
0
        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;
        }
Exemple #4
0
        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;
        }
Exemple #5
0
        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;
            }
        }
Exemple #6
0
        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
            });
        }
Exemple #7
0
        //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;
                }
            }
        }