Updater should save tree state on change

pull/14/head
Sam Bosley 13 years ago
parent 9a5a6afd3e
commit df36dcc808

@ -121,14 +121,13 @@ public class NewOrderedListFragmentHelper<LIST> {
try {
if(to >= getListView().getCount())
updater.moveTo(targetTaskId, -1);
updater.moveTo(list, getFilter(), targetTaskId, -1);
else
updater.moveTo(targetTaskId, destinationTaskId);
updater.moveTo(list, getFilter(), targetTaskId, destinationTaskId);
} catch (Exception e) {
Log.e("drag", "Drag Error", e); //$NON-NLS-1$ //$NON-NLS-2$
}
updater.writeSerialization(list, updater.serializeTree());
updater.applyToFilter(getFilter());
fragment.reconstructCursor();
fragment.loadTaskListContent(true);
}
@ -149,12 +148,11 @@ public class NewOrderedListFragmentHelper<LIST> {
long targetTaskId = taskAdapter.getItemId(which);
if (targetTaskId <= 0) return; // This can happen with gestures on empty parts of the list (e.g. extra space below tasks)
try {
updater.indent(targetTaskId, delta);
updater.indent(list, getFilter(), targetTaskId, delta);
} catch (Exception e) {
Log.e("drag", "Indent Error", e); //$NON-NLS-1$ //$NON-NLS-2$
}
updater.writeSerialization(list, updater.serializeTree());
updater.applyToFilter(getFilter());
fragment.reconstructCursor();
fragment.loadTaskListContent(true);
}
@ -308,8 +306,12 @@ public class NewOrderedListFragmentHelper<LIST> {
this.list = list;
}
public void onAddTask(long taskId) {
updater.onAddTask(list, getFilter(), taskId);
}
public void onDeleteTask(Task task) {
updater.onDeleteTask(task.getId());
updater.onDeleteTask(list, getFilter(), task.getId());
taskAdapter.notifyDataSetInvalidated();
}

@ -31,7 +31,7 @@ public abstract class NewOrderedListUpdater<LIST> {
public void visitNode(Node node);
}
protected static class Node {
public static class Node {
public final long taskId;
public Node parent;
public int indent;
@ -127,12 +127,12 @@ public abstract class NewOrderedListUpdater<LIST> {
applyToDescendantsHelper(treeRoot, visitor);
}
public void indent(long targetTaskId, int delta) {
public void indent(LIST list, Filter filter, long targetTaskId, int delta) {
Node node = idToNode.get(targetTaskId);
indentHelper(node, delta);
indentHelper(list, filter, node, delta);
}
private void indentHelper(Node node, int delta) {
private void indentHelper(LIST list, Filter filter, Node node, int delta) {
if (node == null)
return;
if (delta == 0)
@ -168,6 +168,9 @@ public abstract class NewOrderedListUpdater<LIST> {
setNodeIndent(node, newParent.indent + 1);
newSiblings.add(insertAfter + 1, node);
}
writeSerialization(list, serializeTree());
applyToFilter(filter);
}
private void setNodeIndent(Node node, int indent) {
@ -182,13 +185,14 @@ public abstract class NewOrderedListUpdater<LIST> {
}
}
public void moveTo(long targetTaskId, long beforeTaskId) {
public void moveTo(LIST list, Filter filter, long targetTaskId, long beforeTaskId) {
Node target = idToNode.get(targetTaskId);
if (target == null)
return;
if (beforeTaskId == -1) {
moveToEndOfList(target);
moveToEndOfList(list, filter, target);
return;
}
Node before = idToNode.get(beforeTaskId);
@ -196,10 +200,10 @@ public abstract class NewOrderedListUpdater<LIST> {
if (before == null)
return;
moveHelper(target, before);
moveHelper(list, filter, target, before);
}
private void moveHelper(Node moveThis, Node beforeThis) {
private void moveHelper(LIST list, Filter filter, Node moveThis, Node beforeThis) {
Node oldParent = moveThis.parent;
ArrayList<Node> oldSiblings = oldParent.children;
@ -222,16 +226,27 @@ public abstract class NewOrderedListUpdater<LIST> {
beforeIndex--;
}
newSiblings.add(beforeIndex, moveThis);
writeSerialization(list, serializeTree());
applyToFilter(filter);
}
private void moveToEndOfList(Node moveThis) {
private void moveToEndOfList(LIST list, Filter filter, Node moveThis) {
Node parent = moveThis.parent;
parent.children.remove(moveThis);
treeRoot.children.add(moveThis);
moveThis.parent = treeRoot;
writeSerialization(list, serializeTree());
applyToFilter(filter);
}
public void onDeleteTask(long taskId) {
public void onAddTask(LIST list, Filter filter, long taskId) {
Node newNode = new Node(taskId, treeRoot, 0);
treeRoot.children.add(newNode);
writeSerialization(list, serializeTree());
applyToFilter(filter);
}
public void onDeleteTask(LIST list, Filter filter, long taskId) {
Node task = idToNode.get(taskId);
if (task == null)
return;
@ -248,6 +263,9 @@ public abstract class NewOrderedListUpdater<LIST> {
index++;
}
idToNode.remove(taskId);
writeSerialization(list, serializeTree());
applyToFilter(filter);
}
private Node buildTreeModel(String serializedTree) {

Loading…
Cancel
Save