From dff70ccd8f00c718528c3f351f5de898520a4e89 Mon Sep 17 00:00:00 2001 From: Alexandre Montplaisir Date: Thu, 25 Feb 2016 22:37:00 -0500 Subject: [PATCH] tmf: Move icon and label text into ITmfProjectModelElement A series of "else if (instance of ...)" checks is usually better served by good ol' polymorphism. Move the class-aware logic present in TmfNavigatorLabelProvider into each class and add corresponding methods in the interface. This aligns with the recently-added getStyler() method, which is defined in the element classes and simply called by the label provider. Also move everything icon-reading-related to a new class, so that there is no circular dependencies between TmfNavigatorLabelProvider and the project element classes. Change-Id: I0d78dd5342b13272a42b11e7ca0619225e1beed5 Signed-off-by: Alexandre Montplaisir Reviewed-on: https://git.eclipse.org/r/67694 Reviewed-by: Hudson CI Reviewed-by: Genevieve Bastien Tested-by: Genevieve Bastien Reviewed-by: Patrick Tasse --- .../model/ITmfProjectModelElement.java | 19 ++ .../ui/project/model/TmfAnalysisElement.java | 19 ++ .../model/TmfAnalysisOutputElement.java | 12 +- .../model/TmfCommonProjectElement.java | 44 ++++- .../project/model/TmfExperimentElement.java | 19 ++ .../ui/project/model/TmfExperimentFolder.java | 17 ++ .../model/TmfNavigatorLabelProvider.java | 165 +----------------- .../ui/project/model/TmfProjectElement.java | 9 + .../project/model/TmfProjectModelIcons.java | 77 ++++++++ .../tmf/ui/project/model/TmfTraceElement.java | 22 +++ .../tmf/ui/project/model/TmfTraceFolder.java | 21 +++ .../tmf/ui/project/model/TmfTracesFolder.java | 7 + 12 files changed, 260 insertions(+), 171 deletions(-) create mode 100644 tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfProjectModelIcons.java diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/ITmfProjectModelElement.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/ITmfProjectModelElement.java index 991bf0aa43..4f073cd770 100644 --- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/ITmfProjectModelElement.java +++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/ITmfProjectModelElement.java @@ -17,6 +17,7 @@ import java.util.List; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IPath; +import org.eclipse.swt.graphics.Image; /** * The TMF project model interface. @@ -84,6 +85,24 @@ public interface ITmfProjectModelElement { */ void refresh(); + /** + * Returns the icon of this element. + * + * @return The icon + * @since 2.0 + */ + Image getIcon(); + + /** + * Returns the text of the label of this element. + * + * @return The label text + * @since 2.0 + */ + default String getLabelText() { + return getName(); + } + /** * Returns whether this model element has children or not. * diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfAnalysisElement.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfAnalysisElement.java index 23af28ac52..7d20800a2f 100644 --- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfAnalysisElement.java +++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfAnalysisElement.java @@ -25,6 +25,7 @@ import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IPath; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jface.viewers.StyledString.Styler; +import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.TextStyle; import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModule; import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModuleHelper; @@ -139,6 +140,24 @@ public class TmfAnalysisElement extends TmfProjectModelElement implements ITmfSt } } + /** + * @since 2.0 + */ + @Override + public Image getIcon() { + String iconFile = getIconFile(); + if (iconFile != null) { + Bundle bundle = getBundle(); + if (bundle != null) { + Image icon = TmfProjectModelIcons.loadIcon(bundle, iconFile); + if (icon != null) { + return icon; + } + } + } + return TmfProjectModelIcons.DEFAULT_ANALYSIS_ICON; + } + // ------------------------------------------------------------------------ // TmfProjectModelElement // ------------------------------------------------------------------------ diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfAnalysisOutputElement.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfAnalysisOutputElement.java index 58c74b1b9b..37c7944149 100644 --- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfAnalysisOutputElement.java +++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfAnalysisOutputElement.java @@ -47,11 +47,7 @@ public class TmfAnalysisOutputElement extends TmfProjectModelElement { fOutput = output; } - /** - * Gets the icon of the view, if applicable - * - * @return The view icon or null if output is not a view - */ + @Override public Image getIcon() { if (fOutput instanceof TmfAnalysisViewOutput) { IViewDescriptor descr = PlatformUI.getWorkbench().getViewRegistry().find( @@ -64,10 +60,12 @@ public class TmfAnalysisOutputElement extends TmfProjectModelElement { icon = descr.getImageDescriptor().createImage(); bundle.getImageRegistry().put(key, icon); } - return icon; + if (icon != null) { + return icon; + } } } - return null; + return TmfProjectModelIcons.DEFAULT_VIEW_ICON; } /** diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfCommonProjectElement.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfCommonProjectElement.java index b9870e0096..da97411174 100644 --- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfCommonProjectElement.java +++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfCommonProjectElement.java @@ -16,6 +16,8 @@ package org.eclipse.tracecompass.tmf.ui.project.model; +import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull; + import java.io.ByteArrayInputStream; import java.io.InputStream; import java.util.ArrayList; @@ -29,11 +31,14 @@ import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; +import org.eclipse.core.runtime.Platform; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.osgi.util.NLS; +import org.eclipse.swt.graphics.Image; import org.eclipse.tracecompass.internal.tmf.ui.Activator; import org.eclipse.tracecompass.internal.tmf.ui.editors.ITmfEventsEditorConstants; import org.eclipse.tracecompass.tmf.core.TmfCommonConstants; @@ -41,6 +46,7 @@ import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModuleHelper; import org.eclipse.tracecompass.tmf.core.analysis.TmfAnalysisManager; import org.eclipse.tracecompass.tmf.core.project.model.TmfTraceType; import org.eclipse.tracecompass.tmf.core.project.model.TraceTypeHelper; +import org.eclipse.tracecompass.tmf.core.project.model.TmfTraceType.TraceElementType; import org.eclipse.tracecompass.tmf.core.signal.TmfSignalHandler; import org.eclipse.tracecompass.tmf.core.signal.TmfSignalManager; import org.eclipse.tracecompass.tmf.core.signal.TmfTraceOpenedSignal; @@ -53,6 +59,7 @@ import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.part.FileEditorInput; +import org.osgi.framework.Bundle; /** * Base class for tracing project elements: it implements the common behavior of @@ -149,6 +156,39 @@ public abstract class TmfCommonProjectElement extends TmfProjectModelElement { } } + /** + * @since 2.0 + */ + @Override + public Image getIcon() { + String traceType = getTraceType(); + if (traceType == null || TmfTraceType.getTraceType(traceType) == null) { + // request the label to the Eclipse platform + Image icon = TmfProjectModelIcons.WORKSPACE_LABEL_PROVIDER.getImage(getResource()); + return (icon == null ? TmfProjectModelIcons.DEFAULT_TRACE_ICON : icon); + } + + IConfigurationElement traceUIAttributes = TmfTraceTypeUIUtils.getTraceUIAttributes(traceType, + (this instanceof TmfTraceElement) ? TraceElementType.TRACE : TraceElementType.EXPERIMENT); + if (traceUIAttributes != null) { + String iconAttr = traceUIAttributes.getAttribute(TmfTraceTypeUIUtils.ICON_ATTR); + if (iconAttr != null) { + String name = traceUIAttributes.getContributor().getName(); + if (name != null) { + Bundle bundle = Platform.getBundle(name); + if (bundle != null) { + Image image = TmfProjectModelIcons.loadIcon(bundle, iconAttr); + if (image != null) { + return image; + } + } + } + } + } + /* Let subclasses specify an icon */ + return null; + } + // ------------------------------------------------------------------------ // Operations // ------------------------------------------------------------------------ @@ -198,13 +238,13 @@ public abstract class TmfCommonProjectElement extends TmfProjectModelElement { * * @return The element path */ - public String getElementPath() { + public @NonNull String getElementPath() { ITmfProjectModelElement parent = getParent(); while (!(parent instanceof TmfTracesFolder || parent instanceof TmfExperimentElement || parent instanceof TmfExperimentFolder)) { parent = parent.getParent(); } IPath path = getResource().getFullPath().makeRelativeTo(parent.getPath()); - return path.toString(); + return checkNotNull(path.toString()); } /** diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfExperimentElement.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfExperimentElement.java index 9c85d33600..09509f4cef 100644 --- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfExperimentElement.java +++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfExperimentElement.java @@ -38,7 +38,9 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.InvalidRegistryObjectException; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Platform; +import org.eclipse.jdt.annotation.NonNull; import org.eclipse.osgi.util.NLS; +import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Display; import org.eclipse.tracecompass.internal.tmf.ui.Activator; import org.eclipse.tracecompass.internal.tmf.ui.editors.ITmfEventsEditorConstants; @@ -242,6 +244,23 @@ public class TmfExperimentElement extends TmfCommonProjectElement implements IPr return list; } + /** + * @since 2.0 + */ + @Override + public @NonNull Image getIcon() { + Image icon = super.getIcon(); + return (icon == null ? TmfProjectModelIcons.DEFAULT_EXPERIMENT_ICON : icon); + } + + /** + * @since 2.0 + */ + @Override + public String getLabelText() { + return getName() + " [" + getTraces().size() + "]"; //$NON-NLS-1$ //$NON-NLS-2$ + } + // ------------------------------------------------------------------------ // Operations // ------------------------------------------------------------------------ diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfExperimentFolder.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfExperimentFolder.java index 4db58d2742..8925cf0906 100644 --- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfExperimentFolder.java +++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfExperimentFolder.java @@ -24,6 +24,7 @@ import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; +import org.eclipse.swt.graphics.Image; import org.eclipse.tracecompass.tmf.ui.properties.ReadOnlyTextPropertyDescriptor; import org.eclipse.ui.views.properties.IPropertyDescriptor; import org.eclipse.ui.views.properties.IPropertySource2; @@ -128,6 +129,22 @@ public class TmfExperimentFolder extends TmfProjectModelElement implements IProp } } + /** + * @since 2.0 + */ + @Override + public Image getIcon() { + return TmfProjectModelIcons.FOLDER_ICON; + } + + /** + * @since 2.0 + */ + @Override + public String getLabelText() { + return getName() + " [" + getChildren().size() + "]"; //$NON-NLS-1$ //$NON-NLS-2$ + } + // ------------------------------------------------------------------------ // Operations // ------------------------------------------------------------------------ diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfNavigatorLabelProvider.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfNavigatorLabelProvider.java index 3c375caa61..bf25fc5435 100644 --- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfNavigatorLabelProvider.java +++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfNavigatorLabelProvider.java @@ -13,26 +13,14 @@ package org.eclipse.tracecompass.tmf.ui.project.model; -import java.net.URL; - -import org.eclipse.core.runtime.IConfigurationElement; -import org.eclipse.core.runtime.Platform; -import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.StyledString; import org.eclipse.jface.viewers.StyledString.Styler; import org.eclipse.swt.graphics.Image; -import org.eclipse.tracecompass.internal.tmf.ui.Activator; -import org.eclipse.tracecompass.tmf.core.project.model.TmfTraceType; -import org.eclipse.tracecompass.tmf.core.project.model.TmfTraceType.TraceElementType; import org.eclipse.ui.IMemento; -import org.eclipse.ui.ISharedImages; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.model.WorkbenchLabelProvider; import org.eclipse.ui.navigator.ICommonContentExtensionSite; import org.eclipse.ui.navigator.ICommonLabelProvider; -import org.osgi.framework.Bundle; /** * The TMF project label provider for the tree viewer in the project explorer view. @@ -42,170 +30,23 @@ import org.osgi.framework.Bundle; */ public class TmfNavigatorLabelProvider implements ICommonLabelProvider, IStyledLabelProvider { - // ------------------------------------------------------------------------ - // Constants - // ------------------------------------------------------------------------ - - private static final Image FOLDER_ICON = PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FOLDER); - private static final String TRACE_ICON_FILE = "icons/elcl16/trace.gif"; //$NON-NLS-1$ - private static final String EXPERIMENT_ICON_FILE = "icons/elcl16/experiment.gif"; //$NON-NLS-1$ - private static final String ANALYSIS_ICON_FILE = "icons/ovr16/experiment_folder_ovr.png"; //$NON-NLS-1$ - private static final String VIEW_ICON_FILE = "icons/obj16/node_obj.gif"; //$NON-NLS-1$ - - // ------------------------------------------------------------------------ - // Attributes - // ------------------------------------------------------------------------ - - private final Image fDefaultTraceIcon; - private final Image fExperimentIcon; - private final Image fDefaultAnalysisIcon; - private final Image fDefaultViewIcon; - - private final WorkbenchLabelProvider fWorkspaceLabelProvider = new WorkbenchLabelProvider(); - - // ------------------------------------------------------------------------ - // Constructors - // ------------------------------------------------------------------------ - - /** - * Constructor. - * - * Creates the TMF navigator content provider. - */ - public TmfNavigatorLabelProvider() { - Bundle bundle = Activator.getDefault().getBundle(); - fDefaultTraceIcon = loadIcon(bundle, TRACE_ICON_FILE); - fExperimentIcon = loadIcon(bundle, EXPERIMENT_ICON_FILE); - fDefaultAnalysisIcon = loadIcon(bundle, ANALYSIS_ICON_FILE); - fDefaultViewIcon = loadIcon(bundle, VIEW_ICON_FILE); - } - - private static Image loadIcon(Bundle bundle, String url) { - Activator plugin = Activator.getDefault(); - String key = bundle.getSymbolicName() + "/" + url; //$NON-NLS-1$ - Image icon = plugin.getImageRegistry().get(key); - if (icon == null) { - URL imageURL = bundle.getResource(url); - ImageDescriptor descriptor = ImageDescriptor.createFromURL(imageURL); - if (descriptor != null) { - icon = descriptor.createImage(); - plugin.getImageRegistry().put(key, icon); - } - } - return icon; - } - // ------------------------------------------------------------------------ // ICommonLabelProvider // ------------------------------------------------------------------------ @Override public Image getImage(Object element) { - - if (element instanceof TmfCommonProjectElement) { - TmfCommonProjectElement trace = (TmfCommonProjectElement) element; - String traceType = trace.getTraceType(); - if (traceType == null || TmfTraceType.getTraceType(traceType) == null) { - // request the label to the Eclipse platform - return fWorkspaceLabelProvider.getImage(((TmfCommonProjectElement) element).getResource()); - } - - IConfigurationElement traceUIAttributes = TmfTraceTypeUIUtils.getTraceUIAttributes(traceType, (element instanceof TmfTraceElement) ? TraceElementType.TRACE : TraceElementType.EXPERIMENT); - if (traceUIAttributes != null) { - String iconAttr = traceUIAttributes.getAttribute(TmfTraceTypeUIUtils.ICON_ATTR); - if (iconAttr != null) { - String name = traceUIAttributes.getContributor().getName(); - if (name != null) { - Bundle bundle = Platform.getBundle(name); - if (bundle != null) { - Image image = loadIcon(bundle, iconAttr); - if (image != null) { - return image; - } - } - } - } - - } - if (element instanceof TmfTraceElement) { - return fDefaultTraceIcon; - } - return fExperimentIcon; - } - - if (element instanceof TmfExperimentFolder) { - return FOLDER_ICON; - } - - if (element instanceof TmfTraceFolder) { - return FOLDER_ICON; - } - - if (element instanceof TmfAnalysisOutputElement) { - TmfAnalysisOutputElement output = (TmfAnalysisOutputElement) element; - Image icon = output.getIcon(); - if (icon == null) { - return fDefaultViewIcon; - } - return icon; - } - - if (element instanceof TmfAnalysisElement) { - TmfAnalysisElement analysis = (TmfAnalysisElement) element; - String iconFile = analysis.getIconFile(); - if (iconFile != null) { - Bundle bundle = analysis.getBundle(); - if (bundle != null) { - Image icon = loadIcon(bundle, iconFile); - return icon; - } - } - return fDefaultAnalysisIcon; + if (element instanceof ITmfProjectModelElement) { + return ((ITmfProjectModelElement) element).getIcon(); } - return null; } @Override public String getText(Object element) { - - if (element instanceof TmfTracesFolder) { - TmfTracesFolder folder = (TmfTracesFolder) element; - return folder.getName() + " [" + folder.getTraces().size() + "]"; //$NON-NLS-1$ //$NON-NLS-2$ - } - - if (element instanceof TmfTraceFolder) { - TmfTraceFolder folder = (TmfTraceFolder) element; - int nbTraces = folder.getTraces().size(); - if (nbTraces > 0) { - return folder.getName() + " [" + folder.getTraces().size() + "]"; //$NON-NLS-1$ //$NON-NLS-2$ - } - return folder.getName(); - } - - if (element instanceof TmfTraceElement) { - TmfTraceElement trace = (TmfTraceElement) element; - if (trace.getParent() instanceof TmfExperimentElement) { - return trace.getElementPath(); - } - return trace.getName(); - } - - if (element instanceof TmfExperimentElement) { - TmfExperimentElement folder = (TmfExperimentElement) element; - return folder.getName() + " [" + folder.getTraces().size() + "]"; //$NON-NLS-1$ //$NON-NLS-2$ - } - - if (element instanceof TmfExperimentFolder) { - TmfExperimentFolder folder = (TmfExperimentFolder) element; - return folder.getName() + " [" + folder.getChildren().size() + "]"; //$NON-NLS-1$ //$NON-NLS-2$ - } - - // Catch all if (element instanceof ITmfProjectModelElement) { - return ((ITmfProjectModelElement) element).getName(); + return ((ITmfProjectModelElement) element).getLabelText(); } - return null; } diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfProjectElement.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfProjectElement.java index 96b360b964..17a4f14cfd 100644 --- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfProjectElement.java +++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfProjectElement.java @@ -18,6 +18,7 @@ import java.util.Map; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; +import org.eclipse.swt.graphics.Image; /** * The implementation of TMF project model element. @@ -153,4 +154,12 @@ public class TmfProjectElement extends TmfProjectModelElement { public TmfProjectElement getProject() { return this; } + + /** + * @since 2.0 + */ + @Override + public Image getIcon() { + return null; + } } diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfProjectModelIcons.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfProjectModelIcons.java new file mode 100644 index 0000000000..72826655c2 --- /dev/null +++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfProjectModelIcons.java @@ -0,0 +1,77 @@ +/******************************************************************************* + * Copyright (c) 2010, 2016 Ericsson, EfficiOS Inc. 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 + *******************************************************************************/ + +package org.eclipse.tracecompass.tmf.ui.project.model; + +import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull; + +import java.net.URL; + +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.swt.graphics.Image; +import org.eclipse.tracecompass.internal.tmf.ui.Activator; +import org.eclipse.ui.ISharedImages; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.model.WorkbenchLabelProvider; +import org.osgi.framework.Bundle; + +/** + * Facilities to load icons used in the Project View. + * + * @author Alexandre Montplaisir + * @since 2.0 + */ +final class TmfProjectModelIcons { + + private TmfProjectModelIcons() {} + + public static final @NonNull Image DEFAULT_TRACE_ICON; + public static final @NonNull Image DEFAULT_EXPERIMENT_ICON; + public static final @NonNull Image DEFAULT_ANALYSIS_ICON; + public static final @NonNull Image DEFAULT_VIEW_ICON; + public static final @NonNull Image FOLDER_ICON; + + public static final WorkbenchLabelProvider WORKSPACE_LABEL_PROVIDER = new WorkbenchLabelProvider(); + + private static final String TRACE_ICON_FILE = "icons/elcl16/trace.gif"; //$NON-NLS-1$ + private static final String EXPERIMENT_ICON_FILE = "icons/elcl16/experiment.gif"; //$NON-NLS-1$ + private static final String ANALYSIS_ICON_FILE = "icons/ovr16/experiment_folder_ovr.png"; //$NON-NLS-1$ + private static final String VIEW_ICON_FILE = "icons/obj16/node_obj.gif"; //$NON-NLS-1$ + + // ------------------------------------------------------------------------ + // Initialization + // ------------------------------------------------------------------------ + + static { + FOLDER_ICON = checkNotNull(PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FOLDER)); + + Bundle bundle = Activator.getDefault().getBundle(); + DEFAULT_TRACE_ICON = checkNotNull(loadIcon(bundle, TRACE_ICON_FILE)); + DEFAULT_EXPERIMENT_ICON = checkNotNull(loadIcon(bundle, EXPERIMENT_ICON_FILE)); + DEFAULT_ANALYSIS_ICON = checkNotNull(loadIcon(bundle, ANALYSIS_ICON_FILE)); + DEFAULT_VIEW_ICON = checkNotNull(loadIcon(bundle, VIEW_ICON_FILE)); + } + + public static @Nullable Image loadIcon(Bundle bundle, String url) { + Activator plugin = Activator.getDefault(); + String key = bundle.getSymbolicName() + "/" + url; //$NON-NLS-1$ + Image icon = plugin.getImageRegistry().get(key); + if (icon == null) { + URL imageURL = bundle.getResource(url); + ImageDescriptor descriptor = ImageDescriptor.createFromURL(imageURL); + if (descriptor != null) { + icon = descriptor.createImage(); + plugin.getImageRegistry().put(key, icon); + } + } + return icon; + } +} diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfTraceElement.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfTraceElement.java index 91271eb04d..5db6facf68 100644 --- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfTraceElement.java +++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfTraceElement.java @@ -37,7 +37,9 @@ import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.URIUtil; +import org.eclipse.jdt.annotation.NonNull; import org.eclipse.osgi.util.NLS; +import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Display; import org.eclipse.tracecompass.internal.tmf.ui.Activator; import org.eclipse.tracecompass.internal.tmf.ui.editors.ITmfEventsEditorConstants; @@ -228,6 +230,26 @@ public class TmfTraceElement extends TmfCommonProjectElement implements IActionF // Operations // ------------------------------------------------------------------------ + /** + * @since 2.0 + */ + @Override + public @NonNull Image getIcon() { + Image icon = super.getIcon(); + return (icon == null ? TmfProjectModelIcons.DEFAULT_TRACE_ICON : icon); + } + + /** + * @since 2.0 + */ + @Override + public String getLabelText() { + if (getParent() instanceof TmfExperimentElement) { + return getElementPath(); + } + return getName(); + } + /** * Instantiate a ITmfTrace object based on the trace type and * the corresponding extension. diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfTraceFolder.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfTraceFolder.java index debdec07d7..a34538d4ba 100644 --- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfTraceFolder.java +++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfTraceFolder.java @@ -23,6 +23,7 @@ import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.swt.graphics.Image; import org.eclipse.tracecompass.tmf.core.project.model.TmfTraceType; import org.eclipse.tracecompass.tmf.ui.properties.ReadOnlyTextPropertyDescriptor; import org.eclipse.ui.views.properties.IPropertyDescriptor; @@ -145,6 +146,26 @@ public class TmfTraceFolder extends TmfProjectModelElement implements IPropertyS } } + /** + * @since 2.0 + */ + @Override + public Image getIcon() { + return TmfProjectModelIcons.FOLDER_ICON; + } + + /** + * @since 2.0 + */ + @Override + public String getLabelText() { + int nbTraces = getTraces().size(); + if (nbTraces > 0) { + return (getName() + " [" + nbTraces + ']'); //$NON-NLS-1$ + } + return getName(); + } + // ------------------------------------------------------------------------ // Operations // ------------------------------------------------------------------------ diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfTracesFolder.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfTracesFolder.java index 5ac024837f..8c08c57a15 100644 --- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfTracesFolder.java +++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfTracesFolder.java @@ -44,4 +44,11 @@ public class TmfTracesFolder extends TmfTraceFolder { super(name, resource, parent); } + /** + * @since 2.0 + */ + @Override + public String getLabelText() { + return getName() + " [" + getTraces().size() + "]"; //$NON-NLS-1$ //$NON-NLS-2$ + } } -- 2.34.1