diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemView.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemView.java
index 8f4a26def87..67a512ec3f9 100644
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemView.java
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemView.java
@@ -1,5 +1,5 @@
/********************************************************************************
- * Copyright (c) 2002, 2009 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2002, 2010 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
@@ -72,6 +72,7 @@
* Martin Oberhuber (Wind River) - [276195] Avoid unnecessary selectionChanged when restoring connections
* David McKnight (IBM) - [277328] Unhandled Event Loop Exception When Right-Clicking on "Pending..." Message
* David McKnight (IBM) - [283793] [dstore] Expansion indicator(+) does not reset after no connect
+ * Uwe Stieber (Wind River) - [238519] [usability][api] Adapt RSE view(s) to follow decoration style of the Eclipse platform common navigator
********************************************************************************/
package org.eclipse.rse.internal.ui.view;
@@ -99,7 +100,6 @@ import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
-import org.eclipse.jface.viewers.DecoratingLabelProvider;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IBasicPropertyConstants;
import org.eclipse.jface.viewers.IContentProvider;
@@ -530,7 +530,7 @@ public class SystemView extends SafeTreeViewer
IWorkbench wb = PlatformUI.getWorkbench();
decorator = wb.getDecoratorManager().getLabelDecorator();
}
- setLabelProvider(new DecoratingLabelProvider(lcProvider, decorator));
+ setLabelProvider(new SystemViewDecoratingStyledCellLabelProvider(lcProvider, decorator));
setContentProvider(lcProvider);
}
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemViewDecoratingStyledCellLabelProvider.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemViewDecoratingStyledCellLabelProvider.java
new file mode 100644
index 00000000000..da81715e266
--- /dev/null
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemViewDecoratingStyledCellLabelProvider.java
@@ -0,0 +1,139 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Wind River Systems, 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
+ *
+ * Contributors:
+ * Uwe Stieber (Wind River) - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.rse.internal.ui.view;
+
+import org.eclipse.jface.preference.JFacePreferences;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.jface.viewers.ColumnViewer;
+import org.eclipse.jface.viewers.DecoratingStyledCellLabelProvider;
+import org.eclipse.jface.viewers.DecorationContext;
+import org.eclipse.jface.viewers.IDecorationContext;
+import org.eclipse.jface.viewers.ILabelDecorator;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ViewerColumn;
+import org.eclipse.ui.IWorkbenchPreferenceConstants;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * RSE Remote Systems view decorating styled cell label provider.
+ * Add common navigator style decorations.
+ *
+ * @since 3.2
+ */
+public class SystemViewDecoratingStyledCellLabelProvider extends DecoratingStyledCellLabelProvider implements IPropertyChangeListener, ILabelProvider {
+
+ /**
+ * Constructor.
+ *
+ * @param labelProvider The styled label provider. Must not be null
+ * @param decorator The label decorator or null
to use the platforms default label decorator.
+ */
+ public SystemViewDecoratingStyledCellLabelProvider(IStyledLabelProvider labelProvider, ILabelDecorator decorator) {
+ this(labelProvider, decorator, DecorationContext.DEFAULT_CONTEXT);
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param labelProvider The styled label provider. Must not be null
+ * @param decorator The label decorator or null
to use the platforms default label decorator.
+ * @param decorationContext The decoration context or null
to use default.
+ */
+ public SystemViewDecoratingStyledCellLabelProvider(IStyledLabelProvider labelProvider, ILabelDecorator decorator, IDecorationContext decorationContext) {
+ super(labelProvider,
+ decorator != null ? decorator : PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator(),
+ decorationContext);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
+ */
+ public String getText(Object element) {
+ // Apply the styles to the label
+ return getStyledText(element).getString();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.StyledCellLabelProvider#initialize(org.eclipse.jface.viewers.ColumnViewer, org.eclipse.jface.viewers.ViewerColumn)
+ */
+ public void initialize(ColumnViewer viewer, ViewerColumn column) {
+ // Add ourselfs to the color registry to get notified if the
+ // decoration colour is changing
+ JFaceResources.getColorRegistry().addListener(this);
+
+ // There is no preference setting yet dedicated to the RSE remote system view
+ // for showing coloroured label or not. Until available, we hook on the common
+ // navigator preference setting.
+ PlatformUI.getPreferenceStore().addPropertyChangeListener(this);
+ setOwnerDrawEnabled(PlatformUI.getPreferenceStore().getBoolean(IWorkbenchPreferenceConstants.USE_COLORED_LABELS));
+
+ super.initialize(viewer, column);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.DecoratingStyledCellLabelProvider#dispose()
+ */
+ public void dispose() {
+ // Remove ourself as listener from the colour registry
+ JFaceResources.getColorRegistry().removeListener(this);
+ // And remove ourself as listener from the platforms preference store
+ PlatformUI.getPreferenceStore().removePropertyChangeListener(this);
+
+ super.dispose();
+ }
+
+ /**
+ * Returns the column viewer associated with the styled label decorator.
+ *
+ * @return The column viewer.
+ */
+ protected final ColumnViewer getColumnViewer() { return getViewer(); }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
+ */
+ public void propertyChange(final PropertyChangeEvent event) {
+ if (event == null) return;
+
+ // flag to set if or if not to refresh the viewer
+ boolean doRefresh = false;
+
+ // We update the viewer if either the decoration colour changed or
+ // the user changed the preference if using coloured labels or not
+ doRefresh |= event.getProperty().equals(IWorkbenchPreferenceConstants.USE_COLORED_LABELS);
+ doRefresh |= event.getProperty().equals(JFacePreferences.DECORATIONS_COLOR);
+
+ // If we do not require to refresh the viewer, we are done here
+ if (!doRefresh || !PlatformUI.isWorkbenchRunning() || PlatformUI.getWorkbench().getDisplay() == null) return;
+
+ // Force the refresh of the viewer itself to be asynchronous and within the display thread.
+ PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
+ public void run() {
+ // The associated viewer must be not null
+ if (getColumnViewer() == null) return;
+
+ // Get the current state if or if not to use coloured label
+ boolean useColouredLabels = PlatformUI.getPreferenceStore().getBoolean(IWorkbenchPreferenceConstants.USE_COLORED_LABELS);
+
+ // Update the internal flag if the preference setting has changed
+ // and refresh the viewer
+ if (isOwnerDrawEnabled() != useColouredLabels) { setOwnerDrawEnabled(useColouredLabels); getColumnViewer().refresh(); }
+
+ // If useColouredLabels is switched on and the colour changed,
+ // refresh the viewer
+ else if (useColouredLabels) getColumnViewer().refresh();
+ }
+ });
+ }
+}
diff --git a/rse/tests/org.eclipse.rse.tests/plugin.xml b/rse/tests/org.eclipse.rse.tests/plugin.xml
index b17c8b0b9d4..95433243220 100644
--- a/rse/tests/org.eclipse.rse.tests/plugin.xml
+++ b/rse/tests/org.eclipse.rse.tests/plugin.xml
@@ -128,5 +128,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/decorators/RSEModelObjectDecorator.java b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/decorators/RSEModelObjectDecorator.java
new file mode 100644
index 00000000000..6097d1a7c61
--- /dev/null
+++ b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/decorators/RSEModelObjectDecorator.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Wind River Systems, 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
+ *
+ * Contributors:
+ * Uwe Stieber (Wind River) - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.rse.tests.decorators;
+
+import org.eclipse.jface.viewers.ILabelDecorator;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * RSE Model Object test decorator.
+ *
+ * @since 3.2
+ */
+public class RSEModelObjectDecorator extends LabelProvider implements ILabelDecorator {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ILabelDecorator#decorateImage(org.eclipse.swt.graphics.Image, java.lang.Object)
+ */
+ public Image decorateImage(Image image, Object element) {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ILabelDecorator#decorateText(java.lang.String, java.lang.Object)
+ */
+ public String decorateText(String text, Object element) {
+ return text + " (RSE Test Decoration)";
+ }
+}