diff options
author | Uwe Stieber | 2013-06-03 11:56:20 +0000 |
---|---|---|
committer | Uwe Stieber | 2013-06-03 11:56:20 +0000 |
commit | 5262504e1f1c13083ff8bab89e8f7f7fa112be4d (patch) | |
tree | e194a2b567075b9e684c16c39dcbc059db1ff661 /target_explorer | |
parent | 470ac849399b5a1d41a198a2ad4b2bdeb292e199 (diff) | |
download | org.eclipse.tcf-5262504e1f1c13083ff8bab89e8f7f7fa112be4d.tar.gz org.eclipse.tcf-5262504e1f1c13083ff8bab89e8f7f7fa112be4d.tar.xz org.eclipse.tcf-5262504e1f1c13083ff8bab89e8f7f7fa112be4d.zip |
Target Explorer: More process monitor customizations
Diffstat (limited to 'target_explorer')
10 files changed, 133 insertions, 22 deletions
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/editor/ProcessMonitorEditorPage.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/editor/ProcessMonitorEditorPage.java index d004a8e57..e46ea0d46 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/editor/ProcessMonitorEditorPage.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/editor/ProcessMonitorEditorPage.java @@ -16,13 +16,17 @@ import org.eclipse.jface.viewers.ITreeViewerListener; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; +import org.eclipse.swt.widgets.MenuItem; +import org.eclipse.swt.widgets.TreeColumn; import org.eclipse.tcf.te.runtime.events.ChangeEvent; import org.eclipse.tcf.te.runtime.events.EventManager; import org.eclipse.tcf.te.tcf.locator.interfaces.nodes.IPeerModel; import org.eclipse.tcf.te.tcf.processes.core.model.ModelManager; import org.eclipse.tcf.te.tcf.processes.ui.navigator.events.TreeViewerListener; import org.eclipse.tcf.te.tcf.processes.ui.nls.Messages; +import org.eclipse.tcf.te.ui.trees.AbstractTreeControl; import org.eclipse.tcf.te.ui.trees.TreeControl; +import org.eclipse.tcf.te.ui.trees.TreeViewerHeaderMenu; import org.eclipse.tcf.te.ui.views.editor.pages.TreeViewerExplorerEditorPage; import org.eclipse.ui.IEditorInput; @@ -104,7 +108,42 @@ public class ProcessMonitorEditorPage extends TreeViewerExplorerEditorPage { */ @Override protected TreeControl doCreateTreeControl() { - TreeControl treeControl = super.doCreateTreeControl(); + TreeControl treeControl = new TreeControl(getViewerId(), this) { + /* (non-Javadoc) + * @see org.eclipse.tcf.te.ui.trees.AbstractTreeControl#configureTreeColumn(org.eclipse.swt.widgets.TreeColumn) + */ + @Override + protected void configureTreeColumn(TreeColumn treeColumn) { + super.configureTreeColumn(treeColumn); + + if (treeColumn.getText() != null) { + String text = Messages.getStringDelegated(ProcessMonitorEditorPage.this.getEditorInputNode(), "ProcessMonitor_treeColum_" + treeColumn.getText().replace(' ', '_')); //$NON-NLS-1$ + if (text != null) treeColumn.setText(text); + } + } + + /* (non-Javadoc) + * @see org.eclipse.tcf.te.ui.trees.AbstractTreeControl#createHeaderMenu(org.eclipse.tcf.te.ui.trees.AbstractTreeControl) + */ + @Override + protected TreeViewerHeaderMenu createHeaderMenu(AbstractTreeControl control) { + Assert.isNotNull(control); + return new TreeViewerHeaderMenu(control) { + /* (non-Javadoc) + * @see org.eclipse.tcf.te.ui.trees.TreeViewerHeaderMenu#configureMenuItem(org.eclipse.swt.widgets.MenuItem) + */ + @Override + protected void configureMenuItem(MenuItem item) { + super.configureMenuItem(item); + + if (item.getText() != null) { + String text = Messages.getStringDelegated(ProcessMonitorEditorPage.this.getEditorInputNode(), "ProcessMonitor_menuItem_" + item.getText().replace(' ', '_')); //$NON-NLS-1$ + if (text != null) item.setText(text); + } + } + }; + } + }; Assert.isNotNull(treeControl); if (listener == null) { diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/editor/tree/columns/PIDLabelProvider.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/editor/tree/columns/PIDLabelProvider.java index 73d8b40fd..3aebb8070 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/editor/tree/columns/PIDLabelProvider.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/editor/tree/columns/PIDLabelProvider.java @@ -14,9 +14,13 @@ import java.util.concurrent.atomic.AtomicLong; import org.eclipse.core.runtime.Assert; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.tcf.protocol.Protocol; +import org.eclipse.tcf.te.runtime.services.ServiceManager; +import org.eclipse.tcf.te.runtime.services.interfaces.IUIService; +import org.eclipse.tcf.te.tcf.locator.interfaces.nodes.IPeerModel; import org.eclipse.tcf.te.tcf.processes.core.model.interfaces.IPendingOperationNode; import org.eclipse.tcf.te.tcf.processes.core.model.interfaces.IProcessContextNode; import org.eclipse.tcf.te.tcf.processes.core.model.interfaces.runtime.IRuntimeModel; +import org.eclipse.tcf.te.tcf.processes.ui.interfaces.IProcessMonitorUIDelegate; /** * The label provider for the tree column "PID". @@ -24,7 +28,7 @@ import org.eclipse.tcf.te.tcf.processes.core.model.interfaces.runtime.IRuntimeMo public class PIDLabelProvider extends LabelProvider { /* (non-Javadoc) - * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int) + * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object) */ @Override public String getText(Object element) { @@ -48,7 +52,14 @@ public class PIDLabelProvider extends LabelProvider { Protocol.invokeAndWait(runnable); String id = pid.get() >= 0 ? Long.toString(pid.get()) : ""; //$NON-NLS-1$ - return id.startsWith("P") ? id.substring(1) : id; //$NON-NLS-1$ + if (id.startsWith("P")) id = id.substring(1); //$NON-NLS-1$ + + IPeerModel peerModel = (IPeerModel)node.getAdapter(IPeerModel.class); + IUIService service = peerModel != null ? ServiceManager.getInstance().getService(peerModel, IUIService.class) : null; + IProcessMonitorUIDelegate delegate = service != null ? service.getDelegate(peerModel, IProcessMonitorUIDelegate.class) : null; + + String newId = delegate != null ? delegate.getText(element, "PID", id) : null; //$NON-NLS-1$ + return newId != null ? newId : id; } return super.getText(element); diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/editor/tree/columns/PPIDLabelProvider.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/editor/tree/columns/PPIDLabelProvider.java index 000415356..f4a2dc2cf 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/editor/tree/columns/PPIDLabelProvider.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/editor/tree/columns/PPIDLabelProvider.java @@ -14,9 +14,13 @@ import java.util.concurrent.atomic.AtomicLong; import org.eclipse.core.runtime.Assert; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.tcf.protocol.Protocol; +import org.eclipse.tcf.te.runtime.services.ServiceManager; +import org.eclipse.tcf.te.runtime.services.interfaces.IUIService; +import org.eclipse.tcf.te.tcf.locator.interfaces.nodes.IPeerModel; import org.eclipse.tcf.te.tcf.processes.core.model.interfaces.IPendingOperationNode; import org.eclipse.tcf.te.tcf.processes.core.model.interfaces.IProcessContextNode; import org.eclipse.tcf.te.tcf.processes.core.model.interfaces.runtime.IRuntimeModel; +import org.eclipse.tcf.te.tcf.processes.ui.interfaces.IProcessMonitorUIDelegate; /** * The label provider for the tree column "PPID". @@ -47,7 +51,14 @@ public class PPIDLabelProvider extends LabelProvider { Assert.isTrue(!Protocol.isDispatchThread()); Protocol.invokeAndWait(runnable); - return ppid.get() >= 0 ? Long.toString(ppid.get()) : ""; //$NON-NLS-1$ + String id = ppid.get() >= 0 ? Long.toString(ppid.get()) : ""; //$NON-NLS-1$ + + IPeerModel peerModel = (IPeerModel)node.getAdapter(IPeerModel.class); + IUIService service = peerModel != null ? ServiceManager.getInstance().getService(peerModel, IUIService.class) : null; + IProcessMonitorUIDelegate delegate = service != null ? service.getDelegate(peerModel, IProcessMonitorUIDelegate.class) : null; + + String newId = delegate != null ? delegate.getText(element, "PPID", id) : null; //$NON-NLS-1$ + return newId != null ? newId : id; } return super.getText(element); diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/handler/RefreshProcessListHandler.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/handler/RefreshProcessListHandler.java index cda8238ad..25f7c37ee 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/handler/RefreshProcessListHandler.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/handler/RefreshProcessListHandler.java @@ -22,7 +22,7 @@ import org.eclipse.tcf.te.tcf.core.model.interfaces.IModel; import org.eclipse.tcf.te.tcf.core.model.interfaces.services.IModelRefreshService; import org.eclipse.tcf.te.tcf.locator.interfaces.nodes.IPeerModel; import org.eclipse.tcf.te.tcf.processes.core.model.ModelManager; -import org.eclipse.tcf.te.tcf.processes.ui.interfaces.IProcessMonitorMessageProviderDelegate; +import org.eclipse.tcf.te.tcf.processes.ui.interfaces.IProcessMonitorUIDelegate; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbenchPart; @@ -70,7 +70,7 @@ public class RefreshProcessListHandler extends AbstractHandler implements IEleme IPeerModel node = editorInput != null ? (IPeerModel) editorInput.getAdapter(IPeerModel.class) : null; IUIService service = ServiceManager.getInstance().getService(node, IUIService.class); - IProcessMonitorMessageProviderDelegate delegate = service != null ? service.getDelegate(node, IProcessMonitorMessageProviderDelegate.class) : null; + IProcessMonitorUIDelegate delegate = service != null ? service.getDelegate(node, IProcessMonitorUIDelegate.class) : null; if (delegate != null) { String text = delegate.getMessage("RefreshProcessListHandler_updateElement_text"); //$NON-NLS-1$ diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/handler/TerminateHandler.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/handler/TerminateHandler.java index b2be1aac7..e111f41e5 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/handler/TerminateHandler.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/handler/TerminateHandler.java @@ -31,7 +31,7 @@ import org.eclipse.tcf.te.tcf.locator.interfaces.nodes.IPeerModel; import org.eclipse.tcf.te.tcf.processes.core.model.interfaces.IProcessContextNode; import org.eclipse.tcf.te.tcf.processes.core.model.steps.TerminateStep; import org.eclipse.tcf.te.tcf.processes.ui.help.IContextHelpIds; -import org.eclipse.tcf.te.tcf.processes.ui.interfaces.IProcessMonitorMessageProviderDelegate; +import org.eclipse.tcf.te.tcf.processes.ui.interfaces.IProcessMonitorUIDelegate; import org.eclipse.tcf.te.tcf.processes.ui.nls.Messages; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; @@ -100,7 +100,7 @@ public class TerminateHandler extends AbstractHandler implements IElementUpdater IPeerModel node = editorInput != null ? (IPeerModel) editorInput.getAdapter(IPeerModel.class) : null; IUIService service = ServiceManager.getInstance().getService(node, IUIService.class); - IProcessMonitorMessageProviderDelegate delegate = service != null ? service.getDelegate(node, IProcessMonitorMessageProviderDelegate.class) : null; + IProcessMonitorUIDelegate delegate = service != null ? service.getDelegate(node, IProcessMonitorUIDelegate.class) : null; if (delegate != null) { String text = delegate.getMessage("TerminateHandler_updateElement_text"); //$NON-NLS-1$ diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/interfaces/IProcessMonitorMessageProviderDelegate.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/interfaces/IProcessMonitorUIDelegate.java index 803e41644..fe0c3dee4 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/interfaces/IProcessMonitorMessageProviderDelegate.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/interfaces/IProcessMonitorUIDelegate.java @@ -14,9 +14,9 @@ import org.eclipse.tcf.te.ui.interfaces.ISearchable; /** - * Process monitor message provider delegate. + * Process monitor UI delegate. */ -public interface IProcessMonitorMessageProviderDelegate { +public interface IProcessMonitorUIDelegate { /** * Returns the message for the given key. @@ -27,6 +27,18 @@ public interface IProcessMonitorMessageProviderDelegate { public String getMessage(String key); /** + * Returns the process monitor table column text for the given column + * based on the given original text. + * + * @param context The context. Must not be <code>null</code>. + * @param columnId The column id. Must not be <code>null</code>. + * @param text The original text to show in the column fetched from the label provider, or <code>null</code>. + * + * @return The new text to show in the column or <code>null</code>. + */ + public String getText(Object context, String columnId, String text); + + /** * Returns the list of searchables to use to find processes in the * process monitor. * diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/nls/Messages.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/nls/Messages.java index 0bffb5577..c94aae289 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/nls/Messages.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/nls/Messages.java @@ -12,7 +12,7 @@ package org.eclipse.tcf.te.tcf.processes.ui.nls; import org.eclipse.osgi.util.NLS; import org.eclipse.tcf.te.runtime.services.ServiceManager; import org.eclipse.tcf.te.runtime.services.interfaces.IUIService; -import org.eclipse.tcf.te.tcf.processes.ui.interfaces.IProcessMonitorMessageProviderDelegate; +import org.eclipse.tcf.te.tcf.processes.ui.interfaces.IProcessMonitorUIDelegate; /** * Target Explorer TCF processes extensions UI plug-in externalized strings management. @@ -34,7 +34,7 @@ public class Messages extends NLS { /** * Returns the corresponding string for the given externalized strings key via - * the {@link IProcessMonitorMessageProviderDelegate}. + * the {@link IProcessMonitorUIDelegate}. * * @param context The context or <code>null</code>. * @param key The externalized strings key or <code>null</code>. @@ -44,7 +44,7 @@ public class Messages extends NLS { public static String getStringDelegated(Object context, String key) { if (key != null) { IUIService service = ServiceManager.getInstance().getService(context, IUIService.class); - IProcessMonitorMessageProviderDelegate delegate = service != null ? service.getDelegate(context, IProcessMonitorMessageProviderDelegate.class) : null; + IProcessMonitorUIDelegate delegate = service != null ? service.getDelegate(context, IProcessMonitorUIDelegate.class) : null; return delegate != null ? delegate.getMessage(key) : null; } diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/search/ProcessSearchable.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/search/ProcessSearchable.java index 35f6e185f..f62f79a1c 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/search/ProcessSearchable.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/search/ProcessSearchable.java @@ -20,7 +20,7 @@ import org.eclipse.tcf.te.runtime.services.ServiceManager; import org.eclipse.tcf.te.runtime.services.interfaces.IUIService; import org.eclipse.tcf.te.tcf.locator.interfaces.nodes.IPeerModel; import org.eclipse.tcf.te.tcf.processes.core.model.interfaces.runtime.IRuntimeModel; -import org.eclipse.tcf.te.tcf.processes.ui.interfaces.IProcessMonitorMessageProviderDelegate; +import org.eclipse.tcf.te.tcf.processes.ui.interfaces.IProcessMonitorUIDelegate; import org.eclipse.tcf.te.tcf.processes.ui.navigator.runtime.LabelProviderDelegate; import org.eclipse.tcf.te.tcf.processes.ui.nls.Messages; import org.eclipse.tcf.te.ui.interfaces.ISearchable; @@ -43,7 +43,7 @@ public class ProcessSearchable extends CompositeSearchable { super(); IUIService service = ServiceManager.getInstance().getService(node, IUIService.class); - IProcessMonitorMessageProviderDelegate delegate = service != null ? service.getDelegate(node, IProcessMonitorMessageProviderDelegate.class) : null; + IProcessMonitorUIDelegate delegate = service != null ? service.getDelegate(node, IProcessMonitorUIDelegate.class) : null; ISearchable[] searchables = delegate != null ? delegate.getSearchables(node) : null; if (searchables == null) { searchables = new ISearchable[] { new GeneralSearchable(), new ProcessUserSearchable(), new ProcessStateSearchable() }; diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/trees/AbstractTreeControl.java b/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/trees/AbstractTreeControl.java index c93fb9f76..607332e43 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/trees/AbstractTreeControl.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/trees/AbstractTreeControl.java @@ -201,8 +201,8 @@ public abstract class AbstractTreeControl extends WorkbenchPartControl implement * @param oldInput the old input. * @param newInput The new input. */ - void onInputChanged(Object oldInput, Object newInput) { - if(newInput != null) { + protected void onInputChanged(Object oldInput, Object newInput) { + if (newInput != null) { columns = doCreateViewerColumns(newInput); filterDescriptors = doCreateFilterDescriptors(newInput); if (isStatePersistent()) { @@ -211,12 +211,23 @@ public abstract class AbstractTreeControl extends WorkbenchPartControl implement doCreateTreeColumns(viewer); viewer.getTree().setHeaderVisible(true); updateFilters(); - new TreeViewerHeaderMenu(this).create(); + createHeaderMenu(this).create(); if (configFilterAction != null) configFilterAction.updateEnablement(); } } /** + * Create the tree viewer header menu. + * + * @param control The parent tree control. Must not be <code>null</code>. + * @return The tree viewer header menu. + */ + protected TreeViewerHeaderMenu createHeaderMenu(AbstractTreeControl control) { + Assert.isNotNull(control); + return new TreeViewerHeaderMenu(control); + } + + /** * Update the viewer state using the states from the viewerState which * is retrieved or created based on the input. * @@ -379,10 +390,9 @@ public abstract class AbstractTreeControl extends WorkbenchPartControl implement * @param append If the new column should be appended. * @return The tree column created. */ - TreeColumn doCreateTreeColumn(final ColumnDescriptor column, boolean append) { + protected TreeColumn doCreateTreeColumn(final ColumnDescriptor column, boolean append) { Tree tree = viewer.getTree(); - final TreeColumn treeColumn = append ? new TreeColumn(tree, column.getStyle()) : - new TreeColumn(tree, column.getStyle(), getColumnIndex(column)); + final TreeColumn treeColumn = append ? new TreeColumn(tree, column.getStyle()) : new TreeColumn(tree, column.getStyle(), getColumnIndex(column)); treeColumn.setData(column); treeColumn.setText(column.getName()); treeColumn.setToolTipText(column.getDescription()); @@ -405,13 +415,28 @@ public abstract class AbstractTreeControl extends WorkbenchPartControl implement column.setWidth(treeColumn.getWidth()); }}); column.setTreeColumn(treeColumn); + + // Custom tree column configuration + configureTreeColumn(treeColumn); + return treeColumn; } /** + * Customize the given tree column. + * <p> + * Called from {@link #doCreateTreeColumn(ColumnDescriptor, boolean)}. + * + * @param treeColumn The tree column. Must not be <code>null</code>. + */ + protected void configureTreeColumn(TreeColumn treeColumn) { + Assert.isNotNull(treeColumn); + } + + /** * Called when a column is moved. Store the column's order. */ - void columnMoved() { + protected void columnMoved() { Tree tree = viewer.getTree(); TreeColumn[] treeColumns = tree.getColumns(); if(treeColumns != null && treeColumns.length > 0) { diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/trees/TreeViewerHeaderMenu.java b/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/trees/TreeViewerHeaderMenu.java index 7e2f9b2fd..643ca5393 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/trees/TreeViewerHeaderMenu.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/trees/TreeViewerHeaderMenu.java @@ -63,9 +63,22 @@ public class TreeViewerHeaderMenu extends Menu implements SelectionListener, Lis menuItem.addSelectionListener(this); menuItem.setData(column); menuItem.setEnabled(i != 0); + // Custom menu item configuration + configureMenuItem(menuItem); } } + /** + * Customize the given menu item. + * <p> + * Called from {@link #create()}. + * + * @param item The menu item. Must not be <code>null</code>. + */ + protected void configureMenuItem(MenuItem item) { + Assert.isNotNull(item); + } + /* * (non-Javadoc) * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent) |