]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.tests.modelled.ui/src/org/simantics/tests/modelled/ui/CoverageViewSorter.java
Sync git svn branch with SVN repository r33290.
[simantics/platform.git] / bundles / org.simantics.tests.modelled.ui / src / org / simantics / tests / modelled / ui / CoverageViewSorter.java
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 (file)
index 0000000..b1a1413
--- /dev/null
@@ -0,0 +1,97 @@
+package org.simantics.tests.modelled.ui;\r
+\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+\r
+import org.eclipse.jface.viewers.TreeViewer;\r
+import org.eclipse.jface.viewers.TreeViewerColumn;\r
+import org.eclipse.jface.viewers.Viewer;\r
+import org.eclipse.jface.viewers.ViewerComparator;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.events.SelectionEvent;\r
+import org.eclipse.swt.events.SelectionListener;\r
+import org.eclipse.swt.widgets.TreeColumn;\r
+import org.simantics.scl.compiler.module.coverage.Coverage;\r
+\r
+class CoverageViewSorter extends ViewerComparator {\r
+\r
+    private final TreeViewer viewer;\r
+\r
+    public CoverageViewSorter(TreeViewer viewer) {\r
+        this.viewer = viewer;\r
+    }\r
+\r
+    private Map<TreeColumn, Integer> columns = new HashMap<>();\r
+    private int currentDirection;\r
+    \r
+    void addColumn(final TreeViewerColumn viewerColumn, final int columnidx) {\r
+        final TreeColumn column = viewerColumn.getColumn();\r
+        setSortColumnAndDirection(column, SWT.UP);\r
+        column.addSelectionListener(new SelectionListener() {\r
+\r
+            public void widgetSelected(SelectionEvent e) {\r
+                TreeColumn current = column.getParent().getSortColumn();\r
+                if (current.equals(column)) {\r
+                    int sortDirection = column.getParent().getSortDirection();\r
+                    setSortColumnAndDirection(column, sortDirection != SWT.DOWN ? SWT.DOWN : SWT.UP);\r
+                } else {\r
+                    setSortColumnAndDirection(column, SWT.DOWN);\r
+                }\r
+                viewer.refresh();\r
+            }\r
+\r
+            public void widgetDefaultSelected(SelectionEvent e) {\r
+            }\r
+        });\r
+        columns.put(column, columnidx);\r
+    }\r
+\r
+    private void setSortColumnAndDirection(TreeColumn sortColumn, int direction) {\r
+        currentDirection = direction;\r
+        sortColumn.getParent().setSortColumn(sortColumn);\r
+        sortColumn.getParent().setSortDirection(direction);\r
+    }\r
+\r
+    \r
+    @Override\r
+    public int compare(Viewer viewer, Object e1, Object e2) {\r
+\r
+        TreeViewer v = (TreeViewer) viewer;\r
+        TreeColumn currentColumn = v.getTree().getSortColumn();\r
+        \r
+        int res = 0;\r
+        if (e1 instanceof Coverage && e2 instanceof Coverage) {\r
+            Coverage c1 = (Coverage) e1;\r
+            Coverage c2 = (Coverage) e2;\r
+            \r
+            int indx = columns.get(currentColumn);\r
+            switch (indx) {\r
+            case STSTestRunnerView.COLUMN_ELEMENT:\r
+                res = c1.getIdentifier().compareToIgnoreCase(c2.getIdentifier());\r
+                break;\r
+            case STSTestRunnerView.COLUMN_RATIO:\r
+                res = Double.compare(c1.getCoverage(), c2.getCoverage());\r
+                break;\r
+            case STSTestRunnerView.COLUMN_COVERED:\r
+                res = (int) (c1.getCoveredCodeSize() - c2.getCoveredCodeSize());\r
+                break;\r
+            case STSTestRunnerView.COLUMN_MISSED:\r
+                res = (int) (c1.getMissedCodeSize()) - c2.getMissedCodeSize();\r
+                break;\r
+            case STSTestRunnerView.COLUMN_TOTAL:\r
+                res = (int) (c1.getTotalCodeSize() - c2.getTotalCodeSize());\r
+                break;\r
+            }\r
+            if (res == 0) {\r
+                res = c1.getIdentifier().compareTo(c2.getIdentifier());\r
+            } else {\r
+                res = isReverseSort() ? -res : res;\r
+            }\r
+        }\r
+        return res;\r
+    }\r
+\r
+    private boolean isReverseSort() {\r
+        return currentDirection == SWT.DOWN;\r
+    }\r
+}\r