/** * */ package com.topsun.posclient.application; import java.util.ArrayList; import java.util.List; import org.eclipse.swt.events.ControlEvent; import org.eclipse.swt.events.ControlListener; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Sash; import org.eclipse.ui.IPerspectiveDescriptor; import org.eclipse.ui.IPerspectiveListener; import org.eclipse.ui.IStartup; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.internal.LayoutPart; import org.eclipse.ui.internal.PerspectiveHelper; import org.eclipse.ui.internal.ViewSashContainer; import org.eclipse.ui.internal.ViewStack; import org.eclipse.ui.internal.WorkbenchPage; /** * * * @author Carrod.yu (mailto:haha.opensource@gmail.com) */ @SuppressWarnings("restriction") public class LockSashMove implements IStartup { private List<Sash> sashList = new ArrayList<Sash>(); public void earlyStartup() { final IWorkbench workbench = PlatformUI.getWorkbench(); workbench.getDisplay().asyncExec(new Runnable() { public void run() { IWorkbenchWindow window = workbench.getActiveWorkbenchWindow(); if (window != null) { window.addPerspectiveListener(new IPerspectiveListener() { public void perspectiveActivated(IWorkbenchPage page, IPerspectiveDescriptor perspective) { } public void perspectiveChanged(IWorkbenchPage page, IPerspectiveDescriptor perspective, String changeId) { fixedSash(); } }); } } }); fixedSash(); } private void fixedSash() { sashList.clear(); Display.getDefault().asyncExec(new Runnable() { public void run() { WorkbenchPage page = (WorkbenchPage) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); PerspectiveHelper helper = page.getPerspectivePresentation(); ViewSashContainer viewSash = helper.getLayout(); LayoutPart[] layoutParts = viewSash.getChildren(); final Composite composite = viewSash.getParent(); if (layoutParts != null && layoutParts.length > 0) { for (LayoutPart part : layoutParts) { if (part instanceof ViewStack) { addSash(composite); } } } composite.addControlListener(new ControlListener() { public void controlResized(ControlEvent controlevent) { setUnable(sashList); } public void controlMoved(ControlEvent controlevent) { } }); setUnable(sashList); } }); } private void addSash(Composite composite) { Control[] controls = composite.getChildren(); for (Control control : controls) { if (control instanceof Sash) { final Sash sash = ((Sash) control); sashList.add(sash); } } } private void setUnable(List<Sash> sashList) { for (Sash sash : sashList) { if (!sash.isDisposed()) { sash.setEnabled(false); } } } }