Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8515)

Unified Diff: charted/lib/charts/src/chart_legend_impl.dart

Issue 1400473008: Roll Observatory packages and add a roll script (Closed) Base URL: git@github.com:dart-lang/observatory_pub_packages.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « charted/lib/charts/src/chart_events_impl.dart ('k') | charted/lib/charts/src/chart_series_impl.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: charted/lib/charts/src/chart_legend_impl.dart
diff --git a/charted/lib/charts/src/chart_legend_impl.dart b/charted/lib/charts/src/chart_legend_impl.dart
deleted file mode 100644
index 37778e1a735f3c32cc3ae30bc12247191e866eec..0000000000000000000000000000000000000000
--- a/charted/lib/charts/src/chart_legend_impl.dart
+++ /dev/null
@@ -1,207 +0,0 @@
-//
-// Copyright 2014 Google Inc. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file or at
-// https://developers.google.com/open-source/licenses/bsd
-//
-
-part of charted.charts;
-
-class DefaultChartLegendImpl implements ChartLegend {
- static const CLASS_PREFIX = 'chart-legend';
-
- final Element host;
- final int visibleItemsCount;
- final bool showValues;
- final SubscriptionsDisposer _disposer = new SubscriptionsDisposer();
-
- String _title;
- SelectionScope _scope;
- Selection _root;
- ChartArea _area;
-
- Iterable<ChartLegendItem> _items;
-
- DefaultChartLegendImpl(
- this.host, this.visibleItemsCount, this.showValues, String title)
- : _title = title {
- assert(host != null);
- }
-
- void dispose() {
- _disposer.dispose();
- }
-
- /**
- * Sets the title of the legend, if the legend is already drawn, updates the
- * title on the legend as well.
- */
- void set title(String title) {
- _title = title;
- if (_scope == null) return;
- _updateTitle();
- }
-
- String get title => _title;
-
- /** Updates the title of the legend. */
- void _updateTitle() {
- if (_title.isNotEmpty) {
- if (_root.select('.chart-legend-heading').length == 0) {
- _root.select('.chart-legend-heading');
- _root.append('div')
- ..classed('chart-legend-heading')
- ..text(_title);
- } else {
- _root.select('.chart-legend-heading').text(_title);
- }
- }
- }
-
- /** Updates the legend base on a new list of ChartLegendItems. */
- update(Iterable<ChartLegendItem> items, ChartArea area) {
- assert(items != null);
- assert(area == _area || _area == null);
-
- _area = area;
- if (_area.state != null) {
- _disposer.add(_area.state.changes.listen(_handleStateChanges));
- }
- if (_scope == null) {
- _scope = new SelectionScope.element(host);
- _root = _scope.selectElements([host]);
- }
-
- _updateTitle();
- _items = items;
- _createLegendItems();
-
- // Add more item label if there's more items than the max display items.
- if ((visibleItemsCount > 0) && (visibleItemsCount < items.length)) {
- _root.select('.chart-legend-more').remove();
- _root.append('div')
- ..on('mouseover',
- (d, i, e) => _displayMoreItem(items.skip(visibleItemsCount)))
- ..on('mouseleave', (d, i, e) => _hideMoreItem())
- ..text('${items.length - visibleItemsCount} more...')
- ..classed('chart-legend-more');
- }
- }
-
- /** Hides extra legend items. */
- void _hideMoreItem() {
- var tooltip = _root.select('.chart-legend-more-tooltip');
- tooltip.style('opacity', '0');
- }
-
- // Displays remaining legend items as a tooltip
- void _displayMoreItem(Iterable<ChartLegendItem> items) {
- var tooltip = _root.select('.chart-legend-more-tooltip');
- if (tooltip.isEmpty) {
- tooltip = _root.select('.chart-legend-more').append('div')
- ..classed('chart-legend-more-tooltip');
- }
- tooltip.style('opacity', '1');
-
- // _createLegendItems(tooltip, 'chart-legend-more', items);
- }
-
- /// Creates legend items starting at the given index.
- void _createLegendItems() {
- var state = _area.state,
- rows = _root.selectAll(
- '.chart-legend-row').data(_items, (x) => x.hashCode),
- isFirstRender = rows.length == 0;
-
- var enter = rows.enter.appendWithCallback((d, i, e) {
- var row = Namespace.createChildElement('div', e),
- color = Namespace.createChildElement('div', e)
- ..className = 'chart-legend-color',
- label = Namespace.createChildElement('div', e)
- ..className = 'chart-legend-label',
- value = showValues ? (Namespace.createChildElement('div', e)
- ..className = 'chart-legend-value') : null;
-
- var rowStyles = ['chart-legend-row'].toList();
-
- // If this is the first time we are adding rows,
- // Update elements before adding them to the DOM.
- if (isFirstRender) {
- if (state != null) {
- if (d.index == state.preview) {
- rowStyles.add('chart-legend-hover');
- }
- if (state.isSelected(d.index)) {
- rowStyles.add('chart-legend-selected');
- }
- }
- rowStyles.addAll(
- d.series.map((ChartSeries x) => 'type-${x.renderer.name}'));
-
- color.style.setProperty('background-color', d.color);
- row.append(color);
- label.text = d.label;
- row.append(label);
-
- if (showValues) {
- value.text = d.value;
- value.style.setProperty('color', d.color);
- row.append(value);
- }
- }
- row.classes.addAll(rowStyles);
- return row;
- });
-
- // We have elements in the DOM that need updating.
- if (!isFirstRender) {
- rows.each((ChartLegendItem d, i, Element e) {
- var classes = e.classes;
- if (state != null) {
- if (d.index == state.preview) {
- classes.add('chart-legend-hover');
- } else {
- classes.remove('chart-legend-hover');
- }
- if (state.isSelected(d.index)) {
- classes.add('chart-legend-selected');
- } else {
- classes.remove('chart-legend-selected');
- }
- }
- classes.addAll(d.series.map((x) => 'type-${x.renderer.name}'));
-
- (e.children[0]).style.setProperty('background-color', d.color);
- (e.children[1]).text = d.label;
- if (showValues) {
- (e.lastChild as Element)
- ..text = d.value
- ..style.setProperty('color', d.color);
- }
- });
- }
-
- if (state != null) {
- enter
- ..on('mouseover', (d, i, e) => state.preview = d.index)
- ..on('mouseout', (d, i, e) {
- if (state.preview == d.index) {
- state.preview = null;
- }
- })
- ..on('click', (d, i, e) {
- if (state.isSelected(d.index)) {
- state.unselect(d.index);
- } else {
- state.select(d.index);
- }
- });
- }
-
- rows.exit.remove();
- }
-
- /// Update legend to show chart's selection and visibility.
- void _handleStateChanges(_) => _createLegendItems();
-}
« no previous file with comments | « charted/lib/charts/src/chart_events_impl.dart ('k') | charted/lib/charts/src/chart_series_impl.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698