Beispiel #1
0
 public void Dispose()
 {
     m_TooltipedRect = null;
     m_tooltip       = null;
     m_chart         = null;
     m_tooltipVisual = null;
 }
Beispiel #2
0
        /// <summary>
        /// Удаление Tooltip'а с Canvas
        /// </summary>
        public void HideTooltip()
        {
            if (m_tooltipVisual != null)
            {
                m_chart.Remove(m_tooltipVisual);
                m_tooltipVisual = null;
            }

            m_TooltipedRect = null;
            m_tooltip       = null;
        }
Beispiel #3
0
        /// <summary>
        /// Обработка Tooltip'a
        /// </summary>
        /// <param name="point">Текущая точка курсора мыши</param>
        public void HandleTooltip(Point point)
        {
            //проверка позиционироввания курсора над ранее обработанным элементом
            if (m_TooltipedRect != null)
            {
                //если мышь всё ещё над тем же элементом - ничего не делаем
                if (m_TooltipedRect.Bar.Contains(point))
                {
                    //двигаем tooltip вместе с мышкой, чтобы не закрывал полоску
                    MoveTooltip(point);
                }
                else //если мышь ушла с элемента
                {
                    //скрываем подсказку
                    HideTooltip();
                }
            }

            //поиск элемента, над которым сейчас находится мышь
            //получаем строку, к которой принадлежит точка
            var row = m_chart.RowManager.GetRowByPoint(point);

            if (row != null)
            {
                //для случая, когда несколько полосок друг на другая наслаиваются
                //ищем ту, что видна пользователю - с наибольшим ZIndex
                CanvasBarDrawManager.BarData maxZ = null;
                foreach (var b in row.Bars)
                {
                    if (b.Bar.Contains(point))
                    {
                        if (maxZ == null)
                        {
                            maxZ = b;
                        }
                        else
                        {
                            maxZ = maxZ.ZIndex > b.ZIndex ? maxZ : b;
                        }
                    }
                }

                //если пересечение с точкой найдено
                if (maxZ != null)
                {
                    HideTooltip();

                    ShowTooltip(maxZ, point);
                }
            }
        }
Beispiel #4
0
        /// <summary>
        /// Отрисовка Tooltip на Canvas
        /// </summary>
        void ShowTooltip(CanvasBarDrawManager.BarData bar, Point p)
        {
            var grid = new Grid();

            grid.Background = Brushes.LightGray;
            grid.Background.Freeze();
            grid.RowDefinitions.Add(new RowDefinition());
            grid.RowDefinitions.Add(new RowDefinition());
            grid.RowDefinitions.Add(new RowDefinition());
            grid.RowDefinitions.Add(new RowDefinition());

            var hasComment = !string.IsNullOrEmpty(bar.Model?.Leasing.Comment);

            if (hasComment)
            {
                grid.RowDefinitions.Add(new RowDefinition());
            }

            if (bar.Model == null)
            {
                NewStyledTooltipRow(grid, "NO MODEL", 0);
            }
            else
            {
                NewStyledTooltipRow(grid, bar.Model.Leasing.Title, 0);

                NewStyledTooltipRow(grid, bar.Model.CarName, 1);

                NewStyledTooltipRow(grid, GetDataSpan(bar.Model), 2);

                if (hasComment)
                {
                    NewStyledTooltipRow(grid, bar.Model.Leasing.Comment, 3);
                }

                if (!string.IsNullOrEmpty(bar.Model.Leasing.Saler))
                {
                    var tb = NewStyledTooltipRow(grid, bar.Model.Leasing.Saler, 4);
                    tb.HorizontalAlignment = HorizontalAlignment.Right;
                }
            }

            //force render для получения ActualHeight & ActualWidth
            grid.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity));
            grid.Arrange(new Rect(grid.DesiredSize));

            DrawTooltip(grid, p, bar);
        }
Beispiel #5
0
        /// <summary>
        /// Обработка отрисовки нового прямоугольника на графике
        /// </summary>
        /// <param name="bar"></param>
        private void Manager_BarAdded(CanvasBarDrawManager.BarData bar)
        {
            Row row = GetRow(bar.Index);

            //проставляем z-index для наслаивающихся друг на друга полосок
            if (row.Bars.Count > 0)
            {
                foreach (var b in row.Bars)
                {
                    if (b.Bar.IntersectsWith(bar.Bar))
                    {
                        bar.ZIndex++;
                    }
                }
            }

            //добавляем прямоугольник к текущей строке
            row.Add(bar);
        }
Beispiel #6
0
        void DrawTooltip(Grid tooltip, Point p, CanvasBarDrawManager.BarData bar)
        {
            //расчёт выхода tooltip за правую границу контрола
            var x         = p.X;
            var leftPoint = x + tooltip.ActualWidth + 2d;
            var va        = VisibleArea;

            if (leftPoint > va.Width)
            {
                var diff = leftPoint - va.Width;

                x -= diff;
            }

            //расчёт выхода tooltip за нижнюю границу контрола
            var y = bar.VerticalOffset + m_chart.RowHeight + 3d;

            var botPoint = y + tooltip.ActualHeight;

            if (botPoint > va.Height)
            {
                y = va.Height - tooltip.ActualHeight - 20d; //20 - основной скролл
            }

            var dv = new DrawingVisual();
            var vb = new VisualBrush(tooltip);

            using (var dc = dv.RenderOpen())
            {
                dc.DrawRectangle(vb, null, new Rect(x, y, tooltip.ActualWidth, tooltip.ActualHeight));
            }

            m_tooltip       = tooltip;
            m_TooltipedRect = bar;
            m_tooltipVisual = dv;
            m_chart.AddVisual(dv);
        }
Beispiel #7
0
 public void Add(CanvasBarDrawManager.BarData bar)
 {
     m_Bars.Add(bar);
 }