X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.tests.modelled.ui%2Fsrc%2Forg%2Fsimantics%2Ftests%2Fmodelled%2Fui%2FCoverageViewSorter.java;fp=bundles%2Forg.simantics.tests.modelled.ui%2Fsrc%2Forg%2Fsimantics%2Ftests%2Fmodelled%2Fui%2FCoverageViewSorter.java;h=b1a1413b6076a7bdc43d55290ff6095249606801;hb=3b5069d0d30e7de27f73d88d5e89d29052291a34;hp=0000000000000000000000000000000000000000;hpb=bf75fd9740858140eac90c18f0bca0aea3893248;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.tests.modelled.ui/src/org/simantics/tests/modelled/ui/CoverageViewSorter.java b/bundles/org.simantics.tests.modelled.ui/src/org/simantics/tests/modelled/ui/CoverageViewSorter.java new file mode 100644 index 000000000..b1a1413b6 --- /dev/null +++ b/bundles/org.simantics.tests.modelled.ui/src/org/simantics/tests/modelled/ui/CoverageViewSorter.java @@ -0,0 +1,97 @@ +package org.simantics.tests.modelled.ui; + +import java.util.HashMap; +import java.util.Map; + +import org.eclipse.jface.viewers.TreeViewer; +import org.eclipse.jface.viewers.TreeViewerColumn; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.jface.viewers.ViewerComparator; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.widgets.TreeColumn; +import org.simantics.scl.compiler.module.coverage.Coverage; + +class CoverageViewSorter extends ViewerComparator { + + private final TreeViewer viewer; + + public CoverageViewSorter(TreeViewer viewer) { + this.viewer = viewer; + } + + private Map columns = new HashMap<>(); + private int currentDirection; + + void addColumn(final TreeViewerColumn viewerColumn, final int columnidx) { + final TreeColumn column = viewerColumn.getColumn(); + setSortColumnAndDirection(column, SWT.UP); + column.addSelectionListener(new SelectionListener() { + + public void widgetSelected(SelectionEvent e) { + TreeColumn current = column.getParent().getSortColumn(); + if (current.equals(column)) { + int sortDirection = column.getParent().getSortDirection(); + setSortColumnAndDirection(column, sortDirection != SWT.DOWN ? SWT.DOWN : SWT.UP); + } else { + setSortColumnAndDirection(column, SWT.DOWN); + } + viewer.refresh(); + } + + public void widgetDefaultSelected(SelectionEvent e) { + } + }); + columns.put(column, columnidx); + } + + private void setSortColumnAndDirection(TreeColumn sortColumn, int direction) { + currentDirection = direction; + sortColumn.getParent().setSortColumn(sortColumn); + sortColumn.getParent().setSortDirection(direction); + } + + + @Override + public int compare(Viewer viewer, Object e1, Object e2) { + + TreeViewer v = (TreeViewer) viewer; + TreeColumn currentColumn = v.getTree().getSortColumn(); + + int res = 0; + if (e1 instanceof Coverage && e2 instanceof Coverage) { + Coverage c1 = (Coverage) e1; + Coverage c2 = (Coverage) e2; + + int indx = columns.get(currentColumn); + switch (indx) { + case STSTestRunnerView.COLUMN_ELEMENT: + res = c1.getIdentifier().compareToIgnoreCase(c2.getIdentifier()); + break; + case STSTestRunnerView.COLUMN_RATIO: + res = Double.compare(c1.getCoverage(), c2.getCoverage()); + break; + case STSTestRunnerView.COLUMN_COVERED: + res = (int) (c1.getCoveredCodeSize() - c2.getCoveredCodeSize()); + break; + case STSTestRunnerView.COLUMN_MISSED: + res = (int) (c1.getMissedCodeSize()) - c2.getMissedCodeSize(); + break; + case STSTestRunnerView.COLUMN_TOTAL: + res = (int) (c1.getTotalCodeSize() - c2.getTotalCodeSize()); + break; + } + if (res == 0) { + res = c1.getIdentifier().compareTo(c2.getIdentifier()); + } else { + res = isReverseSort() ? -res : res; + } + } + return res; + } + + private boolean isReverseSort() { + return currentDirection == SWT.DOWN; + } +}