/**
   * Handles the removal of a ViewManager. McV needs to override this so that the stack of
   * previously active ViewManagers is ordered properly. McV uses this method to make the ViewPanel
   * respond immediately to the change.
   *
   * @param viewManager The ViewManager being removed.
   */
  @Override
  public void removeViewManager(ViewManager viewManager) {
    // the ordering of the stack must be preserved! this is the only chance
    // to ensure the ordering if the incoming VM is inactive.
    if (getLastActiveViewManager() != viewManager) {
      previousVMs.remove(viewManager);
      inspectStack("removing inactive vm");
    }

    // now just sit back and let the IDV and setLastActiveViewManager work
    // their magic.
    super.removeViewManager(viewManager);

    // inform UIManager that the VM needs to be dissociated from its
    // ComponentHolder.
    uiManager.removeViewManagerHolder(viewManager);

    // force the layer controls tabs to layout the remaining components,
    // but we don't want to bring it to the front!
    uiManager.getViewPanel().getContents().validate();
  }
  // TODO: when you start removing the debug stuff, just convert the messages
  // to comments.
  @Override
  public void setLastActiveViewManager(ViewManager vm) {
    String debugMsg = "created new vm";
    if (vm != null) {
      if (previousVMs.search(vm) >= 0) {
        debugMsg = "reset active vm";
        previousVMs.remove(vm);
        focusLayerControlsOn(vm, false);
      }
      previousVMs.push(vm);
    } else {
      debugMsg = "removed active vm";

      ViewManager lastActive = getLastActiveViewManager();
      if (lastActive == null) return;

      lastActive.setLastActive(false);

      previousVMs.pop();

      // if there are no more VMs, make sure the IDV code knows about it
      // by setting the last active VM to null.
      if (previousVMs.isEmpty()) {
        super.setLastActiveViewManager(null);
        return;
      }

      lastActive = previousVMs.peek();
      lastActive.setLastActive(true);

      focusLayerControlsOn(lastActive, false);
    }

    inspectStack(debugMsg);
    super.setLastActiveViewManager(previousVMs.peek());

    // start active tab testing
    ComponentHolder holder = uiManager.getViewManagerHolder(previousVMs.peek());
    if ((holder != null) && (holder instanceof McvComponentHolder)) {
      ((McvComponentHolder) holder).setAsActiveTab();
    }
    // stop active tab testing
  }