diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/icons/full/elcl16/view_recent_editor.svg b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/icons/full/elcl16/view_recent_editor.svg
new file mode 100644
index 00000000000..1015f7096b4
--- /dev/null
+++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/icons/full/elcl16/view_recent_editor.svg
@@ -0,0 +1,98 @@
+
+
+
+
diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/internal/workbench/renderers/swt/AbstractTableInformationControl.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/internal/workbench/renderers/swt/AbstractTableInformationControl.java
index f4333185d8f..24814ca5487 100644
--- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/internal/workbench/renderers/swt/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, 2018 IBM Corporation and others.
+ * Copyright (c) 2003, 2025 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -13,6 +13,8 @@
*******************************************************************************/
package org.eclipse.e4.ui.internal.workbench.renderers.swt;
+import java.util.List;
+import org.eclipse.e4.ui.model.application.ui.basic.MPart;
import org.eclipse.e4.ui.workbench.swt.internal.copy.SearchPattern;
import org.eclipse.e4.ui.workbench.swt.internal.copy.WorkbenchSWTMessages;
import org.eclipse.jface.preference.JFacePreferences;
@@ -23,6 +25,7 @@
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyListener;
@@ -33,6 +36,7 @@
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.FontMetrics;
import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.FillLayout;
@@ -40,6 +44,7 @@
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Item;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Menu;
@@ -48,11 +53,16 @@
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.ToolItem;
/**
* @since 3.0
*/
public abstract class AbstractTableInformationControl {
+ private ViewerComparator originalComparatorOrder;
+ private Object originalInputOrder;
+ private boolean reversed = false;
/**
* The NamePatternFilter selects the elements which match the given string
@@ -313,18 +323,25 @@ public TableViewer getTableViewer() {
}
protected Text createFilterText(Composite parent) {
- fFilterText = new Text(parent, SWT.NONE);
+ Composite c = new Composite(parent, SWT.NONE);
+ GridLayout layout = new GridLayout(2, false);
+ layout.marginHeight = 0;
+ layout.marginWidth = 0;
+ c.setLayout(layout);
+ c.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
- GridData data = new GridData();
+ fFilterText = new Text(c, SWT.NONE);
+
+ GridData data = new GridData(SWT.FILL, SWT.CENTER, true, false);
GC gc = new GC(parent);
gc.setFont(parent.getFont());
FontMetrics fontMetrics = gc.getFontMetrics();
gc.dispose();
data.heightHint = org.eclipse.jface.dialogs.Dialog
- .convertHeightInCharsToPixels(fontMetrics, 1);
+ .convertHeightInCharsToPixels(fontMetrics, 1);
data.horizontalAlignment = GridData.FILL;
- data.verticalAlignment = GridData.BEGINNING;
+ data.verticalAlignment = GridData.CENTER;
fFilterText.setLayoutData(data);
fFilterText.addKeyListener(KeyListener.keyPressedAdapter(e -> {
@@ -347,6 +364,48 @@ protected Text createFilterText(Composite parent) {
}
}));
+ ToolBar toolBar = new ToolBar(c, SWT.FLAT | SWT.NO_FOCUS);
+ GridData tbData = new GridData(SWT.RIGHT, SWT.CENTER, false, false);
+ toolBar.setLayoutData(tbData);
+
+ ToolItem reverseItem = new ToolItem(toolBar, SWT.CHECK);
+ Image image = new Image(Display.getCurrent(),
+ getClass().getClassLoader().getResourceAsStream("icons/full/elcl16/view_recent_editor.svg"));//$NON-NLS-1$
+ reverseItem.setImage(image);
+ reverseItem.setToolTipText(SWTRenderersMessages.mostRecentHiddenEditor);
+ reverseItem.addDisposeListener(e -> {
+ if (image != null && !image.isDisposed()) {
+ image.dispose();
+ }
+ });
+
+ reverseItem.addListener(SWT.Selection, e -> {
+ if (this instanceof BasicPartList bpl) {
+
+ if (!reversed) {
+ if (originalComparatorOrder == null) {
+ originalComparatorOrder = fTableViewer.getComparator();
+ originalInputOrder = fTableViewer.getInput();
+ }
+ List showEditors = bpl.getEditorsReversed();
+ fTableViewer.setComparator(null);
+ fTableViewer.setInput(showEditors);
+ reversed = true;
+
+ } else {
+ fTableViewer.setComparator(originalComparatorOrder);
+ fTableViewer.setInput(originalInputOrder);
+ reversed = false;
+ }
+ if (fFilterText.getText().isEmpty()) {
+ computeSizeHint();
+ fComposite.layout(true, true);
+ fComposite.getShell().pack(true);
+ fTableViewer.refresh();
+ }
+ }
+ });
+
// Horizontal separator line
Label separator = new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL);
separator.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
@@ -378,7 +437,14 @@ private void installFilter() {
fFilterText.addModifyListener(e -> {
String text = ((Text) e.widget).getText();
setMatcherString(text);
+ fTableViewer.refresh();
+ if (text.isEmpty()) {
+ computeSizeHint();
+ fComposite.layout(true, true);
+ fComposite.getShell().pack(true);
+ }
});
+ computeSizeHint();
}
/**
diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/internal/workbench/renderers/swt/BasicPartList.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/internal/workbench/renderers/swt/BasicPartList.java
index 1da73e31ce6..babcb8366f3 100644
--- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/internal/workbench/renderers/swt/BasicPartList.java
+++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/internal/workbench/renderers/swt/BasicPartList.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2025 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -16,6 +16,7 @@
package org.eclipse.e4.ui.internal.workbench.renderers.swt;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import org.eclipse.e4.ui.model.application.ui.MDirtyable;
import org.eclipse.e4.ui.model.application.ui.MElementContainer;
@@ -162,6 +163,20 @@ private List