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 page creation in the workbench.
022: * <p>
023: * An <code>OpenNewPageMenu</code> is used to populate a menu with
024: * "Open Page" 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 page 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 Workbench no longer exposes the concept of "pages" in the
038: * user ui model. See IWorkbench.showPerspective methods.
039: */
040: public class OpenNewPageMenu extends PerspectiveMenu {
041: private IAdaptable pageInput;
042:
043: /**
044: * Constructs a new instance of <code>OpenNewPageMenu</code>.
045: * <p>
046: * If this method is used be sure to set the page input by invoking
047: * <code>setPageInput</code>. The page input is required when the user
048: * selects an item in the menu. At that point the menu will attempt to
049: * open a new page with the selected perspective and page input. If there
050: * is no page input an error dialog will be opened.
051: * </p>
052: *
053: * @param window the window where a new page is created if an item within
054: * the menu is selected
055: */
056: public OpenNewPageMenu(IWorkbenchWindow window) {
057: this (window, null);
058: }
059:
060: /**
061: * Constructs a new instance of <code>OpenNewPageMenu</code>.
062: *
063: * @param window the window where a new page is created if an item within
064: * the menu is selected
065: * @param input the page input
066: */
067: public OpenNewPageMenu(IWorkbenchWindow window, IAdaptable input) {
068: super (window, "Open New Page Menu");//$NON-NLS-1$
069: this .pageInput = input;
070: }
071:
072: /* (non-Javadoc)
073: * Opens a new page with a particular perspective and input.
074: */
075: protected void run(IPerspectiveDescriptor desc) {
076: // Verify page input.
077: if (pageInput == null) {
078: StatusUtil
079: .handleStatus(
080: WorkbenchMessages.OpenNewPageMenu_dialogTitle
081: + ": " + //$NON-NLS-1$
082: WorkbenchMessages.OpenNewPageMenu_unknownPageInput,
083: StatusManager.SHOW);
084: return;
085: }
086:
087: // Open the page.
088: try {
089: getWindow().openPage(desc.getId(), pageInput);
090: } catch (WorkbenchException e) {
091: StatusUtil.handleStatus(
092: WorkbenchMessages.OpenNewPageMenu_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: }
|