| /******************************************************************************* |
| * Copyright (c) 2000, 2005 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.ui.tests.performance.presentations; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import junit.framework.Assert; |
| |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.events.ControlEvent; |
| import org.eclipse.swt.events.ControlListener; |
| import org.eclipse.swt.events.DisposeEvent; |
| import org.eclipse.swt.events.DisposeListener; |
| import org.eclipse.swt.graphics.Point; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Control; |
| import org.eclipse.swt.widgets.Layout; |
| import org.eclipse.ui.ISizeProvider; |
| import org.eclipse.ui.internal.DefaultStackPresentationSite; |
| import org.eclipse.ui.internal.presentations.PresentationFactoryUtil; |
| import org.eclipse.ui.presentations.AbstractPresentationFactory; |
| import org.eclipse.ui.presentations.IPresentablePart; |
| import org.eclipse.ui.presentations.IStackPresentationSite; |
| import org.eclipse.ui.presentations.StackPresentation; |
| |
| public class PresentationTestbed { |
| |
| private StackPresentation presentation; |
| private List partList = new ArrayList(); |
| private IPresentablePart selectedPart; |
| private Composite control; |
| |
| private DefaultStackPresentationSite site = new DefaultStackPresentationSite() { |
| public void close(IPresentablePart[] toClose) {} |
| public void flushLayout() {} |
| public IPresentablePart[] getPartList() { |
| return (IPresentablePart[]) partList.toArray(new IPresentablePart[partList.size()]); |
| } |
| public IPresentablePart getSelectedPart() { |
| return selectedPart; |
| } |
| public boolean isPartMoveable(IPresentablePart toMove) { |
| return true; |
| } |
| public boolean isStackMoveable() { |
| return true; |
| } |
| }; |
| |
| public PresentationTestbed(Composite parentComposite, AbstractPresentationFactory factory, int type) { |
| presentation = PresentationFactoryUtil.createPresentation(factory, type, parentComposite, site, null, null); |
| site.setPresentation(presentation); |
| control = new Composite(parentComposite, SWT.NONE); |
| control.addControlListener(new ControlListener() { |
| public void controlMoved(ControlEvent e) { |
| updatePresentationBounds(); |
| } |
| public void controlResized(ControlEvent e) { |
| updatePresentationBounds(); |
| } |
| }); |
| |
| control.addDisposeListener(new DisposeListener() { |
| public void widgetDisposed(DisposeEvent e) { |
| site.dispose(); |
| } |
| }); |
| |
| control.setLayout(new Layout() { |
| protected Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache) { |
| int widthHint = wHint == SWT.DEFAULT ? ISizeProvider.INFINITE : wHint; |
| int heightHint = hHint == SWT.DEFAULT ? ISizeProvider.INFINITE : hHint; |
| |
| int width = 200; |
| int height = 200; |
| StackPresentation presentation = site.getPresentation(); |
| if (presentation != null) { |
| width = presentation.computePreferredSize(true, widthHint, heightHint, widthHint); |
| height = presentation.computePreferredSize(false, heightHint, widthHint, heightHint); |
| } |
| |
| if (width == ISizeProvider.INFINITE) { |
| width = 200; |
| } |
| |
| if (height == ISizeProvider.INFINITE) { |
| height = 200; |
| } |
| |
| return new Point(width, height); |
| } |
| |
| protected void layout(Composite composite, boolean flushCache) { |
| } |
| }); |
| |
| control.setVisible(false); |
| site.setActive(StackPresentation.AS_ACTIVE_FOCUS); |
| site.setState(IStackPresentationSite.STATE_RESTORED); |
| } |
| |
| public Control getControl() { |
| return control; |
| } |
| |
| public void add(IPresentablePart part) { |
| partList.add(part); |
| site.getPresentation().addPart(part, null); |
| } |
| |
| public void remove(IPresentablePart part) { |
| Assert.assertTrue(part != selectedPart); |
| partList.remove(part); |
| site.getPresentation().removePart(part); |
| } |
| |
| public void setSelection(IPresentablePart newSelection) { |
| Assert.assertTrue(partList.contains(newSelection)); |
| |
| selectedPart = newSelection; |
| if (selectedPart != null) { |
| site.selectPart(newSelection); |
| } |
| } |
| |
| public void setState(int newState) { |
| site.setPresentationState(newState); |
| } |
| |
| public void setActive(int activeState) { |
| site.setActive(activeState); |
| } |
| |
| private Control getPresentationControl() { |
| StackPresentation presentation = site.getPresentation(); |
| if (presentation == null) { |
| return null; |
| } |
| |
| Control ctrl = presentation.getControl(); |
| |
| if (ctrl == null || ctrl.isDisposed()) { |
| return null; |
| } |
| |
| return ctrl; |
| } |
| |
| public IPresentablePart[] getPartList() { |
| return (IPresentablePart[]) partList.toArray(new IPresentablePart[partList.size()]); |
| } |
| |
| private void updatePresentationBounds() { |
| StackPresentation presentation = site.getPresentation(); |
| if (presentation != null) { |
| presentation.setBounds(control.getBounds()); |
| } |
| } |
| |
| public IPresentablePart getSelection() { |
| return selectedPart; |
| } |
| } |