You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by kn...@apache.org on 2008/04/20 22:06:52 UTC
svn commit: r649964 - in
/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree:
AbstractTree.java BaseTree.java DefaultTreeState.java
ExtendedTreeModel.java ITreeState.java ITreeStateListener.java
Author: knopp
Date: Sun Apr 20 13:06:50 2008
New Revision: 649964
URL: http://svn.apache.org/viewvc?rev=649964&view=rev
Log:
WICKET-1555
Added:
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/ExtendedTreeModel.java (with props)
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/BaseTree.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/DefaultTreeState.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/ITreeState.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/ITreeStateListener.java
Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java?rev=649964&r1=649963&r2=649964&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java Sun Apr 20 13:06:50 2008
@@ -18,7 +18,6 @@
import java.io.Serializable;
import java.util.ArrayList;
-import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -109,7 +108,7 @@
* @param level
* current level
*/
- public TreeItem(String id, final TreeNode node, int level)
+ public TreeItem(String id, final Object node, int level)
{
super(id, new Model((Serializable)node));
@@ -143,6 +142,7 @@
/**
* @see org.apache.wicket.Component#getMarkupId()
*/
+ @Override
public String getMarkupId()
{
// this is overridden to produce id that begins with id of tree
@@ -156,7 +156,7 @@
*/
public TreeItem getParentItem()
{
- return (TreeItem)nodeToItemMap.get(getParentNode((TreeNode)getModelObject()));
+ return (TreeItem)nodeToItemMap.get(getParentNode(getModelObject()));
}
/**
@@ -183,6 +183,7 @@
/**
* @see org.apache.wicket.MarkupContainer#onRender(org.apache.wicket.markup.MarkupStream)
*/
+ @Override
protected void onRender(final MarkupStream markupStream)
{
// is this root and tree is in rootless mode?
@@ -229,6 +230,7 @@
}
}
+ @Override
public void renderHead(final HtmlHeaderContainer container)
{
super.renderHead(container);
@@ -266,6 +268,7 @@
setFlag(FLAG_RENDER_CHILDREN, value);
}
+ @Override
protected void onDetach()
{
super.onDetach();
@@ -291,6 +294,7 @@
setRenderChildren(false);
}
+ @Override
protected void onBeforeRender()
{
onBeforeRenderInternal();
@@ -309,6 +313,7 @@
}
}
+ @Override
protected void onAfterRender()
{
super.onAfterRender();
@@ -348,6 +353,7 @@
/**
* @see org.apache.wicket.MarkupContainer#remove(org.apache.wicket.Component)
*/
+ @Override
public void remove(Component component)
{
// when a treeItem is removed, remove reference to it from
@@ -364,6 +370,7 @@
*
* @param markupStream
*/
+ @Override
protected void onRender(final MarkupStream markupStream)
{
// Save position in markup stream
@@ -406,36 +413,6 @@
}
}
- /**
- * Returns an iterator that iterates trough the enumeration.
- *
- * @param enumeration
- * The enumeration to iterate through
- * @return The iterator
- */
- private static final Iterator toIterator(final Enumeration enumeration)
- {
- return new Iterator()
- {
- private final Enumeration e = enumeration;
-
- public boolean hasNext()
- {
- return e.hasMoreElements();
- }
-
- public Object next()
- {
- return e.nextElement();
- }
-
- public void remove()
- {
- throw new UnsupportedOperationException("Remove is not supported on enumeration.");
- }
- };
- }
-
private boolean attached = false;
/** comma separated list of ids of elements to be deleted. */
@@ -574,7 +551,7 @@
// has been called
if (rootItem == null)
{
- TreeNode rootNode = (TreeNode)((TreeModel)getModelObject()).getRoot();
+ Object rootNode = ((TreeModel)getModelObject()).getRoot();
if (rootNode != null)
{
if (isRootLess())
@@ -598,6 +575,7 @@
* Called at the beginning of the request (not ajax request, unless we are rendering the entire
* component)
*/
+ @Override
public void onBeforeRender()
{
onBeforeRenderInternal();
@@ -607,10 +585,15 @@
/**
* @see org.apache.wicket.MarkupContainer#onDetach()
*/
+ @Override
public void onDetach()
{
attached = false;
super.onDetach();
+ if (getTreeState() instanceof IDetachable)
+ {
+ ((IDetachable)getTreeState()).detach();
+ }
}
/**
@@ -634,7 +617,7 @@
/**
* @see org.apache.wicket.markup.html.tree.ITreeStateListener#nodeCollapsed(javax.swing.tree.TreeNode)
*/
- public final void nodeCollapsed(TreeNode node)
+ public final void nodeCollapsed(Object node)
{
if (isNodeVisible(node) == true)
{
@@ -645,7 +628,7 @@
/**
* @see org.apache.wicket.markup.html.tree.ITreeStateListener#nodeExpanded(javax.swing.tree.TreeNode)
*/
- public final void nodeExpanded(TreeNode node)
+ public final void nodeExpanded(Object node)
{
if (isNodeVisible(node) == true)
{
@@ -656,7 +639,7 @@
/**
* @see org.apache.wicket.markup.html.tree.ITreeStateListener#nodeSelected(javax.swing.tree.TreeNode)
*/
- public final void nodeSelected(TreeNode node)
+ public final void nodeSelected(Object node)
{
if (isNodeVisible(node))
{
@@ -667,7 +650,7 @@
/**
* @see org.apache.wicket.markup.html.tree.ITreeStateListener#nodeUnselected(javax.swing.tree.TreeNode)
*/
- public final void nodeUnselected(TreeNode node)
+ public final void nodeUnselected(Object node)
{
if (isNodeVisible(node))
{
@@ -702,7 +685,7 @@
// expanded
if (rootLess == true && getModelObject() != null)
{
- getTreeState().expandNode((TreeNode)((TreeModel)getModelObject()).getRoot());
+ getTreeState().expandNode(((TreeModel)getModelObject()).getRoot());
}
}
}
@@ -717,7 +700,7 @@
{
if (rootItem != null)
{
- invalidateNode((TreeNode)rootItem.getModelObject(), true);
+ invalidateNode(rootItem.getModelObject(), true);
}
}
else
@@ -728,7 +711,7 @@
{
for (int i = 0; i < children.length; i++)
{
- TreeNode node = (TreeNode)children[i];
+ Object node = children[i];
if (isNodeVisible(node))
{
// if the nodes is visible invalidate it
@@ -761,7 +744,7 @@
// invalidate the node and it's children, so that they are
// redrawn
- invalidateNodeWithChildren((TreeNode)item.getModelObject());
+ invalidateNodeWithChildren(item.getModelObject());
}
}
@@ -773,20 +756,20 @@
public final void treeNodesInserted(TreeModelEvent e)
{
// get the parent node of inserted nodes
- TreeNode parent = (TreeNode)e.getTreePath().getLastPathComponent();
+ Object parent = e.getTreePath().getLastPathComponent();
if (isNodeVisible(parent) && isNodeExpanded(parent))
{
TreeItem parentItem = (TreeItem)nodeToItemMap.get(parent);
-
- if (parentItem.getChildren().isEmpty())
+
+ if (parentItem.getChildren().isEmpty())
{
invalidateNode(parent, true);
}
-
+
for (int i = 0; i < e.getChildren().length; ++i)
{
- TreeNode node = (TreeNode)e.getChildren()[i];
+ Object node = e.getChildren()[i];
int index = e.getChildIndices()[i];
TreeItem item = newTreeItem(node, parentItem.getLevel() + 1);
itemContainer.add(item);
@@ -794,8 +777,11 @@
markTheLastButOneChildDirty(parentItem, item);
- dirtyItems.add(item);
- dirtyItemsCreateDOM.add(item);
+ if (!dirtyItems.contains(item))
+ dirtyItems.add(item);
+
+ if (!dirtyItemsCreateDOM.contains(item))
+ dirtyItemsCreateDOM.add(item);
}
}
}
@@ -806,7 +792,7 @@
public final void treeNodesRemoved(TreeModelEvent e)
{
// get the parent node of inserted nodes
- TreeNode parent = (TreeNode)e.getTreePath().getLastPathComponent();
+ Object parent = e.getTreePath().getLastPathComponent();
TreeItem parentItem = (TreeItem)nodeToItemMap.get(parent);
if (isNodeVisible(parent) && isNodeExpanded(parent))
@@ -814,7 +800,7 @@
boolean nonEmpty = !parentItem.getChildren().isEmpty();
for (int i = 0; i < e.getChildren().length; ++i)
{
- TreeNode node = (TreeNode)e.getChildren()[i];
+ Object node = e.getChildren()[i];
TreeItem item = (TreeItem)nodeToItemMap.get(node);
if (item != null)
@@ -831,7 +817,7 @@
removeItem(item);
// deselect the node
- getTreeState().selectNode((TreeNode)item.getModelObject(), false);
+ getTreeState().selectNode(item.getModelObject(), false);
}
});
@@ -851,7 +837,7 @@
public final void treeStructureChanged(TreeModelEvent e)
{
// get the parent node of changed nodes
- TreeNode node = (TreeNode)e.getTreePath().getLastPathComponent();
+ Object node = e.getTreePath().getLastPathComponent();
// has the tree root changed?
if (e.getTreePath().getPathCount() == 1)
@@ -983,6 +969,7 @@
for (Iterator i = dirtyItems.iterator(); i.hasNext();)
{
TreeItem item = (TreeItem)i.next();
+
// does the item need to rebuild children?
if (item.getChildren() == null)
{
@@ -996,6 +983,7 @@
// add the component to target
addComponent(target, item);
+
}
// clear dirty flags
@@ -1010,7 +998,7 @@
* The node to inspect
* @return true if the node is expanded, false otherwise
*/
- protected final boolean isNodeExpanded(TreeNode node)
+ protected final boolean isNodeExpanded(Object node)
{
// In root less mode the root node is always expanded
if (isRootLess() && rootItem != null && rootItem.getModelObject().equals(node))
@@ -1035,6 +1023,7 @@
/**
* Called after the rendering of tree is complete. Here we clear the dirty flags.
*/
+ @Override
protected void onAfterRender()
{
super.onAfterRender();
@@ -1066,11 +1055,10 @@
List items;
// if the node is expanded
- if (isNodeExpanded((TreeNode)item.getModelObject()))
+ if (isNodeExpanded(item.getModelObject()))
{
// build the items for children of the items' treenode.
- items = buildTreeItems(nodeChildren((TreeNode)item.getModelObject()),
- item.getLevel() + 1);
+ items = buildTreeItems(nodeChildren(item.getModelObject()), item.getLevel() + 1);
}
else
{
@@ -1097,7 +1085,7 @@
// for each node
while (nodes.hasNext())
{
- TreeNode node = (TreeNode)nodes.next();
+ Object node = nodes.next();
// create tree item
TreeItem item = newTreeItem(node, level);
itemContainer.add(item);
@@ -1230,7 +1218,7 @@
*
* @param node
*/
- public final void markNodeDirty(TreeNode node)
+ public final void markNodeDirty(Object node)
{
invalidateNode(node, false);
}
@@ -1243,7 +1231,7 @@
* The node to invalidate
* @param forceRebuild
*/
- private final void invalidateNode(TreeNode node, boolean forceRebuild)
+ private final void invalidateNode(Object node, boolean forceRebuild)
{
if (dirtyAll == false)
{
@@ -1290,8 +1278,10 @@
}
}
- dirtyItems.add(item);
- if (createDOM)
+ if (!dirtyItems.contains(item))
+ dirtyItems.add(item);
+
+ if (createDOM && !dirtyItemsCreateDOM.contains(item))
{
dirtyItemsCreateDOM.add(item);
}
@@ -1306,7 +1296,7 @@
* @param node
* The node to invalidate
*/
- private final void invalidateNodeWithChildren(TreeNode node)
+ private final void invalidateNodeWithChildren(Object node)
{
if (dirtyAll == false)
{
@@ -1328,8 +1318,11 @@
// set children to null so that they get rebuild
item.setChildren(null);
- // add item to dirty items
- dirtyItems.add(item);
+ if (!dirtyItems.contains(item))
+ {
+ // add item to dirty items
+ dirtyItems.add(item);
+ }
}
}
}
@@ -1341,27 +1334,41 @@
* The node to inspect
* @return true if the node is visible, false otherwise
*/
- private final boolean isNodeVisible(TreeNode node)
+ private final boolean isNodeVisible(Object node)
{
- while (getParentNode(node) != null)
+ Object parent = getParentNode(node);
+ while (parent != null)
{
- if (isNodeExpanded(node.getParent()) == false)
+ if (isNodeExpanded(parent) == false)
{
return false;
}
- node = node.getParent();
+ parent = getParentNode(parent);
}
return true;
}
-
+
/**
* Returns parent node of given node.
+ *
* @param node
* @return
*/
- protected TreeNode getParentNode(TreeNode node)
+ public Object getParentNode(Object node)
{
- return node.getParent();
+ if (getModelObject() instanceof ExtendedTreeModel)
+ {
+ return ((ExtendedTreeModel)getModelObject()).getParent(node);
+ }
+ else if (node instanceof TreeNode)
+ {
+ return ((TreeNode)node).getParent();
+ }
+ else
+ {
+ throw new IllegalStateException(
+ "Couldn't determine node parent. Either the tree model must implement ParentTreeModel or Node must implement TreeNode.");
+ }
}
/**
@@ -1373,7 +1380,7 @@
* The level
* @return The new tree item
*/
- private final TreeItem newTreeItem(TreeNode node, int level)
+ private final TreeItem newTreeItem(Object node, int level)
{
return new TreeItem("" + idCounter++, node, level);
}
@@ -1389,7 +1396,7 @@
* the component id
* @return The new tree item
*/
- private final TreeItem newTreeItem(TreeNode node, int level, String id)
+ private final TreeItem newTreeItem(Object node, int level, String id)
{
return new TreeItem(id, node, level);
}
@@ -1401,9 +1408,36 @@
* The tree node
* @return iterable presentation of node children
*/
- private final Iterator nodeChildren(TreeNode node)
+ public final Iterator<Object> nodeChildren(Object node)
+ {
+ TreeModel model = getTreeModel();
+ int count = model.getChildCount(node);
+ List<Object> nodes = new ArrayList<Object>(count);
+ for (int i = 0; i < count; ++i)
+ {
+ nodes.add(model.getChild(node, i));
+ }
+ return nodes.iterator();
+ }
+
+ public final Object getChildAt(Object parent, int index)
+ {
+ return getTreeModel().getChild(parent, index);
+ }
+
+ public final boolean isLeaf(Object node)
+ {
+ return getTreeModel().isLeaf(node);
+ }
+
+ public final int getChildCount(Object parent)
+ {
+ return getTreeModel().getChildCount(parent);
+ }
+
+ private TreeModel getTreeModel()
{
- return toIterator(node.children());
+ return (TreeModel)getModelObject();
}
/**
@@ -1509,7 +1543,7 @@
* Tree node
* @return Component associated with given node, or null if node is not visible.
*/
- public Component getNodeComponent(TreeNode node)
+ public Component getNodeComponent(Object node)
{
return (Component)nodeToItemMap.get(node);
}
Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/BaseTree.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/BaseTree.java?rev=649964&r1=649963&r2=649964&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/BaseTree.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/BaseTree.java Sun Apr 20 13:06:50 2008
@@ -16,8 +16,6 @@
*/
package org.apache.wicket.markup.html.tree;
-import javax.swing.tree.TreeNode;
-
import org.apache.wicket.Component;
import org.apache.wicket.IClusterable;
import org.apache.wicket.IComponentBorder;
@@ -98,10 +96,11 @@
* @see org.apache.wicket.markup.html.tree.AbstractTree#populateTreeItem(org.apache.wicket.markup.html.WebMarkupContainer,
* int)
*/
+ @Override
protected void populateTreeItem(WebMarkupContainer item, int level)
{
// add junction link
- TreeNode node = (TreeNode)item.getModelObject();
+ Object node = item.getModelObject();
Component junctionLink = newJunctionLink(item, JUNCTION_LINK_ID, node);
junctionLink.setComponentBorder(new JunctionBorder(node, level));
item.add(junctionLink);
@@ -115,9 +114,10 @@
{
private static final long serialVersionUID = 1L;
+ @Override
public void onComponentTag(Component component, ComponentTag tag)
{
- TreeNode node = (TreeNode)component.getModelObject();
+ Object node = component.getModelObject();
if (getTreeState().isNodeSelected(node))
{
CharSequence oldClass = tag.getString("class");
@@ -162,16 +162,16 @@
* The node
* @return whether the provided node is the last child
*/
- private static boolean isNodeLast(TreeNode node)
+ private boolean isNodeLast(Object node)
{
- TreeNode parent = node.getParent();
+ Object parent = getParentNode(node);
if (parent == null)
{
return true;
}
else
{
- return parent.getChildAt(parent.getChildCount() - 1).equals(node);
+ return getChildAt(parent, getChildCount(parent) - 1).equals(node);
}
}
@@ -180,11 +180,11 @@
*
* @author Matej Knopp
*/
- private static class JunctionBorder implements IComponentBorder
+ private class JunctionBorder implements IComponentBorder
{
private static final long serialVersionUID = 1L;
- private final TreeNode node;
+ private final Object node;
private final int level;
/**
@@ -193,7 +193,7 @@
* @param node
* @param level
*/
- public JunctionBorder(TreeNode node, int level)
+ public JunctionBorder(Object node, int level)
{
this.node = node;
this.level = level;
@@ -207,7 +207,7 @@
public void renderBefore(Component component)
{
Response response = RequestCycle.get().getResponse();
- TreeNode parent = node.getParent();
+ Object parent = getParentNode(node);
CharSequence classes[] = new CharSequence[level];
for (int i = 0; i < level; ++i)
@@ -221,7 +221,7 @@
classes[i] = "line";
}
- parent = parent.getParent();
+ parent = getParentNode(parent);
}
for (int i = level - 1; i >= 0; --i)
@@ -252,11 +252,11 @@
* tree node for which the link should be created.
* @return The link component
*/
- protected Component newJunctionLink(MarkupContainer parent, final String id, final TreeNode node)
+ protected Component newJunctionLink(MarkupContainer parent, final String id, final Object node)
{
final MarkupContainer junctionLink;
- if (node.isLeaf() == false)
+ if (isLeaf(node) == false)
{
junctionLink = newLink(id, new ILinkCallback()
{
@@ -280,6 +280,7 @@
{
private static final long serialVersionUID = 1L;
+ @Override
public void onComponentTag(Component component, ComponentTag tag)
{
if (isNodeExpanded(node))
@@ -302,6 +303,7 @@
/**
* @see org.apache.wicket.Component#onComponentTag(org.apache.wicket.markup.ComponentTag)
*/
+ @Override
protected void onComponentTag(ComponentTag tag)
{
super.onComponentTag(tag);
@@ -325,7 +327,7 @@
* @param node
* Node for which this callback is relevant
*/
- protected void onJunctionLinkClicked(AjaxRequestTarget target, TreeNode node)
+ protected void onJunctionLinkClicked(AjaxRequestTarget target, Object node)
{
}
@@ -409,6 +411,7 @@
/**
* @see org.apache.wicket.markup.html.link.Link#onClick()
*/
+ @Override
public void onClick()
{
callback.onClick(null);
@@ -424,6 +427,7 @@
/**
* @see org.apache.wicket.ajax.markup.html.AjaxLink#onClick(org.apache.wicket.ajax.AjaxRequestTarget)
*/
+ @Override
public void onClick(AjaxRequestTarget target)
{
callback.onClick(target);
@@ -439,6 +443,7 @@
/**
* @see org.apache.wicket.ajax.markup.html.AjaxFallbackLink#onClick(org.apache.wicket.ajax.AjaxRequestTarget)
*/
+ @Override
public void onClick(AjaxRequestTarget target)
{
callback.onClick(target);
@@ -458,8 +463,8 @@
}
/**
- * Sets the type of links on tree items. After the link type is changed, the whole tree is
- * rebuild and re-rendered.
+ * Sets the type of links on tree items. After the link type is changed, the whole tree must be
+ * rebuilt (call invalidateAll).
*
* @param linkType
* type of links
@@ -469,13 +474,13 @@
if (this.linkType != linkType)
{
this.linkType = linkType;
- invalidateAll();
}
}
/**
* @see org.apache.wicket.markup.html.tree.AbstractTree#isForceRebuildOnSelectionChange()
*/
+ @Override
protected boolean isForceRebuildOnSelectionChange()
{
return false;
Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/DefaultTreeState.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/DefaultTreeState.java?rev=649964&r1=649963&r2=649964&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/DefaultTreeState.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/DefaultTreeState.java Sun Apr 20 13:06:50 2008
@@ -24,9 +24,8 @@
import java.util.List;
import java.util.Set;
-import javax.swing.tree.TreeNode;
-
import org.apache.wicket.IClusterable;
+import org.apache.wicket.model.IDetachable;
/**
* Default implementation of TreeState.
@@ -35,7 +34,7 @@
*
* @author Matej Knopp
*/
-public class DefaultTreeState implements ITreeState, IClusterable
+public class DefaultTreeState implements ITreeState, IClusterable, IDetachable
{
private static final long serialVersionUID = 1L;
@@ -91,10 +90,7 @@
}
}
- /**
- * @see org.apache.wicket.markup.html.tree.ITreeState#collapseNode(javax.swing.tree.TreeNode)
- */
- public void collapseNode(TreeNode node)
+ public void collapseNode(Object node)
{
if (nodesCollapsed == true)
{
@@ -137,10 +133,7 @@
}
}
- /**
- * @see org.apache.wicket.markup.html.tree.ITreeState#expandNode(javax.swing.tree.TreeNode)
- */
- public void expandNode(TreeNode node)
+ public void expandNode(Object node)
{
if (nodesCollapsed == false)
{
@@ -175,10 +168,7 @@
return allowSelectMultiple;
}
- /**
- * @see org.apache.wicket.markup.html.tree.ITreeState#isNodeExpanded(javax.swing.tree.TreeNode)
- */
- public boolean isNodeExpanded(TreeNode node)
+ public boolean isNodeExpanded(Object node)
{
if (nodesCollapsed == false)
{
@@ -190,10 +180,7 @@
}
}
- /**
- * @see org.apache.wicket.markup.html.tree.ITreeState#isNodeSelected(javax.swing.tree.TreeNode)
- */
- public boolean isNodeSelected(TreeNode node)
+ public boolean isNodeSelected(Object node)
{
return selectedNodes.contains(node);
}
@@ -206,17 +193,13 @@
listeners.remove(l);
}
- /**
- * @see org.apache.wicket.markup.html.tree.ITreeState#selectNode(javax.swing.tree.TreeNode,
- * boolean)
- */
- public void selectNode(TreeNode node, boolean selected)
+ public void selectNode(Object node, boolean selected)
{
if (isAllowSelectMultiple() == false && selectedNodes.size() > 0)
{
for (Iterator i = selectedNodes.iterator(); i.hasNext();)
{
- TreeNode current = (TreeNode)i.next();
+ Object current = i.next();
if (current.equals(node) == false)
{
i.remove();
@@ -259,5 +242,23 @@
public void setAllowSelectMultiple(boolean value)
{
allowSelectMultiple = value;
+ }
+
+ public void detach()
+ {
+ for (Object node : nodes)
+ {
+ if (node instanceof IDetachable)
+ {
+ ((IDetachable)node).detach();
+ }
+ }
+ for (Object node : selectedNodes)
+ {
+ if (node instanceof IDetachable)
+ {
+ ((IDetachable)node).detach();
+ }
+ }
}
}
Added: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/ExtendedTreeModel.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/ExtendedTreeModel.java?rev=649964&view=auto
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/ExtendedTreeModel.java (added)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/ExtendedTreeModel.java Sun Apr 20 13:06:50 2008
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.markup.html.tree;
+
+import javax.swing.tree.TreeModel;
+
+/**
+ * Tree model that can provide parent for a tree node.
+ *
+ * @author Matej Knopp
+ */
+public interface ExtendedTreeModel extends TreeModel
+{
+ /**
+ * Returns parent of the given node or <code>null</code> if the node is a root node.
+ *
+ * @param node
+ * @return node parent or <code>null</code>
+ */
+ public Object getParent(Object node);
+}
Propchange: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/ExtendedTreeModel.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/ITreeState.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/ITreeState.java?rev=649964&r1=649963&r2=649964&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/ITreeState.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/ITreeState.java Sun Apr 20 13:06:50 2008
@@ -18,8 +18,6 @@
import java.util.Collection;
-import javax.swing.tree.TreeNode;
-
/**
* Tree state holds information about a tree such as which nodes are expanded / collapsed and which
* nodes are selected, It can also fire callbacks on listener in case any of the information
@@ -48,7 +46,7 @@
* @param node
* Node to collapse
*/
- void collapseNode(TreeNode node);
+ void collapseNode(Object node);
/**
* Expands all nodes of the tree.
@@ -61,7 +59,7 @@
* @param node
* Node to expand
*/
- void expandNode(TreeNode node);
+ void expandNode(Object node);
/**
* Returns the collection of all selected nodes.
@@ -84,7 +82,7 @@
* The node to inspect
* @return True if the node is expanded
*/
- boolean isNodeExpanded(TreeNode node);
+ boolean isNodeExpanded(Object node);
/**
* Returns true if the given node is selected, false otherwise.
@@ -93,7 +91,7 @@
* The node to inspect
* @return True if the node is selected
*/
- boolean isNodeSelected(TreeNode node);
+ boolean isNodeSelected(Object node);
/**
* Removes a tree state listener.
@@ -115,7 +113,7 @@
* @param selected
* If true, the node will be selected, otherwise, the node will be unselected
*/
- void selectNode(TreeNode node, boolean selected);
+ void selectNode(Object node, boolean selected);
/**
* Sets whether multiple nodes can be selected.
Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/ITreeStateListener.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/ITreeStateListener.java?rev=649964&r1=649963&r2=649964&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/ITreeStateListener.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/ITreeStateListener.java Sun Apr 20 13:06:50 2008
@@ -16,11 +16,10 @@
*/
package org.apache.wicket.markup.html.tree;
-import javax.swing.tree.TreeNode;
/**
* Methods this interface are called when tree state is changing.
- *
+ *
* @author Matej Knopp
*/
public interface ITreeStateListener
@@ -37,32 +36,32 @@
/**
* Fired when given node is collapsed.
- *
+ *
* @param node
* The node that was collapsed
*/
- void nodeCollapsed(TreeNode node);
+ void nodeCollapsed(Object node);
/**
* Fired when given node is expanded.
- *
+ *
* @param node
*/
- void nodeExpanded(TreeNode node);
+ void nodeExpanded(Object node);
/**
* Fired when given node gets selected.
- *
+ *
* @param node
* The node that was selected
*/
- void nodeSelected(TreeNode node);
+ void nodeSelected(Object node);
/**
* Fired when given node gets unselected.
- *
+ *
* @param node
* The node that was unselected
*/
- void nodeUnselected(TreeNode node);
+ void nodeUnselected(Object node);
}