Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/debugsources/DebugSourcesViewComparator.java')
-rw-r--r--dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/debugsources/DebugSourcesViewComparator.java85
1 files changed, 85 insertions, 0 deletions
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/debugsources/DebugSourcesViewComparator.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/debugsources/DebugSourcesViewComparator.java
new file mode 100644
index 00000000000..d3ce28b851f
--- /dev/null
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/debugsources/DebugSourcesViewComparator.java
@@ -0,0 +1,85 @@
+/*******************************************************************************
+ * Copyright (c) 2018, 2019 Kichwa Coders Ltd and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Baha El-Kassaby - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.cdt.dsf.gdb.internal.ui.debugsources;
+
+import java.util.function.Function;
+
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerComparator;
+import org.eclipse.swt.SWT;
+
+/**
+ * Comparator used for the Debug Sources Table viewer
+ *
+ */
+public class DebugSourcesViewComparator<T> extends ViewerComparator {
+
+ private Function<T, Comparable<?>> func;
+
+ private int propertyIndex;
+
+ private enum Direction {
+ ASCENDING, DESCENDING;
+
+ /**
+ *
+ * @param direction the previous direction
+ * @return the new direction
+ */
+ public static Direction toggle(Direction direction) {
+ return direction == ASCENDING ? DESCENDING : ASCENDING;
+ }
+ }
+
+ private Direction direction = Direction.DESCENDING;
+
+ public DebugSourcesViewComparator(Function<T, Comparable<?>> func) {
+ this.func = func;
+ }
+
+ public DebugSourcesViewComparator() {
+ this.propertyIndex = 0;
+ direction = Direction.DESCENDING;
+ }
+
+ public int getDirection() {
+ return direction == Direction.DESCENDING ? SWT.DOWN : SWT.UP;
+ }
+
+ public void setColumn(Function<T, Comparable<?>> column, int idx) {
+ this.func = column;
+ if (idx == this.propertyIndex) {
+ // Same column as last sort; toggle the direction
+ direction = Direction.toggle(direction);
+ } else {
+ // New column
+ this.propertyIndex = idx;
+ direction = Direction.DESCENDING;
+ }
+ }
+
+ @SuppressWarnings({ "unchecked", "rawtypes" })
+ @Override
+ public int compare(Viewer viewer, Object e1, Object e2) {
+ Comparable s1 = func.apply((T) e1);
+ Comparable s2 = func.apply((T) e2);
+ int rc = s1.compareTo(s2);
+ // If descending order, flip the direction
+ if (direction.equals(Direction.DESCENDING)) {
+ rc = -rc;
+ }
+ return rc;
+ }
+
+}

Back to the top