package com.yoursway.sunrise.workbench; import java.util.Enumeration; import java.util.List; import java.util.Vector; import org.eclipse.core.runtime.IStatus; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.IMemento; import org.eclipse.ui.IViewReference; import org.eclipse.ui.IWorkbenchPartReference; import org.eclipse.ui.internal.DetachedWindow; import org.eclipse.ui.internal.ILayoutContainer; import org.eclipse.ui.internal.LayoutPart; import org.eclipse.ui.internal.PartStack; import org.eclipse.ui.internal.Perspective; import org.eclipse.ui.internal.PerspectiveHelper; import org.eclipse.ui.internal.ViewPane; import org.eclipse.ui.internal.ViewSashContainer; import org.eclipse.ui.internal.ViewStack; import org.eclipse.ui.internal.WorkbenchPage; import org.eclipse.ui.presentations.IStackPresentationSite; @SuppressWarnings("restriction") public class SunrisePerspectiveHelper extends PerspectiveHelper { public SunrisePerspectiveHelper(WorkbenchPage workbenchPage, ViewSashContainer mainLayout, Perspective perspective) { super(workbenchPage, mainLayout, perspective); } private static void collectViewPanes(List result, LayoutPart[] parts) { for (int i = 0, length = parts.length; i < length; i++) { LayoutPart part = parts[i]; if (part instanceof ViewPane) { result.add(part); } else if (part instanceof ILayoutContainer) { collectViewPanes(result, ((ILayoutContainer) part) .getChildren()); } } } @Override public void activate(Composite parent) { if (active) { return; } parentWidget = parent; final ViewSashContainer mainLayout = getLayout(); // Activate main layout // make sure all the views have been properly parented Vector children = new Vector(); collectViewPanes(children, mainLayout.getChildren()); Enumeration itr = children.elements(); while (itr.hasMoreElements()) { LayoutPart part = (LayoutPart) itr.nextElement(); part.reparent(parent); } mainLayout.createControl(parent); mainLayout.setActive(true); // // Open the detached windows. // for (int i = 0, length = detachedWindowList.size(); i < length; i++) { // DetachedWindow dwindow = (DetachedWindow) detachedWindowList.get(i); // dwindow.open(); // } // enableAllDrag(); // // Ensure that the maximized stack's presentation state is correct // if (maximizedStackId != null) { // LayoutPart part = findPart(maximizedStackId); // if (part instanceof PartStack) { // maximizedStack = (PartStack) part; // maximizedStackId = null; // } // } // NOTE: we only handle ViewStacks here; Editor Stacks are handled by the // perspective // if (maximizedStack instanceof ViewStack) { // maximizedStack.setPresentationState(IStackPresentationSite.STATE_MAXIMIZED); // } active = true; } @Override public void addDetachedPart(LayoutPart part, Rectangle bounds) { super.addDetachedPart(part, bounds); } @Override public void addDetachedPart(LayoutPart part) { super.addDetachedPart(part); } @Override public void addPart(LayoutPart part) { super.addPart(part); } @Override public void attachPart(IViewReference ref) { super.attachPart(ref); } @Override public boolean bringPartToTop(LayoutPart part) { return super.bringPartToTop(part); } @Override public boolean canDetach() { return super.canDetach(); } @Override public void collectViewPanes(List result) { super.collectViewPanes(result); } @Override public void deactivate() { super.deactivate(); } @Override public void describeLayout(StringBuffer buf) { super.describeLayout(buf); } @Override public void detachPart(IViewReference ref) { super.detachPart(ref); } @Override public void dispose() { super.dispose(); } @Override public LayoutPart findPart(String primaryId, String secondaryId) { return super.findPart(primaryId, secondaryId); } @Override public void forceNoZoom() { super.forceNoZoom(); } @Override public Rectangle getCachedBoundsFor(String id) { return super.getCachedBoundsFor(id); } @Override public ViewSashContainer getLayout() { return super.getLayout(); } @Override public PartStack getMaximizedStack() { return super.getMaximizedStack(); } @Override public boolean hasPlaceholder(String primaryId, String secondaryId) { return super.hasPlaceholder(primaryId, secondaryId); } @Override public boolean hasPlaceholder(String id) { return super.hasPlaceholder(id); } @Override public boolean isActive() { return super.isActive(); } @Override public boolean isPartVisible(IWorkbenchPartReference partRef) { return super.isPartVisible(partRef); } @Override public boolean isZoomed() { return super.isZoomed(); } @Override public boolean partChangeAffectsZoom(LayoutPart pane) { return super.partChangeAffectsZoom(pane); } @Override public void removePart(LayoutPart part) { super.removePart(part); } @Override public void replacePlaceholderWithPart(LayoutPart part) { super.replacePlaceholderWithPart(part); } @Override public void resetBoundsMap() { super.resetBoundsMap(); } @Override public IStatus restoreState(IMemento memento) { return super.restoreState(memento); } @Override public IStatus saveState(IMemento memento) { return super.saveState(memento); } @Override public void setMaximizedStack(PartStack stack) { super.setMaximizedStack(stack); } @Override public void updateBoundsMap() { super.updateBoundsMap(); } @Override public boolean willPartBeVisible(String partId, String secondaryId) { return super.willPartBeVisible(partId, secondaryId); } @Override public boolean willPartBeVisible(String partId) { return super.willPartBeVisible(partId); } @Override public void zoomIn(IWorkbenchPartReference ref) { super.zoomIn(ref); } @Override public void zoomOut() { super.zoomOut(); } }