/**
   * Sets the input for the tree to a particular item in the tree.
   *
   * <p>The current input and expansion state are saved in a frame and added to the drill stack.
   * Then the input for the tree is changed to be <code>newInput</code>. The expansion state for the
   * tree is maintained during the operation.
   *
   * <p>On return the client may revert back to the previous state by invoking <code>goBack</code>
   * or <code>goHome</code>.
   *
   * @param newInput the new input element
   */
  public void goInto(Object newInput) {
    // If we can drill ..
    if (canExpand(newInput)) {
      // Save the old state.
      Object oldInput = fChildTree.getInput();
      List expandedList = getExpanded();
      fDrillStack.add(new DrillFrame(oldInput, "null", expandedList)); // $NON-NLS-1$

      // Install the new state.
      fChildTree.setInput(newInput);
      expand(expandedList);
      updateNavigationButtons();
    }
  }