Alexander Wels has uploaded a new change for review. Change subject: webadmin: allow nested tags more than 2 levels deep ......................................................................
webadmin: allow nested tags more than 2 levels deep - Fixed code to allow for nested tags to be assigned more than 2 levels deep. - Fixed leaking selection change handler. Change-Id: I7dcb031aaf6cd279c9f439694184743db1b85eb8 Signed-off-by: Alexander Wels <aw...@redhat.com> --- M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/AssignTagsPopupView.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/uicommon/model/ModelListTreeViewModel.java 2 files changed, 36 insertions(+), 19 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/10/18610/1 diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/AssignTagsPopupView.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/AssignTagsPopupView.java index 9a156df..3177b65 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/AssignTagsPopupView.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/AssignTagsPopupView.java @@ -71,6 +71,12 @@ } @Override + public void hide() { + super.hide(); + tree.getTreeViewModel().removeSelectionChangeHandlers(); + } + + @Override public void edit(TagListModel object) { driver.edit(object); diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/uicommon/model/ModelListTreeViewModel.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/uicommon/model/ModelListTreeViewModel.java index 6ecc401..a89382b 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/uicommon/model/ModelListTreeViewModel.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/uicommon/model/ModelListTreeViewModel.java @@ -17,6 +17,7 @@ import com.google.gwt.core.client.GWT; import com.google.gwt.event.logical.shared.SelectionEvent; import com.google.gwt.event.logical.shared.SelectionHandler; +import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.safehtml.client.SafeHtmlTemplates; import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; @@ -161,6 +162,8 @@ private String elementIdPrefix = DOM.createUniqueId(); + private HandlerRegistration selectionChangeHandlerRegistration; + public ModelListTreeViewModel() { List<HasCell<M, ?>> cells = new ArrayList<HasCell<M, ?>>(); cells.add(new CheckboxColumn()); @@ -184,29 +187,12 @@ }; // Drive selection - selectionModel.addSelectionChangeHandler(new Handler() { + selectionChangeHandlerRegistration = selectionModel.addSelectionChangeHandler(new Handler() { @Override public void onSelectionChange(SelectionChangeEvent event) { Set<M> selectedSet = selectionModel.getSelectedSet(); HashSet<TreeNodeModel<?, ?>> removedSet = new HashSet<TreeNodeModel<?, ?>>(); - for (TreeNodeModel<T, M> child : roots) { - if (!selectedSet.contains(child) && child.getSelected()) { - selectedSet.remove(child); - removedSet.add(child); - } - for (TreeNodeModel<T, M> child1 : child.getChildren()) { - if (!selectedSet.contains(child1) && child1.getSelected()) { - selectedSet.remove(child1); - removedSet.add(child1); - } - for (TreeNodeModel<T, M> child2 : child1.getChildren()) { - if (!selectedSet.contains(child2) && child2.getSelected()) { - selectedSet.remove(child2); - removedSet.add(child2); - } - } - } - } + updateSelectionSets(selectedSet, removedSet, roots); for (M m : selectedSet) { m.setSelected(true); } @@ -217,6 +203,31 @@ }); } + /** + * Recursively determine the set of changed nodes. + * @param selectedSet The set of selected nodes. + * @param removedSet The set of removed nodes. + * @param nodes The list of nodes to check against. + */ + private void updateSelectionSets(Set<M> selectedSet, Set<TreeNodeModel<?, ?>> removedSet, List<M> nodes) { + for (TreeNodeModel<T, M> node : nodes) { + if (!selectedSet.contains(node) && node.getSelected()) { + selectedSet.remove(node); + removedSet.add(node); + } + updateSelectionSets(selectedSet, removedSet, node.getChildren()); + } + } + + /** + * Remove the selection change handler. + */ + public void removeSelectionChangeHandlers() { + if (selectionChangeHandlerRegistration != null) { + selectionChangeHandlerRegistration.removeHandler(); + } + } + public void UpdateSelection(M model, final HasData<M> display) { // Add Selection Listener if (nodeSelectionHandler == null) { -- To view, visit http://gerrit.ovirt.org/18610 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I7dcb031aaf6cd279c9f439694184743db1b85eb8 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Alexander Wels <aw...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches