| /******************************************************************************* |
| * Copyright (c) 2000, 2005 IBM Corporation 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: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.ui.actions; |
| |
| import org.eclipse.jface.dialogs.IDialogSettings; |
| import org.eclipse.jface.viewers.ISelection; |
| import org.eclipse.jface.viewers.IStructuredSelection; |
| import org.eclipse.jface.viewers.StructuredSelection; |
| import org.eclipse.jface.wizard.WizardDialog; |
| import org.eclipse.swt.widgets.Shell; |
| import org.eclipse.ui.ISelectionListener; |
| import org.eclipse.ui.IWorkbench; |
| import org.eclipse.ui.IWorkbenchPart; |
| import org.eclipse.ui.IWorkbenchWindow; |
| import org.eclipse.ui.PlatformUI; |
| import org.eclipse.ui.internal.IWorkbenchGraphicConstants; |
| import org.eclipse.ui.internal.IWorkbenchHelpContextIds; |
| import org.eclipse.ui.internal.PerspectiveTracker; |
| import org.eclipse.ui.internal.WorkbenchImages; |
| import org.eclipse.ui.internal.WorkbenchMessages; |
| import org.eclipse.ui.internal.WorkbenchPlugin; |
| import org.eclipse.ui.internal.dialogs.ImportExportWizard; |
| |
| /** |
| * Action representing a generic import operation. |
| * <p> |
| * This class may be instantiated. It is not intended to be subclassed. |
| * </p> |
| * <p> |
| * This method automatically registers listeners so that it can keep its |
| * enablement state up to date. Ordinarily, the window's references to these |
| * listeners will be dropped automatically when the window closes. However, |
| * if the client needs to get rid of an action while the window is still open, |
| * the client must call IWorkbenchAction#dispose to give the |
| * action an opportunity to deregister its listeners and to perform any other |
| * cleanup. |
| * |
| * </p> |
| * <p> |
| * Note: Despite the name, an import operation can deal with things other than |
| * resources; the current name was retained for historical reasons. |
| * </p> |
| * |
| * @since 2.0 |
| */ |
| public class ImportResourcesAction extends BaseSelectionListenerAction |
| implements ActionFactory.IWorkbenchAction { |
| |
| private static final int SIZING_WIZARD_WIDTH = 470; |
| |
| private static final int SIZING_WIZARD_HEIGHT = 550; |
| |
| /** |
| * The workbench window; or <code>null</code> if this |
| * action has been <code>dispose</code>d. |
| */ |
| private IWorkbenchWindow workbenchWindow; |
| |
| /** |
| * Tracks perspective activation, to update this action's |
| * enabled state. |
| */ |
| private PerspectiveTracker tracker; |
| |
| /** |
| * Listen for the selection changing and update the |
| * actions that are interested |
| */ |
| private final ISelectionListener selectionListener = new ISelectionListener() { |
| public void selectionChanged(IWorkbenchPart part, ISelection selection) { |
| if (selection instanceof IStructuredSelection) { |
| IStructuredSelection structured = (IStructuredSelection) selection; |
| ImportResourcesAction.this.selectionChanged(structured); |
| } |
| } |
| }; |
| |
| /** |
| * Create a new instance of this class. |
| * |
| * @param window the window |
| */ |
| public ImportResourcesAction(IWorkbenchWindow window) { |
| super(WorkbenchMessages.ImportResourcesAction_text); |
| if (window == null) { |
| throw new IllegalArgumentException(); |
| } |
| this.workbenchWindow = window; |
| tracker = new PerspectiveTracker(window, this); |
| setToolTipText(WorkbenchMessages.ImportResourcesAction_toolTip); |
| setId("import"); //$NON-NLS-1$ |
| window.getWorkbench().getHelpSystem().setHelp(this, |
| IWorkbenchHelpContextIds.IMPORT_ACTION); |
| // self-register selection listener (new for 3.0) |
| workbenchWindow.getSelectionService().addSelectionListener( |
| selectionListener); |
| |
| setImageDescriptor(WorkbenchImages |
| .getImageDescriptor(IWorkbenchGraphicConstants.IMG_ETOOL_IMPORT_WIZ)); |
| } |
| |
| /** |
| * Create a new instance of this class |
| * |
| * @param workbench the workbench |
| * @deprecated use the constructor <code>ImportResourcesAction(IWorkbenchWindow)</code> |
| */ |
| public ImportResourcesAction(IWorkbench workbench) { |
| this(workbench.getActiveWorkbenchWindow()); |
| } |
| |
| /** |
| * Invoke the Import wizards selection Wizard. |
| */ |
| public void run() { |
| if (workbenchWindow == null) { |
| // action has been disposed |
| return; |
| } |
| ImportExportWizard wizard = new ImportExportWizard(ImportExportWizard.IMPORT); |
| IStructuredSelection selectionToPass; |
| // get the current workbench selection |
| ISelection workbenchSelection = workbenchWindow.getSelectionService() |
| .getSelection(); |
| if (workbenchSelection instanceof IStructuredSelection) { |
| selectionToPass = (IStructuredSelection) workbenchSelection; |
| } else { |
| selectionToPass = StructuredSelection.EMPTY; |
| } |
| |
| wizard.init(workbenchWindow.getWorkbench(), selectionToPass); |
| IDialogSettings workbenchSettings = WorkbenchPlugin.getDefault() |
| .getDialogSettings(); |
| IDialogSettings wizardSettings = workbenchSettings |
| .getSection("ImportExportAction"); //$NON-NLS-1$ |
| if (wizardSettings == null) { |
| wizardSettings = workbenchSettings |
| .addNewSection("ImportExportAction"); //$NON-NLS-1$ |
| } |
| wizard.setDialogSettings(wizardSettings); |
| wizard.setForcePreviousAndNextButtons(true); |
| |
| Shell parent = workbenchWindow.getShell(); |
| WizardDialog dialog = new WizardDialog(parent, wizard); |
| dialog.create(); |
| dialog.getShell().setSize( |
| Math.max(SIZING_WIZARD_WIDTH, dialog.getShell().getSize().x), |
| SIZING_WIZARD_HEIGHT); |
| PlatformUI.getWorkbench().getHelpSystem().setHelp(dialog.getShell(), |
| IWorkbenchHelpContextIds.IMPORT_WIZARD); |
| dialog.open(); |
| } |
| |
| /** |
| * Sets the current selection. |
| * In for backwards compatability. Use selectionChanged() instead. |
| * @param selection the new selection |
| * @deprecated |
| */ |
| public void setSelection(IStructuredSelection selection) { |
| selectionChanged(selection); |
| } |
| |
| /* (non-Javadoc) |
| * Method declared on ActionFactory.IWorkbenchAction. |
| * @since 3.0 |
| */ |
| public void dispose() { |
| if (workbenchWindow == null) { |
| // action has already been disposed |
| return; |
| } |
| tracker.dispose(); |
| workbenchWindow.getSelectionService().removeSelectionListener( |
| selectionListener); |
| workbenchWindow = null; |
| } |
| } |