Bug 581023 - Not possible to simply clear filter of "Excel-like" filters
Signed-off-by: Dirk Fauth <dirk.fauth@googlemail.com>
Change-Id: Ifee36b863ff60266258e46c6f9175f828c745323
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/filterrow/FilterRowPainter.java b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/filterrow/FilterRowPainter.java
index 2ee38b2..2c44a74 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/filterrow/FilterRowPainter.java
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/filterrow/FilterRowPainter.java
@@ -54,6 +54,15 @@
new CellPainterDecorator(new TextPainter(), CellEdgeEnum.RIGHT, filterIconPainter));
}
+ // TODO 2.1 add constructor to also pass the base painter
+ // public FilterRowPainter(ICellPainter basePainter, ImagePainter
+ // filterIconPainter) {
+ // this.filterIconPainter = filterIconPainter;
+ // setWrappedPainter(
+ // new CellPainterDecorator(basePainter, CellEdgeEnum.RIGHT,
+ // filterIconPainter));
+ // }
+
/**
*
* @return The {@link ImagePainter} that is used to paint the icon in the
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/filterrow/combobox/ComboBoxFilterRowConfiguration.java b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/filterrow/combobox/ComboBoxFilterRowConfiguration.java
index e04daad..931ff9e 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/filterrow/combobox/ComboBoxFilterRowConfiguration.java
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/filterrow/combobox/ComboBoxFilterRowConfiguration.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2013, 2020 Dirk Fauth and others.
+ * Copyright (c) 2013, 2022 Dirk Fauth and others.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
@@ -18,8 +18,11 @@
import org.eclipse.nebula.widgets.nattable.edit.EditConfigAttributes;
import org.eclipse.nebula.widgets.nattable.edit.editor.ICellEditor;
import org.eclipse.nebula.widgets.nattable.edit.editor.IComboBoxDataProvider;
+import org.eclipse.nebula.widgets.nattable.filterrow.FilterRowPainter;
import org.eclipse.nebula.widgets.nattable.filterrow.TextMatchingMode;
+import org.eclipse.nebula.widgets.nattable.filterrow.action.ClearFilterAction;
import org.eclipse.nebula.widgets.nattable.filterrow.config.FilterRowConfigAttributes;
+import org.eclipse.nebula.widgets.nattable.filterrow.event.ClearFilterIconMouseEventMatcher;
import org.eclipse.nebula.widgets.nattable.grid.GridRegion;
import org.eclipse.nebula.widgets.nattable.layer.cell.ILayerCell;
import org.eclipse.nebula.widgets.nattable.painter.cell.ICellPainter;
@@ -27,6 +30,7 @@
import org.eclipse.nebula.widgets.nattable.painter.cell.TextPainter;
import org.eclipse.nebula.widgets.nattable.painter.cell.decorator.CellPainterDecorator;
import org.eclipse.nebula.widgets.nattable.style.DisplayMode;
+import org.eclipse.nebula.widgets.nattable.ui.binding.UiBindingRegistry;
import org.eclipse.nebula.widgets.nattable.ui.util.CellEdgeEnum;
import org.eclipse.swt.graphics.GC;
@@ -49,6 +53,14 @@
*/
protected ImagePainter filterIconPainter;
+ // TODO 2.1 change visibility to protected
+ /**
+ * The {@link FilterRowPainter} used for painting cells in the filter row.
+ * Supports rendering of additional filter state based icons and is needed
+ * to support specific actions based on the filter states.
+ */
+ private FilterRowPainter filterRowPainter;
+
/**
* The empty default constructor needed for specialising.
* <p>
@@ -123,11 +135,21 @@
}
}, CellEdgeEnum.RIGHT, this.filterIconPainter);
+ // TODO 2.1 use new constructor after update
+ this.filterRowPainter = new FilterRowPainter(this.filterIconPainter);
+ this.filterRowPainter.setWrappedPainter(cellPainter);
+
configRegistry.registerConfigAttribute(
CellConfigAttributes.CELL_PAINTER,
- cellPainter,
+ this.filterRowPainter,
DisplayMode.NORMAL,
GridRegion.FILTER_ROW);
}
+ @Override
+ public void configureUiBindings(UiBindingRegistry uiBindingRegistry) {
+ uiBindingRegistry.registerFirstSingleClickBinding(
+ new ClearFilterIconMouseEventMatcher(this.filterRowPainter),
+ new ClearFilterAction());
+ }
}