Search in sources :

Example 1 with TextMatcherEditor

use of ca.odell.glazedlists.matchers.TextMatcherEditor in project nebula.widgets.nattable by eclipse.

the class _6036_SingleFieldFilterExample method createExampleControl.

@Override
public Control createExampleControl(Composite parent) {
    Composite panel = new Composite(parent, SWT.NONE);
    panel.setLayout(new GridLayout());
    GridDataFactory.fillDefaults().grab(true, true).applyTo(panel);
    Text input = new Text(panel, SWT.SINGLE | SWT.SEARCH | SWT.ICON_CANCEL);
    input.setMessage("type filter text");
    GridDataFactory.fillDefaults().grab(true, false).applyTo(input);
    // property names of the Person class
    String[] propertyNames = { "firstName", "lastName", "gender", "married", "birthday", "address.street", "address.housenumber", "address.postalCode", "address.city" };
    // mapping from property to label, needed for column header labels
    Map<String, String> propertyToLabelMap = new HashMap<>();
    propertyToLabelMap.put("firstName", "Firstname");
    propertyToLabelMap.put("lastName", "Lastname");
    propertyToLabelMap.put("gender", "Gender");
    propertyToLabelMap.put("married", "Married");
    propertyToLabelMap.put("birthday", "Birthday");
    propertyToLabelMap.put("address.street", "Street");
    propertyToLabelMap.put("address.housenumber", "Housenumber");
    propertyToLabelMap.put("address.postalCode", "Postal Code");
    propertyToLabelMap.put("address.city", "City");
    IColumnPropertyAccessor<PersonWithAddress> columnPropertyAccessor = new ExtendedReflectiveColumnPropertyAccessor<>(propertyNames);
    BodyLayerStack<PersonWithAddress> bodyLayerStack = new BodyLayerStack<>(PersonService.getPersonsWithAddress(10000), columnPropertyAccessor);
    // build the column header layer
    IDataProvider columnHeaderDataProvider = new DefaultColumnHeaderDataProvider(propertyNames, propertyToLabelMap);
    DataLayer columnHeaderDataLayer = new DefaultColumnHeaderDataLayer(columnHeaderDataProvider);
    ILayer columnHeaderLayer = new ColumnHeaderLayer(columnHeaderDataLayer, bodyLayerStack, (SelectionLayer) null);
    CompositeLayer composite = new CompositeLayer(1, 2);
    composite.setChildLayer(GridRegion.COLUMN_HEADER, columnHeaderLayer, 0, 0);
    composite.setChildLayer(GridRegion.BODY, bodyLayerStack, 0, 1);
    RegexMarkupValue regexMarkup = new RegexMarkupValue("", "<span style=\"background-color:rgb(255, 255, 0)\">", "</span>");
    NatTable natTable = new NatTable(panel, composite, false);
    natTable.addConfiguration(new DefaultNatTableStyleConfiguration() {

        {
            this.cellPainter = new BackgroundPainter(new PaddingDecorator(new RichTextCellPainter(), 2));
        }

        @Override
        public void configureRegistry(IConfigRegistry configRegistry) {
            super.configureRegistry(configRegistry);
            // markup for highlighting
            MarkupDisplayConverter markupConverter = new MarkupDisplayConverter();
            markupConverter.registerMarkup("highlight", regexMarkup);
            // register markup display converter for normal displaymode in
            // the body
            configRegistry.registerConfigAttribute(CellConfigAttributes.DISPLAY_CONVERTER, markupConverter, DisplayMode.NORMAL, GridRegion.BODY);
        }
    });
    natTable.configure();
    natTable.addOverlayPainter(new NatTableBorderOverlayPainter());
    GridDataFactory.fillDefaults().grab(true, true).applyTo(natTable);
    // define a TextMatcherEditor and set it to the FilterList
    TextMatcherEditor<PersonWithAddress> matcherEditor = new TextMatcherEditor<>(new TextFilterator<PersonWithAddress>() {

        @Override
        public void getFilterStrings(List<String> baseList, PersonWithAddress element) {
            // add all values that should be included in filtering
            // Note:
            // if special converters are involved in rendering,
            // consider using them for adding the String values
            baseList.add(element.getFirstName());
            baseList.add(element.getLastName());
            baseList.add("" + element.getGender());
            baseList.add("" + element.isMarried());
            baseList.add("" + element.getBirthday());
            baseList.add(element.getAddress().getStreet());
            baseList.add("" + element.getAddress().getHousenumber());
            baseList.add("" + element.getAddress().getPostalCode());
            baseList.add(element.getAddress().getCity());
        }
    });
    matcherEditor.setMode(TextMatcherEditor.CONTAINS);
    bodyLayerStack.getFilterList().setMatcherEditor(matcherEditor);
    // connect the input field with the matcher
    input.addKeyListener(new KeyAdapter() {

        @Override
        public void keyPressed(KeyEvent e) {
            if (e.keyCode == SWT.CR || e.keyCode == SWT.KEYPAD_CR) {
                String text = input.getText();
                matcherEditor.setFilterText(new String[] { text });
                regexMarkup.setRegexValue(text.isEmpty() ? "" : "(" + text + ")");
                natTable.refresh(false);
            }
        }
    });
    return natTable;
}
Also used : HashMap(java.util.HashMap) ColumnHeaderLayer(org.eclipse.nebula.widgets.nattable.grid.layer.ColumnHeaderLayer) KeyAdapter(org.eclipse.swt.events.KeyAdapter) IDataProvider(org.eclipse.nebula.widgets.nattable.data.IDataProvider) TextMatcherEditor(ca.odell.glazedlists.matchers.TextMatcherEditor) KeyEvent(org.eclipse.swt.events.KeyEvent) GridLayout(org.eclipse.swt.layout.GridLayout) DataLayer(org.eclipse.nebula.widgets.nattable.layer.DataLayer) DefaultColumnHeaderDataLayer(org.eclipse.nebula.widgets.nattable.grid.layer.DefaultColumnHeaderDataLayer) ExtendedReflectiveColumnPropertyAccessor(org.eclipse.nebula.widgets.nattable.data.ExtendedReflectiveColumnPropertyAccessor) DefaultNatTableStyleConfiguration(org.eclipse.nebula.widgets.nattable.config.DefaultNatTableStyleConfiguration) NatTable(org.eclipse.nebula.widgets.nattable.NatTable) NatTableBorderOverlayPainter(org.eclipse.nebula.widgets.nattable.painter.NatTableBorderOverlayPainter) PersonWithAddress(org.eclipse.nebula.widgets.nattable.dataset.person.PersonWithAddress) BackgroundPainter(org.eclipse.nebula.widgets.nattable.painter.cell.BackgroundPainter) Composite(org.eclipse.swt.widgets.Composite) ILayer(org.eclipse.nebula.widgets.nattable.layer.ILayer) PaddingDecorator(org.eclipse.nebula.widgets.nattable.painter.cell.decorator.PaddingDecorator) MarkupDisplayConverter(org.eclipse.nebula.widgets.nattable.extension.nebula.richtext.MarkupDisplayConverter) Text(org.eclipse.swt.widgets.Text) DefaultColumnHeaderDataLayer(org.eclipse.nebula.widgets.nattable.grid.layer.DefaultColumnHeaderDataLayer) RichTextCellPainter(org.eclipse.nebula.widgets.nattable.extension.nebula.richtext.RichTextCellPainter) CompositeLayer(org.eclipse.nebula.widgets.nattable.layer.CompositeLayer) RegexMarkupValue(org.eclipse.nebula.widgets.nattable.extension.nebula.richtext.RegexMarkupValue) IConfigRegistry(org.eclipse.nebula.widgets.nattable.config.IConfigRegistry) DefaultColumnHeaderDataProvider(org.eclipse.nebula.widgets.nattable.grid.data.DefaultColumnHeaderDataProvider)

Aggregations

TextMatcherEditor (ca.odell.glazedlists.matchers.TextMatcherEditor)1 HashMap (java.util.HashMap)1 NatTable (org.eclipse.nebula.widgets.nattable.NatTable)1 DefaultNatTableStyleConfiguration (org.eclipse.nebula.widgets.nattable.config.DefaultNatTableStyleConfiguration)1 IConfigRegistry (org.eclipse.nebula.widgets.nattable.config.IConfigRegistry)1 ExtendedReflectiveColumnPropertyAccessor (org.eclipse.nebula.widgets.nattable.data.ExtendedReflectiveColumnPropertyAccessor)1 IDataProvider (org.eclipse.nebula.widgets.nattable.data.IDataProvider)1 PersonWithAddress (org.eclipse.nebula.widgets.nattable.dataset.person.PersonWithAddress)1 MarkupDisplayConverter (org.eclipse.nebula.widgets.nattable.extension.nebula.richtext.MarkupDisplayConverter)1 RegexMarkupValue (org.eclipse.nebula.widgets.nattable.extension.nebula.richtext.RegexMarkupValue)1 RichTextCellPainter (org.eclipse.nebula.widgets.nattable.extension.nebula.richtext.RichTextCellPainter)1 DefaultColumnHeaderDataProvider (org.eclipse.nebula.widgets.nattable.grid.data.DefaultColumnHeaderDataProvider)1 ColumnHeaderLayer (org.eclipse.nebula.widgets.nattable.grid.layer.ColumnHeaderLayer)1 DefaultColumnHeaderDataLayer (org.eclipse.nebula.widgets.nattable.grid.layer.DefaultColumnHeaderDataLayer)1 CompositeLayer (org.eclipse.nebula.widgets.nattable.layer.CompositeLayer)1 DataLayer (org.eclipse.nebula.widgets.nattable.layer.DataLayer)1 ILayer (org.eclipse.nebula.widgets.nattable.layer.ILayer)1 NatTableBorderOverlayPainter (org.eclipse.nebula.widgets.nattable.painter.NatTableBorderOverlayPainter)1 BackgroundPainter (org.eclipse.nebula.widgets.nattable.painter.cell.BackgroundPainter)1 PaddingDecorator (org.eclipse.nebula.widgets.nattable.painter.cell.decorator.PaddingDecorator)1