/******************************************************************************* * Copyright (c) 2011, 2013 Wind River Systems, Inc. and others. All rights reserved. * This program and the accompanying materials are made available under the terms * of the Eclipse Public License v1.0 which accompanies this distribution, and is * available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Wind River Systems - initial API and implementation *******************************************************************************/ package org.eclipse.tcf.te.ui.wizards; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.runtime.Assert; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.wizard.IWizard; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.IWorkbenchWizard; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.handlers.HandlerUtil; /** * Abstract wizard command handler implementation. */ public abstract class AbstractWizardCommandHandler extends AbstractHandler { /** * The wizard dialog default width */ private static final int DEFAULT_WIZARD_WIDTH = 400; /** * The wizard dialog default height */ private static final int DEFAULT_WIZARD_HEIGHT = 500; /** * Creates the wizard instance. * * @return The wizard instance. Must be never <code>null</code>. */ protected abstract IWizard createWizard(); /** * Creates the wizard dialog instance. * * @param shell The parent shell or <code>null</code>. * @param wizard The wizard instance. Must not be <code>null</code>. * * @return The wizard dialog instance. */ protected WizardDialog createWizardDialog(Shell shell, IWizard wizard) { Assert.isNotNull(wizard); return new WizardDialog(shell, wizard); } /** * Returns the current selection casted to {@link IStructuredSelection}. * * @param event The execution event. * @return The current selection casted to {@link IStructuredSelection} or an empty selection. */ protected IStructuredSelection getCurrentSelection(ExecutionEvent event) { ISelection selection = HandlerUtil.getCurrentSelection(event); return selection instanceof IStructuredSelection ? (IStructuredSelection)selection : StructuredSelection.EMPTY; } /** * Returns the default wizard dialog width. * * @return The default wizard dialog width in pixel. */ protected int getDefaultWidth() { return DEFAULT_WIZARD_WIDTH; } /** * Returns the default wizard dialog height. * * @return The default wizard dialog height in pixel. */ protected int getDefaultHeight() { return DEFAULT_WIZARD_HEIGHT; } /** * Returns the help id to be associated with the wizard dialog. * * @return The help id or <code>null</code>. */ protected abstract String getHelpId(); /* (non-Javadoc) * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent) */ @Override public Object execute(ExecutionEvent event) throws ExecutionException { // In Eclipse 4.x, the HandlerUtil.getActiveWorkbenchWindow(event) may return null IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindow(event); if (window == null) window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); if (window != null) { // Create the wizard IWizard wizard = createWizard(); Assert.isNotNull(wizard); // If the wizard is a workbench wizard, initialize the wizard // with the current workbench instance and the current selection if (wizard instanceof IWorkbenchWizard) { ((IWorkbenchWizard)wizard).init(window.getWorkbench(), getCurrentSelection(event)); } // Create and configure the wizard dialog WizardDialog dialog = createWizardDialog(window.getShell(), wizard); dialog.create(); dialog.getShell().setSize(Math.max(getDefaultWidth(), dialog.getShell().getSize().x), getDefaultHeight()); // Configure the wizard dialog help id if (getHelpId() != null) { window.getWorkbench().getHelpSystem().setHelp(dialog.getShell(), getHelpId()); } // Open the dialog dialog.open(); } return null; } }