/*******************************************************************************
* Copyright (c) 2012, 2013 Original authors and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Original authors and others - initial API and implementation
******************************************************************************/
package org.eclipse.nebula.widgets.nattable.filterrow.event;
import org.eclipse.nebula.widgets.nattable.NatTable;
import org.eclipse.nebula.widgets.nattable.filterrow.FilterRowPainter;
import org.eclipse.nebula.widgets.nattable.grid.GridRegion;
import org.eclipse.nebula.widgets.nattable.layer.LabelStack;
import org.eclipse.nebula.widgets.nattable.layer.cell.ILayerCell;
import org.eclipse.nebula.widgets.nattable.ui.matcher.CellPainterMouseEventMatcher;
import org.eclipse.nebula.widgets.nattable.ui.matcher.MouseEventMatcher;
import org.eclipse.nebula.widgets.nattable.util.ObjectUtils;
import org.eclipse.swt.events.MouseEvent;
/**
* Specialization of a {@link CellPainterMouseEventMatcher} that only matches
* for the filter row region if a filter is applied in the clicked cell and the
* click was executed on the painted icon in that cell (usually the clear filter
* icon).
*/
public class ClearFilterIconMouseEventMatcher extends
CellPainterMouseEventMatcher {
/**
* Create a new {@link ClearFilterIconMouseEventMatcher} for the given
* {@link FilterRowPainter}
*
* @param filterRowPainter
* The {@link FilterRowPainter} needed to determine the filter
* icon painter.
*/
public ClearFilterIconMouseEventMatcher(FilterRowPainter filterRowPainter) {
super(GridRegion.FILTER_ROW, MouseEventMatcher.LEFT_BUTTON,
filterRowPainter.getFilterIconPainter().getClass());
}
@Override
public boolean matches(NatTable natTable, MouseEvent event,
LabelStack regionLabels) {
ILayerCell cell = natTable.getCellByPosition(
natTable.getColumnPositionByX(event.x),
natTable.getRowPositionByY(event.y));
if (cell == null)
return false;
return (super.matches(natTable, event, regionLabels) && ObjectUtils
.isNotNull(cell.getDataValue()));
}
}