001: /*******************************************************************************
002: * Copyright (c) 2000, 2006 IBM Corporation and others.
003: * All rights reserved. This program and the accompanying materials
004: * are made available under the terms of the Eclipse Public License v1.0
005: * which accompanies this distribution, and is available at
006: * http://www.eclipse.org/legal/epl-v10.html
007: *
008: * Contributors:
009: * IBM Corporation - initial API and implementation
010: *******************************************************************************/package org.eclipse.ui.actions;
011:
012: import org.eclipse.jface.dialogs.IDialogSettings;
013: import org.eclipse.jface.viewers.ISelection;
014: import org.eclipse.jface.viewers.IStructuredSelection;
015: import org.eclipse.jface.viewers.StructuredSelection;
016: import org.eclipse.jface.wizard.WizardDialog;
017: import org.eclipse.swt.widgets.Shell;
018: import org.eclipse.ui.ISelectionListener;
019: import org.eclipse.ui.IWorkbench;
020: import org.eclipse.ui.IWorkbenchPart;
021: import org.eclipse.ui.IWorkbenchWindow;
022: import org.eclipse.ui.PlatformUI;
023: import org.eclipse.ui.internal.IWorkbenchGraphicConstants;
024: import org.eclipse.ui.internal.IWorkbenchHelpContextIds;
025: import org.eclipse.ui.internal.PerspectiveTracker;
026: import org.eclipse.ui.internal.WorkbenchImages;
027: import org.eclipse.ui.internal.WorkbenchMessages;
028: import org.eclipse.ui.internal.WorkbenchPlugin;
029: import org.eclipse.ui.internal.dialogs.ImportExportWizard;
030:
031: /**
032: * Action representing a generic import operation.
033: * <p>
034: * This class may be instantiated. It is not intended to be subclassed.
035: * </p>
036: * <p>
037: * This method automatically registers listeners so that it can keep its
038: * enablement state up to date. Ordinarily, the window's references to these
039: * listeners will be dropped automatically when the window closes. However,
040: * if the client needs to get rid of an action while the window is still open,
041: * the client must call IWorkbenchAction#dispose to give the
042: * action an opportunity to deregister its listeners and to perform any other
043: * cleanup.
044: *
045: * </p>
046: * <p>
047: * Note: Despite the name, an import operation can deal with things other than
048: * resources; the current name was retained for historical reasons.
049: * </p>
050: *
051: * @since 2.0
052: */
053: public class ImportResourcesAction extends BaseSelectionListenerAction
054: implements ActionFactory.IWorkbenchAction {
055:
056: private static final int SIZING_WIZARD_WIDTH = 470;
057:
058: private static final int SIZING_WIZARD_HEIGHT = 550;
059:
060: /**
061: * The workbench window; or <code>null</code> if this
062: * action has been <code>dispose</code>d.
063: */
064: private IWorkbenchWindow workbenchWindow;
065:
066: /**
067: * Tracks perspective activation, to update this action's
068: * enabled state.
069: */
070: private PerspectiveTracker tracker;
071:
072: /**
073: * Listen for the selection changing and update the
074: * actions that are interested
075: */
076: private final ISelectionListener selectionListener = new ISelectionListener() {
077: public void selectionChanged(IWorkbenchPart part,
078: ISelection selection) {
079: if (selection instanceof IStructuredSelection) {
080: IStructuredSelection structured = (IStructuredSelection) selection;
081: ImportResourcesAction.this .selectionChanged(structured);
082: }
083: }
084: };
085:
086: /**
087: * Create a new instance of this class.
088: *
089: * @param window the window
090: */
091: public ImportResourcesAction(IWorkbenchWindow window) {
092: super (WorkbenchMessages.ImportResourcesAction_text);
093: if (window == null) {
094: throw new IllegalArgumentException();
095: }
096: this .workbenchWindow = window;
097: tracker = new PerspectiveTracker(window, this );
098: setToolTipText(WorkbenchMessages.ImportResourcesAction_toolTip);
099: setId("import"); //$NON-NLS-1$
100: window.getWorkbench().getHelpSystem().setHelp(this ,
101: IWorkbenchHelpContextIds.IMPORT_ACTION);
102: // self-register selection listener (new for 3.0)
103: workbenchWindow.getSelectionService().addSelectionListener(
104: selectionListener);
105:
106: setImageDescriptor(WorkbenchImages
107: .getImageDescriptor(IWorkbenchGraphicConstants.IMG_ETOOL_IMPORT_WIZ));
108: }
109:
110: /**
111: * Create a new instance of this class
112: *
113: * @param workbench the workbench
114: * @deprecated use the constructor <code>ImportResourcesAction(IWorkbenchWindow)</code>
115: */
116: public ImportResourcesAction(IWorkbench workbench) {
117: this (workbench.getActiveWorkbenchWindow());
118: }
119:
120: /**
121: * Invoke the Import wizards selection Wizard.
122: */
123: public void run() {
124: if (workbenchWindow == null) {
125: // action has been disposed
126: return;
127: }
128: ImportExportWizard wizard = new ImportExportWizard(
129: ImportExportWizard.IMPORT);
130: IStructuredSelection selectionToPass;
131: // get the current workbench selection
132: ISelection workbenchSelection = workbenchWindow
133: .getSelectionService().getSelection();
134: if (workbenchSelection instanceof IStructuredSelection) {
135: selectionToPass = (IStructuredSelection) workbenchSelection;
136: } else {
137: selectionToPass = StructuredSelection.EMPTY;
138: }
139:
140: wizard.init(workbenchWindow.getWorkbench(), selectionToPass);
141: IDialogSettings workbenchSettings = WorkbenchPlugin
142: .getDefault().getDialogSettings();
143: IDialogSettings wizardSettings = workbenchSettings
144: .getSection("ImportExportAction"); //$NON-NLS-1$
145: if (wizardSettings == null) {
146: wizardSettings = workbenchSettings
147: .addNewSection("ImportExportAction"); //$NON-NLS-1$
148: }
149: wizard.setDialogSettings(wizardSettings);
150: wizard.setForcePreviousAndNextButtons(true);
151:
152: Shell parent = workbenchWindow.getShell();
153: WizardDialog dialog = new WizardDialog(parent, wizard);
154: dialog.create();
155: dialog.getShell().setSize(
156: Math.max(SIZING_WIZARD_WIDTH, dialog.getShell()
157: .getSize().x), SIZING_WIZARD_HEIGHT);
158: PlatformUI.getWorkbench().getHelpSystem().setHelp(
159: dialog.getShell(),
160: IWorkbenchHelpContextIds.IMPORT_WIZARD);
161: dialog.open();
162: }
163:
164: /**
165: * Sets the current selection.
166: * In for backwards compatability. Use selectionChanged() instead.
167: * @param selection the new selection
168: * @deprecated
169: */
170: public void setSelection(IStructuredSelection selection) {
171: selectionChanged(selection);
172: }
173:
174: /* (non-Javadoc)
175: * Method declared on ActionFactory.IWorkbenchAction.
176: * @since 3.0
177: */
178: public void dispose() {
179: if (workbenchWindow == null) {
180: // action has already been disposed
181: return;
182: }
183: tracker.dispose();
184: workbenchWindow.getSelectionService().removeSelectionListener(
185: selectionListener);
186: workbenchWindow = null;
187: }
188: }
|