/*******************************************************************************
* Copyright (c) 2009 Red Hat, Inc.
* 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:
* Elliott Baron <ebaron@redhat.com> - initial API and implementation
*******************************************************************************/
package org.eclipse.linuxtools.internal.valgrind.massif.charting;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.linuxtools.internal.valgrind.massif.MassifHeapTreeNode;
import org.eclipse.linuxtools.internal.valgrind.massif.MassifPlugin;
import org.eclipse.linuxtools.internal.valgrind.massif.MassifSnapshot;
import org.eclipse.linuxtools.internal.valgrind.massif.MassifTreeLabelProvider;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.dialogs.ListDialog;
public class ChartLocationsDialog extends ListDialog {
private List<MassifHeapTreeNode> allocs;
public ChartLocationsDialog(Shell parent) {
super(parent);
setContentProvider(new ArrayContentProvider());
setLabelProvider(new MassifTreeLabelProvider());
setMessage(Messages.getString("ChartLocationsDialog.Message")); //$NON-NLS-1$
setTitle(Messages.getString("ChartLocationsDialog.Title")); //$NON-NLS-1$
}
@Override
public void setInput(Object input) {
setInput((MassifSnapshot) input);
}
public void setInput(MassifSnapshot snapshot) {
MassifHeapTreeNode node = snapshot.getRoot();
allocs = new ArrayList<>(node.getChildren().length);
for (MassifHeapTreeNode alloc : node.getChildren()) {
if (alloc.hasSourceFile()) {
allocs.add(alloc);
}
}
super.setInput(allocs);
}
@Override
public int open() {
int result = OK;
if (allocs.size() > 1) {
result = super.open();
}
return result;
}
public void openEditorForResult() {
MassifHeapTreeNode element = null;
if (allocs.size() > 1) {
element = (MassifHeapTreeNode) getResult()[0];
}
else if (allocs.size() == 1) {
element = allocs.get(0);
}
if (element != null) {
MassifPlugin.getDefault().openEditorForNode(element);
}
}
}