/******************************************************************************* * Copyright (c) 2009 Johannes Utzig. * 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: * Johannes Utzig - initial API and implementation *******************************************************************************/ package org.eclipse.buckminster.ui.dependency.visualizer.controls; import org.eclipse.buckminster.ui.dependency.visualizer.Messages; import org.eclipse.buckminster.ui.dependency.visualizer.controls.listener.ViewerSettingChangeEvent; import org.eclipse.buckminster.ui.dependency.visualizer.controls.listener.ViewerSettingType; import org.eclipse.buckminster.ui.dependency.visualizer.viewer.filter.PlatformComponentsFilter; import org.eclipse.buckminster.ui.dependency.visualizer.viewer.filter.RegExFilter; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.forms.widgets.FormToolkit; /** * A control to select what filters should be applied to the viewer * * @author Johannes Utzig * */ public class FilterControl extends AbstractViewerSettingControl { class RegExText implements Runnable, ModifyListener { private ViewerFilter regexFilter; private boolean isProcessing; private Text regex; private boolean invert; public RegExText(boolean invert) { super(); this.invert = invert; } public void createControl(Composite parent) { if (invert) { getWidgetToolkit().createLabel(parent, Messages.Blacklist); } else { getWidgetToolkit().createLabel(parent, Messages.Whilelist); } regex = getWidgetToolkit().createText(parent, "", SWT.BORDER); //$NON-NLS-1$ regex.addModifyListener(this); } @Override public void modifyText(ModifyEvent e) { if (!isProcessing) { e.display.timerExec(1000, this); isProcessing = true; } } @Override public void run() { if (regexFilter != null) fireViewerSettingsChangedEvent(new ViewerSettingChangeEvent(FilterControl.this, ViewerSettingType.FILTER_REMOVED, regexFilter, null)); if (regex.getText() == null || regex.getText().length() == 0) { return; } regexFilter = new RegExFilter(regex.getText(), invert); fireViewerSettingsChangedEvent(new ViewerSettingChangeEvent(FilterControl.this, ViewerSettingType.FILTER_ADDED, regexFilter, null)); isProcessing = false; } } private ViewerFilter platformFilter = new PlatformComponentsFilter(); public FilterControl(FormToolkit toolkit) { super(toolkit); } @Override public Control createControl(Composite parent) { Composite filterComposite = getWidgetToolkit().createComposite(parent); filterComposite.setLayout(new GridLayout(2, true)); final Button filterPlatform = getWidgetToolkit().createButton(filterComposite, Messages.FilterTargetPlatform, SWT.CHECK); GridDataFactory.fillDefaults().span(2, 1).applyTo(filterPlatform); filterPlatform.setSelection(true); filterPlatform.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if (filterPlatform.getSelection()) { fireViewerSettingsChangedEvent(new ViewerSettingChangeEvent(this, ViewerSettingType.FILTER_ADDED, platformFilter, null)); } else { fireViewerSettingsChangedEvent(new ViewerSettingChangeEvent(this, ViewerSettingType.FILTER_REMOVED, platformFilter, null)); } } }); // new RegExText(false).createControl(filterComposite); // new RegExText(true).createControl(filterComposite); // fire defaults fireViewerSettingsChangedEvent(new ViewerSettingChangeEvent(this, ViewerSettingType.FILTER_ADDED, platformFilter, null)); return filterComposite; } }