📄 htmltreenode.java
字号:
translateChildrenPath(pathUpdateIndex, 0, offset); } } public void setExpanded(boolean expanded) { if (this.expanded == expanded) { // no change return; } this.expanded = expanded; if (expanded) { FacesContext context = FacesContext.getCurrentInstance(); TreeModel model = getTreeModel(context); int childCount = model.getChildCount(getUserObject()); for (int i = 0; i < childCount; i++) { Object child = model.getChild(getUserObject(), i); HtmlTreeNode node = createNode(model, child, childCount, i, context); getChildren().add(node); } layout[layout.length - 1] -= OFFSET; } else { if (clearSelection()) { setSelected(true); } getChildren().clear(); layout[layout.length - 1] += OFFSET; } } private HtmlTreeNode createNode(TreeModel model, Object child, int childCount, int index, FacesContext context) { HtmlTreeNode node = (HtmlTreeNode) context.getApplication().createComponent(HtmlTreeNode.COMPONENT_TYPE); String id = getTree().createUniqueId(context); node.setId(id); node.setPath(getPath().pathByAddingChild(child)); node.setUserObject(child); int state = CHILD; int childChildCount = model.getChildCount(child); if (childChildCount == 0) { if (childCount > 1) { if (index == 0) { state = CHILD; } else if (index == childCount - 1) { state = CHILD_LAST; } } else { state = CHILD_LAST; } } else { if (childCount > 1) { if (index == 0) { state = CLOSED; } else if (index == childCount - 1) { state = CLOSED_LAST; } else { state = CLOSED; } } else { state = CLOSED_LAST; } } node.setLayout(layout, state); return node; } public void toggleExpanded() { setExpanded(!expanded); } public boolean isSelected() { return selected; } public void setSelected(boolean selected) { if (selected) { getTree().getRootNode().clearSelection(); } this.selected = selected; getTree().selectionChanged(this); } public void toggleSelected() { setSelected(!selected); } private boolean clearSelection() { if (isSelected()) { selected = false; return true; } for (Iterator iterator = getChildren().iterator(); iterator.hasNext();) { HtmlTreeNode node = (HtmlTreeNode) iterator.next(); if (node.clearSelection()) { return true; } } return false; } public int[] getLayout() { return layout; } public void setLayout(int[] layout) { this.layout = layout; } public void setLayout(int[] parentLayout, int layout) { this.layout = new int[parentLayout.length + 1]; this.layout[parentLayout.length] = layout; for (int i = 0; i < parentLayout.length; i++) { int state = parentLayout[i]; if (state == OPEN || state == OPEN_FIRST || state == CLOSED || state == CLOSED_FIRST || state == CHILD || state == CHILD_FIRST || state == LINE) { this.layout[i] = LINE; } else { this.layout[i] = EMPTY; } } } public HtmlTreeImageCommandLink getExpandCollapseCommand(FacesContext context) { HtmlTreeImageCommandLink command = (HtmlTreeImageCommandLink) getFacet(EXPAND_COLLAPSE_FACET); if (command == null) { command = (HtmlTreeImageCommandLink) context.getApplication().createComponent(HtmlTreeImageCommandLink.COMPONENT_TYPE); String id = getTree().createUniqueId(context); command.setId(id); getFacets().put(EXPAND_COLLAPSE_FACET, command); } return command; } public Object saveState(FacesContext context) { Object values[] = new Object[5]; values[0] = super.saveState(context); values[1] = Boolean.valueOf(expanded); values[2] = layout; values[3] = translatePath(getPath(), getTreeModel(context)); values[4] = Boolean.valueOf(selected); return ((Object) (values)); } public void restoreState(FacesContext context, Object state) { Object values[] = (Object[]) state; super.restoreState(context, values[0]); expanded = ((Boolean) values[1]).booleanValue(); layout = (int[]) values[2]; translatedPath = (int[]) values[3]; selected = ((Boolean) values[4]).booleanValue(); } protected static int[] translatePath(TreePath treePath, TreeModel model) { Object[] path = treePath.getPath(); int[] translated = new int[path.length - 1]; Object parent = path[0]; for (int i = 1; i < path.length; i++) { Object element = path[i]; translated[i - 1] = model.getIndexOfChild(parent, element); parent = element; } return translated; } protected static TreePath translatePath(int[] path, TreeModel model) { Object[] translated = new Object[path.length + 1]; Object parent = model.getRoot(); translated[0] = parent; for (int i = 0; i < path.length; i++) { int index = path[i]; translated[i + 1] = model.getChild(parent, index); parent = translated[i + 1]; } return new TreePath(translated); } protected TreeModel getTreeModel(FacesContext context) { return getTree().getModel(context); } protected HtmlTree getTree() { if (getParent() instanceof HtmlTree) { return (HtmlTree) getParent(); } return ((HtmlTreeNode) getParent()).getTree(); } public boolean isLeaf(FacesContext context) { return getTreeModel(context).isLeaf(getUserObject()); } public void expandPath(int[] translatedPath, int current) { if (current >= translatedPath.length) { return; } HtmlTreeNode child = (HtmlTreeNode) getChildren().get(translatedPath[current]); if (!child.isExpanded()) { child.setExpanded(true); } child.expandPath(translatedPath, current + 1); } public void restoreItemState(HtmlTreeNode node) { setExpanded(node.isExpanded()); selected = node.isSelected(); List children = getChildren(); List otherChildren = node.getChildren(); for (int i = 0; i < children.size(); i++) { HtmlTreeNode child = (HtmlTreeNode) children.get(i); child.restoreItemState((HtmlTreeNode) otherChildren.get(i)); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -