home *** CD-ROM | disk | FTP | other *** search
/ Late Night VRML 2.0 with Java CD-ROM / code.zip / Ch12 / ui / tree / TreeTool.java < prev    next >
Text File  |  1996-12-30  |  3KB  |  103 lines

  1. /* file      : TreeTool.java
  2.  * purpose   : use class TreeTool to modify a Tree structure
  3.  *             all modifications will be propagated to a set of observers
  4.  * author    : Thomas Koch
  5.  * copyright : 1995 , GMD
  6.  *            (Forschungszentrum Informationstechnik GmbH, FIT.CSCW,
  7.  *             GMD Schloss Birlinghoven, 53754 Sankt Augustin, Germany).
  8.  */
  9.  
  10. package ui.tree;
  11.  
  12. import java.lang.*;
  13. import java.util.*;
  14. import java.awt.*;
  15. import ui.tree.*;
  16.  
  17. public class TreeTool
  18. {
  19.   Tree tree;
  20.   Vector observer; // Vector of TreeToolObserver
  21.  
  22.   public TreeTool(Tree tree) {
  23.     this.tree = tree;
  24.     observer = new Vector(3);
  25.   }
  26.  
  27.  
  28.   public void addObserver(TreeToolObserver obs) {
  29.     observer.addElement(obs);
  30.   }
  31.  
  32.  
  33.   public void removeObserver(TreeToolObserver obs) {
  34.     observer.removeElement(obs);
  35.   }
  36.  
  37.  
  38.   public void selectNode(TreeNode node) {
  39.     node.select();
  40.     for (Enumeration e = observer.elements();e.hasMoreElements();) {
  41.       TreeToolObserver obs = (TreeToolObserver) e.nextElement();
  42.       obs.nodeSelected(node);
  43.     }
  44.   }
  45.  
  46.  
  47.   public void unSelectNode(TreeNode node) {
  48.     node.unSelect();
  49.     for (Enumeration e = observer.elements();e.hasMoreElements();) {
  50.       TreeToolObserver obs = (TreeToolObserver) e.nextElement();
  51.       obs.nodeUnSelected(node);
  52.     }
  53.   }
  54.  
  55.  
  56.   public void openNode(TreeNode node) {
  57.     node.open();
  58.     for (Enumeration e = observer.elements();e.hasMoreElements();) {
  59.       TreeToolObserver obs = (TreeToolObserver) e.nextElement();
  60.       obs.nodeOpened(node);
  61.     }
  62.   }
  63.  
  64.  
  65.   public void closeNode(TreeNode node) {
  66.     node.close();
  67.     for (Enumeration e = observer.elements();e.hasMoreElements();) {
  68.       TreeToolObserver obs = (TreeToolObserver) e.nextElement();
  69.       obs.nodeClosed(node);
  70.     }
  71.   }
  72.  
  73.  
  74.   public void addNode(TreeNode where,TreeNode node) {
  75.     tree.addNode(where,node);
  76.     for (Enumeration e = observer.elements();e.hasMoreElements();) {
  77.       TreeToolObserver obs = (TreeToolObserver) e.nextElement();
  78.       obs.nodeAdded(where,node);
  79.     }
  80.   }
  81.  
  82.  
  83.     public void notifyRemove(TreeNode node) {
  84.         for (Enumeration e = observer.elements();e.hasMoreElements();) {
  85.               TreeToolObserver obs = (TreeToolObserver) e.nextElement();
  86.         obs.nodeRemoved(node);
  87.         }
  88.     }
  89.  
  90.   public void removeNode(TreeNode node) {
  91.     tree.removeNode(node);
  92.     notifyRemove(node);
  93.   }
  94.  
  95.     // this method will remove a node and its subtree
  96.     // but unlike to the methode removeNode(TreeNode)
  97.     // the Observers will be notified about *all* nodes that are removed !
  98.     public void removeNodeAndNotify(TreeNode node) {
  99.       tree.removeNode(node,this);
  100.       // Tree (or TreeNode) will call notifyRemove() for every removed node !
  101.     }
  102. }
  103.