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());
+    }
 }