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