Пример #1
0
        protected override void MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            bool bSuccess = false;

            offsetFromFigureLeftTopCorner = Coordinates(e);
            oldCoordinates = offsetFromFigureLeftTopCorner;

            IFigure found = Drawing.Figures.HitTest(offsetFromFigureLeftTopCorner);

            if (found != null && found is Game.PBPlayer)
            {
                Game.PBPlayer targetPlayer = found as Game.PBPlayer;

                IEnumerable <IFigure> figures = Drawing.GetSelectedFigures();

                if (figures != null && figures.Count() > 0)
                {
                    IFigure source = figures.ElementAt(0);

                    if (source is Game.PBPlayer)
                    {
                        Game.PBPlayer sourcePlayer = source as Game.PBPlayer;

                        if (sourcePlayer.ScoutType != targetPlayer.ScoutType)
                        {
                            sourcePlayer.Assignment = targetPlayer.Name;

                            Drawing.SetDefaultBehavior();

                            bSuccess = true;
                        }
                    }
                }
            }

            if (!bSuccess)
            {
                MessageBox.Show("You must select a player of opposing team !");
            }
        }
Пример #2
0
        protected override void MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            bool bSuccess = false;

            var coordinates = Coordinates(e);
            IEnumerable <IFigure> selectedFigures = Drawing.GetSelectedFigures();

            if (selectedFigures != null && selectedFigures.Count() > 0)
            {
                PBPlayer player = selectedFigures.ElementAt(0) as PBPlayer;

                if (player != null && player.ScoutType == 1)
                {
                    IFigure found = Drawing.Figures.HitTest(coordinates);

                    if (found != null && found is PBPlayer)
                    {
                        PBPlayer setPlayer = found as PBPlayer;

                        if (setPlayer.ScoutType == 0)
                        {
                            player.ManPress    = setPlayer.Name;
                            player.ManCoverage = string.Empty;

                            Drawing.SetDefaultBehavior();

                            bSuccess = true;
                        }
                    }
                }
            }

            if (!bSuccess)
            {
                MessageBox.Show("You must select a player of opposing team!");
            }
        }
Пример #3
0
        protected override void MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            bool bSuccess    = false;
            var  coordinates = Coordinates(e);
            IEnumerable <IFigure> selectedFigures = Drawing.GetSelectedFigures();

            if (selectedFigures != null && selectedFigures.Count() > 0)
            {
                PBPlayer qbPlayer = selectedFigures.ElementAt(0) as PBPlayer;

                if (qbPlayer != null && qbPlayer.Name == "QB")
                {
                    IFigure found = Drawing.Figures.HitTest(coordinates);

                    if (found != null && found is PBPlayer)
                    {
                        PBPlayer setPlayer = found as PBPlayer;

                        if (setPlayer.ScoutType == 0 && setPlayer != qbPlayer)
                        {
                            qbPlayer.AssignArray.Clear();
                            qbPlayer.SetArray.Clear();
                            qbPlayer.SetArray.Add(setPlayer.Name);

                            Drawing.SetDefaultBehavior();

                            bSuccess = true;
                        }
                    }
                }
            }

            if (!bSuccess)
            {
                MessageBox.Show("You must select a teammate !");
            }
        }
Пример #4
0
        protected override void MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            offsetFromFigureLeftTopCorner = Coordinates(e);
            oldCoordinates = offsetFromFigureLeftTopCorner;

            IEnumerable <IFigure> figures = Drawing.GetSelectedFigures();

            if (figures != null && figures.Count() > 0)
            {
                IFigure source = figures.ElementAt(0);

                if (source is Game.PBPlayer)
                {
                    Game.PBPlayer sourcePlayer = source as Game.PBPlayer;

                    IFigure endFigure = sourcePlayer.GetEndFigure();

                    if (endFigure == null)
                    {
                        endFigure = source;
                    }

                    if (!(endFigure is Game.PBPlayer) && !(endFigure is Game.Zone) && (endFigure is FreePoint))
                    {
                        if (endFigure.Dependents.Count > 0)
                        {
                            PBLine endline = endFigure.Dependents.ElementAt(0) as PBLine;

                            if (endline != null && endline.CapType == CapType.Arrow)
                            {
                                IFigure underMouse = CreatePointAtCurrentPosition(offsetFromFigureLeftTopCorner, false);

                                PBLine line = new PBLine();

                                List <IFigure> dependencies = new List <IFigure>();
                                dependencies.Add(endFigure);
                                dependencies.Add(underMouse);
                                line.Dependencies = dependencies;

                                Drawing.Add(line);

                                if (!Drawing.DrawingMode)
                                {
                                    line.CapType     = CapType.BlockArea;
                                    line.StrokeColor = Webb.Playbook.Data.ColorSetting.Instance.BlockColor;
                                }

                                Drawing.Figures.UpdateVisual();
                            }
                        }
                    }
                    else if (endFigure == source)
                    {
                        IFigure underMouse = CreatePointAtCurrentPosition(offsetFromFigureLeftTopCorner, false);

                        PBLine line = new PBLine();

                        List <IFigure> dependencies = new List <IFigure>();
                        dependencies.Add(endFigure);
                        dependencies.Add(underMouse);
                        line.Dependencies = dependencies;

                        Drawing.Add(line);

                        if (!Drawing.DrawingMode)
                        {
                            line.CapType     = CapType.BlockArea;
                            line.StrokeColor = Webb.Playbook.Data.ColorSetting.Instance.BlockColor;
                        }

                        Drawing.Figures.UpdateVisual();
                    }
                }
            }
        }
Пример #5
0
        protected override void MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            base.MouseLeftButtonDown(sender, e);

            if (e.Handled)
            {
                return;
            }

            offsetFromFigureLeftTopCorner = Coordinates(e);
            oldCoordinates = offsetFromFigureLeftTopCorner;

            moving = new List <IMovable>();
            IEnumerable <IFigure> roots = null;

            IFigure found = Drawing.Figures.HitTest(offsetFromFigureLeftTopCorner);
            IEnumerable <IFigure> selection = null;

            // 11-12-2010 Scott
            if (IsCtrlPressed())
            {
                if (found != null)
                {
                    found.Selected = !found.Selected;
                }
                selection = Drawing.GetSelectedFigures();
            }
            else
            {
                if (found == null || !found.Selected)
                {
                    Drawing.ClearSelectedFigures();
                    if (found != null && (found is Game.PBPlayer || found is LabelBase || found is LineBase))   // 11-19-2010 Scott
                    {
                        found.Selected = true;
                        selection      = found.AsEnumerable();
                    }
                }
            }

            Drawing.RaiseSelectionChanged(new Drawing.SelectionChangedEventArgs(Drawing.GetSelectedFigures()));

            IMovable oneMovable = found as IMovable;

            if (oneMovable != null)
            {
                offsetFromFigureLeftTopCorner = offsetFromFigureLeftTopCorner.Minus(oneMovable.Coordinates);
                moving.Add(oneMovable);
                roots = found.AsEnumerable();
            }
            else if (found != null)
            {
                if (!(found is Game.Zone) && !(found is LineBase))  // 11-19-2010 Scott
                {
                    roots = DependencyAlgorithms.FindRoots(f => f.Dependencies, found);
                    if (roots.All(root => root is IMovable))
                    {
                        moving.AddRange(roots.Cast <IMovable>());
                    }
                }
            }

            if (roots != null)
            {
                toRecalculate = DependencyAlgorithms.FindDescendants(f => f.Dependents, roots).Reverse();
            }
            else
            {
                toRecalculate = null;
            }

            if (moving.IsEmpty())
            {
                toRecalculate = null;
            }

            //if (found == null)
            //{
            //    if (!Drawing.Canvas.Children.Contains(SelectRect))
            //    {
            //        Drawing.Canvas.Children.Add(SelectRect);
            //    }
            //    System.Windows.Controls.Canvas.SetLeft(SelectRect, e.GetPosition(Drawing.Canvas).X);
            //    System.Windows.Controls.Canvas.SetTop(SelectRect, e.GetPosition(Drawing.Canvas).Y);
            //    SelectRect.Visibility = Visibility.Visible;
            //}
            Drawing.Figures.UpdateVisual();
        }
Пример #6
0
        /// <summary>
        /// Assumes coordinates are logical already
        /// </summary>
        /// <param name="coordinates">Logical coordinates of the click point</param>
        protected override void  MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            // 11-18-2010 Scott
            if (e.ClickCount == 2)
            {
                Drawing.SetDefaultBehavior();
                return;
            }

            IEnumerable <IFigure> selectedFigures = Drawing.GetSelectedFigures();
            PBPlayer player = null;

            if (selectedFigures != null && selectedFigures.Count() > 0)
            {
                player = selectedFigures.ElementAt(0) as PBPlayer;

                if (player == null)
                {
                    return;
                }
            }
            else
            {
                return;
            }
            //Type expectedType = ExpectedDependency;
            System.Windows.Point coordinates = Coordinates(e);
            IFigure underMouse = null;

            underMouse = Drawing.Figures.HitTest(coordinates);
            if (underMouse == player)
            {
                Drawing.SetDefaultBehavior();
                return;
            }

            IFigure endFigure = player.GetEndFigure();

            if (endFigure is Game.Zone)
            {
                return;
            }

            player.ChangeLineType(CapType.Arrow);

            FreePoint  pp = CreatePointAtCurrentPosition(coordinates, false);
            FigureList fl = new FigureList();

            if (endFigure != null)
            {
                if (endFigure is Game.PBPlayer)
                {
                    player.ClearEndPath();
                    endFigure = player.GetEndFigure();
                    if (endFigure != null)
                    {
                        fl.Add(endFigure);
                    }
                    else
                    {
                        fl.Add(player);
                    }
                }
                else
                {
                    fl.Add(endFigure);
                }
            }
            else
            {
                fl.Add(player);
            }
            fl.Add(pp);
            PBLine line = Factory.CreateArrowLine(Drawing, fl);

            if (!Drawing.DrawingMode)
            {
                line.StrokeColor = Webb.Playbook.Data.ColorSetting.Instance.RouteColor;
            }
            FigureList figureList = new FigureList();

            figureList.Add(line);
            figureList.Add(pp);

            Drawing.Add(figureList as IEnumerable <IFigure>);

            Drawing.Figures.CheckConsistency();
            Drawing.Figures.UpdateVisual();
            //if (TempPoint != null)
            //{
            //    underMouse = Drawing.Figures.HitTest(
            //        coordinates,
            //        typeof(IPoint));
            //}
            //else if (expectedType != null)
            //{
            //    underMouse = Drawing.Figures.HitTest(coordinates, expectedType);
            //}
            //else
            //{
            //    underMouse = Drawing.Figures.HitTest(coordinates);
            //}

            //if (underMouse != null
            //    && underMouse != TempPoint
            //    && ((FoundDependencies.Contains(underMouse) && !CanReuseDependency())
            //        || underMouse == TempResult))
            //{
            //    return;
            //}

            //IFigure endPointFigure = player.GetEndFigure();
            //if (TempPoint == null && underMouse != player && underMouse != endPointFigure)
            //{
            //    return;
            //}

            //if (ExpectingAPoint())
            //{
            //    if (underMouse == null)
            //    {
            //       underMouse = CreatePointAtCurrentPosition(coordinates, true);
            //       FigureList fl = new FigureList();
            //       fl.Add(player);
            //       if (underMouse != null)
            //       {
            //           fl.Add(underMouse);
            //       }
            //       PBLine line = Factory.CreateArrowLine(Drawing, fl);
            //       FigureList figureList = new FigureList();
            //       figureList.Add(line);
            //       figureList.Add(underMouse);
            //       Drawing.Add(figureList as IEnumerable<IFigure>);
            //       return;
            //    }
            //    else
            //    {
            //        // one branch only
            //        if (underMouse is Webb.Playbook.Geometry.Game.PBPlayer && underMouse.Dependents.Count > 0)
            //        {
            //            foreach (IFigure dep in underMouse.Dependents)
            //            {
            //                if (dep.Dependencies != null && dep.Dependencies.Count() > 1 && dep.Dependencies.ElementAt(0) == underMouse)
            //                {
            //                    return;
            //                }
            //            }

            //            if (underMouse != player)
            //            {
            //                return;
            //            }
            //        }
            //        // at most two branch
            //        else if (underMouse is IPoint && underMouse.Dependents.Count > 1)
            //        {
            //            return;
            //        }
            //        else if (underMouse is Zone)
            //        {
            //            return;
            //        }
            //    }
            //}

            //RemoveIntermediateFigureIfNecessary();

            //if (TempPoint != null)
            //{
            //    //if (underMouse == TempPoint || underMouse == TempResult || underMouse == null)
            //    //{
            //    underMouse = CreatePointAtCurrentPosition(coordinates, true);
            //    //}
            //    TempPoint.SubstituteWith(underMouse);
            //    FoundDependencies.Remove(TempPoint);
            //    Drawing.Figures.Remove(TempPoint);
            //    TempPoint = null;
            //}

            //if (ExpectedDependency != null)
            //{
            //    AddFoundDependency(underMouse);
            //}

            //if (ExpectedDependency != null)
            //{
            // if (ExpectingAPoint())
            //    {
            //        player.ChangeLineType(CapType.Arrow);   // 01-07-2010 Scott

            //        TempPoint = CreateTempPoint(coordinates);
            //        AddFoundDependency(TempPoint);
            //        if (ExpectedDependency == null)
            //        {
            //            CreateAndAddFigure();

            //            Drawing.Figures.UpdateVisual();
            //        }
            //    }
            //    AddIntermediateFigureIfNecessary();
            //    AdvertiseNextDependency();
            //}
            //else
            //{
            //    Finish();

            //    //07-22-2009 scott
            //    if (IsMouseButtonDown)
            //    {// click mode
            //        IFigure endFigure = Drawing.Figures.HitTest(coordinates, typeof(Webb.Playbook.Geometry.Game.PBPlayer));
            //        if (endFigure is Webb.Playbook.Geometry.Game.PBPlayer)
            //        {
            //            Drawing.ActionManager.Undo();
            //        }
            //        else
            //        {
            //            MouseLeftButtonDown(sender, e as System.Windows.Input.MouseButtonEventArgs);
            //        }
            //    }
            //    else
            //    {// drag mode

            //    }
            //}

            //Drawing.Figures.CheckConsistency();
            //Drawing.Figures.UpdateVisual();
        }
Пример #7
0
        /// <summary>
        /// Assumes coordinates are logical already
        /// </summary>
        /// <param name="coordinates">Logical coordinates of the click point</param>
        protected override void Click(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            IEnumerable <IFigure> selectedFigures = Drawing.GetSelectedFigures();
            PBPlayer player = null;

            if (selectedFigures != null && selectedFigures.Count() > 0)
            {
                player = selectedFigures.ElementAt(0) as PBPlayer;

                if (player == null)
                {
                    return;
                }
            }
            else
            {
                return;
            }

            System.Windows.Point coordinates = Coordinates(e);

            IFigure underMouse   = null;
            Type    expectedType = ExpectedDependency;

            if (TempPoint != null)
            {
                underMouse = Drawing.Figures.HitTest(
                    coordinates,
                    typeof(IPoint));
            }
            else if (expectedType != null)
            {
                underMouse = Drawing.Figures.HitTest(coordinates, expectedType);
            }
            else
            {
                underMouse = Drawing.Figures.HitTest(coordinates);
            }

            if (underMouse != null &&
                underMouse != TempPoint &&
                ((FoundDependencies.Contains(underMouse) && !CanReuseDependency()) ||
                 underMouse == TempResult))
            {
                return;
            }

            IFigure endPointFigure = player.GetEndFigure();

            if (TempPoint == null && underMouse != player && underMouse != endPointFigure)
            {
                return;
            }

            if (ExpectingAPoint())
            {
                if (underMouse == null)
                {
                    //underMouse = CreatePointAtCurrentPosition(coordinates, true);
                    return;
                }
                else
                {
                    // one branch only
                    if (underMouse is Webb.Playbook.Geometry.Game.PBPlayer && underMouse.Dependents.Count > 0)
                    {
                        foreach (IFigure dep in underMouse.Dependents)
                        {
                            if (dep.Dependencies != null && dep.Dependencies.Count() > 1 && dep.Dependencies.ElementAt(0) == underMouse)
                            {
                                return;
                            }
                        }

                        if (underMouse != player)
                        {
                            return;
                        }
                    }
                    // at most two branch
                    else if (underMouse is IPoint && underMouse.Dependents.Count > 1)
                    {
                        return;
                    }
                    else if (underMouse is Zone)
                    {
                        return;
                    }
                }
            }

            RemoveIntermediateFigureIfNecessary();

            if (TempPoint != null)
            {
                //if (underMouse == TempPoint || underMouse == TempResult || underMouse == null)
                //{
                underMouse = CreatePointAtCurrentPosition(coordinates, true);
                //}
                TempPoint.SubstituteWith(underMouse);
                FoundDependencies.Remove(TempPoint);
                Drawing.Figures.Remove(TempPoint);
                TempPoint = null;
            }

            if (ExpectedDependency != null)
            {
                AddFoundDependency(underMouse);
            }

            if (ExpectedDependency != null)
            {
                if (ExpectingAPoint())
                {
                    TempPoint = CreateTempPoint(coordinates);
                    AddFoundDependency(TempPoint);
                    if (ExpectedDependency == null)
                    {
                        CreateAndAddFigure();

                        Drawing.Figures.UpdateVisual();
                    }
                }
                AddIntermediateFigureIfNecessary();
                AdvertiseNextDependency();
            }
            else
            {
                Finish();

                //07-22-2009 scott
                if (IsMouseButtonDown)
                {// click mode
                    IFigure endFigure = Drawing.Figures.HitTest(coordinates, typeof(Webb.Playbook.Geometry.Game.PBPlayer));
                    if (endFigure is Webb.Playbook.Geometry.Game.PBPlayer)
                    {
                        Drawing.ActionManager.Undo();
                    }
                    else
                    {
                        MouseLeftButtonDown(sender, e as System.Windows.Input.MouseButtonEventArgs);
                    }
                }
                else
                {// drag mode
                }
            }

            Drawing.Figures.CheckConsistency();
        }
Пример #8
0
        protected override void MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            bool bSuccess = false;

            offsetFromFigureLeftTopCorner = Coordinates(e);
            oldCoordinates = offsetFromFigureLeftTopCorner;

            IFigure found = Drawing.Figures.HitTest(offsetFromFigureLeftTopCorner, typeof(Game.PBPlayer));

            if (found != null && found is Game.PBPlayer)
            {
                Game.PBPlayer targetPlayer = found as Game.PBPlayer;

                IEnumerable <IFigure> figures = Drawing.GetSelectedFigures();

                if (figures != null && figures.Count() > 0)
                {
                    IFigure source = figures.ElementAt(0);

                    if (source is Game.PBPlayer)
                    {
                        Game.PBPlayer sourcePlayer = source as Game.PBPlayer;

                        if (sourcePlayer.ScoutType != targetPlayer.ScoutType)
                        {
                            IFigure endfigure = sourcePlayer.GetEndFigure();

                            if (endfigure == null)
                            {
                                endfigure = source;
                            }

                            if (!(endfigure is Game.PBPlayer) && !(endfigure is Game.Zone) && (endfigure is FreePoint))
                            {
                                if (endfigure.Dependents.Count > 0)
                                {
                                    PBLine endline = endfigure.Dependents.ElementAt(0) as PBLine;

                                    if (endline != null /*&& endline.CapType == CapType.Arrow*/)
                                    {
                                        PBLine line = new PBLine();

                                        List <IFigure> dependencies = new List <IFigure>();
                                        dependencies.Add(endfigure);
                                        dependencies.Add(found);
                                        line.Dependencies = dependencies;

                                        sourcePlayer.ChangeLineType(CapType.Arrow);

                                        Drawing.Add(line);

                                        if (!Drawing.DrawingMode)
                                        {
                                            line.CapType = CapType.Block;

                                            line.StrokeColor = Webb.Playbook.Data.ColorSetting.Instance.BlockColor;
                                        }

                                        Drawing.Figures.UpdateVisual();

                                        Drawing.SetDefaultBehavior();

                                        bSuccess = true;
                                    }
                                }
                            }
                            else if (endfigure == source)
                            {
                                PBLine line = new PBLine();

                                List <IFigure> dependencies = new List <IFigure>();
                                dependencies.Add(endfigure);
                                dependencies.Add(found);
                                line.Dependencies = dependencies;

                                sourcePlayer.ChangeLineType(CapType.Arrow);

                                Drawing.Add(line);

                                if (!Drawing.DrawingMode)
                                {
                                    line.CapType = CapType.Block;

                                    line.StrokeColor = Webb.Playbook.Data.ColorSetting.Instance.BlockColor;
                                }

                                Drawing.Figures.UpdateVisual();

                                Drawing.SetDefaultBehavior();

                                bSuccess = true;
                            }
                        }
                    }
                }
            }

            if (!bSuccess)
            {
                MessageBox.Show("You must select a player of opposing team !");
            }
        }
Пример #9
0
        private void LButtonDown(Point pt)
        {
            offsetFromFigureLeftTopCorner = this.ToLogical(pt);

            oldCoordinates = offsetFromFigureLeftTopCorner;

            moving = new List <IMovable>();
            IEnumerable <IFigure> roots = null;

            IFigure found = Drawing.Figures.HitTest(offsetFromFigureLeftTopCorner);
            IEnumerable <IFigure> selection = null;

            if (found is SubPoint)
            {// can't move sub point 01-11-10 scott
                return;
            }
            // remove by scott 08-25-2009
            if (IsCtrlPressed())
            {
                if (found != null)
                {
                    found.Selected = !found.Selected;
                }
                selection = Drawing.GetSelectedFigures();
            }
            else
            {
                if (found == null || !found.Selected)
                {
                    Drawing.ClearSelectedFigures();
                    if (found != null)
                    {
                        found.Selected = true;
                        selection      = found.AsEnumerable();
                    }
                }
            }

            IEnumerable <IFigure> selectedFigures = Drawing.GetSelectedFigures();

            Drawing.RaiseSelectionChanged(new Drawing.SelectionChangedEventArgs(selectedFigures));

            IMovable oneMovable = found as IMovable;

            if (oneMovable != null /*&&!(oneMovable is Game.Zone)* 03-10-2011 Scott*/)
            {
                /*if (oneMovable is IPoint)
                 * {
                 *  // when we drag a point, we want it to snap to the cursor
                 *  // so that the point center is directly under the tip of the mouse
                 *  offsetFromFigureLeftTopCorner = new Point();
                 *  oldCoordinates = oneMovable.Coordinates;
                 * }
                 * else
                 * {*/
                // however when we drag other stuff (such as text labels)
                // we want the mouse to always touch the part of the draggable
                // where it first touched during MouseDown
                // we don't want the draggable to "snap" to the cursor like points do
                offsetFromFigureLeftTopCorner = offsetFromFigureLeftTopCorner.Minus(oneMovable.Coordinates);
                /*}*/
                moving.Add(oneMovable);
                roots = found.AsEnumerable();
            }
            else if (found != null)
            {
                if (!(found is Game.Zone) && !(found is LineBase))  // 11-18-2010 Scott
                {
                    roots = DependencyAlgorithms.FindRoots(f => f.Dependencies, found);
                    if (roots.All(root => root is IMovable))
                    {
                        moving.AddRange(roots.Cast <IMovable>());
                    }
                }
            }

            if (roots != null)
            {
                toRecalculate = DependencyAlgorithms.FindDescendants(f => f.Dependents, roots).Reverse();
            }
            else
            {
                toRecalculate = null;
            }

            //03-09-2010 Scott
            if (moving.Count > 0 && moving[0] is Game.PBBall && mode == 1)
            {
                Drawing.Figures.OfType <IMovable>().ForEach(f =>
                {
                    if (!(f is Game.PBBall) && !(f is SubPoint))
                    {
                        moving.Add(f);
                    }
                }
                                                            );
            }
            else if (found != null)
            {
                IEnumerable <IFigure> figuresSelected = Drawing.GetSelectedFigures();
                if (figuresSelected.All(f => f is Game.PBPlayer || f is LabelBase || f is FreePoint || f is PrePoint || f is PBLine)) // 11-12-2010 Scott add labelbase support
                {
                    moving.Clear();
                    IEnumerable <IFigure> fs = Drawing.GetSelectedFigures();
                    // 08-04-11 Scott
                    foreach (IFigure f in fs)
                    {
                        if (f is PBLine)
                        {
                            foreach (IFigure pf in (f as PBLine).Dependencies)
                            {
                                if (pf is IMovable && !moving.Contains(pf as IMovable))
                                {
                                    moving.Add(pf as IMovable);
                                }
                            }
                        }

                        if (f is IMovable)
                        {
                            moving.Add(f as IMovable);
                        }
                    }
                    // end
                }
            }

            if (moving.IsEmpty())
            {// coordinate system
             //Drawing.Canvas.Cursor = new Cursor(AppDomain.CurrentDomain.BaseDirectory + @"\Resource\CursorHand.cur");    //01-04-2010 scott

                //moving.Add(Drawing.CoordinateSystem);

                //var allFigures = Drawing.Figures.GetAllFiguresRecursive();    // remove by scott 06-24-2009
                //roots = DependencyAlgorithms.FindRoots(f => f.Dependencies, allFigures);
                //moving.AddRange(roots.OfType<IMovable>());
                //roots = null;
                toRecalculate = null; // Figures;
            }
        }
Пример #10
0
        /// <summary>
        /// Assumes coordinates are logical already
        /// </summary>
        /// <param name="coordinates">Logical coordinates of the click point</param>
        protected override void  MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            if (e.ClickCount > 1)
            {
                Drawing.SetDefaultBehavior();
                return;
            }

            IEnumerable <IFigure> selectedFigures = Drawing.GetSelectedFigures();
            PBPlayer player    = null;
            IFigure  endFigure = null;

            if (selectedFigures != null && selectedFigures.Count() > 0)
            {
                player = selectedFigures.ElementAt(0) as PBPlayer;
            }

            //Type expectedType = ExpectedDependency;
            System.Windows.Point coordinates = Coordinates(e);
            IFigure underMouse = null;

            underMouse = Drawing.Figures.HitTest(coordinates);
            if (underMouse is Game.PBPlayer)
            {
                if (underMouse == player)
                {
                    Drawing.SetDefaultBehavior();
                    return;
                }

                player = underMouse as Game.PBPlayer;

                Drawing.ClearSelectedFigures();
                player.Selected = true;
                Drawing.Figures.UpdateVisual();
                return;
            }
            else if (underMouse is IPoint && (underMouse as IPoint).Dependents.Count == 1)
            {
                Drawing.ClearSelectedFigures();
                underMouse.Selected = true;
                Drawing.Figures.UpdateVisual();
                return;
            }

            if (player == null)
            {
                if (selectedFigures != null && selectedFigures.Count() > 0)
                {
                    IFigure figure = selectedFigures.ElementAt(0);
                    if (figure is IPoint && (figure as IPoint).Dependents.Count == 1)
                    {
                        endFigure = figure;
                    }
                    else
                    {
                        return;
                    }
                }
                else
                {
                    return;
                }
            }
            else
            {// 09-26-2011 Scott
                endFigure = null;
                //endFigure = player.GetEndFigure();
                //player.ChangeLineType(CapType.Arrow);

                //if (endFigure is Game.Zone)
                //{
                //    return;
                //}
            }

            FreePoint  pp = CreatePointAtCurrentPosition(coordinates, false);
            FigureList fl = new FigureList();

            if (endFigure != null)
            {
                if (endFigure is Game.PBPlayer)
                {
                    player.ClearEndPath();
                    endFigure = player.GetEndFigure();
                    if (endFigure != null)
                    {
                        fl.Add(endFigure);
                    }
                    else
                    {
                        fl.Add(player);
                    }
                }
                else
                {
                    fl.Add(endFigure);
                }
            }
            else
            {
                fl.Add(player);
            }
            fl.Add(pp);
            PBLine line = Factory.CreateArrowLine(Drawing, fl);

            if (!Drawing.DrawingMode)
            {
                line.StrokeColor = Webb.Playbook.Data.ColorSetting.Instance.RouteColor;
            }
            FigureList figureList = new FigureList();

            figureList.Add(line);
            figureList.Add(pp);

            Drawing.Add(figureList as IEnumerable <IFigure>);

            Drawing.ClearSelectedFigures();
            pp.Selected = true;

            Drawing.Figures.CheckConsistency();
            Drawing.Figures.UpdateVisual();
        }