/**
   * When any <code>ProgressReporterPanel</code> in this window is disposed re-layout the controls
   * and window appropriately
   */
  public void widgetDisposed(DisposeEvent e) {

    if (e.widget instanceof ProgressReporterPanel) {
      ProgressReporterPanel panel = (ProgressReporterPanel) e.widget;
      removeReporter(panel.pReporter);

      panel.removeTwistieListener(this);

      /*
       * Must let the GridLayout manager know that this control should be ignored
       */
      ((GridData) panel.getLayoutData()).exclude = true;
      panel.setVisible(false);

      /*
       * If it's the last reporter then close the shell itself since it will be just empty
       */
      if (pReporters.length == 0) {
        if ((style & AUTO_CLOSE) != 0) {
          if (null != shell && false == shell.isDisposed()) {
            shell.close();
          }
        } else {
          createEmptyPanel();
        }
      } else {

        /*
         * Formats the last panel; specifying this panel as the panelToIgnore
         * because at this point in the code this panel has not been removed
         * from the window yet
         */
        formatLastPanel(panel);
      }

      if (null != shell && false == shell.isDisposed()) {
        shell.layout(true, true);
      }
    }
  }