package org.xmind.ui.internal.handlers; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.handlers.HandlerUtil; import org.xmind.ui.internal.dialogs.BlackBoxDialog; public class OpenBlackBoxDialogHandler extends AbstractHandler { public static final String BLACK_BOX_DIALOG_DATA_KEY = "blackBoxDialog"; //$NON-NLS-1$ private boolean dialogOpened = false; public Object execute(ExecutionEvent event) throws ExecutionException { IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindow(event); if (window == null) return null; Shell shell = window.getShell(); if (shell == null || shell.isDisposed()) return null; BlackBoxDialog dialog = new BlackBoxDialog(shell) { public int open() { dialogOpened = true; int returnCode = super.open(); getShell().setData(BLACK_BOX_DIALOG_DATA_KEY, this); return returnCode; } public boolean close() { dialogOpened = false; getShell().setData(BLACK_BOX_DIALOG_DATA_KEY, null); return super.close(); } }; if (!dialogOpened) dialog.open(); return null; } }