package com.laboki.eclipse.plugin.smartsave.preferences.ui;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Text;
import com.laboki.eclipse.plugin.smartsave.events.ContentTypeSearchQueryEvent;
import com.laboki.eclipse.plugin.smartsave.instance.Instance;
import com.laboki.eclipse.plugin.smartsave.main.EventBus;
import com.laboki.eclipse.plugin.smartsave.task.AsyncTask;
import com.laboki.eclipse.plugin.smartsave.task.TaskMutexRule;
public final class ContentTypeText implements Instance {
private static final TaskMutexRule RULE = new TaskMutexRule();
protected final Text text;
public ContentTypeText(final Composite parent) {
this.text =
new Text(parent, SWT.SEARCH | SWT.ICON_CANCEL | SWT.ICON_SEARCH);
this.setLayout();
this.setProperties();
this.addListeners();
}
private void
setLayout() {
final GridData data = new GridData();
data.horizontalAlignment = GridData.FILL;
data.grabExcessHorizontalSpace = true;
data.verticalAlignment = GridData.CENTER;
data.grabExcessVerticalSpace = false;
this.text.setLayoutData(data);
}
private void
setProperties() {
this.text.setMessage("start typing to filter file types...");
}
private void
addListeners() {
this.text.addModifyListener(e -> {
new AsyncTask() {
@Override
public void
execute() {
EventBus.post(new ContentTypeSearchQueryEvent(this.getText()));
}
private String
getText() {
return ContentTypeText.this.text.getText().trim();
}
}.setRule(ContentTypeText.RULE).start();
});
}
@Override
public Instance
start() {
return this;
}
@Override
public Instance
stop() {
return this;
}
}