/** Make _sel to be the first selected item. */ private boolean fixSelected() { Treeitem sel = null; switch (_selItems.size()) { case 1: sel = _selItems.iterator().next(); case 0: break; default: for (Treeitem item : getItems()) { if (item.isSelected()) { sel = item; break; } } } if (sel != _sel) { _sel = sel; return true; } return false; }
/** Fixes the status of new added child. */ private void fixNewChild(Treeitem item) { if (item.isSelected()) { if (_sel != null && !_multiple) { item.setSelectedDirectly(false); item.invalidate(); } else { if (_sel == null) _sel = item; _selItems.add(item); } } }
/** Fixes all info about the selected status. */ private void fixSelectedSet() { _sel = null; _selItems.clear(); for (Treeitem item : getItems()) { if (item.isSelected()) { if (_sel == null) { _sel = item; } else if (!_multiple) { item.setSelectedDirectly(false); continue; } _selItems.add(item); } } }
/** If the specified item is selected, it is deselected. * If it is not selected, it is selected. Other items in the tree * that are selected are not affected, and retain their selected state. */ public void toggleItemSelection(Treeitem item) { if (item.isSelected()) removeItemFromSelection(item); else addItemToSelection(item); }
/** Called by {@link Treeitem} when is removed from a tree. */ /*package*/ void onTreeitemRemoved(Treeitem item) { boolean fixSel = false; if (item.isSelected()) { _selItems.remove(item); fixSel = _sel == item; if (fixSel && !_multiple) _sel = null; } onTreechildrenRemoved(item.getTreechildren()); if (fixSel) fixSelected(); }
@Listen("onSelect = #tree") public void onSelect(SelectEvent<Treeitem, String> event) { Treeitem ref = event.getReference(); Set<Treeitem> newSelection = new HashSet<Treeitem>(event.getSelectedItems()); if (ref.isSelected()) { if (selected != null) { Set<Treeitem> deselected = new HashSet<Treeitem>(selected); deselected.removeAll(newSelection); for (Treeitem t : deselected) { Clients.log("Deselected " + t.getLabel()); } } Clients.log("Selected " + ref.getLabel()); } else { Clients.log("Deselected " + ref.getLabel()); } selected = newSelection; }
/** Deselects the given item without deselecting other items. */ public void removeItemFromSelection(Treeitem item) { if (item.getTree() != this) throw new UiException("Not a child: " + item); if (item.isSelected()) { if (!_multiple) { clearSelection(); } else { item.setSelectedDirectly(false); _selItems.remove(item); if (_sel == item) //bug fix:3131173 _sel = _selItems.size() > 0 ? _selItems.iterator().next() : null; smartUpdateSelection(); } } }
/** Called by {@link Treechildren} when is removed from a tree. */ /*package*/ void onTreechildrenRemoved(Treechildren tchs) { if (tchs == null || tchs.getParent() == this) return; //already being processed by onChildRemoved //main the selected status boolean fixSel = false; for (Treeitem item : tchs.getItems()) { if (item.isSelected()) { _selItems.remove(item); if (_sel == item) { if (!_multiple) { _sel = null; return; //done } fixSel = true; } } } if (fixSel) fixSelected(); }
/** Selects the given item, without deselecting any other items * that are already selected.. */ public void addItemToSelection(Treeitem item) { if (item.getTree() != this) throw new UiException("Not a child: " + item); if (!item.isSelected()) { if (!_multiple) { selectItem(item); } else { item.setSelectedDirectly(true); _selItems.add(item); if (_sel == null) _sel = _selItems.iterator().next(); smartUpdateSelection(); } } }
if (cntSel != 0) { for (Treeitem ti : getItems()) { if (ti.isSelected()) { if (_sel == null) _sel = ti;
/** Selects all items. */ public void selectAll() { if (!_multiple) throw new UiException("Appliable only to the multiple seltype: " + this); //we don't invoke getItemCount first because it is slow! boolean first = true; for (Treeitem item : getItems()) { if (!item.isSelected()) { _selItems.add(item); item.setSelectedDirectly(true); } if (first) { _sel = item; first = false; } } smartUpdate("selectAll", true); }
protected void renderProperties(org.zkoss.zk.ui.sys.ContentRenderer renderer) throws java.io.IOException { super.renderProperties(renderer); render(renderer, "selected", isSelected()); render(renderer, "disabled", isDisabled()); if (!isOpen()) renderer.render("open", false); if (!isSelectable()) renderer.render("checkable", false); render(renderer, "_loadedChildren", isLoaded()); render(renderer, "_loaded", isRendered() ? true : (getTree() != null ? getTree().getModel() == null : false)); if (_value instanceof String) render(renderer, "value", _value); }