@Override
public void createPartControl(Composite parent) {
Assert.isTrue(!disposed);
super.createPartControl(parent);
IInformationPresenter presenter = new InformationPresenterWithLineTracker();
final ToolTipPresenterHandler tooltip = new ToolTipPresenterHandler(parent.getShell(), presenter);
GridLayout layout = new GridLayout();
layout.numColumns = 1;
layout.verticalSpacing = 2;
layout.marginWidth = 0;
layout.marginHeight = 2;
parent.setLayout(layout);
configureToolBar();
fCounterComposite = new Composite(parent, SWT.NONE);
layout = new GridLayout();
fCounterComposite.setLayout(layout);
fCounterComposite.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));
fCounterPanel = new CounterPanel(fCounterComposite);
fCounterPanel.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));
fProgressBar = new PyUnitProgressBar(fCounterComposite);
fProgressBar.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));
fStatus = new Label(fCounterComposite, 0);
GridData statusLayoutData = new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL);
statusLayoutData.grabExcessHorizontalSpace = true;
fStatus.setLayoutData(statusLayoutData);
fStatus.setText("Status");
sash = new SashForm(parent, SWT.HORIZONTAL);
GridData layoutData = new GridData();
layoutData.grabExcessHorizontalSpace = true;
layoutData.grabExcessVerticalSpace = true;
layoutData.horizontalAlignment = GridData.FILL;
layoutData.verticalAlignment = GridData.FILL;
sash.setLayoutData(layoutData);
tree = new Tree(sash, SWT.FULL_SELECTION | SWT.MULTI);
tooltip.install(tree);
tree.setHeaderVisible(true);
Listener sortListener = new PyUnitSortListener(this);
colIndex = createColumn(" ", 50, sortListener);
colResult = createColumn("Result", 70, sortListener);