From 029e5450abb180baeeca52b49d57ea6d0ca7933f Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Tue, 30 Oct 2012 17:53:52 -0700 Subject: [PATCH] Implement move to end of list, get task indent from node --- .../subtasks/NewOrderedListUpdater.java | 34 ++++++++++++++++--- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/subtasks/NewOrderedListUpdater.java b/astrid/plugin-src/com/todoroo/astrid/subtasks/NewOrderedListUpdater.java index 6e0e211f0..cffa5c554 100644 --- a/astrid/plugin-src/com/todoroo/astrid/subtasks/NewOrderedListUpdater.java +++ b/astrid/plugin-src/com/todoroo/astrid/subtasks/NewOrderedListUpdater.java @@ -27,11 +27,13 @@ public abstract class NewOrderedListUpdater { protected static class Node { public final long taskId; public Node parent; + public int indent; public final ArrayList children = new ArrayList(); - public Node(long taskId, Node parent) { + public Node(long taskId, Node parent, int indent) { this.taskId = taskId; this.parent = parent; + this.indent = indent; } } @@ -41,6 +43,13 @@ public abstract class NewOrderedListUpdater { protected abstract String getSerializedTree(); + public int getIndentForTask(long targetTaskId) { + Node n = idToNode.get(targetTaskId); + if (n == null) + return 0; + return n.indent; + } + protected void initialize(LIST list, Filter filter) { treeRoot = buildTreeModel(getSerializedTree()); } @@ -83,6 +92,7 @@ public abstract class NewOrderedListUpdater { siblings.remove(index); node.parent = newParent; newParent.children.add(node); + node.indent = newParent.indent + 1; } else if (delta < 0) { if (parent == treeRoot) // Can't deindent a top level item return; @@ -97,16 +107,25 @@ public abstract class NewOrderedListUpdater { int insertAfter = newSiblings.indexOf(parent); siblings.remove(index); node.parent = newParent; + node.indent = newParent.indent + 1; newSiblings.add(insertAfter + 1, node); } } public void moveTo(long targetTaskId, long beforeTaskId) { Node target = idToNode.get(targetTaskId); + if (target == null) + return; + + if (beforeTaskId == -1) { + moveToEndOfList(target); + } + Node before = idToNode.get(beforeTaskId); - if (target == null || before == null) + if (before == null) return; + moveHelper(target, before); } @@ -122,8 +141,15 @@ public abstract class NewOrderedListUpdater { siblings.add(index, moveThis); } + private void moveToEndOfList(Node moveThis) { + Node parent = moveThis.parent; + parent.children.remove(moveThis); + treeRoot.children.add(moveThis); + moveThis.parent = treeRoot; + } + private Node buildTreeModel(String serializedTree) { - Node root = new Node(-1, null); + Node root = new Node(-1, null, -1); try { JSONArray tree = new JSONArray(serializedTree); recursivelyBuildChildren(root, tree); @@ -145,7 +171,7 @@ public abstract class NewOrderedListUpdater { continue; JSONArray childsChildren = childObj.getJSONArray(Long.toString(id)); - Node child = new Node(id, node); + Node child = new Node(id, node, node.indent + 1); recursivelyBuildChildren(child, childsChildren); node.children.add(child); idToNode.put(id, child);