/** @see org.eclipse.ui.part.IPage#createControl(org.eclipse.swt.widgets.Composite) */
  @Override
  public void createControl(final Composite parent) {
    widgetFactory = new TabbedPropertySheetWidgetFactory();
    tabbedPropertyComposite = new TabbedPropertyComposite(parent, widgetFactory, hasTitleBar);
    widgetFactory.paintBordersFor(tabbedPropertyComposite);
    tabbedPropertyComposite.setLayout(new FormLayout());
    final FormData formData = new FormData();
    formData.left = new FormAttachment(0, 0);
    formData.right = new FormAttachment(100, 0);
    formData.top = new FormAttachment(0, 0);
    formData.bottom = new FormAttachment(100, 0);
    tabbedPropertyComposite.setLayoutData(formData);

    tabbedPropertyViewer = new TabbedPropertyViewer(tabbedPropertyComposite.getList());
    tabbedPropertyViewer.setContentProvider(tabListContentProvider);
    tabbedPropertyViewer.setLabelProvider(new TabbedPropertySheetPageLabelProvider());
    tabbedPropertyViewer.addSelectionChangedListener(new SelectionChangedListener());

    tabbedPropertyComposite
        .getScrolledComposite()
        .addControlListener(
            new ControlAdapter() {

              @Override
              public void controlResized(final ControlEvent e) {
                resizeScrolledComposite();
              }
            });

    /** Add a part activation listener. */
    cachedWorkbenchWindow = getSite().getWorkbenchWindow();
    cachedWorkbenchWindow.getPartService().addPartListener(partActivationListener);

    /** Add a label provider change listener. */
    if (hasTitleBar) {
      registry.getLabelProvider().addListener(this);
    }
  }