/** Recreate the receiver given the new side */
 private void recreate() {
   if (region != null && !region.isDisposed()) {
     Composite parent = region.getParent();
     boolean animating = animationItem.animationRunning();
     AnimationManager.getInstance().removeItem(animationItem);
     region.dispose();
     createContents(parent, workbenchWindow);
     if (animating) animationItem.animationStart();
   }
 }
  /**
   * Create the contents of the receiver in the parent. Use the window for the animation item.
   *
   * @param parent The parent widget of the composite.
   * @param window The WorkbenchWindow this is in.
   * @return Control
   */
  public Control createContents(Composite parent, WorkbenchWindow window) {
    workbenchWindow = window;

    // Test whether or not 'advanced' graphics are available
    // If not then we'll 'force' the ProgressBar to always be
    // HORIZONTAL...
    // TODO: This should likely be at some 'global' level state
    forceHorizontal = true;
    //        GC gc = new GC(parent);
    //        gc.setAdvanced(true);
    //        forceHorizontal = !gc.getAdvanced();
    //        gc.dispose();

    region =
        new Composite(parent, SWT.NONE) {
          /*
           * (non-Javadoc)
           *
           * @see org.eclipse.swt.widgets.Composite#computeSize(int, int,
           *      boolean)
           */
          public Point computeSize(int wHint, int hHint, boolean changed) {
            Point size = super.computeSize(wHint, hHint, changed);
            if (isHorizontal(side)) size.y = TrimUtil.TRIM_DEFAULT_HEIGHT;
            else {
              size.x = TrimUtil.TRIM_DEFAULT_HEIGHT;
            }
            return size;
          }
        };

    GridLayout gl = new GridLayout();
    gl.marginHeight = 0;
    gl.marginWidth = 0;
    if (isHorizontal(side)) gl.numColumns = 3;
    region.setLayout(gl);

    viewer =
        new ProgressCanvasViewer(
            region, SWT.NO_FOCUS, 1, 36, isHorizontal(side) ? SWT.HORIZONTAL : SWT.VERTICAL);
    viewer.setUseHashlookup(true);
    Control viewerControl = viewer.getControl();
    GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
    Point viewerSizeHints = viewer.getSizeHints();
    if (isHorizontal(side)) {
      gd.widthHint = viewerSizeHints.x;
      gd.heightHint = viewerSizeHints.y;
    } else {
      gd.widthHint = viewerSizeHints.y;
      gd.heightHint = viewerSizeHints.x;
    }
    viewerControl.setLayoutData(gd);

    int widthPreference = AnimationManager.getInstance().getPreferredWidth() + 25;
    animationItem =
        new ProgressAnimationItem(this, isHorizontal(side) ? SWT.HORIZONTAL : SWT.VERTICAL);
    animationItem.createControl(region);

    animationItem.setAnimationContainer(
        new AnimationItem.IAnimationContainer() {
          /* (non-Javadoc)
           * @see org.eclipse.ui.internal.progress.AnimationItem.IAnimationContainer#animationDone()
           */
          public void animationDone() {
            // Add an extra refresh to the viewer in case
            // of stale input if the controls are not disposed
            if (viewer.getControl().isDisposed()) {
              return;
            }
            viewer.refresh();
          }

          /* (non-Javadoc)
           * @see org.eclipse.ui.internal.progress.AnimationItem.IAnimationContainer#animationStart()
           */
          public void animationStart() {
            // Nothing by default here.

          }
        });
    if (isHorizontal(side)) {
      gd = new GridData(GridData.FILL_VERTICAL);
      gd.widthHint = widthPreference;
    } else {
      gd = new GridData(GridData.FILL_HORIZONTAL);
      gd.heightHint = widthPreference;
    }

    animationItem.getControl().setLayoutData(gd);

    //        viewerControl.addMouseListener(new MouseAdapter() {
    //            /*
    //             * (non-Javadoc)
    //             *
    //             * @see
    // org.eclipse.swt.events.MouseAdapter#mouseDoubleClick(org.eclipse.swt.events.MouseEvent)
    //             */
    //            public void mouseDoubleClick(MouseEvent e) {
    //                processDoubleClick();
    //            }
    //        });

    // Never show debug info
    IContentProvider provider = new ProgressViewerContentProvider(viewer, false, false);
    viewer.setContentProvider(provider);
    viewer.setInput(provider);
    viewer.setLabelProvider(new ProgressViewerLabelProvider(viewerControl));
    viewer.setComparator(ProgressManagerUtil.getProgressViewerComparator());
    return region;
  }