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.jface.action.Action;
013: import org.eclipse.ui.IPageListener;
014: import org.eclipse.ui.IPartListener;
015: import org.eclipse.ui.IWorkbenchPage;
016: import org.eclipse.ui.IWorkbenchPart;
017: import org.eclipse.ui.IWorkbenchWindow;
018: import org.eclipse.ui.actions.ActionFactory;
019:
020: /**
021: * Implements an action to open a list of open editors in the
022: * currently or last active workbook
023: *
024: * @since 3.0
025: */
026: public class WorkbookEditorsAction extends Action implements
027: ActionFactory.IWorkbenchAction, IPageListener, IPartListener {
028:
029: /**
030: * The workbench window; or <code>null</code> if this
031: * action has been <code>dispose</code>d.
032: */
033: private IWorkbenchWindow workbenchWindow;
034:
035: /**
036: * Constructor for NavigateWorkbenchAction.
037: */
038: public WorkbookEditorsAction(IWorkbenchWindow window) {
039: super (WorkbenchMessages.WorkbookEditorsAction_label);
040: if (window == null) {
041: throw new IllegalArgumentException();
042: }
043: this .workbenchWindow = window;
044: // Do we need help here ?
045: //WorkbenchHelp.setHelp(this, IHelpContextIds.WORKBENCH_EDITORS_ACTION);
046: setActionDefinitionId("org.eclipse.ui.window.openEditorDropDown"); //$NON-NLS-1$
047: workbenchWindow.addPageListener(this );
048: workbenchWindow.getPartService().addPartListener(this );
049: updateState();
050: }
051:
052: /* (non-Javadoc)
053: * Method declared on IAction.
054: */
055: public void run() {
056: if (workbenchWindow == null) {
057: // action has been disposed
058: return;
059: }
060: IWorkbenchPage page = workbenchWindow.getActivePage();
061: if (page != null) {
062: WorkbenchPage wbp = (WorkbenchPage) page;
063: EditorAreaHelper eah = wbp.getEditorPresentation();
064: if (eah != null) {
065: eah.displayEditorList();
066: }
067: }
068: }
069:
070: /* (non-Javadoc)
071: * Method declared on ActionFactory.IWorkbenchAction.
072: */
073: public void dispose() {
074: workbenchWindow.removePageListener(this );
075: workbenchWindow.getPartService().removePartListener(this );
076: workbenchWindow = null;
077: }
078:
079: /**
080: * Updates the enabled state.
081: */
082: public void updateState() {
083: IWorkbenchPage page = null;
084: if (workbenchWindow != null) {
085: page = workbenchWindow.getActivePage();
086: }
087: if (page == null) {
088: setEnabled(false);
089: return;
090: }
091: // enable iff there is at least one other editor to switch to
092: setEnabled(page.getEditorReferences().length >= 1);
093: }
094:
095: /* (non-Javadoc)
096: * @see org.eclipse.ui.IPageListener#pageActivated(org.eclipse.ui.IWorkbenchPage)
097: */
098: public void pageActivated(IWorkbenchPage page) {
099: }
100:
101: /* (non-Javadoc)
102: * @see org.eclipse.ui.IPageListener#pageClosed(org.eclipse.ui.IWorkbenchPage)
103: */
104: public void pageClosed(IWorkbenchPage page) {
105: updateState();
106: }
107:
108: public void pageOpened(IWorkbenchPage page) {
109: updateState();
110: }
111:
112: /* (non-Javadoc)
113: * @see org.eclipse.ui.IPartListener#partActivated(org.eclipse.ui.IWorkbenchPart)
114: */
115: public void partActivated(IWorkbenchPart part) {
116: //no-op
117: }
118:
119: /* (non-Javadoc)
120: * @see org.eclipse.ui.IPartListener#partBroughtToTop(org.eclipse.ui.IWorkbenchPart)
121: */
122: public void partBroughtToTop(IWorkbenchPart part) {
123: //no-op
124: }
125:
126: /* (non-Javadoc)
127: * @see org.eclipse.ui.IPartListener#partClosed(org.eclipse.ui.IWorkbenchPart)
128: */
129: public void partClosed(IWorkbenchPart part) {
130: updateState();
131: }
132:
133: /* (non-Javadoc)
134: * @see org.eclipse.ui.IPartListener#partDeactivated(org.eclipse.ui.IWorkbenchPart)
135: */
136: public void partDeactivated(IWorkbenchPart part) {
137: //no-op
138: }
139:
140: /* (non-Javadoc)
141: * @see org.eclipse.ui.IPartListener#partOpened(org.eclipse.ui.IWorkbenchPart)
142: */
143: public void partOpened(IWorkbenchPart part) {
144: updateState();
145: }
146: }
|