/*******************************************************************************
* Copyright (c) 2011, 2014 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:
* Wind River Systems - initial API and implementation
*******************************************************************************/
package org.eclipse.tcf.te.tcf.processes.ui.editor;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.viewers.ILabelDecorator;
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.runtime.services.ServiceUtils;
import org.eclipse.tcf.te.tcf.locator.interfaces.nodes.IPeerNode;
import org.eclipse.tcf.te.tcf.processes.core.model.ModelManager;
import org.eclipse.tcf.te.tcf.processes.ui.interfaces.IProcessMonitorUIDelegate;
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.tcf.ui.editor.AbstractTreeViewerExplorerEditorPage;
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.ui.IEditorInput;
/**
* The editor page for Process Monitor.
*/
public class ProcessMonitorEditorPage extends AbstractTreeViewerExplorerEditorPage {
// The decorator used to decorate the title bar.
private ILabelDecorator decorator = new ProcessMonitorTitleDecorator();
// The event listener instance
private ProcessMonitorEventListener listener = null;
// Reference to the tree listener
/* default */ ITreeViewerListener treeListener = null;
/* (non-Javadoc)
* @see org.eclipse.tcf.te.ui.views.editor.pages.AbstractTreeViewerExplorerEditorPage#dispose()
*/
@Override
public void dispose() {
if (listener != null) {
EventManager.getInstance().removeEventListener(listener);
listener = null;
}
super.dispose();
}
/* (non-Javadoc)
* @see org.eclipse.tcf.te.ui.views.editor.pages.AbstractTreeViewerExplorerEditorPage#getViewerId()
*/
@Override
protected String getViewerId() {
return "org.eclipse.tcf.te.ui.controls.viewer.processes"; //$NON-NLS-1$
}
/* (non-Javadoc)
* @see org.eclipse.tcf.te.ui.views.editor.pages.AbstractCustomFormToolkitEditorPage#getFormTitle()
*/
@Override
protected String getFormTitle() {
String formTitle = Messages.getStringDelegated(getEditorInputNode(), "ProcessMonitorEditorPage_PageTitle"); //$NON-NLS-1$
return formTitle != null ? formTitle : Messages.ProcessMonitorEditorPage_PageTitle;
}
/* (non-Javadoc)
* @see org.eclipse.tcf.te.ui.views.editor.pages.AbstractEditorPage#setInput(org.eclipse.ui.IEditorInput)
*/
@Override
protected void setInput(IEditorInput input) {
super.setInput(input);
}
/* (non-Javadoc)
* @see org.eclipse.tcf.te.ui.views.editor.pages.AbstractCustomFormToolkitEditorPage#getContextHelpId()
*/
@Override
protected String getContextHelpId() {
return "org.eclipse.tcf.te.tcf.processes.ui.ProcessExplorerEditorPage"; //$NON-NLS-1$
}
/* (non-Javadoc)
* @see org.eclipse.ui.part.WorkbenchPart#getPartName()
*/
@Override
public String getPartName() {
String partName = Messages.getStringDelegated(getEditorInputNode(), "ProcessMonitorEditorPage_PartName"); //$NON-NLS-1$
return partName != null ? partName : super.getPartName();
}
/* (non-Javadoc)
* @see org.eclipse.tcf.te.ui.views.editor.pages.AbstractTreeViewerExplorerEditorPage#getTitleBarDecorator()
*/
@Override
protected ILabelDecorator getTitleBarDecorator() {
return decorator;
}
/* (non-Javadoc)
* @see org.eclipse.tcf.te.ui.views.editor.pages.AbstractTreeViewerExplorerEditorPage#doCreateTreeControl()
*/
@Override
protected TreeControl 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);
}
}
};
}
/* (non-Javadoc)
* @see org.eclipse.tcf.te.ui.trees.TreeControl#getAutoExpandLevel()
*/
@Override
protected int getAutoExpandLevel() {
if (ProcessMonitorEditorPage.this.getEditorInputNode() instanceof IPeerNode) {
IPeerNode peerNode = (IPeerNode)ProcessMonitorEditorPage.this.getEditorInputNode();
IProcessMonitorUIDelegate delegate = ServiceUtils.getUIServiceDelegate(peerNode, peerNode, IProcessMonitorUIDelegate.class);
if (delegate != null) {
return delegate.getAutoExpandLevel();
}
}
return super.getAutoExpandLevel();
}
};
Assert.isNotNull(treeControl);
if (listener == null) {
listener = new ProcessMonitorEventListener(treeControl);
EventManager.getInstance().addEventListener(listener, ChangeEvent.class);
}
if (treeListener == null && treeControl.getViewer() instanceof TreeViewer) {
final TreeViewer treeViewer = (TreeViewer) treeControl.getViewer();
treeListener = new TreeViewerListener();
treeViewer.addTreeListener(treeListener);
treeViewer.getTree().addDisposeListener(new DisposeListener() {
@Override
public void widgetDisposed(DisposeEvent e) {
if (treeListener != null) {
treeViewer.removeTreeListener(treeListener);
treeListener = null;
}
}
});
}
return treeControl;
}
/* (non-Javadoc)
* @see org.eclipse.tcf.te.ui.views.editor.pages.AbstractTreeViewerExplorerEditorPage#getViewerInput()
*/
@Override
protected Object getViewerInput() {
Object element = getEditorInputNode();
IPeerNode peerNode = element instanceof IPeerNode ? (IPeerNode)element : null;
if (peerNode == null && element instanceof IAdaptable) {
peerNode = (IPeerNode)((IAdaptable)element).getAdapter(IPeerNode.class);
}
return peerNode != null ? ModelManager.getRuntimeModel(peerNode) : null;
}
}