| Index: charted/lib/layout/src/hierarchy_layout.dart
|
| diff --git a/charted/lib/layout/src/hierarchy_layout.dart b/charted/lib/layout/src/hierarchy_layout.dart
|
| deleted file mode 100644
|
| index 81cbcbc959bd51148cfdf9121ab4e8eee74dbf9e..0000000000000000000000000000000000000000
|
| --- a/charted/lib/layout/src/hierarchy_layout.dart
|
| +++ /dev/null
|
| @@ -1,93 +0,0 @@
|
| -/*
|
| - * Copyright 2015 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.layout;
|
| -
|
| -typedef int SortFunction(HierarchyNode a, HierarchyNode b);
|
| -typedef List ChildrenAccessor(HierarchyNode node);
|
| -typedef num ValueAccessor(HierarchyNode node);
|
| -
|
| -/**
|
| - * The hierarchy layout is an abstract layout that is not used directly, but
|
| - * instead allows code sharing between multiple hierarchical layouts such as:
|
| - * Cluster, Pack, Partition, Tree, and Treemap layout.
|
| - */
|
| -abstract class HierarchyLayout<T extends HierarchyNode> {
|
| - static const ROOT_ROW_INDEX = -1;
|
| - SortFunction sortFunction = hierarchySort;
|
| - ChildrenAccessor childrenAccessor = hierarchyChildren;
|
| - ValueAccessor valueAccessor = hierarchyValue;
|
| -
|
| - /// Returns the list of HierarchyNode constructed from the given data and
|
| - /// parentColumn and valueColumn which is used to construct the hierarchy.
|
| - /// The returned list of nodes contains the hierarchy with root being the
|
| - /// first element its children in depth first order.
|
| - List<T> layout(List rows, int parentColumn, int labelColumn,
|
| - int valueColumn) {
|
| - List<HierarchyNode> nodeList = [];
|
| - for (var row in rows) {
|
| - nodeList.add(createNode(row[labelColumn], row[valueColumn], 0));
|
| - }
|
| -
|
| - for (var i = 0; i < rows.length; i++) {
|
| - int parentRow = rows[i][parentColumn];
|
| - if (parentRow == ROOT_ROW_INDEX) continue;
|
| - var currentNode = nodeList[i];
|
| - var parentNode = nodeList[parentRow];
|
| - (parentNode.children.isEmpty) ? parentNode.children = [currentNode] :
|
| - parentNode.children.add(currentNode);
|
| - currentNode.parent = parentNode;
|
| - currentNode.depth = parentNode.depth + 1;
|
| - for (var child in currentNode.children) {
|
| - child.depth += 1;
|
| - }
|
| - }
|
| -
|
| - // Reorder the list so that root is the first element and the list contains
|
| - // the hierarchy of nodes in depth first order.
|
| - var hierarchyNodeList = [];
|
| - var root = nodeList.where((e) => e.depth == 0).elementAt(0);
|
| - var children = [root];
|
| - while (children.length > 0) {
|
| - var node = children.removeLast();
|
| - children.addAll(node.children);
|
| - hierarchyNodeList.add(node);
|
| - }
|
| -
|
| - return hierarchyNodeList;
|
| - }
|
| -
|
| - T createNode(label, value, depth);
|
| -
|
| - /// Default accessor method for getting the list of children of the node.
|
| - static List hierarchyChildren(HierarchyNode node) => node.children;
|
| -
|
| - /// Default accessor method for getting the value of the node.
|
| - static num hierarchyValue(HierarchyNode node) => node.value;
|
| -
|
| - /// Default sorting method for comparing node a and b.
|
| - static int hierarchySort(HierarchyNode a, HierarchyNode b) =>
|
| - b.value - a.value;
|
| -
|
| -}
|
| -
|
| -abstract class HierarchyNode {
|
| - /// The parent node, or null for the root.
|
| - HierarchyNode parent = null;
|
| -
|
| - /// The list of children nodes, or null for leaf nodes.
|
| - List children = [];
|
| -
|
| - /// The label to show for each block of hierarchy
|
| - String label = '';
|
| -
|
| - /// The node value, as returned by the value accessor.
|
| - dynamic value;
|
| -
|
| - /// The depth of the node, starting at 0 for the root.
|
| - int depth = 0;
|
| -}
|
|
|