SCViewer/com.minres.scviewer.e4.appl.../src/com/minres/scviewer/e4/application/parts/WaveformListPart.java

170 lines
5.5 KiB
Java

package com.minres.scviewer.e4.application.parts;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.inject.Named;
import org.eclipse.e4.core.di.annotations.Optional;
import org.eclipse.e4.core.services.events.IEventBroker;
import org.eclipse.e4.ui.di.Focus;
import org.eclipse.e4.ui.di.UIEventTopic;
import org.eclipse.e4.ui.services.IServiceConstants;
import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
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.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
import org.eclipse.wb.swt.ResourceManager;
import com.minres.scviewer.database.ITx;
import com.minres.scviewer.database.IWaveform;
import com.minres.scviewer.e4.application.provider.TxDbContentProvider;
import com.minres.scviewer.e4.application.provider.TxDbLabelProvider;
public class WaveformListPart implements ISelectionChangedListener {
@Inject IEventBroker eventBroker;
@Inject ESelectionService selectionService;
private Text nameFilter;
private TableViewer txTableViewer;
ToolItem appendItem, insertItem;
WaveformAttributeFilter attributeFilter;
@PostConstruct
public void createComposite(Composite parent) {
parent.setLayout(new GridLayout(1, false));
nameFilter = new Text(parent, SWT.BORDER);
nameFilter.setMessage("Enter text to filter waveforms");
nameFilter.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
attributeFilter.setSearchText(((Text) e.widget).getText());
txTableViewer.refresh();
}
});
nameFilter.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
attributeFilter = new WaveformAttributeFilter();
txTableViewer = new TableViewer(parent);
txTableViewer.setContentProvider(new TxDbContentProvider());
txTableViewer.setLabelProvider(new TxDbLabelProvider());
txTableViewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH));
txTableViewer.addSelectionChangedListener(this);
txTableViewer.addFilter(attributeFilter);
ToolBar toolBar = new ToolBar(parent, SWT.FLAT | SWT.RIGHT);
toolBar.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
toolBar.setBounds(0, 0, 87, 20);
insertItem = new ToolItem(toolBar, SWT.NONE);
insertItem.setImage(ResourceManager.getPluginImage("com.minres.scviewer.e4.application", "icons/bullet_plus.png"));
insertItem.setText("Insert");
insertItem.setEnabled(false);
insertItem.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
eventBroker.post(WaveformViewerPart.ADD_WAVEFORM,
((IStructuredSelection)txTableViewer.getSelection()).toList());
}
});
appendItem = new ToolItem(toolBar, SWT.NONE);
appendItem.setImage(ResourceManager.getPluginImage("com.minres.scviewer.e4.application", "icons/bullet_plus.png"));
appendItem.setText("Append");
appendItem.setEnabled(false);
appendItem.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
eventBroker.post(WaveformViewerPart.ADD_WAVEFORM,
((IStructuredSelection)txTableViewer.getSelection()).toList());
}
});
}
@Focus
public void setFocus() {
txTableViewer.getTable().setFocus();
setSelection(txTableViewer.getSelection());
}
@Inject @Optional
public void getStatusEvent(@UIEventTopic(WaveformViewerPart.ACTIVE_NODE) Object o) {
txTableViewer.setInput(o);
}
@Override
public void selectionChanged(SelectionChangedEvent event) {
setSelection(event.getSelection());
}
protected void setSelection(ISelection iSelection) {
IStructuredSelection selection = (IStructuredSelection)iSelection;
switch(selection.size()){
case 0:
appendItem.setEnabled(false);
insertItem.setEnabled(false);
break;
case 1:
selectionService.setSelection(selection.getFirstElement());
appendItem.setEnabled(true);
break;
default:
selectionService.setSelection(selection.toList());
appendItem.setEnabled(true);
break;
}
}
@Inject
public void setSelection(@Named(IServiceConstants.ACTIVE_SELECTION) @Optional Object object){
if(txTableViewer!=null && !insertItem.isDisposed() && !appendItem.isDisposed())
if(object instanceof ITx && appendItem.isEnabled()){
insertItem.setEnabled(true);
} else if(object instanceof IWaveform<?> && appendItem.isEnabled()){
insertItem.setEnabled(true);
} else {
insertItem.setEnabled(false);
}
}
public class WaveformAttributeFilter extends ViewerFilter {
private String searchString;
public void setSearchText(String s) {
this.searchString = ".*" + s + ".*";
}
@Override
public boolean select(Viewer viewer, Object parentElement, Object element) {
if (searchString == null || searchString.length() == 0) {
return true;
}
IWaveform<?> p = (IWaveform<?>) element;
if (p.getName().matches(searchString)) {
return true;
}
return false;
}
}
}