Author: sletellier Date: 2010-07-05 13:10:40 +0200 (Mon, 05 Jul 2010) New Revision: 2028 Url: http://nuiton.org/repositories/revision/jaxx/2028 Log: Add multi selection methods Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavHelper.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeHelper.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableHelper.java Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavHelper.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavHelper.java 2010-07-02 11:17:20 UTC (rev 2027) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/NavHelper.java 2010-07-05 11:10:40 UTC (rev 2028) @@ -136,6 +136,12 @@ public abstract void setSelectionPath(TreePath path); + public abstract void addSelectionPaths(TreePath[] paths); + + public abstract void removeSelectionPath(TreePath path); + + public abstract void removeSelectionPaths(TreePath[] paths); + public abstract TreeSelectionModel getSelectionModel(); public abstract boolean isExpanded(TreePath pathToExpand); @@ -491,6 +497,14 @@ public abstract N getSelectedNode(); /** + * Obtains the selected nodes of the registred tree. + * + * @return the selected tree or {@code null} if no registred tree nor + * selection empty. + */ + public abstract List<N> getSelectedNodes(); + + /** * Obtains the path of ids fro the root node to the selected node on the * registred tree. * @@ -673,6 +687,61 @@ } /** + * Selects the given {@code nodes} in the registred tree. + * + * @param nodes the nodes to select + */ + public void selectNodes(List<N> nodes) { + if (!checkModel()) { + + // no model + return; + } + List<TreePath> paths = new ArrayList<TreePath>(); + for (N node : nodes) { + paths.add(new TreePath(bridge.getPathToRoot(node))); + } + addSelectionPaths(paths.toArray(new TreePath[paths.size()])); + } + + /** + * Unselects the given {@code node} in the registred tree. + * + * @param node the node to select + */ + public void unSelectNode(N node) { + if (!checkModel()) { + + // no model + return; + } + if (log.isDebugEnabled()) { + log.debug("try to select node [" + node + "]"); + } + TreePath path = new TreePath(bridge.getPathToRoot(node)); + + removeSelectionPath(path); + } + + /** + * Selects the given {@code nodes} in the registred tree. + * + * @param nodes the nodes to select + */ + public void unSelectNodes(List<N> nodes) { + if (!checkModel()) { + + // no model + return; + } + List<TreePath> paths = new ArrayList<TreePath>(); + for (N node : nodes) { + paths.add(new TreePath(bridge.getPathToRoot(node))); + } + removeSelectionPaths(paths.toArray(new TreePath[paths.size()])); + } + + /** * Selects the node described by his given {@code path} of ids. * * @param path the absolute path of ids from root node to node to select. Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeHelper.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeHelper.java 2010-07-02 11:17:20 UTC (rev 2027) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/tree/NavTreeHelper.java 2010-07-05 11:10:40 UTC (rev 2028) @@ -32,6 +32,8 @@ import javax.swing.tree.TreeCellRenderer; import javax.swing.tree.TreePath; import javax.swing.tree.TreeSelectionModel; +import java.util.Collections; +import java.util.List; /** * The implementation of {@link NavHelper} base on a {@link JTree} component. @@ -56,6 +58,21 @@ } @Override + public void addSelectionPaths(TreePath[] paths) { + getUI().addSelectionPaths(paths); + } + + @Override + public void removeSelectionPath(TreePath path) { + getUI().removeSelectionPath(path); + } + + @Override + public void removeSelectionPaths(TreePath[] paths) { + getUI().removeSelectionPaths(paths); + } + + @Override public TreeSelectionModel getSelectionModel() { return getUI().getSelectionModel(); } @@ -101,6 +118,25 @@ @SuppressWarnings({"unchecked"}) @Override + public List<N> getSelectedNodes() { + JTree tree = getUI(); + if (tree == null) { + return null; + } + TreePath[] paths = tree.getSelectionPaths(); + List<N> nodes = Collections.emptyList(); + if (paths != null) { + for (TreePath path : paths) { + if (path != null) { + nodes.add((N) path.getLastPathComponent()); + } + } + } + return nodes; + } + + @SuppressWarnings({"unchecked"}) + @Override public void setUI(JTree tree, boolean addExpandTreeListener, TreeSelectionListener listener) { Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableHelper.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableHelper.java 2010-07-02 11:17:20 UTC (rev 2027) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/nav/treetable/NavTreeTableHelper.java 2010-07-05 11:10:40 UTC (rev 2028) @@ -31,6 +31,8 @@ import javax.swing.event.TreeSelectionListener; import javax.swing.tree.TreePath; import javax.swing.tree.TreeSelectionModel; +import java.util.Collections; +import java.util.List; /** * The implementation of {@link NavHelper} based on a {@link JXTreeTable} component. @@ -55,6 +57,21 @@ } @Override + public void addSelectionPaths(TreePath[] paths) { + getUI().getTreeSelectionModel().addSelectionPaths(paths); + } + + @Override + public void removeSelectionPath(TreePath path) { + getUI().getTreeSelectionModel().removeSelectionPath(path); + } + + @Override + public void removeSelectionPaths(TreePath[] paths) { + getUI().getTreeSelectionModel().removeSelectionPaths(paths); + } + + @Override public TreeSelectionModel getSelectionModel() { return getUI().getTreeSelectionModel(); } @@ -86,6 +103,25 @@ return node; } + @SuppressWarnings({"unchecked"}) + @Override + public List<N> getSelectedNodes() { + JXTreeTable tree = getUI(); + if (tree == null) { + return null; + } + TreePath[] paths = tree.getTreeSelectionModel().getSelectionPaths(); + List<N> nodes = Collections.emptyList(); + if (paths != null) { + for (TreePath path : paths) { + if (path != null) { + nodes.add((N) path.getLastPathComponent()); + } + } + } + return nodes; + } + /** * Registers the given {@code treeTable} for this helper. * <p/>