package com.yoursway.sunrise.workbench; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.ScrolledComposite; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.ScrollBar; import org.eclipse.ui.internal.ILayoutContainer; import org.eclipse.ui.internal.LayoutPart; import org.eclipse.ui.internal.ViewPane; import org.eclipse.ui.internal.ViewSite; import org.eclipse.ui.internal.PartPane.Sashes; public class SunriseViewManager { private Composite viewsParent; private ScrolledComposite scrolledComposite; public SunriseViewManager(Composite parent) { scrolledComposite = new ScrolledComposite(parent, SWT.V_SCROLL); GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true); gd.minimumWidth = 250; scrolledComposite.setLayoutData(gd); scrolledComposite.setExpandVertical(true); scrolledComposite.setExpandHorizontal(false); scrolledComposite.setData(this); scrolledComposite.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_WIDGET_LIGHT_SHADOW)); viewsParent = new Composite(scrolledComposite, SWT.NONE); viewsParent.setLayoutData(gd); // viewsParent.setBackground(new Color(null, 0, 0, 255)); viewsParent.setLayout(new GridLayout(1, false)); viewsParent.setData(this); viewsParent.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_WIDGET_LIGHT_SHADOW)); scrolledComposite.setContent(viewsParent); recomputeSize(); // Button button = new Button(viewsParent, SWT.PUSH); //// button.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false)); // button.setText("Foo"); // button.setSize(100, 50); // button.setLocation(200, 200); } private void recomputeSize() { // viewsParent.layout(); Point point = viewsParent.computeSize(scrolledComposite.getClientArea().width, SWT.DEFAULT); viewsParent.setSize(point); scrolledComposite.setMinSize(point); // scrolledComposite.layout(); } public void showView(ViewPane pane, ViewSite site) { Group group = new Group(viewsParent, SWT.SHADOW_OUT); group.setText(site.getPart().getTitle()); group.setBackground(group.getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND)); group.setLayout(new GridLayout(1, false)); group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); pane.reparent(group); // LayoutPart relative = mainLayout.findBottomRight(); // if (relative != null && relative instanceof ILayoutContainer) { // ILayoutContainer stack = (ILayoutContainer)relative; // if (stack.allowsAdd(part)) { // mainLayout.stack(part, stack); // } else { // mainLayout.add(part); // } // } else { // mainLayout.add(part); // } if (true /* active */) { pane.createControl(group); GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true); gd.minimumHeight = 200; gd.minimumWidth = 200; pane.getControl().setLayoutData(gd); pane.setVisible(true); pane.setContainer(new ILayoutContainer() { public void add(LayoutPart newPart) { } public boolean allowsAdd(LayoutPart toAdd) { return false; } public boolean allowsAutoFocus() { return false; } public boolean childIsZoomed(LayoutPart toTest) { return false; } public boolean childObscuredByZoom(LayoutPart toTest) { return false; } public void childRequestZoomIn(LayoutPart toZoom) { } public void childRequestZoomOut() { } public void findSashes(LayoutPart toFind, Sashes result) { } public LayoutPart[] getChildren() { return new LayoutPart[0]; } public void remove(LayoutPart part) { } public void replace(LayoutPart oldPart, LayoutPart newPart) { } public void resizeChild(LayoutPart childThatChanged) { } }); } recomputeSize(); ScrollBar bar = scrolledComposite.getVerticalBar(); scrolledComposite.setShowFocusedControl(true); pane.setFocus(); } }