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

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

Issue 2213693002: Updated charted DEP to 0.4.X (Closed) Base URL: https://github.com/dart-lang/observatory_pub_packages.git@master
Patch Set: Created 4 years, 4 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 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);
(...skipping 10 matching lines...) Expand all
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( 29 List<T> layout(
30 List rows, int parentColumn, int labelColumn, int valueColumn) { 30 List rows, int parentColumn, int labelColumn, int valueColumn) {
31 List<HierarchyNode> nodeList = []; 31 List<T> 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) 41 parentNode.children.add(currentNode);
42 ? parentNode.children = [currentNode]
43 : parentNode.children.add(currentNode);
44 currentNode.parent = parentNode; 42 currentNode.parent = parentNode;
45 currentNode.depth = parentNode.depth + 1; 43 currentNode.depth = parentNode.depth + 1;
46 for (var child in currentNode.children) { 44 for (var child in currentNode.children) {
47 child.depth += 1; 45 child.depth += 1;
48 } 46 }
49 } 47 }
50 48
51 // Reorder the list so that root is the first element and the list contains 49 // Reorder the list so that root is the first element and the list contains
52 // the hierarchy of nodes in depth first order. 50 // the hierarchy of nodes in depth first order.
53 var hierarchyNodeList = []; 51 var hierarchyNodeList = <HierarchyNode>[];
54 var root = nodeList.where((e) => e.depth == 0).elementAt(0); 52 var root = nodeList.where((e) => e.depth == 0).elementAt(0);
55 var children = [root]; 53 var children = <HierarchyNode>[root];
56 while (children.length > 0) { 54 while (children.length > 0) {
57 var node = children.removeLast(); 55 var node = children.removeLast();
58 children.addAll(node.children); 56 children.addAll(node.children);
59 hierarchyNodeList.add(node); 57 hierarchyNodeList.add(node);
60 } 58 }
61 59
62 return hierarchyNodeList; 60 return hierarchyNodeList;
63 } 61 }
64 62
65 T createNode(label, value, depth); 63 T createNode(label, value, depth);
66 64
67 /// Default accessor method for getting the list of children of the node. 65 /// Default accessor method for getting the list of children of the node.
68 static List hierarchyChildren(HierarchyNode node) => node.children; 66 static List hierarchyChildren(HierarchyNode node) => node.children;
69 67
70 /// Default accessor method for getting the value of the node. 68 /// Default accessor method for getting the value of the node.
71 static num hierarchyValue(HierarchyNode node) => node.value; 69 static num hierarchyValue(HierarchyNode node) => node.value;
72 70
73 /// Default sorting method for comparing node a and b. 71 /// Default sorting method for comparing node a and b.
74 static int hierarchySort(HierarchyNode a, HierarchyNode b) => 72 static int hierarchySort(HierarchyNode a, HierarchyNode b) =>
75 b.value - a.value; 73 b.value - a.value;
76 } 74 }
77 75
78 abstract class HierarchyNode { 76 abstract class HierarchyNode {
79 /// The parent node, or null for the root. 77 /// The parent node, or null for the root.
80 HierarchyNode parent = null; 78 HierarchyNode parent = null;
81 79
82 /// The list of children nodes, or null for leaf nodes. 80 /// The list of children nodes, or null for leaf nodes.
83 List children = []; 81 List<HierarchyNode> get children;
84 82
85 /// The label to show for each block of hierarchy 83 /// The label to show for each block of hierarchy
86 String label = ''; 84 String label = '';
87 85
88 /// The node value, as returned by the value accessor. 86 /// The node value, as returned by the value accessor.
89 dynamic value; 87 dynamic value;
90 88
91 /// The depth of the node, starting at 0 for the root. 89 /// The depth of the node, starting at 0 for the root.
92 int depth = 0; 90 int depth = 0;
93 } 91 }
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