*/
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.
*/
@Override
public Object addItem() {
+ disableContentsChangeEvents();
final Object itemId = super.addItem();
if (itemId == null) {
return null;
}
}
}
-
+ 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)
*
*/
@Override
public Item addItem(Object itemId) {
+ disableContentsChangeEvents();
final Item item = super.addItem(itemId);
if (item == null) {
return null;
filteredRoots.add(itemId);
}
}
-
+ enableAndFireContentsChangeEvents();
return item;
}
*/
@Override
public boolean removeAllItems() {
+ disableContentsChangeEvents();
final boolean success = super.removeAllItems();
if (success) {
filteredChildren = null;
}
}
+ enableAndFireContentsChangeEvents();
return success;
}
*/
@Override
public boolean removeItem(Object itemId) {
+ disableContentsChangeEvents();
final boolean success = super.removeItem(itemId);
if (success) {
noChildrenAllowed.remove(itemId);
}
+ enableAndFireContentsChangeEvents();
+
return success;
}
* @return true if the operation succeeded
*/
public boolean removeItemRecursively(Object itemId) {
- return removeItemRecursively(this, itemId);
+ disableContentsChangeEvents();
+ boolean removeItemRecursively = removeItemRecursively(this, itemId);
+ enableAndFireContentsChangeEvents();
+ return removeItemRecursively;
}
/**