diff options
Diffstat (limited to 'projects/net.wotonomy.ui.swing/src/main/java/net/wotonomy/ui/swing/MutableDisplayGroupNode.java')
| -rw-r--r-- | projects/net.wotonomy.ui.swing/src/main/java/net/wotonomy/ui/swing/MutableDisplayGroupNode.java | 296 |
1 files changed, 127 insertions, 169 deletions
diff --git a/projects/net.wotonomy.ui.swing/src/main/java/net/wotonomy/ui/swing/MutableDisplayGroupNode.java b/projects/net.wotonomy.ui.swing/src/main/java/net/wotonomy/ui/swing/MutableDisplayGroupNode.java index f1568ec..5293bc9 100644 --- a/projects/net.wotonomy.ui.swing/src/main/java/net/wotonomy/ui/swing/MutableDisplayGroupNode.java +++ b/projects/net.wotonomy.ui.swing/src/main/java/net/wotonomy/ui/swing/MutableDisplayGroupNode.java @@ -32,185 +32,143 @@ import net.wotonomy.foundation.internal.WotonomyException; import net.wotonomy.ui.EODisplayGroup; /** -* A DisplayGroupNode that exposes the MutableTreeNode interface. -* This was required so that other subclasses of DisplayGroupNode -* could opt out of supporting MutableTreeNode (so that they can -* implement IlvActivity, for example). -* -* @author michael@mpowers.net -* @author $Author: cgruber $ -* @version $Revision: 904 $ -*/ - public class MutableDisplayGroupNode - extends DisplayGroupNode implements MutableTreeNode - { - /** - * Constructor for all nodes. - * Root node must have a null delegate. - */ - public MutableDisplayGroupNode( - TreeModelAssociation aParentAssociation, - EODisplayGroup aParentGroup, - Object anObject ) - { - super( aParentAssociation, aParentGroup, anObject ); - } - - public int getIndex(TreeNode node) - { - return getIndex( (DisplayGroupNode) node ); - } - - public TreeNode getChildAt(int childIndex) - { - return (TreeNode) getChildNodeAt( childIndex ); - } - - public TreeNode getParent() - { - Object parent = getParentGroup(); - if ( parent instanceof TreeNode ) - { - return (TreeNode) parent; - } - return null; - } - - public void insert(MutableTreeNode aChild, int anIndex) - { - if ( aChild instanceof DisplayGroupNode ) - { - insertObjectAtIndex( - ((DisplayGroupNode)aChild).object(), anIndex ); - } - else // not a display group node - { - throw new WotonomyException( - "Cannot insert nodes of type: " + aChild ); - } - } - - /** - * Removes the node at the index corresponding - * to the index of the object. - */ - public void remove(MutableTreeNode node) - { - if ( node instanceof DisplayGroupNode ) - { - remove((DisplayGroupNode)node); - } - else // not a display group node - { - throw new WotonomyException( - "Cannot insert nodes of type: " + node ); - } - } - - /** - * Removes the value in the parent display group - * at the index that corresponds to the index of this node - * and add it to the end of the display group that corresponds - * to the user value of the specified node. - */ - public void setParent(MutableTreeNode newParent) - { - if ( newParent instanceof DisplayGroupNode ) - { - setParent((DisplayGroupNode)newParent); - } - else // not a display group node - { - throw new WotonomyException( - "Cannot set parent to nodes of type: " + newParent ); - } - } - - /** - * Overridden to remember expanded state for nodes - * after nodes have been rearranged. - */ - protected void fireEventsForChanges( - Object[] oldObjects, Object[] newObjects ) - { - if ( !( parentAssociation.object() instanceof JTree ) ) - { - super.fireEventsForChanges( oldObjects, newObjects ); - return; - } - - JTree tree = (JTree) parentAssociation.object(); - Map expansionMap = new HashMap(); - DisplayGroupNode node; - TreePath path; - for ( int i = 0; i < oldObjects.length; i++ ) - { - node = (DisplayGroupNode) - getChildNodeForObject( oldObjects[i] ); - if ( node != null && ! node.isLeaf() ) - { - expansionMap.put( node, new Boolean( - tree.isExpanded( node.treePath() ) ) ); - } - } - - super.fireEventsForChanges( oldObjects, newObjects ); - - Object value; - Iterator iterator = new LinkedList( childNodes.values() ).iterator(); - while ( iterator.hasNext() ) - { - node = (DisplayGroupNode) iterator.next(); - value = expansionMap.get( node ); - if ( value != null ) - { - if ( Boolean.TRUE.equals( value ) ) - { - tree.expandPath( node.treePath() ); - } - else - { - tree.collapsePath( node.treePath() ); - } - } - } - } - } + * A DisplayGroupNode that exposes the MutableTreeNode interface. This was + * required so that other subclasses of DisplayGroupNode could opt out of + * supporting MutableTreeNode (so that they can implement IlvActivity, for + * example). + * + * @author michael@mpowers.net + * @author $Author: cgruber $ + * @version $Revision: 904 $ + */ +public class MutableDisplayGroupNode extends DisplayGroupNode implements MutableTreeNode { + /** + * Constructor for all nodes. Root node must have a null delegate. + */ + public MutableDisplayGroupNode(TreeModelAssociation aParentAssociation, EODisplayGroup aParentGroup, + Object anObject) { + super(aParentAssociation, aParentGroup, anObject); + } + + public int getIndex(TreeNode node) { + return getIndex((DisplayGroupNode) node); + } + + public TreeNode getChildAt(int childIndex) { + return (TreeNode) getChildNodeAt(childIndex); + } + + public TreeNode getParent() { + Object parent = getParentGroup(); + if (parent instanceof TreeNode) { + return (TreeNode) parent; + } + return null; + } + + public void insert(MutableTreeNode aChild, int anIndex) { + if (aChild instanceof DisplayGroupNode) { + insertObjectAtIndex(((DisplayGroupNode) aChild).object(), anIndex); + } else // not a display group node + { + throw new WotonomyException("Cannot insert nodes of type: " + aChild); + } + } + + /** + * Removes the node at the index corresponding to the index of the object. + */ + public void remove(MutableTreeNode node) { + if (node instanceof DisplayGroupNode) { + remove((DisplayGroupNode) node); + } else // not a display group node + { + throw new WotonomyException("Cannot insert nodes of type: " + node); + } + } + + /** + * Removes the value in the parent display group at the index that corresponds + * to the index of this node and add it to the end of the display group that + * corresponds to the user value of the specified node. + */ + public void setParent(MutableTreeNode newParent) { + if (newParent instanceof DisplayGroupNode) { + setParent((DisplayGroupNode) newParent); + } else // not a display group node + { + throw new WotonomyException("Cannot set parent to nodes of type: " + newParent); + } + } + + /** + * Overridden to remember expanded state for nodes after nodes have been + * rearranged. + */ + protected void fireEventsForChanges(Object[] oldObjects, Object[] newObjects) { + if (!(parentAssociation.object() instanceof JTree)) { + super.fireEventsForChanges(oldObjects, newObjects); + return; + } + + JTree tree = (JTree) parentAssociation.object(); + Map expansionMap = new HashMap(); + DisplayGroupNode node; + TreePath path; + for (int i = 0; i < oldObjects.length; i++) { + node = (DisplayGroupNode) getChildNodeForObject(oldObjects[i]); + if (node != null && !node.isLeaf()) { + expansionMap.put(node, new Boolean(tree.isExpanded(node.treePath()))); + } + } + + super.fireEventsForChanges(oldObjects, newObjects); + + Object value; + Iterator iterator = new LinkedList(childNodes.values()).iterator(); + while (iterator.hasNext()) { + node = (DisplayGroupNode) iterator.next(); + value = expansionMap.get(node); + if (value != null) { + if (Boolean.TRUE.equals(value)) { + tree.expandPath(node.treePath()); + } else { + tree.collapsePath(node.treePath()); + } + } + } + } +} /* - * $Log$ - * Revision 1.2 2006/02/18 23:19:05 cgruber - * Update imports and maven dependencies. + * $Log$ Revision 1.2 2006/02/18 23:19:05 cgruber Update imports and maven + * dependencies. * - * Revision 1.1 2006/02/16 13:22:22 cgruber - * Check in all sources in eclipse-friendly maven-enabled packages. + * Revision 1.1 2006/02/16 13:22:22 cgruber Check in all sources in + * eclipse-friendly maven-enabled packages. * - * Revision 1.8 2003/08/06 23:07:52 chochos - * general code cleanup (mostly, removing unused imports) + * Revision 1.8 2003/08/06 23:07:52 chochos general code cleanup (mostly, + * removing unused imports) * - * Revision 1.7 2002/04/23 19:12:28 mpowers - * Reimplemented fireEventsForChanges. Fitter and happier. + * Revision 1.7 2002/04/23 19:12:28 mpowers Reimplemented fireEventsForChanges. + * Fitter and happier. * - * Revision 1.6 2002/04/10 21:20:04 mpowers - * Better handling for tree nodes when working with editing contexts. - * Better handling for invalidation. No longer broadcasting events - * when nodes have not been "registered" in the tree. + * Revision 1.6 2002/04/10 21:20:04 mpowers Better handling for tree nodes when + * working with editing contexts. Better handling for invalidation. No longer + * broadcasting events when nodes have not been "registered" in the tree. * - * Revision 1.5 2002/04/03 20:01:47 mpowers - * Now remembers expanded state. + * Revision 1.5 2002/04/03 20:01:47 mpowers Now remembers expanded state. * - * Revision 1.4 2002/03/08 23:19:07 mpowers - * Added getParentGroup to DisplayGroupNode. + * Revision 1.4 2002/03/08 23:19:07 mpowers Added getParentGroup to + * DisplayGroupNode. * - * Revision 1.3 2002/02/27 23:19:17 mpowers - * Refactoring of TreeAssociation to create TreeModelAssociation parent. + * Revision 1.3 2002/02/27 23:19:17 mpowers Refactoring of TreeAssociation to + * create TreeModelAssociation parent. * - * Revision 1.2 2001/04/22 23:05:33 mpowers - * Totally revised DisplayGroupNode so each object gets its own node - * (so the nodes are no longer fixed by index). + * Revision 1.2 2001/04/22 23:05:33 mpowers Totally revised DisplayGroupNode so + * each object gets its own node (so the nodes are no longer fixed by index). * - * Revision 1.1 2001/04/21 23:05:56 mpowers - * Contributing the tree-specific concrete subclass of DisplayGroupNode. + * Revision 1.1 2001/04/21 23:05:56 mpowers Contributing the tree-specific + * concrete subclass of DisplayGroupNode. * * */ - |
