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.internal;
011:
012: import org.eclipse.core.runtime.IAdaptable;
013: import org.eclipse.jface.dialogs.ErrorDialog;
014: import org.eclipse.jface.preference.IPreferenceStore;
015: import org.eclipse.ui.IPerspectiveDescriptor;
016: import org.eclipse.ui.IWorkbench;
017: import org.eclipse.ui.IWorkbenchPage;
018: import org.eclipse.ui.IWorkbenchWindow;
019: import org.eclipse.ui.WorkbenchException;
020: import org.eclipse.ui.actions.PerspectiveMenu;
021: import org.eclipse.ui.internal.util.PrefUtil;
022:
023: /**
024: * Change the perspective of the active page in the window
025: * to the selected one.
026: */
027: public class ChangeToPerspectiveMenu extends PerspectiveMenu {
028:
029: /**
030: * Constructor for ChangeToPerspectiveMenu.
031: *
032: * @param window the workbench window this action applies to.
033: */
034: public ChangeToPerspectiveMenu(IWorkbenchWindow window, String id) {
035: super (window, id);
036: // indicate that a open perspectives submenu has been created
037: ((WorkbenchWindow) window)
038: .addSubmenu(WorkbenchWindow.OPEN_PERSPECTIVE_SUBMENU);
039: showActive(true);
040: }
041:
042: /**
043: * Returns the available list of perspectives to display in the menu.
044: * Extends the super implementation by ensuring that the current perspective
045: * is included in the list.
046: *
047: * @return an <code>ArrayList<code> of perspective items <code>IPerspectiveDescriptor</code>
048: */
049: /*
050: protected ArrayList getPerspectiveItems() {
051: ArrayList list = super.getPerspectiveItems();
052: IWorkbenchWindow window = getWindow();
053: IWorkbenchPage page = window.getActivePage();
054: if (page != null) {
055: IPerspectiveDescriptor desc = page.getPerspective();
056: if (desc != null) {
057: if (!list.contains(desc)) {
058: list.add(desc);
059: }
060: }
061: }
062: return list;
063: }
064: */
065:
066: /* (non-Javadoc)
067: * @see PerspectiveMenu#run(IPerspectiveDescriptor)
068: */
069: protected void run(IPerspectiveDescriptor desc) {
070: IPreferenceStore store = PrefUtil.getInternalPreferenceStore();
071: int mode = store.getInt(IPreferenceConstants.OPEN_PERSP_MODE);
072: IWorkbenchPage page = getWindow().getActivePage();
073: IPerspectiveDescriptor persp = null;
074: if (page != null) {
075: persp = page.getPerspective();
076: }
077:
078: // Only open a new window if user preference is set and the window
079: // has an active perspective.
080: if (IPreferenceConstants.OPM_NEW_WINDOW == mode
081: && persp != null) {
082: try {
083: IWorkbench workbench = getWindow().getWorkbench();
084: IAdaptable input = ((Workbench) workbench)
085: .getDefaultPageInput();
086: workbench.openWorkbenchWindow(desc.getId(), input);
087: } catch (WorkbenchException e) {
088: handleWorkbenchException(e);
089: }
090: } else {
091: if (page != null) {
092: page.setPerspective(desc);
093: } else {
094: try {
095: IWorkbench workbench = getWindow().getWorkbench();
096: IAdaptable input = ((Workbench) workbench)
097: .getDefaultPageInput();
098: getWindow().openPage(desc.getId(), input);
099: } catch (WorkbenchException e) {
100: handleWorkbenchException(e);
101: }
102: }
103: }
104: }
105:
106: /**
107: * Handles workbench exception
108: */
109: private void handleWorkbenchException(WorkbenchException e) {
110: ErrorDialog.openError(getWindow().getShell(),
111: WorkbenchMessages.ChangeToPerspectiveMenu_errorTitle, e
112: .getMessage(), e.getStatus());
113: }
114: }
|