/*******************************************************************************
* Copyright (c) 2004, 2007 Boeing.
* 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:
* Boeing - initial API and implementation
*******************************************************************************/
package org.eclipse.nebula.widgets.xviewer.customize;
import org.eclipse.nebula.widgets.xviewer.XViewer;
import org.eclipse.nebula.widgets.xviewer.XViewerText;
import org.eclipse.nebula.widgets.xviewer.util.internal.XViewerLib;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Text;
/**
* Provides UI for display of current filter
*
* @author Donald G. Dunne
*/
public class FilterDataUI {
private Text filterText;
private final XViewer xViewer;
private final boolean filterRealTime;
private Button regularExpression;
public FilterDataUI(XViewer xViewer, boolean filterRealTime) {
this.xViewer = xViewer;
this.filterRealTime = filterRealTime;
}
public void createWidgets(Composite comp) {
Label label = new Label(comp, SWT.NONE);
label.setText(XViewerText.get("label.filter")); //$NON-NLS-1$
label.setToolTipText(XViewerText.get("FilterDataUI.prompt.tooltip")); //$NON-NLS-1$
GridData gd = new GridData(SWT.RIGHT, SWT.NONE, false, false);
label.setLayoutData(gd);
filterText = new Text(comp, SWT.SINGLE | SWT.BORDER);
gd = new GridData(SWT.RIGHT, SWT.NONE, false, false);
gd.widthHint = 100;
filterText.setLayoutData(gd);
filterText.addKeyListener(new KeyListener() {
@Override
public void keyPressed(KeyEvent e) {
// do nothing
}
@Override
public void keyReleased(KeyEvent e) {
if (e.keyCode == SWT.CR || e.keyCode == SWT.KEYPAD_CR || filterRealTime) {
// System.out.println(e.keyCode);
String newText = filterText.getText();
xViewer.getCustomizeMgr().setFilterText(newText, isRegularExpression());
}
}
});
Label filterLabel = new Label(comp, SWT.NONE);
filterLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.NONE, false, false));
filterLabel.setImage(XViewerLib.getImage("clear.gif")); //$NON-NLS-1$
filterLabel.addListener(SWT.MouseUp, new Listener() {
@Override
public void handleEvent(Event event) {
filterText.setText(""); //$NON-NLS-1$
xViewer.getCustomizeMgr().setFilterText("", isRegularExpression()); //$NON-NLS-1$
}
});
regularExpression = new Button(comp, SWT.CHECK);
regularExpression.setText(XViewerText.get("regex.prompt")); //$NON-NLS-1$
regularExpression.setToolTipText(XViewerText.get("regex.prompt.tooltip")); //$NON-NLS-1$
regularExpression.setLayoutData(new GridData(SWT.RIGHT, SWT.NONE, false, false));
regularExpression.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
xViewer.getCustomizeMgr().setFilterText(filterText.getText(), isRegularExpression());
}
});
}
public boolean isRegularExpression() {
if (regularExpression != null && !regularExpression.isDisposed()) {
return regularExpression.getSelection();
}
return false;
}
public void update() {
if (!xViewer.getCustomizeMgr().getFilterText().equals(filterText.getText())) {
filterText.setText(xViewer.getCustomizeMgr().getFilterText());
}
}
public void setFocus() {
if (filterText != null && !filterText.isDisposed()) {
filterText.setFocus();
}
}
public void addFilterTextListener(KeyListener keyListener) {
if (filterText != null && !filterText.isDisposed()) {
filterText.addKeyListener(keyListener);
}
}
public void clear() {
filterText.setText(""); //$NON-NLS-1$
xViewer.getCustomizeMgr().setFilterText("", isRegularExpression()); //$NON-NLS-1$
}
public void appendToStatusLabel(StringBuffer sb) {
if (filterText != null && !filterText.getText().equals("")) { //$NON-NLS-1$
sb.append(XViewerText.get("status.text_filter")); //$NON-NLS-1$
}
}
}