### Eclipse Workspace Patch 1.0 #P org.eclipse.rse.ui Index: UI/org/eclipse/rse/internal/ui/view/monitor/MonitorViewPage.java =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/monitor/MonitorViewPage.java,v retrieving revision 1.7 diff -u -r1.7 MonitorViewPage.java --- UI/org/eclipse/rse/internal/ui/view/monitor/MonitorViewPage.java 14 May 2007 13:04:56 -0000 1.7 +++ UI/org/eclipse/rse/internal/ui/view/monitor/MonitorViewPage.java 15 Jun 2007 19:53:06 -0000 @@ -15,6 +15,7 @@ * Martin Oberhuber (Wind River) - [168975] Move RSE Events API to Core * Martin Oberhuber (Wind River) - [186128] Move IProgressMonitor last in all API * Martin Oberhuber (Wind River) - [186773] split ISystemRegistryUI from ISystemRegistry + * Kevin Doyle (IBM) - [177587] changed wrapped selection provider in setFocus() ********************************************************************************/ package org.eclipse.rse.internal.ui.view.monitor; @@ -277,7 +278,8 @@ public void setFocus() { - _viewPart.getSite().setSelectionProvider(_viewer); + if (_viewPart != null) + _viewPart.setActiveViewerSelectionProvider(_viewer); } public IActionBars getActionBars() Index: UI/org/eclipse/rse/internal/ui/view/monitor/MonitorViewWorkbook.java =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/monitor/MonitorViewWorkbook.java,v retrieving revision 1.2 diff -u -r1.2 MonitorViewWorkbook.java --- UI/org/eclipse/rse/internal/ui/view/monitor/MonitorViewWorkbook.java 5 Jun 2007 11:36:53 -0000 1.2 +++ UI/org/eclipse/rse/internal/ui/view/monitor/MonitorViewWorkbook.java 15 Jun 2007 19:53:06 -0000 @@ -13,6 +13,7 @@ * * Contributors: * {Name} (company) - description of contribution. + * Kevin Doyle (IBM) - [177587] createTabItem sets the wrapped selection provider *******************************************************************************/ package org.eclipse.rse.internal.ui.view.monitor; @@ -229,9 +230,11 @@ monitorViewPage.setInput(root); SystemTableView viewer = monitorViewPage.getViewer(); - _viewPart.getSite().setSelectionProvider(viewer); - _viewPart.getSite().registerContextMenu(viewer.getContextMenuManager(), viewer); - + if (_viewPart != null) + { + _viewPart.setActiveViewerSelectionProvider(viewer); + _viewPart.getSite().registerContextMenu(viewer.getContextMenuManager(), viewer); + } monitorViewPage.setFocus(); } Index: UI/org/eclipse/rse/internal/ui/view/monitor/SystemMonitorViewPart.java =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/monitor/SystemMonitorViewPart.java,v retrieving revision 1.4 diff -u -r1.4 SystemMonitorViewPart.java --- UI/org/eclipse/rse/internal/ui/view/monitor/SystemMonitorViewPart.java 14 May 2007 13:04:56 -0000 1.4 +++ UI/org/eclipse/rse/internal/ui/view/monitor/SystemMonitorViewPart.java 15 Jun 2007 19:53:06 -0000 @@ -14,13 +14,14 @@ * Michael Berger (IBM) - 146339 Added refresh action graphic. * Martin Oberhuber (Wind River) - [168975] Move RSE Events API to Core * Martin Oberhuber (Wind River) - [186773] split ISystemRegistryUI from ISystemRegistry + * Kevin Doyle (IBM) - [177587] Made MonitorViewPart a SelectionProvider ********************************************************************************/ package org.eclipse.rse.internal.ui.view.monitor; import java.util.ArrayList; import java.util.Vector; - + import org.eclipse.core.runtime.IAdaptable; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IStatusLineManager; @@ -28,6 +29,7 @@ import org.eclipse.jface.action.Separator; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; +import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.window.Window; @@ -90,7 +92,8 @@ ISystemShellProvider, ISystemRemoteChangeListener, ISystemMessageLine, - IRSEViewPart + IRSEViewPart, + ISelectionProvider { @@ -621,6 +624,11 @@ private SubSetAction _subsetAction = null; private PositionToAction _positionToAction = null; + private ISelectionProvider viewerProvider = null; + private ArrayList selectionListeners = new ArrayList(); + + private ISelectionChangedListener selectionListener = null; + // constants public static final String ID = "org.eclipse.rse.ui.view.monitorView"; //$NON-NLS-1$ // matches id in plugin.xml, view tag @@ -672,6 +680,21 @@ RestoreStateRunnable restore = new RestoreStateRunnable(); Display.getCurrent().asyncExec(restore); + + getSite().setSelectionProvider(this); + selectionListener = new ISelectionChangedListener() { + public void selectionChanged (SelectionChangedEvent event) + { + for (int i = 0; i < selectionListeners.size(); i++) + { + if (selectionListeners.get(i) instanceof ISelectionChangedListener) + { + ((ISelectionChangedListener) selectionListeners.get(i)).selectionChanged(event); + } + } + } + }; + fillLocalToolBar(); @@ -760,7 +783,60 @@ { } - + public void addSelectionChangedListener(ISelectionChangedListener listener) + { + if (selectionListeners != null) + selectionListeners.add(listener); + } + + public void removeSelectionChangedListener(ISelectionChangedListener listener) + { + if (selectionListeners != null) + selectionListeners.remove(listener); + } + + public ISelection getSelection() + { + if (viewerProvider == null) + return null; + else + return viewerProvider.getSelection(); + } + + /** + * Sets the wrapped selection provider. + * This method should only be called when the viewer changes. + * @param newProvider The new wrapped selection provider. + */ + public void setActiveViewerSelectionProvider(ISelectionProvider newProvider) + { + if (viewerProvider != null) + viewerProvider.removeSelectionChangedListener(selectionListener); + + viewerProvider = newProvider; + + if (newProvider != null) + { + newProvider.addSelectionChangedListener(selectionListener); + + // Create a new event and tell all listeners about it, so that the properties + // view is updated to show the new viewers selected object + SelectionChangedEvent event = new SelectionChangedEvent(newProvider, newProvider.getSelection()); + for (int i = 0; i < selectionListeners.size(); i++) + { + if (selectionListeners.get(i) instanceof ISelectionChangedListener) + { + ((ISelectionChangedListener) selectionListeners.get(i)).selectionChanged(event); + } + } + } + } + + public void setSelection(ISelection selection) + { + if (viewerProvider != null) + viewerProvider.setSelection(selection); + } public void addItemToMonitor(IAdaptable root) { @@ -921,7 +997,20 @@ public void widgetSelected(SelectionEvent e) { Widget source = e.widget; - + Widget item = e.item; + Object data = item.getData(); + MonitorViewPage page = null; + + if (data instanceof MonitorViewPage) + page = (MonitorViewPage) data; + + // Set the wrapped viewer to be the viewer of the new selected tab + if (page != null) + { + SystemTableView viewer = page.getViewer(); + setActiveViewerSelectionProvider(viewer); + } + if (source == _folder.getFolder()) { updateActionStates();