/**
     * Called when an event is to be posed to the member.
     *
     * @param event Event to post.
     * @return true if event should be propogated, false if it should be cancelled.
     */
    public boolean eventPosted(EventObject event) {
      ElementTreeModel model = (ElementTreeModel) _tree.getModel();
      // XXX This crap needs cleaning up. Type switching is lazy...
      if (event instanceof PropertyChangeEvent) {
        // The project node has changed.
        model.fireNodeChanged((ACSElement) event.getSource());
      } else if (event instanceof NewElementEvent && model != null) {
        ACSElement element = ((NewElementEvent) event).getNewElement();
        model.fireNodeAdded(element);
        TreePath path = new TreePath(model.getPathToRoot(element));
        _selections.setSelectionPath(path);
        _tree.scrollPathToVisible(path);
      } else {
        ACSProjectElement project = null;
        if (event instanceof ProjectSelectedEvent) {
          ProjectSelectedEvent e = (ProjectSelectedEvent) event;
          project = e.getSelectedProject();
        }

        if (project == null) {
          // The project has been closed.
          // XXX this needs to be tested against
          // different version of Swing...
          _tree.setModel(null);
          _tree.setSelectionModel(null);
          // Send an empty selection event to notify others that
          // nothing is selected.
          ElementSelectionEvent.createEvent(getContext(), null);
        } else {
          _tree.setModel(new ElementTreeModel(project));
          _selections = new ElementTreeSelectionModel();
          _selections.addTreeSelectionListener(new SelectionForwarder());
          _tree.setSelectionModel(_selections);
        }
      }
      return true;
    }
 public void valueChanged(TreeSelectionEvent e) {
   getContext()
       .getEventBus()
       .postEvent(
           ElementSelectionEvent.createEvent(getContext(), _selections.getSelectedElements()));
 }