| AbstractTreeTableModel |

    1   /*
    2    *  Copyright (c) 1998-2001, The University of Sheffield.
    3    *
    4    *  This file is part of GATE (see http://gate.ac.uk/), and is free
    5    *  software, licenced under the GNU Library General Public License,
    6    *  Version 2, June 1991 (in the distribution as file licence.html,
    7    *  and also available at http://gate.ac.uk/gate/licence.html).
    8    *
    9    *  Valentin Tablan 13/02/2001
    10   *
    11   *  $Id: AbstractTreeTableModel.java,v 1.1 2001/03/30 17:51:01 valyt Exp $
    12   *
    13   */
    14  package gate.swing;
    15
    16  import javax.swing.tree.*;
    17  import javax.swing.event.*;
    18
    19  /**
    20   * An abstract implementation of the TreeTableModel interface. Its main purpose
    21   * is handling the list of listeners.
    22   */
    23  public abstract class AbstractTreeTableModel implements TreeTableModel {
    24    /**
    25     * The root of the tree.
    26     */
    27    protected Object root;
    28
    29    /**
    30     * The list of listeners.
    31     */
    32    protected EventListenerList listenerList = new EventListenerList();
    33
    34    /**
    35     * Constructor for a tree-table containing only one node: the root.
    36     */
    37    public AbstractTreeTableModel(Object root) {
    38        this.root = root;
    39    }
    40
    41    //
    42    // Default implmentations for methods in the TreeModel interface.
    43    //
    44
    45    /**
    46     * Default implementation. Gets the root of the tree.
    47     */
    48    public Object getRoot() {
    49        return root;
    50    }
    51
    52    /**
    53     * Is this node a leaf?
    54     */
    55    public boolean isLeaf(Object node) {
    56        return getChildCount(node) == 0;
    57    }
    58
    59    public void valueForPathChanged(TreePath path, Object newValue) {}
    60
    61    /**
    62     * This method is not called by the current implementation of JTree.
    63     * Implemented only for completion.
    64     */
    65    public int getIndexOfChild(Object parent, Object child) {
    66      for (int i = 0; i < getChildCount(parent); i++){
    67        if (getChild(parent, i).equals(child)){
    68          return i;
    69        }
    70      }
    71      return -1;
    72    }
    73
    74    /**
    75     * Registers a new {@link javax.swing.event.TreeModelListener} with this
    76     * model.
    77     */
    78    public void addTreeModelListener(TreeModelListener l) {
    79      listenerList.add(TreeModelListener.class, l);
    80    }
    81
    82    /**
    83     * Removes a {@link javax.swing.event.TreeModelListener} from the list of
    84     * listeners registered with this model.
    85     */
    86    public void removeTreeModelListener(TreeModelListener l) {
    87      listenerList.remove(TreeModelListener.class, l);
    88    }
    89
    90    /**
    91     * Notify all listeners that have registered interest for
    92     * notification on this event type.  The event instance
    93     * is lazily created using the parameters passed into
    94     * the fire method.
    95     * @see EventListenerList
    96     */
    97    protected void fireTreeNodesChanged(Object source, Object[] path,
    98                                        int[] childIndices,
    99                                        Object[] children) {
    100     // Guaranteed to return a non-null array
    101     Object[] listeners = listenerList.getListenerList();
    102     TreeModelEvent e = null;
    103     // Process the listeners last to first, notifying
    104     // those that are interested in this event
    105     for (int i = listeners.length-2; i>=0; i-=2) {
    106       if (listeners[i]==TreeModelListener.class) {
    107         // Lazily create the event:
    108         if (e == null) e = new TreeModelEvent(source, path,
    109                                               childIndices, children);
    110         ((TreeModelListener)listeners[i+1]).treeNodesChanged(e);
    111       }
    112     }
    113   }
    114
    115   /**
    116    * Notify all listeners that have registered interest for
    117    * notification on this event type.  The event instance
    118    * is lazily created using the parameters passed into
    119    * the fire method.
    120    * @see EventListenerList
    121    */
    122   protected void fireTreeNodesInserted(Object source, Object[] path,
    123                                       int[] childIndices,
    124                                       Object[] children) {
    125     // Guaranteed to return a non-null array
    126     Object[] listeners = listenerList.getListenerList();
    127     TreeModelEvent e = null;
    128     // Process the listeners last to first, notifying
    129     // those that are interested in this event
    130     for (int i = listeners.length-2; i>=0; i-=2) {
    131       if (listeners[i]==TreeModelListener.class) {
    132         // Lazily create the event:
    133         if (e == null) e = new TreeModelEvent(source, path,
    134                                               childIndices, children);
    135         ((TreeModelListener)listeners[i+1]).treeNodesInserted(e);
    136       }
    137     }
    138   }
    139
    140   /**
    141    * Notify all listeners that have registered interest for
    142    * notification on this event type.  The event instance
    143    * is lazily created using the parameters passed into
    144    * the fire method.
    145    * @see EventListenerList
    146    */
    147   protected void fireTreeNodesRemoved(Object source, Object[] path,
    148                                       int[] childIndices,
    149                                       Object[] children) {
    150     // Guaranteed to return a non-null array
    151     Object[] listeners = listenerList.getListenerList();
    152     TreeModelEvent e = null;
    153     // Process the listeners last to first, notifying
    154     // those that are interested in this event
    155     for (int i = listeners.length-2; i>=0; i-=2) {
    156       if (listeners[i]==TreeModelListener.class) {
    157         // Lazily create the event:
    158         if (e == null) e = new TreeModelEvent(source, path,
    159                                               childIndices, children);
    160         ((TreeModelListener)listeners[i+1]).treeNodesRemoved(e);
    161       }
    162     }
    163   }
    164
    165   /**
    166    * Notify all listeners that have registered interest for
    167    * notification on this event type.  The event instance
    168    * is lazily created using the parameters passed into
    169    * the fire method.
    170    * @see EventListenerList
    171    */
    172   protected void fireTreeStructureChanged(Object source, Object[] path,
    173                                       int[] childIndices,
    174                                       Object[] children) {
    175     // Guaranteed to return a non-null array
    176     Object[] listeners = listenerList.getListenerList();
    177     TreeModelEvent e = null;
    178     // Process the listeners last to first, notifying
    179     // those that are interested in this event
    180     for (int i = listeners.length-2; i>=0; i-=2) {
    181       if (listeners[i]==TreeModelListener.class) {
    182         // Lazily create the event:
    183         if (e == null) e = new TreeModelEvent(source, path,
    184                                               childIndices, children);
    185         ((TreeModelListener)listeners[i+1]).treeStructureChanged(e);
    186       }
    187     }
    188   }
    189
    190   /**
    191    * Default implementation. Does nothing.
    192    */
    193   public void setValueAt(Object aValue, Object node, int column){}
    194
    195   abstract public Class getColumnClass(int column);
    196   abstract public boolean isCellEditable(Object node, int column);
    197   abstract public Object getChild(Object parent, int index);
    198   abstract public int getChildCount(Object parent);
    199   abstract public int getColumnCount();
    200   abstract public String getColumnName(int column);
    201   abstract public Object getValueAt(Object node, int column);
    202
    203 }
    204

| AbstractTreeTableModel |