/*******************************************************************************
* Copyright (c) 2009 STMicroelectronics.
* 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:
* Xavier Raynaud <xavier.raynaud@st.com> - initial API and implementation
*******************************************************************************/
package org.eclipse.linuxtools.internal.gcov.view;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.viewers.IContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.OpenEvent;
import org.eclipse.linuxtools.dataviewers.abstractviewers.AbstractSTTreeViewer;
import org.eclipse.linuxtools.dataviewers.abstractviewers.ISTDataViewersField;
import org.eclipse.linuxtools.internal.gcov.model.CovFileTreeElement;
import org.eclipse.linuxtools.internal.gcov.model.CovFunctionTreeElement;
import org.eclipse.linuxtools.internal.gcov.model.TreeElement;
import org.eclipse.linuxtools.internal.gcov.parser.CovManager;
import org.eclipse.linuxtools.internal.gcov.parser.SourceFile;
import org.eclipse.linuxtools.internal.gcov.view.annotatedsource.OpenSourceFileAction;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
public class CovViewer extends AbstractSTTreeViewer {
private ISTDataViewersField[] fields;
/**
* Constructor
* @param parent
*/
public CovViewer(Composite parent) {
super(parent, SWT.BORDER | SWT.H_SCROLL| SWT.V_SCROLL | SWT.MULTI |
SWT.FULL_SELECTION);
}
@Override
protected IContentProvider createContentProvider() {
return CovFileContentProvider.sharedInstance;
}
@Override
public ISTDataViewersField[] getAllFields() {
if (fields == null) {
fields = new ISTDataViewersField[] {
new FieldName(),
new FieldTotalLines(),
new FieldInstrumentedLines(),
new FieldExecutedLines(),
new FieldCoveragePercentage() };
}
return fields;
}
@Override
public IDialogSettings getDialogSettings() {
return org.eclipse.linuxtools.internal.gcov.Activator.getDefault().getDialogSettings();
}
@Override
protected void handleOpenEvent(OpenEvent event) {
IStructuredSelection selection = (IStructuredSelection) event
.getSelection();
TreeElement element = (TreeElement) selection.getFirstElement();
if (element != null) {
if (element.getParent() != null) {
String sourceLoc = ""; //$NON-NLS-1$
long lineNumber = 0;
if (element.getClass() == CovFileTreeElement.class) {
sourceLoc = element.getName();
} else if (element.getClass() == CovFunctionTreeElement.class) {
sourceLoc = ((CovFunctionTreeElement) element).getSourceFilePath();
lineNumber =((CovFunctionTreeElement)element).getFirstLnNmbr();
}
CovManager cvm = (CovManager) this.getInput();
SourceFile sourceFile = cvm.getSourceFile(sourceLoc);
if (sourceFile != null) {
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
String binaryLoc = cvm.getBinaryPath();
IPath binaryPath = new Path(binaryLoc);
IFile binary = root.getFileForLocation(binaryPath);
IProject project = null;
if (binary != null) {
project = binary.getProject();
}
OpenSourceFileAction.openAnnotatedSourceFile(project,
binary, sourceFile, (int)lineNumber);
}
}
}
}
}