diff options
| author | Remy Suen | 2012-02-03 18:42:18 +0000 |
|---|---|---|
| committer | Remy Suen | 2012-02-03 18:42:18 +0000 |
| commit | 115ed57b622d6f37686f69f0f456c54720621774 (patch) | |
| tree | 3e2b1037632d0de0e068dfff127af69ed61c6c19 | |
| parent | b53d35186412cd1a6b879d0cd78a655903a1dcbc (diff) | |
| download | eclipse.platform.ui-115ed57b622d6f37686f69f0f456c54720621774.tar.gz eclipse.platform.ui-115ed57b622d6f37686f69f0f456c54720621774.tar.xz eclipse.platform.ui-115ed57b622d6f37686f69f0f456c54720621774.zip | |
Bug 370441 Allow to see all editors in ">>" drop-down
Update the code so that clicking on a CTabFolder's chevron will
bring up all the editors in an order dictated by the MRU
setting. If MRU is on, the list will be shown alphabetically. If
MRU is off, then the tabs that are in the folder will just be
shown as-is with no reordering.
| -rw-r--r-- | bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/internal/workbench/renderers/swt/AbstractTableInformationControl.java (renamed from bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/AbstractTableInformationControl.java) | 56 | ||||
| -rw-r--r-- | bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/internal/workbench/renderers/swt/BasicPartList.java (renamed from bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/BasicPartList.java) | 27 | ||||
| -rw-r--r-- | bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/StackRenderer.java | 58 | ||||
| -rw-r--r-- | bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbookEditorsHandler.java | 6 | ||||
| -rw-r--r-- | bundles/org.eclipse.ui.workbench/META-INF/MANIFEST.MF | 1 |
5 files changed, 115 insertions, 33 deletions
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/AbstractTableInformationControl.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/internal/workbench/renderers/swt/AbstractTableInformationControl.java index 9252eea5ac2..7c4b8eccd51 100644 --- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/AbstractTableInformationControl.java +++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/internal/workbench/renderers/swt/AbstractTableInformationControl.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2003, 2011 IBM Corporation and others. + * Copyright (c) 2003, 2012 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 @@ -8,8 +8,9 @@ * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ -package org.eclipse.ui.internal; +package org.eclipse.e4.ui.internal.workbench.renderers.swt; +import org.eclipse.e4.ui.workbench.swt.internal.copy.StringMatcher; import org.eclipse.jface.util.Util; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.IStructuredSelection; @@ -48,7 +49,6 @@ import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableItem; import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.internal.misc.StringMatcher; /** * @since 3.0 @@ -64,14 +64,16 @@ public abstract class AbstractTableInformationControl { /* * (non-Javadoc) Method declared on ViewerFilter. */ - public boolean select(Viewer viewer, Object parentElement, Object element) { + public boolean select(Viewer viewer, Object parentElement, + Object element) { StringMatcher matcher = getMatcher(); if (matcher == null || !(viewer instanceof TableViewer)) { return true; } TableViewer tableViewer = (TableViewer) viewer; - String matchName = ((ILabelProvider) tableViewer.getLabelProvider()).getText(element); + String matchName = ((ILabelProvider) tableViewer.getLabelProvider()) + .getText(element); if (matchName == null) { return false; @@ -111,7 +113,8 @@ public abstract class AbstractTableInformationControl { * @param controlStyle * the additional styles for the control */ - public AbstractTableInformationControl(Shell parent, int shellStyle, int controlStyle) { + public AbstractTableInformationControl(Shell parent, int shellStyle, + int controlStyle) { fShell = new Shell(parent, shellStyle); fShell.setLayout(new FillLayout()); @@ -191,11 +194,12 @@ public abstract class AbstractTableInformationControl { if (divCount == ignoreEventCount) { divCount = 0; } - if (table.equals(e.getSource()) & ++divCount == ignoreEventCount) { + if (table.equals(e.getSource()) + & ++divCount == ignoreEventCount) { Object o = table.getItem(new Point(e.x, e.y)); if (fLastItem == null ^ o == null) { - table.setCursor(o == null ? null : table.getDisplay().getSystemCursor( - SWT.CURSOR_HAND)); + table.setCursor(o == null ? null : table.getDisplay() + .getSystemCursor(SWT.CURSOR_HAND)); } if (o instanceof TableItem && lastY != e.y) { lastY = e.y; @@ -204,14 +208,16 @@ public abstract class AbstractTableInformationControl { table.setSelection(new TableItem[] { fLastItem }); } else if (e.y < itemHeightdiv4) { // Scroll up - Item item = fTableViewer.scrollUp(e.x + tableLoc.x, e.y + tableLoc.y); + Item item = fTableViewer.scrollUp(e.x + tableLoc.x, + e.y + tableLoc.y); if (item instanceof TableItem) { fLastItem = (TableItem) item; table.setSelection(new TableItem[] { fLastItem }); } } else if (e.y > tableHeight - itemHeightdiv4) { // Scroll down - Item item = fTableViewer.scrollDown(e.x + tableLoc.x, e.y + tableLoc.y); + Item item = fTableViewer.scrollDown(e.x + + tableLoc.x, e.y + tableLoc.y); if (item instanceof TableItem) { fLastItem = (TableItem) item; table.setSelection(new TableItem[] { fLastItem }); @@ -240,13 +246,15 @@ public abstract class AbstractTableInformationControl { } } if (e.button == 3) { - TableItem tItem = fTableViewer.getTable().getItem(new Point(e.x, e.y)); + TableItem tItem = fTableViewer.getTable().getItem( + new Point(e.x, e.y)); if (tItem != null) { Menu menu = new Menu(fTableViewer.getTable()); MenuItem mItem = new MenuItem(menu, SWT.NONE); - mItem.setText(WorkbenchMessages.PartPane_close); + mItem.setText(SWTRenderersMessages.menuClose); mItem.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent selectionEvent) { + public void widgetSelected( + SelectionEvent selectionEvent) { removeSelectedItems(); } }); @@ -330,8 +338,8 @@ public abstract class AbstractTableInformationControl { FontMetrics fontMetrics = gc.getFontMetrics(); gc.dispose(); - data.heightHint = org.eclipse.jface.dialogs.Dialog.convertHeightInCharsToPixels( - fontMetrics, 1); + data.heightHint = org.eclipse.jface.dialogs.Dialog + .convertHeightInCharsToPixels(fontMetrics, 1); data.horizontalAlignment = GridData.FILL; data.verticalAlignment = GridData.BEGINNING; fFilterText.setLayoutData(data); @@ -349,8 +357,8 @@ public abstract class AbstractTableInformationControl { break; case SWT.ARROW_UP: fTableViewer.getTable().setFocus(); - fTableViewer.getTable() - .setSelection(fTableViewer.getTable().getItemCount() - 1); + fTableViewer.getTable().setSelection( + fTableViewer.getTable().getItemCount() - 1); break; case SWT.ESC: dispose(); @@ -364,7 +372,8 @@ public abstract class AbstractTableInformationControl { }); // Horizontal separator line - Label separator = new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL | SWT.LINE_DOT); + Label separator = new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL + | SWT.LINE_DOT); separator.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); return fFilterText; @@ -428,7 +437,8 @@ public abstract class AbstractTableInformationControl { * Implementers can modify */ protected Object getSelectedElement() { - return ((IStructuredSelection) fTableViewer.getSelection()).getFirstElement(); + return ((IStructuredSelection) fTableViewer.getSelection()) + .getFirstElement(); } protected abstract void gotoSelectedElement(); @@ -455,7 +465,8 @@ public abstract class AbstractTableInformationControl { } private Object findElement(TableItem[] items) { - ILabelProvider labelProvider = (ILabelProvider) fTableViewer.getLabelProvider(); + ILabelProvider labelProvider = (ILabelProvider) fTableViewer + .getLabelProvider(); for (int i = 0; i < items.length; i++) { Object element = items[i].getData(); if (fStringMatcher == null) { @@ -502,7 +513,8 @@ public abstract class AbstractTableInformationControl { int tableMaxHeight = fComposite.getDisplay().getBounds().height / 2; // removes padding if necessary int tableHeight = (tableSize.y <= tableMaxHeight) ? tableSize.y - - viewerTable.getItemHeight() - viewerTable.getItemHeight() / 2 : tableMaxHeight; + - viewerTable.getItemHeight() - viewerTable.getItemHeight() / 2 + : tableMaxHeight; ((GridData) viewerTable.getLayoutData()).heightHint = tableHeight; Point fCompSize = fComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT); fComposite.setSize(fCompSize); diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/BasicPartList.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/internal/workbench/renderers/swt/BasicPartList.java index 120fa44a00e..b4630e9ddd4 100644 --- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/BasicPartList.java +++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/internal/workbench/renderers/swt/BasicPartList.java @@ -9,17 +9,17 @@ * IBM Corporation - initial API and implementation *******************************************************************************/ -package org.eclipse.ui.internal; +package org.eclipse.e4.ui.internal.workbench.renderers.swt; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import org.eclipse.e4.ui.model.application.ui.MElementContainer; import org.eclipse.e4.ui.model.application.ui.MUIElement; import org.eclipse.e4.ui.model.application.ui.MUILabel; import org.eclipse.e4.ui.model.application.ui.advanced.MPlaceholder; import org.eclipse.e4.ui.model.application.ui.basic.MPart; -import org.eclipse.e4.ui.model.application.ui.basic.MPartStack; import org.eclipse.e4.ui.workbench.modeling.EPartService; import org.eclipse.e4.ui.workbench.swt.util.ISWTResourceUtilities; import org.eclipse.emf.common.util.URI; @@ -63,22 +63,27 @@ public class BasicPartList extends AbstractTableInformationControl { private ISWTResourceUtilities utils; - private MPartStack input; + private MElementContainer<?> input; private EPartService partService; - public BasicPartList(Shell parent, int shellStyle, int treeStyler, EPartService partService, - MPartStack input, ISWTResourceUtilities utils) { + private boolean alphabetical; + + public BasicPartList(Shell parent, int shellStyle, int treeStyler, + EPartService partService, MElementContainer<?> input, + ISWTResourceUtilities utils, boolean alphabetical) { super(parent, shellStyle, treeStyler); this.partService = partService; this.input = input; this.utils = utils; + this.alphabetical = alphabetical; } private Image getLabelImage(String iconURI) { Image image = images.get(iconURI); if (image == null) { - ImageDescriptor descriptor = utils.imageDescriptorFromURI(URI.createURI(iconURI)); + ImageDescriptor descriptor = utils.imageDescriptorFromURI(URI + .createURI(iconURI)); image = descriptor.createImage(); images.put(iconURI, image); } @@ -87,10 +92,13 @@ public class BasicPartList extends AbstractTableInformationControl { protected TableViewer createTableViewer(Composite parent, int style) { Table table = new Table(parent, SWT.SINGLE | (style & ~SWT.MULTI)); - table.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false)); + table.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, + false)); TableViewer tableViewer = new TableViewer(table); tableViewer.setComparator(new ViewerComparator()); - tableViewer.addFilter(new NamePatternFilter()); + if (alphabetical) { + tableViewer.addFilter(new NamePatternFilter()); + } tableViewer.setContentProvider(ArrayContentProvider.getInstance()); tableViewer.setLabelProvider(new BasicStackListLabelProvider()); @@ -116,7 +124,8 @@ public class BasicPartList extends AbstractTableInformationControl { element = ((MPlaceholder) element).getRef(); } - if (element.isToBeRendered() && element.isVisible() && element instanceof MPart) { + if (element.isToBeRendered() && element.isVisible() + && element instanceof MPart) { list.add(element); } } diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/StackRenderer.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/StackRenderer.java index 46e694eaace..d268ff0e900 100644 --- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/StackRenderer.java +++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/StackRenderer.java @@ -17,6 +17,7 @@ import javax.annotation.PreDestroy; import javax.inject.Inject; import org.eclipse.e4.core.contexts.IEclipseContext; import org.eclipse.e4.core.services.events.IEventBroker; +import org.eclipse.e4.ui.internal.workbench.renderers.swt.BasicPartList; import org.eclipse.e4.ui.internal.workbench.renderers.swt.SWTRenderersMessages; import org.eclipse.e4.ui.internal.workbench.swt.AbstractPartRenderer; import org.eclipse.e4.ui.internal.workbench.swt.CSSRenderingUtils; @@ -38,9 +39,11 @@ import org.eclipse.e4.ui.widgets.CTabFolder2Adapter; import org.eclipse.e4.ui.widgets.CTabFolderEvent; import org.eclipse.e4.ui.widgets.CTabItem; import org.eclipse.e4.ui.workbench.IPresentationEngine; +import org.eclipse.e4.ui.workbench.IResourceUtilities; import org.eclipse.e4.ui.workbench.UIEvents; import org.eclipse.e4.ui.workbench.modeling.EModelService; import org.eclipse.e4.ui.workbench.modeling.EPartService; +import org.eclipse.e4.ui.workbench.swt.util.ISWTResourceUtilities; import org.eclipse.emf.ecore.EObject; import org.eclipse.jface.action.MenuManager; import org.eclipse.swt.SWT; @@ -68,6 +71,7 @@ import org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; @@ -732,6 +736,12 @@ public class StackRenderer extends LazyStackRenderer { public void close(CTabFolderEvent event) { event.doit = closePart(event.item); } + + @Override + public void showList(CTabFolderEvent event) { + event.doit = false; + showAvailableItems(stack, ctf); + } }; ctf.addCTabFolder2Listener(closeListener); @@ -763,6 +773,54 @@ public class StackRenderer extends LazyStackRenderer { }); } + private void showAvailableItems(MElementContainer<?> stack, CTabFolder ctf) { + IEclipseContext ctxt = getContext(stack); + final BasicPartList editorList = new BasicPartList(ctf.getShell(), + SWT.ON_TOP, SWT.V_SCROLL | SWT.H_SCROLL, + ctxt.get(EPartService.class), stack, + (ISWTResourceUtilities) ctxt.get(IResourceUtilities.class), + getInitialMRUValue(ctf)); + editorList.setInput(); + + Point size = editorList.computeSizeHint(); + editorList.setSize(size.x, size.y); + + editorList.setLocation(ctf.toDisplay(getChevronLocation(ctf))); + editorList.setVisible(true); + editorList.setFocus(); + editorList.getShell().addListener(SWT.Deactivate, new Listener() { + public void handleEvent(org.eclipse.swt.widgets.Event event) { + editorList.getShell().getDisplay().asyncExec(new Runnable() { + public void run() { + editorList.dispose(); + } + }); + } + }); + } + + private Point getChevronLocation(CTabFolder tabFolder) { + // get the last visible item + int numItems = tabFolder.getItemCount(); + CTabItem item = null; + for (int i = 0; i < numItems; i++) { + CTabItem tempItem = tabFolder.getItem(i); + if (tempItem.isShowing()) { + item = tempItem; + } + } + + // if we have no visible tabs, abort. + if (item == null) { + return new Point(0, 0); + } + + Rectangle itemBounds = item.getBounds(); + int x = itemBounds.x + itemBounds.width; + int y = itemBounds.y + itemBounds.height; + return new Point(x, y); + } + private boolean closePart(Widget widget) { MUIElement uiElement = (MUIElement) widget .getData(AbstractPartRenderer.OWNING_ME); diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbookEditorsHandler.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbookEditorsHandler.java index 420463adaed..6d74b5b1797 100644 --- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbookEditorsHandler.java +++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbookEditorsHandler.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2011 IBM Corporation and others. + * Copyright (c) 2007, 2012 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 @@ -14,6 +14,7 @@ package org.eclipse.ui.internal; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; +import org.eclipse.e4.ui.internal.workbench.renderers.swt.BasicPartList; import org.eclipse.e4.ui.model.application.ui.MElementContainer; import org.eclipse.e4.ui.model.application.ui.MUIElement; import org.eclipse.e4.ui.model.application.ui.advanced.MPlaceholder; @@ -59,7 +60,8 @@ public class WorkbookEditorsHandler extends AbstractHandler { EPartService partService = (EPartService) HandlerUtil.getVariableChecked(event, EPartService.class.getName()); final BasicPartList editorList = new BasicPartList(workbenchWindow.getShell(), - SWT.ON_TOP, SWT.V_SCROLL | SWT.H_SCROLL, partService, activeStack, utils); + SWT.ON_TOP, SWT.V_SCROLL | SWT.H_SCROLL, partService, activeStack, utils, + true); editorList.setInput(); Point size = editorList.computeSizeHint(); diff --git a/bundles/org.eclipse.ui.workbench/META-INF/MANIFEST.MF b/bundles/org.eclipse.ui.workbench/META-INF/MANIFEST.MF index 17b3ed8e794..d828a44c0c1 100644 --- a/bundles/org.eclipse.ui.workbench/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.ui.workbench/META-INF/MANIFEST.MF @@ -113,6 +113,7 @@ Import-Package: com.ibm.icu.text, org.eclipse.e4.core.commands, org.eclipse.e4.core.commands.internal, org.eclipse.e4.ui.internal.workbench, + org.eclipse.e4.ui.internal.workbench.renderers.swt, org.eclipse.e4.ui.internal.workbench.swt, org.eclipse.e4.ui.services, org.eclipse.e4.ui.widgets, |
