| Index: packages/charted/lib/charts/cartesian_renderers/line_chart_renderer.dart
|
| diff --git a/packages/charted/lib/charts/cartesian_renderers/line_chart_renderer.dart b/packages/charted/lib/charts/cartesian_renderers/line_chart_renderer.dart
|
| index 4806d2d8c45c52ef70795607bf0a4c83c8c2a6c7..b904327b1c59322d5a71f1211a5a658cb93150c9 100644
|
| --- a/packages/charted/lib/charts/cartesian_renderers/line_chart_renderer.dart
|
| +++ b/packages/charted/lib/charts/cartesian_renderers/line_chart_renderer.dart
|
| @@ -1,4 +1,3 @@
|
| -//
|
| // Copyright 2014 Google Inc. All rights reserved.
|
| //
|
| // Use of this source code is governed by a BSD-style
|
| @@ -12,6 +11,7 @@ class LineChartRenderer extends CartesianRendererBase {
|
| final Iterable<int> dimensionsUsingBand = const [];
|
|
|
| final bool alwaysAnimate;
|
| + final bool showHoverCardOnTrackedDataPoints;
|
| final bool trackDataPoints;
|
| final bool trackOnDimensionAxis;
|
| final int quantitativeScaleProximity;
|
| @@ -30,6 +30,7 @@ class LineChartRenderer extends CartesianRendererBase {
|
|
|
| LineChartRenderer(
|
| {this.alwaysAnimate: false,
|
| + this.showHoverCardOnTrackedDataPoints: false,
|
| this.trackDataPoints: true,
|
| this.trackOnDimensionAxis: false,
|
| this.quantitativeScaleProximity: 5});
|
| @@ -114,10 +115,10 @@ class LineChartRenderer extends CartesianRendererBase {
|
|
|
| @override
|
| void dispose() {
|
| + _disposer.dispose();
|
| if (root == null) return;
|
| root.selectAll('.line-rdr-line').remove();
|
| root.selectAll('.line-rdr-point').remove();
|
| - _disposer.dispose();
|
| }
|
|
|
| @override
|
| @@ -166,7 +167,7 @@ class LineChartRenderer extends CartesianRendererBase {
|
| _trackingPointsCreated = true;
|
| }
|
|
|
| - void _showTrackingCircles(int row) {
|
| + void _showTrackingCircles(ChartEvent event, int row) {
|
| if (_trackingPointsCreated == false) {
|
| _createTrackingCircles();
|
| }
|
| @@ -197,19 +198,31 @@ class LineChartRenderer extends CartesianRendererBase {
|
| ..setProperty('visibility', 'hidden');
|
| }
|
| });
|
| +
|
| + if (showHoverCardOnTrackedDataPoints) {
|
| + var firstMeasureColumn = series.measures.first;
|
| + mouseOverController.add(new DefaultChartEventImpl(
|
| + event.source, area, series, row, firstMeasureColumn, 0));
|
| + _savedOverRow = row;
|
| + _savedOverColumn = firstMeasureColumn;
|
| + }
|
| }
|
|
|
| - void _hideTrackingCircles() {
|
| + void _hideTrackingCircles(ChartEvent event) {
|
| root.selectAll('.line-rdr-point')
|
| ..style('opacity', '0.0')
|
| ..style('visibility', 'hidden');
|
| + if (showHoverCardOnTrackedDataPoints) {
|
| + mouseOutController.add(new DefaultChartEventImpl(
|
| + event.source, area, series, _savedOverRow, _savedOverColumn, 0));
|
| + }
|
| }
|
|
|
| int _getNearestRowIndex(num x) {
|
| - var lastSmallerValue = 0;
|
| + double lastSmallerValue = 0.0;
|
| var chartX = x - area.layout.renderArea.x;
|
| for (var i = 0; i < _xPositions.length; i++) {
|
| - var pos = _xPositions[i];
|
| + double pos = _xPositions[i].toDouble();
|
| if (pos < chartX) {
|
| lastSmallerValue = pos;
|
| } else {
|
| @@ -226,19 +239,24 @@ class LineChartRenderer extends CartesianRendererBase {
|
| _disposer.add(area.onMouseMove.listen((ChartEvent event) {
|
| if (area.layout.renderArea.contains(event.chartX, event.chartY)) {
|
| var row = _getNearestRowIndex(event.chartX);
|
| - window.animationFrame.then((_) => _showTrackingCircles(row));
|
| + window.animationFrame.then((_) {
|
| + _showTrackingCircles(event, row);
|
| + });
|
| } else {
|
| - _hideTrackingCircles();
|
| + _hideTrackingCircles(event);
|
| }
|
| }));
|
| _disposer.add(area.onMouseOut.listen((ChartEvent event) {
|
| - _hideTrackingCircles();
|
| + _hideTrackingCircles(event);
|
| }));
|
| }
|
|
|
| void _mouseClickHandler(d, int i, Element e) {
|
| if (area.state != null) {
|
| - area.state.select(int.parse(e.dataset['column']));
|
| + var selectedColumn = int.parse(e.dataset['column']);
|
| + area.state.isSelected(selectedColumn)
|
| + ? area.state.unselect(selectedColumn)
|
| + : area.state.select(selectedColumn);
|
| }
|
| if (mouseClickController != null && e.tagName == 'circle') {
|
| var row = int.parse(e.dataset['row']),
|
|
|