diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/util/MutableTreeModel.java b/ganttzk/src/main/java/org/zkoss/ganttz/util/MutableTreeModel.java index e04b0675c..97c07eccd 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/util/MutableTreeModel.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/util/MutableTreeModel.java @@ -389,8 +389,7 @@ public class MutableTreeModel extends AbstractTreeModel { Node parentNode = find(parent); int[] changed = parentNode.down(find(node)); if (changed.length != 0) { - fireEvent(parent, changed[0], changed[1], - TreeDataEvent.CONTENTS_CHANGED); + fireRecreationOfInterval(parentNode, changed[0], changed[1]); } } @@ -399,11 +398,18 @@ public class MutableTreeModel extends AbstractTreeModel { Node parentNode = find(parent); int[] changed = parentNode.up(find(node)); if (changed.length != 0) { - fireEvent(parent, changed[0], changed[1], - TreeDataEvent.CONTENTS_CHANGED); + fireRecreationOfInterval(parentNode, changed[0], changed[1]); } } + private void fireRecreationOfInterval(Node parentNode, int start, + int endInclusive) { + fireEvent(parentNode.value, start, endInclusive, + TreeDataEvent.INTERVAL_REMOVED); + fireEvent(parentNode.value, start, endInclusive, + TreeDataEvent.INTERVAL_ADDED); + } + public boolean isEmpty() { return getChildCount(getRoot()) == 0; } diff --git a/ganttzk/src/test/java/org/zkoss/ganttz/util/MutableTreeModelTest.java b/ganttzk/src/test/java/org/zkoss/ganttz/util/MutableTreeModelTest.java index c7aab141c..383a0f8a8 100644 --- a/ganttzk/src/test/java/org/zkoss/ganttz/util/MutableTreeModelTest.java +++ b/ganttzk/src/test/java/org/zkoss/ganttz/util/MutableTreeModelTest.java @@ -492,7 +492,7 @@ public class MutableTreeModelTest { } @Test - public void movingUpAndDownSendsEvents() { + public void movingUpAndDownSendsRemovalAndAddingEventsSoZKReloadsCorrectlyTheData() { final MutableTreeModel model = MutableTreeModel .create(Prueba.class); Prueba prueba1 = new Prueba(); @@ -510,10 +510,14 @@ public class MutableTreeModelTest { } }); model.up(prueba2); - checkIsValid(getLast(eventsFired), TreeDataEvent.CONTENTS_CHANGED, + checkIsValid(getPreviousToLast(eventsFired), + TreeDataEvent.INTERVAL_REMOVED, model.getRoot(), 0, 1); + checkIsValid(getLast(eventsFired), TreeDataEvent.INTERVAL_ADDED, model.getRoot(), 0, 1); model.down(prueba1); - checkIsValid(getLast(eventsFired), TreeDataEvent.CONTENTS_CHANGED, + checkIsValid(getPreviousToLast(eventsFired), + TreeDataEvent.INTERVAL_REMOVED, model.getRoot(), 1, 2); + checkIsValid(getLast(eventsFired), TreeDataEvent.INTERVAL_ADDED, model.getRoot(), 1, 2); } @@ -579,6 +583,10 @@ public class MutableTreeModelTest { assertThat(event.getType(), equalTo(type)); } + private TreeDataEvent getPreviousToLast(List list) { + return list.get(list.size() - 2); + } + private TreeDataEvent getLast(List list) { if (list.isEmpty()) { throw new RuntimeException("no events");