package org.xmind.ui.internal.editor; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.contexts.IContextActivation; import org.eclipse.ui.contexts.IContextService; import org.eclipse.ui.services.IServiceLocator; public class DialogPaneContainer implements IDialogPaneContainer { private Composite composite; private IDialogPane currentPane; private IServiceLocator serviceLocator; public void init(IServiceLocator serviceLocator) { this.serviceLocator = serviceLocator; } public Control getControl() { return composite; } public void createControl(Composite parent) { composite = new Composite(parent, SWT.NONE); Display display = parent.getDisplay(); final Color background = new Color(display, 0x38, 0x38, 0x38); composite.setBackground(background); GridLayout gridLayout = new GridLayout(1, false); gridLayout.marginWidth = 0; gridLayout.marginHeight = 0; gridLayout.verticalSpacing = 0; gridLayout.horizontalSpacing = 0; composite.setLayout(gridLayout); composite.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { background.dispose(); handleDispose(); } }); } protected void handleDispose() { hideCurrentDialog(); } public void open(IDialogPane dialog) { if (composite == null || composite.isDisposed()) return; showDialog(dialog); } protected void showDialog(IDialogPane dialog) { if (composite == null || composite.isDisposed()) return; doHideCurrentDialog(); currentPane = dialog; dialog.init(this); currentPane.createControl(composite); currentPane.setFocus(); composite.layout(true); IContextActivation activation = null; IContextService contextService = serviceLocator == null ? null : (IContextService) serviceLocator .getService(IContextService.class); if (contextService != null) { activation = contextService .activateContext("org.xmind.ui.context.backcover"); //$NON-NLS-1$ } // // // if (contextService != null && activation != null) { // contextService.deactivateContext(activation); // } } protected IDialogPane getCurrentDialog() { return currentPane; } protected void hideCurrentDialog() { doHideCurrentDialog(); if (composite != null && !composite.isDisposed()) { composite.layout(true); } } private void doHideCurrentDialog() { if (currentPane != null) { Control pageControl = currentPane.getControl(); currentPane.dispose(); if (pageControl != null && !pageControl.isDisposed()) { pageControl.dispose(); } currentPane = null; } } public void dispose() { close(); if (composite != null) { composite.dispose(); } } public void setFocus() { if (currentPane != null) { currentPane.setFocus(); } else { composite.setFocus(); } } /* * (non-Javadoc) * * @see org.xmind.ui.internal.editor.IDialogPaneContainer#close() */ public boolean close() { hideCurrentDialog(); return currentPane == null; } public void close(int returnCode) { if (currentPane != null) { currentPane.setReturnCode(returnCode); } close(); } /* * (non-Javadoc) * * @see org.xmind.ui.internal.editor.IDialogPaneContainer#isOpen() */ public boolean isOpen() { return currentPane != null; } }