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

Side by Side Diff: packages/charted/lib/layout/src/hierarchy_layout.dart

Issue 1521693002: Roll Observatory deps (charted -> ^0.3.0) (Closed) Base URL: https://chromium.googlesource.com/external/github.com/dart-lang/observatory_pub_packages.git@master
Patch Set: Created 5 years 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright 2015 Google Inc. All rights reserved. 2 * Copyright 2015 Google Inc. All rights reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style 4 * Use of this source code is governed by a BSD-style
5 * license that can be found in the LICENSE file or at 5 * license that can be found in the LICENSE file or at
6 * https://developers.google.com/open-source/licenses/bsd 6 * https://developers.google.com/open-source/licenses/bsd
7 */ 7 */
8 part of charted.layout; 8 part of charted.layout;
9 9
10 typedef int SortFunction(HierarchyNode a, HierarchyNode b); 10 typedef int SortFunction(HierarchyNode a, HierarchyNode b);
11 typedef List ChildrenAccessor(HierarchyNode node); 11 typedef List ChildrenAccessor(HierarchyNode node);
12 typedef num ValueAccessor(HierarchyNode node); 12 typedef num ValueAccessor(HierarchyNode node);
13 13
14 /** 14 /**
15 * The hierarchy layout is an abstract layout that is not used directly, but 15 * The hierarchy layout is an abstract layout that is not used directly, but
16 * instead allows code sharing between multiple hierarchical layouts such as: 16 * instead allows code sharing between multiple hierarchical layouts such as:
17 * Cluster, Pack, Partition, Tree, and Treemap layout. 17 * Cluster, Pack, Partition, Tree, and Treemap layout.
18 */ 18 */
19 abstract class HierarchyLayout<T extends HierarchyNode> { 19 abstract class HierarchyLayout<T extends HierarchyNode> {
20 static const ROOT_ROW_INDEX = -1; 20 static const ROOT_ROW_INDEX = -1;
21 SortFunction sortFunction = hierarchySort; 21 SortFunction sortFunction = hierarchySort;
22 ChildrenAccessor childrenAccessor = hierarchyChildren; 22 ChildrenAccessor childrenAccessor = hierarchyChildren;
23 ValueAccessor valueAccessor = hierarchyValue; 23 ValueAccessor valueAccessor = hierarchyValue;
24 24
25 /// Returns the list of HierarchyNode constructed from the given data and 25 /// Returns the list of HierarchyNode constructed from the given data and
26 /// parentColumn and valueColumn which is used to construct the hierarchy. 26 /// parentColumn and valueColumn which is used to construct the hierarchy.
27 /// The returned list of nodes contains the hierarchy with root being the 27 /// The returned list of nodes contains the hierarchy with root being the
28 /// first element its children in depth first order. 28 /// first element its children in depth first order.
29 List<T> layout(List rows, int parentColumn, int labelColumn, 29 List<T> layout(
30 int valueColumn) { 30 List rows, int parentColumn, int labelColumn, int valueColumn) {
31 List<HierarchyNode> nodeList = []; 31 List<HierarchyNode> nodeList = [];
32 for (var row in rows) { 32 for (var row in rows) {
33 nodeList.add(createNode(row[labelColumn], row[valueColumn], 0)); 33 nodeList.add(createNode(row[labelColumn], row[valueColumn], 0));
34 } 34 }
35 35
36 for (var i = 0; i < rows.length; i++) { 36 for (var i = 0; i < rows.length; i++) {
37 int parentRow = rows[i][parentColumn]; 37 int parentRow = rows[i][parentColumn];
38 if (parentRow == ROOT_ROW_INDEX) continue; 38 if (parentRow == ROOT_ROW_INDEX) continue;
39 var currentNode = nodeList[i]; 39 var currentNode = nodeList[i];
40 var parentNode = nodeList[parentRow]; 40 var parentNode = nodeList[parentRow];
41 (parentNode.children.isEmpty) ? parentNode.children = [currentNode] : 41 (parentNode.children.isEmpty)
42 parentNode.children.add(currentNode); 42 ? parentNode.children = [currentNode]
43 : parentNode.children.add(currentNode);
43 currentNode.parent = parentNode; 44 currentNode.parent = parentNode;
44 currentNode.depth = parentNode.depth + 1; 45 currentNode.depth = parentNode.depth + 1;
45 for (var child in currentNode.children) { 46 for (var child in currentNode.children) {
46 child.depth += 1; 47 child.depth += 1;
47 } 48 }
48 } 49 }
49 50
50 // Reorder the list so that root is the first element and the list contains 51 // Reorder the list so that root is the first element and the list contains
51 // the hierarchy of nodes in depth first order. 52 // the hierarchy of nodes in depth first order.
52 var hierarchyNodeList = []; 53 var hierarchyNodeList = [];
(...skipping 12 matching lines...) Expand all
65 66
66 /// Default accessor method for getting the list of children of the node. 67 /// Default accessor method for getting the list of children of the node.
67 static List hierarchyChildren(HierarchyNode node) => node.children; 68 static List hierarchyChildren(HierarchyNode node) => node.children;
68 69
69 /// Default accessor method for getting the value of the node. 70 /// Default accessor method for getting the value of the node.
70 static num hierarchyValue(HierarchyNode node) => node.value; 71 static num hierarchyValue(HierarchyNode node) => node.value;
71 72
72 /// Default sorting method for comparing node a and b. 73 /// Default sorting method for comparing node a and b.
73 static int hierarchySort(HierarchyNode a, HierarchyNode b) => 74 static int hierarchySort(HierarchyNode a, HierarchyNode b) =>
74 b.value - a.value; 75 b.value - a.value;
75
76 } 76 }
77 77
78 abstract class HierarchyNode { 78 abstract class HierarchyNode {
79 /// The parent node, or null for the root. 79 /// The parent node, or null for the root.
80 HierarchyNode parent = null; 80 HierarchyNode parent = null;
81 81
82 /// The list of children nodes, or null for leaf nodes. 82 /// The list of children nodes, or null for leaf nodes.
83 List children = []; 83 List children = [];
84 84
85 /// The label to show for each block of hierarchy 85 /// The label to show for each block of hierarchy
86 String label = ''; 86 String label = '';
87 87
88 /// The node value, as returned by the value accessor. 88 /// The node value, as returned by the value accessor.
89 dynamic value; 89 dynamic value;
90 90
91 /// The depth of the node, starting at 0 for the root. 91 /// The depth of the node, starting at 0 for the root.
92 int depth = 0; 92 int depth = 0;
93 } 93 }
OLDNEW
« no previous file with comments | « packages/charted/lib/core/utils/rect.dart ('k') | packages/charted/lib/layout/src/pie_layout.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698