home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / VCafe / debug / databind.jar / javax / awt / swing / tree / DefaultTreeModel.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-03-19  |  8.5 KB  |  294 lines

  1. package javax.awt.swing.tree;
  2.  
  3. import java.io.IOException;
  4. import java.io.ObjectInputStream;
  5. import java.io.ObjectOutputStream;
  6. import java.io.Serializable;
  7. import java.util.Vector;
  8. import javax.awt.swing.event.EventListenerList;
  9. import javax.awt.swing.event.TreeModelEvent;
  10. import javax.awt.swing.event.TreeModelListener;
  11.  
  12. public class DefaultTreeModel implements Serializable, TreeModel {
  13.    protected TreeNode root;
  14.    protected EventListenerList listenerList;
  15.    protected boolean asksAllowsChildren;
  16.    // $FF: synthetic field
  17.    static Class class$javax$awt$swing$event$TreeModelListener;
  18.  
  19.    public DefaultTreeModel(TreeNode root) {
  20.       this(root, false);
  21.    }
  22.  
  23.    public DefaultTreeModel(TreeNode root, boolean asksAllowsChildren) {
  24.       this.listenerList = new EventListenerList();
  25.       if (root == null) {
  26.          throw new IllegalArgumentException("root is null");
  27.       } else {
  28.          this.root = root;
  29.          this.asksAllowsChildren = asksAllowsChildren;
  30.       }
  31.    }
  32.  
  33.    public void setAsksAllowsChildren(boolean newValue) {
  34.       this.asksAllowsChildren = newValue;
  35.    }
  36.  
  37.    public boolean asksAllowsChildren() {
  38.       return this.asksAllowsChildren;
  39.    }
  40.  
  41.    public Object getRoot() {
  42.       return this.root;
  43.    }
  44.  
  45.    public int getIndexOfChild(Object parent, Object child) {
  46.       return parent != null && child != null ? ((TreeNode)parent).getIndex((TreeNode)child) : 0;
  47.    }
  48.  
  49.    public Object getChild(Object parent, int index) {
  50.       return ((TreeNode)parent).getChildAt(index);
  51.    }
  52.  
  53.    public int getChildCount(Object parent) {
  54.       return ((TreeNode)parent).getChildCount();
  55.    }
  56.  
  57.    public boolean isLeaf(Object node) {
  58.       if (this.asksAllowsChildren) {
  59.          return !((TreeNode)node).getAllowsChildren();
  60.       } else {
  61.          return ((TreeNode)node).isLeaf();
  62.       }
  63.    }
  64.  
  65.    public void reload() {
  66.       this.reload(this.root);
  67.    }
  68.  
  69.    public void valueForPathChanged(TreePath path, Object newValue) {
  70.       Object[] aPath = path.getPath();
  71.       MutableTreeNode aNode = (MutableTreeNode)aPath[aPath.length - 1];
  72.       aNode.setUserObject(newValue);
  73.       this.nodeChanged(aNode);
  74.    }
  75.  
  76.    public void insertNodeInto(MutableTreeNode newChild, MutableTreeNode parent, int index) {
  77.       parent.insert(newChild, index);
  78.       int[] newIndexs = new int[1];
  79.       newIndexs[0] = index;
  80.       this.nodesWereInserted(parent, newIndexs);
  81.    }
  82.  
  83.    public void removeNodeFromParent(MutableTreeNode node) {
  84.       MutableTreeNode parent = (MutableTreeNode)node.getParent();
  85.       if (parent == null) {
  86.          throw new IllegalArgumentException("node does not have a parent.");
  87.       } else {
  88.          int[] childIndex = new int[1];
  89.          Object[] removedArray = new Object[1];
  90.          childIndex[0] = parent.getIndex(node);
  91.          parent.remove(childIndex[0]);
  92.          removedArray[0] = node;
  93.          this.nodesWereRemoved(parent, childIndex, removedArray);
  94.       }
  95.    }
  96.  
  97.    public void nodeChanged(TreeNode node) {
  98.       if (this.listenerList != null && node != null) {
  99.          TreeNode parent = node.getParent();
  100.          if (parent != null) {
  101.             int anIndex = parent.getIndex(node);
  102.             if (anIndex != -1) {
  103.                int[] cIndexs = new int[1];
  104.                cIndexs[0] = anIndex;
  105.                this.nodesChanged(parent, cIndexs);
  106.             }
  107.          }
  108.       }
  109.  
  110.    }
  111.  
  112.    public void reload(TreeNode node) {
  113.       if (node != null) {
  114.          this.fireTreeStructureChanged(this, this.getPathToRoot(node), (int[])null, (Object[])null);
  115.       }
  116.  
  117.    }
  118.  
  119.    public void nodesWereInserted(TreeNode node, int[] childIndices) {
  120.       if (this.listenerList != null && node != null && childIndices != null && childIndices.length > 0) {
  121.          int cCount = childIndices.length;
  122.          Object[] newChildren = new Object[cCount];
  123.  
  124.          for(int counter = 0; counter < cCount; ++counter) {
  125.             newChildren[counter] = node.getChildAt(childIndices[counter]);
  126.          }
  127.  
  128.          this.fireTreeNodesInserted(this, this.getPathToRoot(node), childIndices, newChildren);
  129.       }
  130.  
  131.    }
  132.  
  133.    public void nodesWereRemoved(TreeNode node, int[] childIndices, Object[] removedChildren) {
  134.       if (node != null && childIndices != null) {
  135.          this.fireTreeNodesRemoved(this, this.getPathToRoot(node), childIndices, removedChildren);
  136.       }
  137.  
  138.    }
  139.  
  140.    public void nodesChanged(TreeNode node, int[] childIndices) {
  141.       if (node != null && childIndices != null) {
  142.          int cCount = childIndices.length;
  143.          if (cCount > 0) {
  144.             Object[] cChildren = new Object[cCount];
  145.  
  146.             for(int counter = 0; counter < cCount; ++counter) {
  147.                cChildren[counter] = node.getChildAt(childIndices[counter]);
  148.             }
  149.  
  150.             this.fireTreeNodesChanged(this, this.getPathToRoot(node), childIndices, cChildren);
  151.          }
  152.       }
  153.  
  154.    }
  155.  
  156.    public void nodeStructureChanged(TreeNode node) {
  157.       if (node != null) {
  158.          this.fireTreeStructureChanged(this, this.getPathToRoot(node), (int[])null, (Object[])null);
  159.       }
  160.  
  161.    }
  162.  
  163.    public TreeNode[] getPathToRoot(TreeNode child) {
  164.       return this.getPathToRoot(child, 0);
  165.    }
  166.  
  167.    protected TreeNode[] getPathToRoot(TreeNode aNode, int depth) {
  168.       TreeNode[] retNodes;
  169.       if (aNode == null) {
  170.          if (depth == 0) {
  171.             return null;
  172.          }
  173.  
  174.          retNodes = new TreeNode[depth];
  175.       } else {
  176.          ++depth;
  177.          if (aNode == this.root) {
  178.             retNodes = new TreeNode[depth];
  179.          } else {
  180.             retNodes = this.getPathToRoot(aNode.getParent(), depth);
  181.          }
  182.  
  183.          retNodes[retNodes.length - depth] = aNode;
  184.       }
  185.  
  186.       return retNodes;
  187.    }
  188.  
  189.    public void addTreeModelListener(TreeModelListener l) {
  190.       this.listenerList.add(class$javax$awt$swing$event$TreeModelListener != null ? class$javax$awt$swing$event$TreeModelListener : (class$javax$awt$swing$event$TreeModelListener = class$("javax.awt.swing.event.TreeModelListener")), l);
  191.    }
  192.  
  193.    public void removeTreeModelListener(TreeModelListener l) {
  194.       this.listenerList.remove(class$javax$awt$swing$event$TreeModelListener != null ? class$javax$awt$swing$event$TreeModelListener : (class$javax$awt$swing$event$TreeModelListener = class$("javax.awt.swing.event.TreeModelListener")), l);
  195.    }
  196.  
  197.    protected void fireTreeNodesChanged(Object source, Object[] path, int[] childIndices, Object[] children) {
  198.       Object[] listeners = this.listenerList.getListenerList();
  199.       TreeModelEvent e = null;
  200.  
  201.       for(int i = listeners.length - 2; i >= 0; i -= 2) {
  202.          if (listeners[i] == (class$javax$awt$swing$event$TreeModelListener != null ? class$javax$awt$swing$event$TreeModelListener : (class$javax$awt$swing$event$TreeModelListener = class$("javax.awt.swing.event.TreeModelListener")))) {
  203.             if (e == null) {
  204.                e = new TreeModelEvent(source, path, childIndices, children);
  205.             }
  206.  
  207.             ((TreeModelListener)listeners[i + 1]).treeNodesChanged(e);
  208.          }
  209.       }
  210.  
  211.    }
  212.  
  213.    protected void fireTreeNodesInserted(Object source, Object[] path, int[] childIndices, Object[] children) {
  214.       Object[] listeners = this.listenerList.getListenerList();
  215.       TreeModelEvent e = null;
  216.  
  217.       for(int i = listeners.length - 2; i >= 0; i -= 2) {
  218.          if (listeners[i] == (class$javax$awt$swing$event$TreeModelListener != null ? class$javax$awt$swing$event$TreeModelListener : (class$javax$awt$swing$event$TreeModelListener = class$("javax.awt.swing.event.TreeModelListener")))) {
  219.             if (e == null) {
  220.                e = new TreeModelEvent(source, path, childIndices, children);
  221.             }
  222.  
  223.             ((TreeModelListener)listeners[i + 1]).treeNodesInserted(e);
  224.          }
  225.       }
  226.  
  227.    }
  228.  
  229.    protected void fireTreeNodesRemoved(Object source, Object[] path, int[] childIndices, Object[] children) {
  230.       Object[] listeners = this.listenerList.getListenerList();
  231.       TreeModelEvent e = null;
  232.  
  233.       for(int i = listeners.length - 2; i >= 0; i -= 2) {
  234.          if (listeners[i] == (class$javax$awt$swing$event$TreeModelListener != null ? class$javax$awt$swing$event$TreeModelListener : (class$javax$awt$swing$event$TreeModelListener = class$("javax.awt.swing.event.TreeModelListener")))) {
  235.             if (e == null) {
  236.                e = new TreeModelEvent(source, path, childIndices, children);
  237.             }
  238.  
  239.             ((TreeModelListener)listeners[i + 1]).treeNodesRemoved(e);
  240.          }
  241.       }
  242.  
  243.    }
  244.  
  245.    protected void fireTreeStructureChanged(Object source, Object[] path, int[] childIndices, Object[] children) {
  246.       Object[] listeners = this.listenerList.getListenerList();
  247.       TreeModelEvent e = null;
  248.  
  249.       for(int i = listeners.length - 2; i >= 0; i -= 2) {
  250.          if (listeners[i] == (class$javax$awt$swing$event$TreeModelListener != null ? class$javax$awt$swing$event$TreeModelListener : (class$javax$awt$swing$event$TreeModelListener = class$("javax.awt.swing.event.TreeModelListener")))) {
  251.             if (e == null) {
  252.                e = new TreeModelEvent(source, path, childIndices, children);
  253.             }
  254.  
  255.             ((TreeModelListener)listeners[i + 1]).treeStructureChanged(e);
  256.          }
  257.       }
  258.  
  259.    }
  260.  
  261.    private void writeObject(ObjectOutputStream s) throws IOException {
  262.       Vector values = new Vector();
  263.       s.defaultWriteObject();
  264.       if (this.root != null && this.root instanceof Serializable) {
  265.          values.addElement("root");
  266.          values.addElement(this.root);
  267.       }
  268.  
  269.       s.writeObject(values);
  270.    }
  271.  
  272.    private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException {
  273.       s.defaultReadObject();
  274.       Vector values = (Vector)s.readObject();
  275.       int indexCounter = 0;
  276.       int maxCounter = values.size();
  277.       if (indexCounter < maxCounter && values.elementAt(indexCounter).equals("root")) {
  278.          ++indexCounter;
  279.          this.root = (TreeNode)values.elementAt(indexCounter);
  280.          ++indexCounter;
  281.       }
  282.  
  283.    }
  284.  
  285.    // $FF: synthetic method
  286.    static Class class$(String class$) {
  287.       try {
  288.          return Class.forName(class$);
  289.       } catch (ClassNotFoundException forName) {
  290.          throw new NoClassDefFoundError(((Throwable)forName).getMessage());
  291.       }
  292.    }
  293. }
  294.