org.eclipse.ui.internal.SwitchToWindowMenu Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of workbench Show documentation
Show all versions of workbench Show documentation
This plug-in contains the bulk of the Workbench implementation, and depends on JFace, SWT, and Core Runtime. It cannot be used independently from org.eclipse.ui. Workbench client plug-ins should not depend directly on this plug-in.
The newest version!
/*******************************************************************************
* Copyright (c) 2000, 2006 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ui.internal;
import org.eclipse.jface.action.ContributionItem;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchWindow;
/**
* A dynamic menu item to switch to other opened workbench windows.
*/
public class SwitchToWindowMenu extends ContributionItem {
private static final int MAX_TEXT_LENGTH = 40;
private IWorkbenchWindow workbenchWindow;
private boolean showSeparator;
private boolean dirty = true;
private IMenuListener menuListener = new IMenuListener() {
public void menuAboutToShow(IMenuManager manager) {
manager.markDirty();
dirty = true;
}
};
/**
* Creates a new instance of this class.
*
* @param window the workbench window this action applies to
* @param showSeparator whether to add a separator in the menu
*/
public SwitchToWindowMenu(IWorkbenchWindow window, String id,
boolean showSeparator) {
super(id);
this.workbenchWindow = window;
this.showSeparator = showSeparator;
}
/**
* Returns the text for a window. This may be truncated to fit
* within the MAX_TEXT_LENGTH.
*/
private String calcText(int number, IWorkbenchWindow window) {
String suffix = window.getShell().getText();
if (suffix == null) {
return null;
}
StringBuffer sb = new StringBuffer();
if (number < 10) {
sb.append('&');
}
sb.append(number);
sb.append(' ');
if (suffix.length() <= MAX_TEXT_LENGTH) {
sb.append(suffix);
} else {
sb.append(suffix.substring(0, MAX_TEXT_LENGTH));
sb.append("..."); //$NON-NLS-1$
}
return sb.toString();
}
/**
* Fills the given menu with menu items for all
* opened workbench windows.
*/
public void fill(Menu menu, int index) {
// Get workbench windows.
IWorkbench workbench = workbenchWindow.getWorkbench();
IWorkbenchWindow[] array = workbench.getWorkbenchWindows();
// avoid showing the separator and list for 0 or 1 items
if (array.length < 2) {
return;
}
if (getParent() instanceof MenuManager) {
((MenuManager) getParent()).addMenuListener(menuListener);
}
if (!dirty) {
return;
}
// Add separator.
if (showSeparator) {
new MenuItem(menu, SWT.SEPARATOR, index);
++index;
}
// Add one item for each window.
int count = 1;
for (int i = 0; i < array.length; i++) {
final IWorkbenchWindow window = array[i];
// can encounter disposed shells if this update is in response to a shell closing
if (!window.getShell().isDisposed()) {
String name = calcText(count, window);
if (name != null) {
MenuItem mi = new MenuItem(menu, SWT.RADIO, index);
index++;
count++;
mi.setText(name);
mi.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
Shell windowShell = window.getShell();
if (windowShell.getMinimized()) {
windowShell.setMinimized(false);
}
windowShell.setActive();
windowShell.moveAbove(null);
}
});
mi.setSelection(window == workbenchWindow);
}
}
}
dirty = false;
}
/**
* Overridden to always return true and force dynamic menu building.
*/
public boolean isDirty() {
return dirty;
}
/**
* Overridden to always return true and force dynamic menu building.
*/
public boolean isDynamic() {
return true;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy