aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatti Tahvonen <matti.tahvonen@itmill.com>2010-05-19 11:34:37 +0000
committerMatti Tahvonen <matti.tahvonen@itmill.com>2010-05-19 11:34:37 +0000
commitaf1e495311287e196e6ffad73fe712ecab93cc33 (patch)
treef6d47e0f1122235a72d6682ae174f73780a5d366
parentac84f9c0935e2e78621f6a78edb62627122c326d (diff)
downloadvaadin-framework-af1e495311287e196e6ffad73fe712ecab93cc33.tar.gz
vaadin-framework-af1e495311287e196e6ffad73fe712ecab93cc33.zip
fixes #5030
svn changeset:13254/svn branch:6.4
-rw-r--r--src/com/vaadin/data/util/HierarchicalContainer.java45
1 files changed, 42 insertions, 3 deletions
diff --git a/src/com/vaadin/data/util/HierarchicalContainer.java b/src/com/vaadin/data/util/HierarchicalContainer.java
index 121d1cc936..108c544198 100644
--- a/src/com/vaadin/data/util/HierarchicalContainer.java
+++ b/src/com/vaadin/data/util/HierarchicalContainer.java
@@ -69,6 +69,10 @@ public class HierarchicalContainer extends IndexedContainer implements
*/
private boolean includeParentsWhenFiltering = true;
+ private boolean contentChangedEventsDisabled = false;
+
+ private boolean contentsChangedEventPending;
+
/*
* Can the specified Item have any children? Don't add a JavaDoc comment
* here, we use the default documentation from implemented interface.
@@ -378,6 +382,7 @@ public class HierarchicalContainer extends IndexedContainer implements
*/
@Override
public Object addItem() {
+ disableContentsChangeEvents();
final Object itemId = super.addItem();
if (itemId == null) {
return null;
@@ -391,10 +396,35 @@ public class HierarchicalContainer extends IndexedContainer implements
}
}
}
-
+ enableAndFireContentsChangeEvents();
return itemId;
}
+ @Override
+ protected void fireContentsChange(int addedItemIndex) {
+ if (contentsChangeEventsOn()) {
+ super.fireContentsChange(addedItemIndex);
+ } else {
+ contentsChangedEventPending = true;
+ }
+ }
+
+ private boolean contentsChangeEventsOn() {
+ return !contentChangedEventsDisabled;
+ }
+
+ private void disableContentsChangeEvents() {
+ contentChangedEventsDisabled = true;
+ }
+
+ private void enableAndFireContentsChangeEvents() {
+ contentChangedEventsDisabled = false;
+ if (contentsChangedEventPending) {
+ fireContentsChange(-1);
+ }
+ contentsChangedEventPending = false;
+ }
+
/*
* (non-Javadoc)
*
@@ -402,6 +432,7 @@ public class HierarchicalContainer extends IndexedContainer implements
*/
@Override
public Item addItem(Object itemId) {
+ disableContentsChangeEvents();
final Item item = super.addItem(itemId);
if (item == null) {
return null;
@@ -414,7 +445,7 @@ public class HierarchicalContainer extends IndexedContainer implements
filteredRoots.add(itemId);
}
}
-
+ enableAndFireContentsChangeEvents();
return item;
}
@@ -425,6 +456,7 @@ public class HierarchicalContainer extends IndexedContainer implements
*/
@Override
public boolean removeAllItems() {
+ disableContentsChangeEvents();
final boolean success = super.removeAllItems();
if (success) {
@@ -439,6 +471,7 @@ public class HierarchicalContainer extends IndexedContainer implements
filteredChildren = null;
}
}
+ enableAndFireContentsChangeEvents();
return success;
}
@@ -449,6 +482,7 @@ public class HierarchicalContainer extends IndexedContainer implements
*/
@Override
public boolean removeItem(Object itemId) {
+ disableContentsChangeEvents();
final boolean success = super.removeItem(itemId);
if (success) {
@@ -496,6 +530,8 @@ public class HierarchicalContainer extends IndexedContainer implements
noChildrenAllowed.remove(itemId);
}
+ enableAndFireContentsChangeEvents();
+
return success;
}
@@ -508,7 +544,10 @@ public class HierarchicalContainer extends IndexedContainer implements
* @return true if the operation succeeded
*/
public boolean removeItemRecursively(Object itemId) {
- return removeItemRecursively(this, itemId);
+ disableContentsChangeEvents();
+ boolean removeItemRecursively = removeItemRecursively(this, itemId);
+ enableAndFireContentsChangeEvents();
+ return removeItemRecursively;
}
/**