in src/application/org.openjdk.jmc.joverflow.ui/src/main/java/org/openjdk/jmc/joverflow/ui/viewers/AncestorViewer.java [83:275]
public AncestorViewer(Composite parent, int style) {
mContainer = new SashForm(parent, style);
{
Composite leftContainer = new Composite(mContainer, SWT.BORDER);
leftContainer.setLayout(new FormLayout());
Label title = new Label(leftContainer, SWT.NONE);
title.setText("Ancestor Referrer");
{
FormData data = new FormData();
data.top = new FormAttachment(0, 10);
data.left = new FormAttachment(0, 10);
title.setLayoutData(data);
}
{
Button update = new Button(leftContainer, SWT.NONE);
update.setText("Update");
update.addListener(SWT.Selection, event -> updatePrefixFilter());
{
FormData data = new FormData();
data.bottom = new FormAttachment(100, -10);
data.right = new FormAttachment(100, -10);
update.setLayoutData(data);
}
mInput = new Text(leftContainer, SWT.BORDER);
mInput.setMessage("Ancestor prefix");
mInput.addListener(SWT.Traverse, event -> {
if (event.detail == SWT.TRAVERSE_RETURN) {
updatePrefixFilter();
}
});
{
FormData fd_text = new FormData();
fd_text.right = new FormAttachment(update, -10);
fd_text.bottom = new FormAttachment(update, 0, SWT.CENTER);
fd_text.left = new FormAttachment(0, 10);
mInput.setLayoutData(fd_text);
}
SashForm container = new SashForm(leftContainer, SWT.VERTICAL);
{
FormData fd_sashForm = new FormData();
fd_sashForm.bottom = new FormAttachment(update, -10);
fd_sashForm.top = new FormAttachment(title, 10);
fd_sashForm.right = new FormAttachment(100, -10);
fd_sashForm.left = new FormAttachment(0, 10);
container.setLayoutData(fd_sashForm);
}
mPieChart = new PieChartViewer(container, SWT.NONE);
mPieChart.setContentProvider(ArrayContentProvider.getInstance());
ColorIndexedArcAttributeProvider provider = new ColorIndexedArcAttributeProvider() {
@Override
public int getWeight(Object element) {
return (int) ((MemoryStatisticsItem) element).getMemory();
}
};
provider.setMinimumArcAngle(5);
mPieChart.setArcAttributeProvider(provider);
mPieChart.setMinimumArcAngle(5);
mPieChart.getPieChart().setZoomRatio(1.2);
mPieChart.setComparator(new ViewerComparator() {
@Override
public int compare(Viewer viewer, Object e1, Object e2) {
return (int) (((MemoryStatisticsItem) e2).getMemory()
- ((MemoryStatisticsItem) e1).getMemory());
}
});
mFilterList = new FilterList<>(container, SWT.NONE);
mFilterList.addFilterChangedListener(this::notifyFilterChangedListeners);
container.setWeights(new int[] {3, 2});
}
}
{
Composite tableContainer = new Composite(mContainer, SWT.BORDER);
tableContainer.setLayout(new FillLayout(SWT.HORIZONTAL));
mTableViewer = new MemoryStatisticsTableViewer(tableContainer, SWT.NONE);
BiConsumer<MemoryStatisticsItem, Boolean> addFilter = (item, exclusion) -> {
if (item.getId() == null) {
return;
}
mFilterList.addFilter(new Predicate<RefChainElement>() {
final String ancestor = item.getId().toString();
final boolean excluded = exclusion;
@Override
public boolean test(RefChainElement referrer) {
while (referrer != null) {
String refName = referrer.toString();
if (ancestor.equals(refName)) {
return !excluded;
}
referrer = referrer.getReferer();
}
return excluded;
}
@Override
public String toString() {
return "Ancestors" + (excluded ? " \u220C " : " \u220B ") + ancestor; //$NON-NLS-2$ //$NON-NLS-3$
}
@Override
public int hashCode() {
return ancestor.hashCode();
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
return hashCode() == obj.hashCode();
}
});
};
mPieChart.getPieChart().addMouseListener(new MouseListener() {
@Override
public void mouseDoubleClick(MouseEvent e) {
// no op
}
@Override
public void mouseDown(MouseEvent e) {
// no op
}
@Override
public void mouseUp(MouseEvent e) {
ArcItem item = mPieChart.getPieChart().getHighlightedItem();
if (item == null) {
return;
}
if (item.getData() == null) {
return;
}
addFilter.accept((MemoryStatisticsItem) item.getData(), e.button != 1);
}
});
mTableViewer.getTable().addMouseListener(new MouseListener() {
@Override
public void mouseDoubleClick(MouseEvent e) {
// no op
}
@Override
public void mouseDown(MouseEvent e) {
// no op
}
@Override
public void mouseUp(MouseEvent e) {
if (e.button != 1 && e.button != 3) {
return;
}
if (mTableViewer.getSelection().isEmpty()) {
return;
}
IStructuredSelection selection = (IStructuredSelection) mTableViewer.getSelection();
MemoryStatisticsItem item = (MemoryStatisticsItem) selection.getFirstElement();
addFilter.accept(item, e.button != 1);
}
});
}
mContainer.setWeights(new int[] {1, 2});
mTableViewer.setPieChartViewer(mPieChart);
mPieChart.setTableViewer(mTableViewer);
}