use of org.eclipse.linuxtools.internal.valgrind.cachegrind.model.ICachegrindElement in project linuxtools by eclipse.
the class DoubleClickTest method doDoubleClick.
private static void doDoubleClick(TreePath path) {
CachegrindViewPart view = (CachegrindViewPart) ValgrindUIPlugin.getDefault().getView().getDynamicView();
TreeViewer treeViewer = view.getViewer();
ICachegrindElement element = (ICachegrindElement) path.getLastSegment();
treeViewer.expandToLevel(element, AbstractTreeViewer.ALL_LEVELS);
TreeSelection selection = new TreeSelection(path);
IDoubleClickListener listener = view.getDoubleClickListener();
listener.doubleClick(new DoubleClickEvent(treeViewer, selection));
}
use of org.eclipse.linuxtools.internal.valgrind.cachegrind.model.ICachegrindElement in project linuxtools by eclipse.
the class CachegrindViewPart method getHeaderListener.
private SelectionListener getHeaderListener() {
return SelectionListener.widgetSelectedAdapter(e -> {
TreeColumn column = (TreeColumn) e.widget;
Tree tree = viewer.getTree();
if (column.equals(tree.getSortColumn())) {
int direction = tree.getSortDirection() == SWT.UP ? SWT.DOWN : SWT.UP;
tree.setSortDirection(direction);
} else {
tree.setSortDirection(SWT.UP);
}
tree.setSortColumn(column);
viewer.setComparator(new ViewerComparator() {
@Override
public int compare(Viewer viewer, Object e1, Object e2) {
Tree tree = ((TreeViewer) viewer).getTree();
int direction = tree.getSortDirection();
ICachegrindElement o1 = (ICachegrindElement) e1;
ICachegrindElement o2 = (ICachegrindElement) e2;
long result = 0;
int sortIndex = Arrays.asList(tree.getColumns()).indexOf(tree.getSortColumn());
if (sortIndex == 0) {
// use compareTo
result = o1.compareTo(o2);
} else {
long[] v1 = null;
long[] v2 = null;
if (o1 instanceof CachegrindFunction && o2 instanceof CachegrindFunction) {
v1 = ((CachegrindFunction) o1).getTotals();
v2 = ((CachegrindFunction) o2).getTotals();
} else if (o1 instanceof CachegrindLine && o2 instanceof CachegrindLine) {
v1 = ((CachegrindLine) o1).getValues();
v2 = ((CachegrindLine) o2).getValues();
} else if (o1 instanceof CachegrindOutput && o2 instanceof CachegrindOutput) {
v1 = ((CachegrindOutput) o1).getSummary();
v2 = ((CachegrindOutput) o2).getSummary();
}
if (v1 != null && v2 != null) {
result = v1[sortIndex - 1] - v2[sortIndex - 1];
}
}
// ascending or descending
result = direction == SWT.UP ? result : -result;
// overflow check
if (result > Integer.MAX_VALUE) {
result = Integer.MAX_VALUE;
} else if (result < Integer.MIN_VALUE) {
result = Integer.MIN_VALUE;
}
return (int) result;
}
});
});
}
use of org.eclipse.linuxtools.internal.valgrind.cachegrind.model.ICachegrindElement in project linuxtools by eclipse.
the class CachegrindLabelProvider method update.
@Override
public void update(ViewerCell cell) {
ICachegrindElement element = ((ICachegrindElement) cell.getElement());
int index = cell.getColumnIndex();
if (index == 0) {
if (element instanceof CachegrindFile) {
// Try to use the CElementLabelProvider
IAdaptable model = ((CachegrindFile) element).getModel();
if (model != null) {
cell.setText(cLabelProvider.getText(model));
cell.setImage(cLabelProvider.getImage(model));
} else {
// Fall back
String name = ((CachegrindFile) element).getName();
cell.setText(name);
cell.setImage(PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FILE));
}
} else if (element instanceof CachegrindFunction) {
// Try to use the CElementLabelProvider
IAdaptable model = ((CachegrindFunction) element).getModel();
if (model != null) {
cell.setText(cLabelProvider.getText(model));
cell.setImage(cLabelProvider.getImage(model));
} else {
// Fall back
String name = ((CachegrindFunction) element).getName();
cell.setText(name);
cell.setImage(FUNC_IMG);
}
} else if (element instanceof CachegrindLine) {
// $NON-NLS-1$
cell.setText(NLS.bind(Messages.getString("CachegrindViewPart.line"), ((CachegrindLine) element).getLine()));
cell.setImage(DebugUITools.getImage(IDebugUIConstants.IMG_OBJS_INSTRUCTION_POINTER_TOP));
} else if (element instanceof CachegrindOutput) {
// $NON-NLS-1$
cell.setText(NLS.bind(Messages.getString("CachegrindViewPart.Total_PID"), ((CachegrindOutput) element).getPid()));
cell.setImage(DebugUITools.getImage(IDebugUIConstants.IMG_OBJS_REGISTER));
}
} else if (element instanceof CachegrindFunction) {
cell.setText(df.format(((CachegrindFunction) element).getTotals()[index - 1]));
} else if (element instanceof CachegrindLine) {
cell.setText(df.format(((CachegrindLine) element).getValues()[index - 1]));
} else if (element instanceof CachegrindOutput) {
cell.setText(df.format(((CachegrindOutput) element).getSummary()[index - 1]));
}
}
use of org.eclipse.linuxtools.internal.valgrind.cachegrind.model.ICachegrindElement in project linuxtools by eclipse.
the class CachegrindViewPart method createPartControl.
@Override
public void createPartControl(Composite parent) {
Composite top = new Composite(parent, SWT.NONE);
GridLayout topLayout = new GridLayout();
topLayout.marginHeight = topLayout.marginWidth = 0;
top.setLayout(topLayout);
top.setLayoutData(new GridData(GridData.FILL_BOTH));
viewer = new TreeViewer(top, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION);
labelProvider = new CachegrindLabelProvider();
ColumnViewerToolTipSupport.enableFor(viewer);
Tree tree = viewer.getTree();
tree.setHeaderVisible(true);
tree.setLinesVisible(true);
tree.setLayoutData(new GridData(GridData.FILL_BOTH));
TreeViewerColumn column = new TreeViewerColumn(viewer, SWT.NONE);
// $NON-NLS-1$
column.getColumn().setText(Messages.getString("CachegrindViewPart.Location"));
column.getColumn().setWidth(COLUMN_SIZE * 4);
column.getColumn().setResizable(true);
column.getColumn().addSelectionListener(getHeaderListener());
column.setLabelProvider(labelProvider);
contentProvider = new CachegrindTreeContentProvider();
viewer.setContentProvider(contentProvider);
viewer.setLabelProvider(labelProvider);
viewer.setAutoExpandLevel(2);
doubleClickListener = event -> {
Object selection = ((StructuredSelection) event.getSelection()).getFirstElement();
String path = null;
int line = 0;
if (selection instanceof CachegrindFile) {
path = ((CachegrindFile) selection).getPath();
} else if (selection instanceof CachegrindLine) {
CachegrindLine element = (CachegrindLine) selection;
CachegrindFile file = (CachegrindFile) element.getParent().getParent();
path = file.getPath();
line = element.getLine();
} else if (selection instanceof CachegrindFunction) {
CachegrindFunction function = (CachegrindFunction) selection;
path = ((CachegrindFile) function.getParent()).getPath();
if (function.getModel() instanceof ISourceReference) {
ISourceReference model = (ISourceReference) function.getModel();
try {
ISourceRange sr = model.getSourceRange();
if (sr != null) {
line = sr.getStartLine();
}
} catch (CModelException e1) {
e1.printStackTrace();
}
}
}
if (path != null) {
try {
ProfileUIUtils.openEditorAndSelect(path, line, ValgrindUIPlugin.getDefault().getProfiledProject());
} catch (BadLocationException | CoreException e2) {
e2.printStackTrace();
}
}
};
viewer.addDoubleClickListener(doubleClickListener);
expandAction = new ExpandAction(viewer);
collapseAction = new CollapseAction(viewer);
MenuManager manager = new MenuManager();
manager.addMenuListener(manager1 -> {
ITreeSelection selection = (ITreeSelection) viewer.getSelection();
ICachegrindElement element = (ICachegrindElement) selection.getFirstElement();
if (contentProvider.hasChildren(element)) {
manager1.add(expandAction);
manager1.add(collapseAction);
}
});
manager.setRemoveAllWhenShown(true);
Menu contextMenu = manager.createContextMenu(viewer.getTree());
viewer.getControl().setMenu(contextMenu);
}
Aggregations