Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Moffatt2013-11-14 19:51:34 +0000
committerEric Moffatt2013-11-14 19:54:41 +0000
commit5ccbeaf04e4b48154395960c07edda5948523d41 (patch)
tree1fd4caad86b6de1d21af4708dc8530aedeb1d980
parentc906222ff6d786606fe45c37fa5c5ba94d1a3f36 (diff)
downloadeclipse.platform.ui-5ccbeaf04e4b48154395960c07edda5948523d41.tar.gz
eclipse.platform.ui-5ccbeaf04e4b48154395960c07edda5948523d41.tar.xz
eclipse.platform.ui-5ccbeaf04e4b48154395960c07edda5948523d41.zip
Ongoing work for Bug 387579 - [EditorMgmt] [regression] No
indication/decoration for pinned editor
-rw-r--r--bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/SWTPartRenderer.java80
-rw-r--r--bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/StackRenderer.java106
-rw-r--r--bundles/org.eclipse.e4.ui.workbench.swt/src/org/eclipse/e4/ui/internal/workbench/swt/ResourceUtility.java20
-rw-r--r--bundles/org.eclipse.e4.ui.workbench.swt/src/org/eclipse/e4/ui/workbench/swt/util/ISWTResourceUtilities.java12
-rw-r--r--bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/workbench/IPresentationEngine.java6
-rw-r--r--bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/EditorReference.java45
-rw-r--r--bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ViewReference.java7
-rw-r--r--bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPartReference.java128
-rw-r--r--bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/e4/compatibility/CompatibilityEditor.java5
-rw-r--r--bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/e4/compatibility/CompatibilityPart.java52
-rw-r--r--bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/e4/compatibility/CompatibilityView.java19
-rw-r--r--bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/menus/MenuHelper.java6
12 files changed, 285 insertions, 201 deletions
diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/SWTPartRenderer.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/SWTPartRenderer.java
index c4b2823230c..aaf677343ec 100644
--- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/SWTPartRenderer.java
+++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/SWTPartRenderer.java
@@ -42,6 +42,11 @@ public abstract class SWTPartRenderer extends AbstractPartRenderer {
Map<String, Image> imageMap = new HashMap<String, Image>();
+ String pinURI = "platform:/plugin/org.eclipse.ui/icons/full/ovr16/pinned_ovr.gif"; //$NON-NLS-1$
+ Image pinImage;
+
+ private ISWTResourceUtilities resUtils;
+
public void processContents(MElementContainer<MUIElement> container) {
// EMF gives us null lists if empty
if (container == null)
@@ -192,21 +197,63 @@ public abstract class SWTPartRenderer extends AbstractPartRenderer {
}
}
- protected Image getImage(MUILabel element) {
- IEclipseContext localContext = context;
- String iconURI = element.getIconURI();
- if (iconURI != null && iconURI.length() > 0) {
- Image image = imageMap.get(iconURI);
- if (image == null) {
- ISWTResourceUtilities resUtils = (ISWTResourceUtilities) localContext
- .get(IResourceUtilities.class.getName());
- image = resUtils.imageDescriptorFromURI(URI.createURI(iconURI))
- .createImage();
- imageMap.put(iconURI, image);
- }
- return image;
+ protected String getToolTip(MUILabel element) {
+ String overrideTip = (String) ((MUIElement) element).getTransientData()
+ .get(IPresentationEngine.OVERRIDE_TITLE_TOOL_TIP_KEY);
+ return overrideTip == null ? element.getTooltip() : overrideTip;
+ }
+
+ protected Image getImageFromURI(String iconURI) {
+ if (iconURI == null || iconURI.length() == 0)
+ return null;
+
+ Image image = imageMap.get(iconURI);
+ if (image == null) {
+ image = resUtils.imageDescriptorFromURI(URI.createURI(iconURI))
+ .createImage();
+ imageMap.put(iconURI, image);
+ }
+ return image;
+ }
+
+ public Image getImage(MUILabel element) {
+ Image image = (Image) ((MUIElement) element).getTransientData().get(
+ IPresentationEngine.OVERRIDE_ICON_IMAGE_KEY);
+ if (image == null) {
+ String iconURI = element.getIconURI();
+ image = getImageFromURI(iconURI);
+ }
+
+ if (image != null) {
+ image = adornImage((MUIElement) element, image);
}
- return null;
+
+ return image;
+ }
+
+ /**
+ * @param element
+ * @param image
+ * @return
+ */
+ private Image adornImage(MUIElement element, Image image) {
+ // Remove and dispose any previous adorned image
+ Image previouslyAdornedImage = (Image) element.getTransientData().get(
+ "previouslyAdorned"); //$NON-NLS-1$
+ if (previouslyAdornedImage != null
+ && !previouslyAdornedImage.isDisposed())
+ previouslyAdornedImage.dispose();
+ element.getTransientData().remove(IPresentationEngine.ADORNMENT_PIN);
+
+ Image adornedImage = image;
+ if (element.getTags().contains(IPresentationEngine.ADORNMENT_PIN)) {
+ adornedImage = resUtils.adornImage(image, pinImage);
+ if (adornedImage != image)
+ element.getTransientData().put(
+ "previouslyAdorned", adornedImage); //$NON-NLS-1$
+ }
+
+ return adornedImage;
}
/**
@@ -262,6 +309,11 @@ public abstract class SWTPartRenderer extends AbstractPartRenderer {
@Override
public void init(IEclipseContext context) {
super.init(context);
+
+ resUtils = (ISWTResourceUtilities) context.get(IResourceUtilities.class
+ .getName());
+ pinImage = getImageFromURI(pinURI);
+
Display.getCurrent().disposeExec(new Runnable() {
public void run() {
for (Image image : imageMap.values()) {
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 909981eeb17..0274d482346 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
@@ -13,13 +13,16 @@ package org.eclipse.e4.ui.workbench.renderers.swt;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.Set;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.inject.Inject;
import javax.inject.Named;
import org.eclipse.e4.core.contexts.IEclipseContext;
+import org.eclipse.e4.core.di.annotations.Optional;
import org.eclipse.e4.core.services.events.IEventBroker;
+import org.eclipse.e4.ui.di.UIEventTopic;
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;
@@ -44,6 +47,7 @@ import org.eclipse.e4.ui.services.IStylingEngine;
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.UIEvents.EventTags;
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;
@@ -151,11 +155,111 @@ public class StackRenderer extends LazyStackRenderer {
private boolean ignoreTabSelChanges = false;
+ List<CTabItem> getItemsToSet(MPart part) {
+ List<CTabItem> itemsToSet = new ArrayList<CTabItem>();
+
+ MUIElement partParent = part.getParent();
+ if (partParent instanceof MPartStack) {
+ CTabItem item = findItemForPart(part);
+ if (item != null) {
+ itemsToSet.add(findItemForPart(part));
+ }
+ } else if (part.getCurSharedRef() != null) {
+ MWindow topWin = modelService.getTopLevelWindowFor(part);
+ List<MPlaceholder> partRefs = modelService.findElements(topWin,
+ part.getElementId(), MPlaceholder.class, null);
+ for (MPlaceholder ref : partRefs) {
+ CTabItem item = findItemForPart(ref, null);
+ if (item != null) {
+ itemsToSet.add(item);
+ }
+ }
+ }
+
+ return itemsToSet;
+ }
+
+ /**
+ * This is the new way to handle UIEvents (as opposed to subscring and
+ * unsubscribing them with the event broker.
+ *
+ * The method is described in detail at
+ * http://wiki.eclipse.org/Eclipse4/RCP/Event_Model
+ */
+ @SuppressWarnings("unchecked")
+ @Inject
+ @Optional
+ private void handleTransientDataEvents(
+ @UIEventTopic(UIEvents.ApplicationElement.TOPIC_TRANSIENTDATA) org.osgi.service.event.Event event) {
+ MUIElement changedElement = (MUIElement) event
+ .getProperty(UIEvents.EventTags.ELEMENT);
+
+ if (!(changedElement instanceof MPart))
+ return;
+
+ String key;
+ if (UIEvents.isREMOVE(event)) {
+ key = ((Entry<String, Object>) event
+ .getProperty(UIEvents.EventTags.OLD_VALUE)).getKey();
+ } else {
+ key = ((Entry<String, Object>) event
+ .getProperty(UIEvents.EventTags.NEW_VALUE)).getKey();
+ }
+
+ if (!IPresentationEngine.OVERRIDE_ICON_IMAGE_KEY.equals(key)
+ && !IPresentationEngine.OVERRIDE_TITLE_TOOL_TIP_KEY.equals(key))
+ return;
+
+ MPart part = (MPart) changedElement;
+ List<CTabItem> itemsToSet = getItemsToSet(part);
+ for (CTabItem item : itemsToSet) {
+ if (key.equals(IPresentationEngine.OVERRIDE_ICON_IMAGE_KEY)) {
+ item.setImage(getImage(part));
+ } else if (key
+ .equals(IPresentationEngine.OVERRIDE_TITLE_TOOL_TIP_KEY)) {
+ String newTip = getToolTip(part);
+ item.setToolTipText(getToolTip(newTip));
+ }
+ }
+ }
+
// private ToolBar menuTB;
// private boolean menuButtonShowing = false;
// private Control partTB;
+ /**
+ * Handles changes in tags
+ *
+ * @param event
+ */
+ @Inject
+ @Optional
+ private void subscribeTopicTagsChanged(
+ @UIEventTopic(UIEvents.ApplicationElement.TOPIC_TAGS) Event event) {
+ Object changedObj = event.getProperty(EventTags.ELEMENT);
+
+ if (!(changedObj instanceof MPart))
+ return;
+
+ final MPart part = (MPart) changedObj;
+ CTabItem item = findItemForPart(part);
+ if (item == null || item.isDisposed())
+ return;
+
+ if (UIEvents.isADD(event)) {
+ if (UIEvents.contains(event, UIEvents.EventTags.NEW_VALUE,
+ IPresentationEngine.ADORNMENT_PIN)) {
+ item.setImage(getImage(part));
+ }
+ } else if (UIEvents.isREMOVE(event)) {
+ if (UIEvents.contains(event, UIEvents.EventTags.OLD_VALUE,
+ IPresentationEngine.ADORNMENT_PIN)) {
+ item.setImage(getImage(part));
+ }
+ }
+ }
+
/*
* (non-Javadoc)
*
@@ -737,7 +841,7 @@ public class StackRenderer extends LazyStackRenderer {
stack = element.getParent();
CTabFolder ctf = (CTabFolder) stack.getWidget();
- if (ctf == null)
+ if (ctf == null || ctf.isDisposed())
return null;
CTabItem[] items = ctf.getItems();
diff --git a/bundles/org.eclipse.e4.ui.workbench.swt/src/org/eclipse/e4/ui/internal/workbench/swt/ResourceUtility.java b/bundles/org.eclipse.e4.ui.workbench.swt/src/org/eclipse/e4/ui/internal/workbench/swt/ResourceUtility.java
index 7eb2020e9bc..c47b3d60af8 100644
--- a/bundles/org.eclipse.e4.ui.workbench.swt/src/org/eclipse/e4/ui/internal/workbench/swt/ResourceUtility.java
+++ b/bundles/org.eclipse.e4.ui.workbench.swt/src/org/eclipse/e4/ui/internal/workbench/swt/ResourceUtility.java
@@ -16,6 +16,9 @@ import java.net.URL;
import org.eclipse.e4.ui.workbench.swt.util.ISWTResourceUtilities;
import org.eclipse.emf.common.util.URI;
import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Rectangle;
public class ResourceUtility implements ISWTResourceUtilities {
@@ -32,4 +35,21 @@ public class ResourceUtility implements ISWTResourceUtilities {
return null;
}
}
+
+ public Image adornImage(Image toAdorn, Image adornment) {
+ if (toAdorn == null)
+ return null;
+ if (adornment == null)
+ return toAdorn;
+ Rectangle adornmentSize = adornment.getBounds();
+
+ Image adornedImage = new Image(toAdorn.getDevice(), 16, 16);
+ GC gc = new GC(adornedImage);
+ gc.drawImage(toAdorn, 0, 0);
+ // For now assume top-right
+ gc.drawImage(adornment, 16 - adornmentSize.width, 0);
+ gc.dispose();
+
+ return adornedImage;
+ }
}
diff --git a/bundles/org.eclipse.e4.ui.workbench.swt/src/org/eclipse/e4/ui/workbench/swt/util/ISWTResourceUtilities.java b/bundles/org.eclipse.e4.ui.workbench.swt/src/org/eclipse/e4/ui/workbench/swt/util/ISWTResourceUtilities.java
index 883e374793e..7d28d8c1e54 100644
--- a/bundles/org.eclipse.e4.ui.workbench.swt/src/org/eclipse/e4/ui/workbench/swt/util/ISWTResourceUtilities.java
+++ b/bundles/org.eclipse.e4.ui.workbench.swt/src/org/eclipse/e4/ui/workbench/swt/util/ISWTResourceUtilities.java
@@ -13,8 +13,20 @@ package org.eclipse.e4.ui.workbench.swt.util;
import org.eclipse.e4.ui.workbench.IResourceUtilities;
import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.swt.graphics.Image;
public interface ISWTResourceUtilities extends
IResourceUtilities<ImageDescriptor> {
+ /**
+ * Low-level utility to stamp an adornment onto a given Image.
+ *
+ * @param toAdorn
+ * The image to be adorned (must not be null)
+ * @param adornment
+ * The image to adorn with.
+ *
+ * @return The adorned image or 'toAdorn' if 'adornment' is null
+ */
+ public Image adornImage(Image toAdorn, Image adornment);
}
diff --git a/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/workbench/IPresentationEngine.java b/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/workbench/IPresentationEngine.java
index 7a03b4953df..8b4c61187ad 100644
--- a/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/workbench/IPresentationEngine.java
+++ b/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/workbench/IPresentationEngine.java
@@ -125,6 +125,12 @@ public interface IPresentationEngine {
public static final String OVERRIDE_TITLE_TOOL_TIP_KEY = "e4_override_title_tool_tip_key"; //$NON-NLS-1$
/**
+ * This is a Tag that when applied to an MUILabel element will cause whatever Image is to be
+ * shown to be adorned with the 'pinned' affordance.
+ */
+ public static final String ADORNMENT_PIN = "Pin Adornment"; //$NON-NLS-1$
+
+ /**
* This is a <b>Boolean</b> preference used to control animations in the application
*/
public static final String ANIMATIONS_ENABLED = "Animations Enabled"; //$NON-NLS-1$
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/EditorReference.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/EditorReference.java
index 49756c44518..755ad4deee5 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/EditorReference.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/EditorReference.java
@@ -16,6 +16,8 @@ import java.io.StringReader;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
import java.util.Set;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
@@ -26,7 +28,6 @@ import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
import org.eclipse.jface.internal.provisional.action.ICoolBarManager2;
import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.osgi.util.NLS;
import org.eclipse.ui.IEditorActionBarContributor;
import org.eclipse.ui.IEditorInput;
@@ -40,6 +41,7 @@ import org.eclipse.ui.IPersistableEditor;
import org.eclipse.ui.IPersistableElement;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchPart3;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.WorkbenchException;
@@ -76,19 +78,15 @@ public class EditorReference extends WorkbenchPartReference implements IEditorRe
.getEditorRegistry();
descriptorId = createReadRoot.getString(IWorkbenchConstants.TAG_ID);
this.descriptor = (EditorDescriptor) registry.findEditor(descriptorId);
- }
- if (this.descriptor == null) {
- setImageDescriptor(ImageDescriptor.getMissingImageDescriptor());
- } else {
- setImageDescriptor(this.descriptor.getImageDescriptor());
+ boolean pinnedVal = "true".equals(createReadRoot.getString(IWorkbenchConstants.TAG_PINNED)); //$NON-NLS-1$
+ setPinned(pinnedVal);
}
} catch (WorkbenchException e) {
WorkbenchPlugin.log(e);
}
} else {
descriptorId = this.descriptor.getId();
- setImageDescriptor(this.descriptor.getImageDescriptor());
}
}
@@ -139,19 +137,42 @@ public class EditorReference extends WorkbenchPartReference implements IEditorRe
return null;
}
- XMLMemento root = XMLMemento.createWriteRoot(IWorkbenchConstants.TAG_EDITOR);
- root.putString(IWorkbenchConstants.TAG_ID, descriptor.getId());
+ XMLMemento editorMem = XMLMemento.createWriteRoot(IWorkbenchConstants.TAG_EDITOR);
+ editorMem.putString(IWorkbenchConstants.TAG_ID, descriptor.getId());
+ editorMem.putString(IWorkbenchConstants.TAG_TITLE, getTitle());
+ editorMem.putString(IWorkbenchConstants.TAG_NAME, getName());
+ editorMem.putString(IWorkbenchConstants.TAG_ID, getId());
+ editorMem.putString(IWorkbenchConstants.TAG_TOOLTIP, getTitleToolTip());
+ editorMem.putString(IWorkbenchConstants.TAG_PART_NAME, getPartName());
+
+ if (editor instanceof IWorkbenchPart3) {
+ Map properties = ((IWorkbenchPart3) editor).getPartProperties();
+ if (!properties.isEmpty()) {
+ IMemento propBag = editorMem.createChild(IWorkbenchConstants.TAG_PROPERTIES);
+ Iterator i = properties.entrySet().iterator();
+ while (i.hasNext()) {
+ Map.Entry entry = (Map.Entry) i.next();
+ IMemento p = propBag.createChild(IWorkbenchConstants.TAG_PROPERTY,
+ (String) entry.getKey());
+ p.putTextData((String) entry.getValue());
+ }
+ }
+ }
+
+ if (isPinned()) {
+ editorMem.putString(IWorkbenchConstants.TAG_PINNED, "true"); //$NON-NLS-1$
+ }
- IMemento inputMem = root.createChild(IWorkbenchConstants.TAG_INPUT);
+ IMemento inputMem = editorMem.createChild(IWorkbenchConstants.TAG_INPUT);
inputMem.putString(IWorkbenchConstants.TAG_FACTORY_ID, persistable.getFactoryId());
persistable.saveState(inputMem);
if (editor instanceof IPersistableEditor) {
- IMemento editorStateMem = root.createChild(IWorkbenchConstants.TAG_EDITOR_STATE);
+ IMemento editorStateMem = editorMem.createChild(IWorkbenchConstants.TAG_EDITOR_STATE);
((IPersistableEditor) editor).saveState(editorStateMem);
}
- return root;
+ return editorMem;
}
public EditorDescriptor getDescriptor() {
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ViewReference.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ViewReference.java
index fc4ed98fc4e..f6ebea12e97 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ViewReference.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ViewReference.java
@@ -18,7 +18,6 @@ import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
-import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.osgi.util.NLS;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.IViewPart;
@@ -40,12 +39,6 @@ public class ViewReference extends WorkbenchPartReference implements IViewRefere
super(windowContext, page, part);
this.descriptor = descriptor;
- if (descriptor == null) {
- setImageDescriptor(ImageDescriptor.getMissingImageDescriptor());
- } else {
- setImageDescriptor(descriptor.getImageDescriptor());
- }
-
String mementoString = getModel().getPersistedState().get(MEMENTO_KEY);
if (mementoString != null) {
try {
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPartReference.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPartReference.java
index 2e3b2deec1f..e4348b5a1a0 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPartReference.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPartReference.java
@@ -15,7 +15,6 @@ package org.eclipse.ui.internal;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
-import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.ListenerList;
import org.eclipse.e4.core.contexts.ContextInjectionFactory;
@@ -23,17 +22,16 @@ import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.e4.core.services.events.IEventBroker;
import org.eclipse.e4.ui.di.Focus;
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
+import org.eclipse.e4.ui.workbench.IPresentationEngine;
import org.eclipse.e4.ui.workbench.UIEvents;
import org.eclipse.e4.ui.workbench.modeling.EPartService;
import org.eclipse.e4.ui.workbench.modeling.EPartService.PartState;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IPropertyListener;
import org.eclipse.ui.ISaveablePart;
import org.eclipse.ui.ISaveablesLifecycleListener;
@@ -133,29 +131,8 @@ public abstract class WorkbenchPartReference implements IWorkbenchPartReference,
private int state = STATE_LAZY;
protected IWorkbenchPart legacyPart;
-
-
private boolean pinned = false;
-
- /**
- * Stores the current Image for this part reference. Lazily created. Null if not allocated.
- */
- private Image image = null;
-
- /**
- * Stores reference to the image kept in the legacyPart. Used for quick check
- * if the image changed.
- */
- private Image legacyPartImage = null;
-
- private ImageDescriptor defaultImageDescriptor;
-
- /**
- * Stores the current image descriptor for the part.
- */
- private ImageDescriptor imageDescriptor;
-
/**
* API listener list
*/
@@ -171,8 +148,6 @@ public abstract class WorkbenchPartReference implements IWorkbenchPartReference,
protected Map propertyCache = new HashMap();
-
-
private IPropertyListener propertyChangeListener = new IPropertyListener() {
/* (non-Javadoc)
* @see org.eclipse.ui.IPropertyListener#propertyChanged(java.lang.Object, int)
@@ -278,39 +253,9 @@ public abstract class WorkbenchPartReference implements IWorkbenchPartReference,
return part;
}
- protected void setImageDescriptor(ImageDescriptor descriptor) {
- if (Util.equals(imageDescriptor, descriptor)) {
- return;
- }
- Image oldImage = image;
- ImageDescriptor oldDescriptor = imageDescriptor;
- image = null;
- imageDescriptor = descriptor;
-
- // Don't queue events triggered by image changes. We'll dispose the image
- // immediately after firing the event, so we need to fire it right away.
- immediateFirePropertyChange(IWorkbenchPartConstants.PROP_TITLE);
- // If we had allocated the old image, deallocate it now (AFTER we fire the property change
- // -- listeners may need to clean up references to the old image)
- if (oldImage != null) {
- JFaceResources.getResources().destroy(oldDescriptor);
- }
- }
-
protected void partPropertyChanged(Object source, int propId) {
-
- // We handle these properties directly (some of them may be transformed
- // before firing events to workbench listeners)
- // if (propId == IWorkbenchPartConstants.PROP_CONTENT_DESCRIPTION
- // || propId == IWorkbenchPartConstants.PROP_PART_NAME
- // || propId == IWorkbenchPartConstants.PROP_TITLE) {
- //
- // refreshFromPart();
- // } else {
- // Any other properties are just reported to listeners verbatim
- firePropertyChange(propId);
- // }
+ firePropertyChange(propId);
// Let the model manager know as well
if (propId == IWorkbenchPartConstants.PROP_DIRTY) {
@@ -326,22 +271,6 @@ public abstract class WorkbenchPartReference implements IWorkbenchPartReference,
firePartPropertyChange(event);
}
-
- protected ImageDescriptor computeImageDescriptor() {
- if (legacyPart != null) {
- return ImageDescriptor
- .createFromImage(legacyPart.getTitleImage(), Display.getCurrent());
- }
- return defaultImageDescriptor;
- }
-
- public void init(ImageDescriptor desc) {
- Assert.isNotNull(desc);
-
- this.defaultImageDescriptor = desc;
- this.imageDescriptor = computeImageDescriptor();
- }
-
/**
* Releases any references maintained by this part reference
* when its actual part becomes known (not called when it is disposed).
@@ -442,35 +371,18 @@ public abstract class WorkbenchPartReference implements IWorkbenchPartReference,
return Util.safeString(legacyPart.getTitle());
}
- public final Image getTitleImage() {
- if (isDisposed()) {
- return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_DEF_VIEW);
- }
-
- Image newLegacyPartImage = null;
- if (legacyPart != null) {
- newLegacyPartImage = legacyPart.getTitleImage();
- }
- // refresh the local image if the image in the legacyPart changed
- if (newLegacyPartImage != null && newLegacyPartImage != legacyPartImage) {
- legacyPartImage = newLegacyPartImage;
- // the setImageDescriptor(ImageDescriptor) method sets the image field to null,
- // so a new value will be assigned to the image in the conditional statement below
- setImageDescriptor(computeImageDescriptor());
- }
- if (image == null) {
- image = JFaceResources.getResources().createImageWithDefault(imageDescriptor);
- }
- return image;
- }
+ public final Image getTitleImage() {
+ if (isDisposed()) {
+ return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_DEF_VIEW);
+ }
+
+ if (part != null && part.getRenderer() instanceof SWTPartRenderer) {
+ SWTPartRenderer r = (SWTPartRenderer) part.getRenderer();
+ return r.getImage(part);
+ }
- public ImageDescriptor getTitleImageDescriptor() {
- if (isDisposed()) {
- return PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_DEF_VIEW);
- }
-
- return imageDescriptor;
- }
+ return null;
+ }
/* package */ void fireVisibilityChange() {
fireInternalPropertyChange(INTERNAL_PROPERTY_VISIBLE);
@@ -544,8 +456,8 @@ public abstract class WorkbenchPartReference implements IWorkbenchPartReference,
}
}
- return legacyPart;
+ return legacyPart;
}
public abstract IWorkbenchPart createPart() throws PartInitException;
@@ -588,9 +500,13 @@ public abstract class WorkbenchPartReference implements IWorkbenchPartReference,
}
pinned = newPinned;
-
- setImageDescriptor(computeImageDescriptor());
-
+
+ immediateFirePropertyChange(IWorkbenchPartConstants.PROP_TITLE);
+ if (pinned)
+ part.getTags().add(IPresentationEngine.ADORNMENT_PIN);
+ else
+ part.getTags().remove(IPresentationEngine.ADORNMENT_PIN);
+
fireInternalPropertyChange(INTERNAL_PROPERTY_PINNED);
}
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/e4/compatibility/CompatibilityEditor.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/e4/compatibility/CompatibilityEditor.java
index dd2194642d3..42337153548 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/e4/compatibility/CompatibilityEditor.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/e4/compatibility/CompatibilityEditor.java
@@ -137,11 +137,6 @@ public class CompatibilityEditor extends CompatibilityPart {
}
@Override
- void updateImages(MPart part) {
- updateTabImages(part);
- }
-
- @Override
void disposeSite(PartSite site) {
EditorActionBars bars = (EditorActionBars) site.getActionBars();
EditorReference.disposeEditorActionBars(bars);
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/e4/compatibility/CompatibilityPart.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/e4/compatibility/CompatibilityPart.java
index 170f04ea5bf..ad4694671fc 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/e4/compatibility/CompatibilityPart.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/e4/compatibility/CompatibilityPart.java
@@ -21,11 +21,8 @@ import org.eclipse.e4.core.services.events.IEventBroker;
import org.eclipse.e4.core.services.log.Logger;
import org.eclipse.e4.ui.di.Focus;
import org.eclipse.e4.ui.di.Persist;
-import org.eclipse.e4.ui.internal.workbench.swt.AbstractPartRenderer;
import org.eclipse.e4.ui.model.application.ui.MDirtyable;
-import org.eclipse.e4.ui.model.application.ui.MUIElement;
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.model.application.ui.menu.MMenu;
import org.eclipse.e4.ui.workbench.IPresentationEngine;
import org.eclipse.e4.ui.workbench.UIEvents;
@@ -35,8 +32,7 @@ import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.CTabFolder;
-import org.eclipse.swt.custom.CTabItem;
+import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IEditorPart;
@@ -327,8 +323,10 @@ public abstract class CompatibilityPart implements ISelectionChangedListener {
// Only update 'valid' parts
if (!(wrapped instanceof ErrorEditorPart) && !(wrapped instanceof ErrorViewPart)) {
part.setLabel(computeLabel());
- part.setTooltip(wrapped.getTitleToolTip());
- updateImages(part);
+ part.getTransientData().put(IPresentationEngine.OVERRIDE_TITLE_TOOL_TIP_KEY,
+ wrapped.getTitleToolTip());
+ part.getTransientData().put(IPresentationEngine.OVERRIDE_ICON_IMAGE_KEY,
+ wrapped.getTitleImage());
}
if (wrapped instanceof ISaveablePart) {
@@ -340,11 +338,17 @@ public abstract class CompatibilityPart implements ISelectionChangedListener {
switch (propId) {
case IWorkbenchPartConstants.PROP_TITLE:
part.setLabel(computeLabel());
- part.setTooltip(wrapped.getTitleToolTip());
- part.getTransientData().put(IPresentationEngine.OVERRIDE_TITLE_TOOL_TIP_KEY,
- wrapped.getTitle());
- updateImages(part);
+ if (wrapped.getTitleImage() != null) {
+ Image newImage = wrapped.getTitleImage();
+ part.getTransientData().put(IPresentationEngine.OVERRIDE_ICON_IMAGE_KEY,
+ newImage);
+ }
+ if (wrapped.getTitleToolTip() != null && wrapped.getTitleToolTip().length() > 0) {
+ part.getTransientData()
+ .put(IPresentationEngine.OVERRIDE_TITLE_TOOL_TIP_KEY,
+ wrapped.getTitleToolTip());
+ }
break;
case IWorkbenchPartConstants.PROP_DIRTY:
if (wrapped instanceof ISaveablePart) {
@@ -360,32 +364,6 @@ public abstract class CompatibilityPart implements ISelectionChangedListener {
});
}
- void updateTabImages(MUIElement element) {
- // Try to update the image if we're using a CTF
- MUIElement refParent = element.getParent();
- if (!(refParent instanceof MPartStack)) {
- return;
- }
-
- if (!(refParent.getWidget() instanceof CTabFolder)) {
- return;
- }
-
- CTabFolder ctf = (CTabFolder) refParent.getWidget();
- if (ctf.isDisposed()) {
- return;
- }
-
- CTabItem[] items = ctf.getItems();
- for (CTabItem item : items) {
- if (item.getData(AbstractPartRenderer.OWNING_ME) == element) {
- item.setImage(wrapped.getTitleImage());
- }
- }
- }
-
- abstract void updateImages(MPart part);
-
@PreDestroy
void destroy() {
if (!alreadyDisposed) {
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/e4/compatibility/CompatibilityView.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/e4/compatibility/CompatibilityView.java
index 28ec099de86..baba40ee6a7 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/e4/compatibility/CompatibilityView.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/e4/compatibility/CompatibilityView.java
@@ -12,17 +12,13 @@
package org.eclipse.ui.internal.e4.compatibility;
import java.util.Iterator;
-import java.util.List;
import javax.inject.Inject;
import org.eclipse.e4.core.contexts.ContextFunction;
import org.eclipse.e4.core.contexts.IContextFunction;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.e4.ui.internal.workbench.ContributionsAnalyzer;
import org.eclipse.e4.ui.internal.workbench.swt.AbstractPartRenderer;
-import org.eclipse.e4.ui.model.application.ui.MUIElement;
-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.MWindow;
import org.eclipse.e4.ui.model.application.ui.menu.MMenu;
import org.eclipse.e4.ui.model.application.ui.menu.MMenuElement;
import org.eclipse.e4.ui.model.application.ui.menu.MOpaqueMenu;
@@ -32,8 +28,6 @@ import org.eclipse.e4.ui.model.application.ui.menu.MOpaqueToolItem;
import org.eclipse.e4.ui.model.application.ui.menu.MToolBar;
import org.eclipse.e4.ui.model.application.ui.menu.MToolBarElement;
import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuFactoryImpl;
-import org.eclipse.e4.ui.workbench.IPresentationEngine;
-import org.eclipse.e4.ui.workbench.modeling.EModelService;
import org.eclipse.e4.ui.workbench.renderers.swt.MenuManagerRenderer;
import org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer;
import org.eclipse.e4.ui.workbench.renderers.swt.ToolBarManagerRenderer;
@@ -69,19 +63,6 @@ public class CompatibilityView extends CompatibilityPart {
return (IViewPart) getPart();
}
- @Override
- void updateImages(MPart part) {
- EModelService ms = part.getContext().get(EModelService.class);
- MWindow topWin = ms.getTopLevelWindowFor(part);
- List<MPlaceholder> partRefs = ms.findElements(topWin, part.getElementId(),
- MPlaceholder.class, null);
- for (MUIElement ref : partRefs) {
- updateTabImages(ref);
- }
- part.getTransientData().put(IPresentationEngine.OVERRIDE_ICON_IMAGE_KEY,
- wrapped.getTitleImage());
- }
-
/*
* (non-Javadoc)
*
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/menus/MenuHelper.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/menus/MenuHelper.java
index 355dd1b1d52..643c0415d66 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/menus/MenuHelper.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/menus/MenuHelper.java
@@ -806,6 +806,12 @@ public class MenuHelper {
String iconURI = null;
String disabledIconURI = null;
+ toolItem.setType(ItemType.PUSH);
+ if (data.style == CommandContributionItem.STYLE_CHECK)
+ toolItem.setType(ItemType.CHECK);
+ else if (data.style == CommandContributionItem.STYLE_RADIO)
+ toolItem.setType(ItemType.RADIO);
+
if (data.icon != null) {
iconURI = getIconURI(data.icon, application.getContext());
}

Back to the top