1 package org.simantics.tests.modelled.ui;
3 import java.util.HashMap;
6 import org.eclipse.jface.viewers.TreeViewer;
7 import org.eclipse.jface.viewers.TreeViewerColumn;
8 import org.eclipse.jface.viewers.Viewer;
9 import org.eclipse.jface.viewers.ViewerComparator;
10 import org.eclipse.swt.SWT;
11 import org.eclipse.swt.events.SelectionEvent;
12 import org.eclipse.swt.events.SelectionListener;
13 import org.eclipse.swt.widgets.TreeColumn;
14 import org.simantics.scl.compiler.module.coverage.Coverage;
16 class CoverageViewSorter extends ViewerComparator {
18 private final TreeViewer viewer;
20 public CoverageViewSorter(TreeViewer viewer) {
24 private Map<TreeColumn, Integer> columns = new HashMap<>();
25 private int currentDirection;
27 void addColumn(final TreeViewerColumn viewerColumn, final int columnidx) {
28 final TreeColumn column = viewerColumn.getColumn();
29 setSortColumnAndDirection(column, SWT.UP);
30 column.addSelectionListener(new SelectionListener() {
32 public void widgetSelected(SelectionEvent e) {
33 TreeColumn current = column.getParent().getSortColumn();
34 if (current.equals(column)) {
35 int sortDirection = column.getParent().getSortDirection();
36 setSortColumnAndDirection(column, sortDirection != SWT.DOWN ? SWT.DOWN : SWT.UP);
38 setSortColumnAndDirection(column, SWT.DOWN);
43 public void widgetDefaultSelected(SelectionEvent e) {
46 columns.put(column, columnidx);
49 private void setSortColumnAndDirection(TreeColumn sortColumn, int direction) {
50 currentDirection = direction;
51 sortColumn.getParent().setSortColumn(sortColumn);
52 sortColumn.getParent().setSortDirection(direction);
57 public int compare(Viewer viewer, Object e1, Object e2) {
59 TreeViewer v = (TreeViewer) viewer;
60 TreeColumn currentColumn = v.getTree().getSortColumn();
63 if (e1 instanceof Coverage && e2 instanceof Coverage) {
64 Coverage c1 = (Coverage) e1;
65 Coverage c2 = (Coverage) e2;
67 int indx = columns.get(currentColumn);
69 case STSTestRunnerView.COLUMN_ELEMENT:
70 res = c1.getIdentifier().compareToIgnoreCase(c2.getIdentifier());
72 case STSTestRunnerView.COLUMN_RATIO:
73 res = Double.compare(c1.getCoverage(), c2.getCoverage());
75 case STSTestRunnerView.COLUMN_COVERED:
76 res = (int) (c1.getCoveredCodeSize() - c2.getCoveredCodeSize());
78 case STSTestRunnerView.COLUMN_MISSED:
79 res = (int) (c1.getMissedCodeSize()) - c2.getMissedCodeSize();
81 case STSTestRunnerView.COLUMN_TOTAL:
82 res = (int) (c1.getTotalCodeSize() - c2.getTotalCodeSize());
86 res = c1.getIdentifier().compareTo(c2.getIdentifier());
88 res = isReverseSort() ? -res : res;
94 private boolean isReverseSort() {
95 return currentDirection == SWT.DOWN;