package com.netifera.platform.host.processes.ui; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.viewers.ColumnViewerToolTipSupport; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.TreeViewerColumn; import org.eclipse.jface.window.ToolTip; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Menu; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.part.ViewPart; import com.netifera.platform.api.probe.IProbe; import com.netifera.platform.host.internal.processes.ui.Activator; import com.netifera.platform.host.processes.IProcessManager; import com.netifera.platform.host.processes.IProcessManagerFactory; import com.netifera.platform.host.processes.Process; import com.netifera.platform.host.processes.ui.actions.KillAction; import com.netifera.platform.host.processes.ui.actions.ToggleTreeModeAction; import com.netifera.platform.ui.util.ViewerRefreshAction; public class ProcessListView extends ViewPart { public final static String ID = "com.netifera.platform.ui.views.ProcessList"; private ToggleTreeModeAction toggleTreeModeAction; private ViewerRefreshAction refreshAction; private KillAction killAction; private TreeViewer viewer; private ProcessListContentProvider contentProvider; @Override public void createPartControl(Composite parent) { viewer = new TreeViewer(parent); viewer.getTree().setHeaderVisible(true); viewer.getTree().setLinesVisible(true); ColumnViewerToolTipSupport.enableFor(viewer, ToolTip.NO_RECREATE); TreeViewerColumn column = new TreeViewerColumn(viewer, SWT.NONE); column.getColumn().setText("Name"); column.getColumn().setWidth(200); column.setLabelProvider(new ProcessLabelProvider(0)); column = new TreeViewerColumn(viewer, SWT.NONE); column.getColumn().setText("State"); column.getColumn().setWidth(50); column.setLabelProvider(new ProcessLabelProvider(2)); column = new TreeViewerColumn(viewer, SWT.NONE); column.getColumn().setText("PID"); column.getColumn().setWidth(70); column.getColumn().setAlignment(SWT.RIGHT); column.setLabelProvider(new ProcessLabelProvider(1)); column = new TreeViewerColumn(viewer, SWT.NONE); column.getColumn().setText("User"); column.getColumn().setWidth(70); column.getColumn().setAlignment(SWT.LEFT); column.setLabelProvider(new ProcessLabelProvider(3)); column = new TreeViewerColumn(viewer, SWT.NONE); column.getColumn().setText("Memory"); column.getColumn().setWidth(70); column.getColumn().setAlignment(SWT.LEFT); column.setLabelProvider(new ProcessLabelProvider(4)); contentProvider = new ProcessListContentProvider(); viewer.setContentProvider(contentProvider); createActions(); createContextMenu(); initializeToolBar(); // setInputToCurrentProbe(); } private void setInputToCurrentProbe() { IProcessManagerFactory factory = Activator.getInstance().getProcessManagerFactory(); IProbe probe = Activator.getInstance().getCurrentProbe(); IProcessManager processManager = factory.createForProbe(probe); setInput(processManager); } private void createActions() { refreshAction = new ViewerRefreshAction(viewer) { public void run() { contentProvider.clear(); super.run(); } }; killAction = new KillAction(viewer); toggleTreeModeAction = new ToggleTreeModeAction(this); } /** * Initializes the right-click menu, but does not display it. */ private void createContextMenu() { MenuManager menuManager = new MenuManager("#PopupMenu"); menuManager.setRemoveAllWhenShown(true); menuManager.addMenuListener(new IMenuListener() { public void menuAboutToShow(IMenuManager manager) { fillContextMenu(manager); } }); Menu menu = menuManager.createContextMenu(viewer.getControl()); viewer.getControl().setMenu(menu); // Register so that other plugins can contribute to the menu getSite().registerContextMenu(menuManager, viewer); } /** * Called just before right-click context menu is displayed. * This is where the menu is dynamically built depending on * the current selection and other state information. * * @param menuManager menu for adding actions to. */ private void fillContextMenu(IMenuManager menuManager) { IStructuredSelection selection = (IStructuredSelection) viewer.getSelection(); Object o = selection.getFirstElement(); if (o instanceof Process) { menuManager.add(killAction); } menuManager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); } /** * Set GUI focus on correct widget when view is selected. */ public void setFocus() { viewer.getControl().setFocus(); } private void initializeToolBar() { IToolBarManager toolBarManager = getViewSite().getActionBars().getToolBarManager(); toolBarManager.add(toggleTreeModeAction); toolBarManager.add(refreshAction); } public void setName(String name) { setPartName(name); } public void setInput(IProcessManager input) { viewer.setInput(input); } public void setTreeMode(boolean treeMode) { if (contentProvider.isTreeMode() == treeMode) return; contentProvider.setTreeMode(treeMode); viewer.refresh(); } public boolean isTreeMode() { return contentProvider.isTreeMode(); } }