001: /*******************************************************************************
002: * Copyright (c) 2000, 2007 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.core.runtime.IAdaptable;
013: import org.eclipse.ui.IPerspectiveDescriptor;
014: import org.eclipse.ui.IWorkbenchWindow;
015: import org.eclipse.ui.WorkbenchException;
016: import org.eclipse.ui.internal.WorkbenchMessages;
017: import org.eclipse.ui.internal.misc.StatusUtil;
018: import org.eclipse.ui.statushandlers.StatusManager;
019:
020: /**
021: * A menu for window creation in the workbench.
022: * <p>
023: * An <code>OpenNewWindowMenu</code> is used to populate a menu with
024: * "Open Window" actions. One item is added for each shortcut perspective,
025: * as defined by the product ini. If the user selects one of these items a new window is
026: * created in the workbench with the given perspective.
027: * </p><p>
028: * The visible perspectives within the menu may also be updated dynamically to
029: * reflect user preference.
030: * </p><p>
031: * The input for the page is determined by the value of <code>pageInput</code>.
032: * The input should be passed into the constructor of this class or set using
033: * the <code>setPageInput</code> method.
034: * </p><p>
035: * This class may be instantiated; it is not intended to be subclassed.
036: * </p>
037: * @deprecated See IWorkbench.showPerspective methods.
038: */
039: public class OpenNewWindowMenu extends PerspectiveMenu {
040: private IAdaptable pageInput;
041:
042: /**
043: * Constructs a new instance of <code>OpenNewPageMenu</code>.
044: * <p>
045: * If this method is used be sure to set the page input by invoking
046: * <code>setPageInput</code>. The page input is required when the user
047: * selects an item in the menu. At that point the menu will attempt to
048: * open a new page with the selected perspective and page input. If there
049: * is no page input an error dialog will be opened.
050: * </p>
051: *
052: * @param window the window where a new page is created if an item within
053: * the menu is selected
054: */
055: public OpenNewWindowMenu(IWorkbenchWindow window) {
056: this (window, null);
057: }
058:
059: /**
060: * Constructs a new instance of <code>OpenNewPageMenu</code>.
061: *
062: * @param window the window where a new page is created if an item within
063: * the menu is selected
064: * @param input the page input
065: */
066: public OpenNewWindowMenu(IWorkbenchWindow window, IAdaptable input) {
067: super (window, "Open New Page Menu");//$NON-NLS-1$
068: this .pageInput = input;
069: }
070:
071: /* (non-Javadoc)
072: * Opens a new window with a particular perspective and input.
073: */
074: protected void run(IPerspectiveDescriptor desc) {
075: // Verify page input.
076: if (pageInput == null) {
077: StatusUtil
078: .handleStatus(
079: WorkbenchMessages.OpenNewWindowMenu_dialogTitle
080: + ": " + //$NON-NLS-1$
081: WorkbenchMessages.OpenNewWindowMenu_unknownInput,
082: StatusManager.SHOW);
083: return;
084: }
085:
086: // Open the page.
087: try {
088: getWindow().getWorkbench().openWorkbenchWindow(
089: desc.getId(), pageInput);
090: } catch (WorkbenchException e) {
091: StatusUtil.handleStatus(
092: WorkbenchMessages.OpenNewWindowMenu_dialogTitle
093: + ": " + //$NON-NLS-1$
094: e.getMessage(), e, StatusManager.SHOW);
095: }
096: }
097:
098: /**
099: * Sets the page input.
100: *
101: * @param input the page input
102: */
103: public void setPageInput(IAdaptable input) {
104: pageInput = input;
105: }
106: }
|