Пример #1
0
 public void Show(string tooltipText, TooltipTimer tooltipTimer = null)
 {
     this.tooltipTimer = tooltipTimer;
     gameObject.SetActive(true);
     SetText(tooltipText);
     HandleFollowMouse();
 }
Пример #2
0
 public void Show(string tooltip, TooltipTimer tooltipTimer = null)
 {
     gameObject.SetActive(true);
     m_tooltipTimer = tooltipTimer;
     SetText(tooltip);
     HandleFollowMouse();
 }
Пример #3
0
        protected internal override void DataMouseLeave(object sender, MouseEventArgs e)
        {
            if (!Hoverable)
            {
                return;
            }

            var s = sender as Shape;

            if (s == null)
            {
                return;
            }

            var shape = Series.SelectMany(
                x =>
                x.IsPrimitive
                        ? x.Tracker.Primitives.Select(v => v.Value)
                        : x.Tracker.Instances.Select(v => v.Value))
                        .FirstOrDefault(x => Equals(x.HoverShape, s));

            if (shape == null)
            {
                return;
            }

            var targetAxis = Invert ? shape.Series.ScalesYAt : shape.Series.ScalesXAt;

            var sibilings = Invert
                ? Series.SelectMany(
                x =>
                x.IsPrimitive
                            ? x.Tracker.Primitives.Select(v => v.Value)
                            : x.Tracker.Instances.Select(v => v.Value))
                            .Where(se => Math.Abs(se.ChartPoint.Y - shape.ChartPoint.Y) < AxisY[targetAxis].S * .01)
                            .ToList()
                : Series.SelectMany(
                x =>
                x.IsPrimitive
                            ? x.Tracker.Primitives.Select(v => v.Value)
                            : x.Tracker.Instances.Select(v => v.Value))
                            .Where(x => x.IsHighlighted).ToList();

            foreach (var p in sibilings)
            {
                if (ShapeHoverBehavior == ShapeHoverBehavior.Dot)
                {
                    p.Shape.Fill   = p.Series.Stroke;
                    p.Shape.Stroke = new SolidColorBrush {
                        Color = PointHoverColor
                    };
                }
                else
                {
                    p.Shape.Opacity = 1;
                }
            }
            TooltipTimer.Stop();
            TooltipTimer.Start();
        }
Пример #4
0
 public void Show(string tooltipText, TooltipTimer tooltipTimer = null)
 {
     _tooltipTimer = tooltipTimer;
     SetText(tooltipText);
     KeepOnScreen();
     gameObject.SetActive(true);
     _isActive = true;
 }
Пример #5
0
        public override void DataMouseEnter(object sender, MouseEventArgs e)
        {
            if (DataToolTip == null)
            {
                return;
            }

            DataToolTip.Visibility = Visibility.Visible;
            TooltipTimer.Stop();

            var senderShape = HoverableShapes.FirstOrDefault(s => Equals(s.Shape, sender));

            if (senderShape == null)
            {
                return;
            }

            senderShape.Target.Stroke = senderShape.Series.Stroke;
            senderShape.Target.Fill   = new SolidColorBrush {
                Color = PointHoverColor
            };

            var scatterToolTip = DataToolTip as ScatterTooltip;

            if (scatterToolTip != null)
            {
                scatterToolTip.PrimaryAxisTitle = PrimaryAxis.Title;
                scatterToolTip.PrimaryValue     = PrimaryAxis.LabelFormatter == null
                                                              ? senderShape.Value.Y.ToString(CultureInfo.InvariantCulture)
                                                              : PrimaryAxis.LabelFormatter(senderShape.Value.Y);

                scatterToolTip.SecondaryAxisTitle = SecondaryAxis.Title;
                scatterToolTip.SecondaryValue     = SecondaryAxis.LabelFormatter == null
                                                                ? senderShape.Value.X.ToString(CultureInfo.InvariantCulture)
                                                                : SecondaryAxis.LabelFormatter(senderShape.Value.X);
            }
            var p = GetToolTipPosition(senderShape, null);

            DataToolTip.BeginAnimation(Canvas.LeftProperty, new DoubleAnimation
            {
                To       = p.X,
                Duration = TimeSpan.FromMilliseconds(200)
            });
            DataToolTip.BeginAnimation(Canvas.TopProperty, new DoubleAnimation
            {
                To       = p.Y,
                Duration = TimeSpan.FromMilliseconds(200)
            });
        }
Пример #6
0
        public override void DataMouseLeave(object sender, MouseEventArgs e)
        {
            var s = sender as Shape;

            if (s == null)
            {
                return;
            }

            var shape = HoverableShapes.FirstOrDefault(x => Equals(x.Shape, s));

            if (shape == null)
            {
                return;
            }

            shape.Target.Fill   = shape.Series.Stroke;
            shape.Target.Stroke = new SolidColorBrush {
                Color = PointHoverColor
            };

            TooltipTimer.Stop();
            TooltipTimer.Start();
        }
Пример #7
0
        protected internal override void DataMouseEnter(object sender, MouseEventArgs e)
        {
            if (DataTooltip == null || !Hoverable)
            {
                return;
            }

            DataTooltip.Visibility = Visibility.Visible;
            TooltipTimer.Stop();

            var senderShape = ShapesMapper.FirstOrDefault(s => Equals(s.HoverShape, sender));

            if (senderShape == null)
            {
                return;
            }
            var pieSlice = senderShape.HoverShape as PieSlice;

            if (pieSlice == null)
            {
                return;
            }

            var xi = senderShape.Series.ScalesXAt;
            var yi = senderShape.Series.ScalesYAt;

            var labels = AxisX[xi].Labels != null ? AxisX[xi].Labels.ToArray() : null;

            senderShape.Shape.Opacity = .8;
            var vx = senderShape.ChartPoint.X;

            var indexedToolTip = DataTooltip as IndexedTooltip;

            if (indexedToolTip != null)
            {
                indexedToolTip.Header = null;
                //labels == null
                //    ? (AxisX.LabelFormatter == null
                //        ? vx.ToString(CultureInfo.InvariantCulture)
                //        : AxisX.LabelFormatter(vx))
                //    : (labels.Length > vx
                //        ? labels[(int)vx]
                //        : "");
                indexedToolTip.Data = new[]
                {
                    new IndexedTooltipData
                    {
                        Index  = (int)vx,
                        Stroke = senderShape.HoverShape.Stroke,
                        Fill   = senderShape.HoverShape.Fill,
                        Series = senderShape.Series,
                        Point  = senderShape.ChartPoint,
                        Value  = AxisY[yi].LabelFormatter == null
                            ? senderShape.ChartPoint.Y.ToString(CultureInfo.InvariantCulture)
                            : AxisY[yi].LabelFormatter(senderShape.ChartPoint.Y)
                    }
                };
            }

            var alpha         = pieSlice.RotationAngle + pieSlice.WedgeAngle * .5 + 180;
            var alphaRad      = alpha * Math.PI / 180;
            var sliceMidAngle = alpha - 180;

            DataTooltip.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));

            var y = Canvas.ActualHeight * .5 + (sliceMidAngle > 90 && sliceMidAngle < 270 ? -1 : 0) * DataTooltip.DesiredSize.Height - Math.Cos(alphaRad) * 15;
            var x = Canvas.ActualWidth * .5 + (sliceMidAngle > 0 && sliceMidAngle < 180 ? -1 : 0) * DataTooltip.DesiredSize.Width + Math.Sin(alphaRad) * 15;

            var p = new Point(x, y);

            DataTooltip.BeginAnimation(Canvas.LeftProperty, new DoubleAnimation
            {
                To       = p.X,
                Duration = TimeSpan.FromMilliseconds(200)
            });
            DataTooltip.BeginAnimation(Canvas.TopProperty, new DoubleAnimation
            {
                To       = p.Y,
                Duration = TimeSpan.FromMilliseconds(200)
            });

            pieSlice.Opacity = .8;

            var anim = new DoubleAnimation
            {
                To       = 5,
                Duration = TimeSpan.FromMilliseconds(150)
            };

            pieSlice.BeginAnimation(PieSlice.PushOutProperty, anim);
        }
Пример #8
0
 public void Hide()
 {
     m_tooltipTimer = null;
     gameObject.SetActive(false);
 }
Пример #9
0
        protected internal override void DataMouseEnter(object sender, MouseEventArgs e)
        {
            //this is only while we fix PCL try...
            if (DataTooltip == null || !Hoverable)
            {
                return;
            }

            DataTooltip.Visibility = Visibility.Visible;
            TooltipTimer.Stop();

            var senderShape = Series.SelectMany(
                x =>
                x.IsPrimitive
                        ? x.Tracker.Primitives.Select(v => v.Value)
                        : x.Tracker.Instances.Select(v => v.Value))
                              .FirstOrDefault(x => Equals(x.HoverShape, sender));

            if (senderShape == null)
            {
                return;
            }

            var targetAxis = Invert ? senderShape.Series.ScalesYAt : senderShape.Series.ScalesXAt;

            var sibilings = Invert
                ? Series.SelectMany(
                x =>
                x.IsPrimitive
                            ? x.Tracker.Primitives.Select(v => v.Value)
                            : x.Tracker.Instances.Select(v => v.Value))
                            .Where(s => Math.Abs(s.ChartPoint.Y - senderShape.ChartPoint.Y) < AxisY[targetAxis].S * .01)
                            .ToList()
                : Series.SelectMany(
                x =>
                x.IsPrimitive
                            ? x.Tracker.Primitives.Select(v => v.Value)
                            : x.Tracker.Instances.Select(v => v.Value))
                            .Where(s => Math.Abs(s.ChartPoint.X - senderShape.ChartPoint.X) < AxisX[targetAxis].S * .01)
                            .ToList();

            var first = sibilings.Count > 0 ? sibilings[0] : null;
            var vx    = first != null ? (Invert ? first.ChartPoint.Y : first.ChartPoint.X) : 0;

            foreach (var sibiling in sibilings)
            {
                if (ShapeHoverBehavior == ShapeHoverBehavior.Dot)
                {
                    sibiling.Shape.Stroke = sibiling.Series.Stroke;
                    sibiling.Shape.Fill   = new SolidColorBrush {
                        Color = PointHoverColor
                    };
                }
                else
                {
                    sibiling.Shape.Opacity = .8;
                }
                sibiling.IsHighlighted = true;
            }

            var indexedToolTip = DataTooltip as IndexedTooltip;

            if (indexedToolTip != null)
            {
                var fh = (Invert ? AxisY[targetAxis] : AxisX[targetAxis]).GetFormatter();
                var fs = (Invert ? AxisX[targetAxis] : AxisY[targetAxis]).GetFormatter();

                indexedToolTip.Header = fh(vx);
                indexedToolTip.Data   = sibilings.Select(x => new IndexedTooltipData
                {
                    Index  = Series.IndexOf(x.Series),
                    Series = x.Series,
                    Stroke = x.Series.Stroke,
                    Fill   = x.Series.Fill,
                    Point  = x.ChartPoint,
                    Value  = fs(Invert ? x.ChartPoint.X : x.ChartPoint.Y)
                }).ToArray();
            }

            //var p = GetToolTipPosition(senderShape, sibilings);

            DataTooltip.UpdateLayout();
            DataTooltip.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));

            var xt = senderShape.ChartPoint.X > (AxisX[targetAxis].MinLimit + AxisX[targetAxis].MaxLimit) / 2
                ? senderShape.ChartPoint.Location.X - 10 - DataTooltip.DesiredSize.Width
                : senderShape.ChartPoint.Location.X + 10;

            xt += System.Windows.Controls.Canvas.GetLeft(DrawMargin);

            var y = sibilings.Select(s => s.ChartPoint.Location.Y).DefaultIfEmpty(0).Sum() / sibilings.Count;

            y = y + DataTooltip.DesiredSize.Height > ActualHeight ? y - (y + DataTooltip.DesiredSize.Height - ActualHeight) - 5 : y;
            var p = new Point(xt, y);

            DataTooltip.BeginAnimation(System.Windows.Controls.Canvas.LeftProperty, new DoubleAnimation
            {
                To       = p.X,
                Duration = TimeSpan.FromMilliseconds(200)
            });
            DataTooltip.BeginAnimation(System.Windows.Controls.Canvas.TopProperty, new DoubleAnimation
            {
                To       = p.Y,
                Duration = TimeSpan.FromMilliseconds(200)
            });
        }