package at.medevit.elexis.loinc.ui.providers;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.ToolBar;
import at.medevit.elexis.loinc.model.LoincCode;
import ch.elexis.core.ui.icons.Images;
import ch.elexis.core.ui.util.viewers.CommonViewer;
import ch.elexis.core.ui.util.viewers.ViewerConfigurer.ControlFieldListener;
import ch.elexis.core.ui.util.viewers.ViewerConfigurer.ControlFieldProvider;
import ch.elexis.data.PersistentObject;
import ch.elexis.data.Query;
import ch.rgw.tools.IFilter;
public class LoincCodeControlFieldProvider implements ControlFieldProvider {
private CommonViewer commonViewer;
private StructuredViewer viewer;
private Text txtFilter;
private LoincCodeTextFilter filterCodeText;
public LoincCodeControlFieldProvider(final CommonViewer viewer){
commonViewer = viewer;
}
@Override
public Composite createControl(Composite parent){
final Composite ret = new Composite(parent, SWT.NONE);
ret.setLayout(new FormLayout());
Label lblFilter = new Label(ret, SWT.NONE);
lblFilter.setText("Filter: ");
txtFilter = new Text(ret, SWT.BORDER | SWT.SEARCH);
txtFilter.setText(""); //$NON-NLS-1$
ToolBarManager tbManager = new ToolBarManager(SWT.FLAT | SWT.HORIZONTAL | SWT.WRAP);
tbManager.add(new Action("neu erstellen") {
{
setImageDescriptor(Images.IMG_NEW.getImageDescriptor());
setToolTipText("Neuer Loinc Code erstellen");
}
@Override
public void run(){
EditLoincCodeDialog dialog = new EditLoincCodeDialog(ret.getShell(), null);
if (dialog.open() == EditLoincCodeDialog.OK) {
}
}
});
ToolBar toolbar = tbManager.createControl(ret);
FormData fd = new FormData();
fd.top = new FormAttachment(0, 5);
fd.left = new FormAttachment(0, 5);
lblFilter.setLayoutData(fd);
fd = new FormData();
fd.top = new FormAttachment(0, 5);
fd.right = new FormAttachment(100, -5);
toolbar.setLayoutData(fd);
fd = new FormData();
fd.top = new FormAttachment(0, 5);
fd.left = new FormAttachment(lblFilter, 5);
fd.right = new FormAttachment(toolbar, -5);
txtFilter.setLayoutData(fd);
return ret;
}
@Override
public void addChangeListener(ControlFieldListener cl){
// TODO Auto-generated method stub
}
@Override
public void removeChangeListener(ControlFieldListener cl){
// TODO Auto-generated method stub
}
@Override
public String[] getValues(){
// TODO Auto-generated method stub
return null;
}
@Override
public void clearValues(){
// TODO Auto-generated method stub
}
@Override
public boolean isEmpty(){
// TODO Auto-generated method stub
return false;
}
@Override
public void setQuery(Query<? extends PersistentObject> q){
// TODO Auto-generated method stub
}
@Override
public IFilter createFilter(){
// TODO Auto-generated method stub
return null;
}
@Override
public void fireChangedEvent(){
// TODO Auto-generated method stub
}
@Override
public void fireSortEvent(String text){
// TODO Auto-generated method stub
}
@Override
public void setFocus(){
// apply filter to viewer on focus as the creation in common viewer is done
// first filter then viewer -> viewer not ready on createControl.
if (viewer == null) {
viewer = commonViewer.getViewerWidget();
filterCodeText = new LoincCodeTextFilter();
viewer.addFilter(filterCodeText);
viewer.setComparator(new LoincCodeComparator());
txtFilter.addKeyListener(new FilterKeyListener(txtFilter, viewer));
}
}
private class LoincCodeComparator extends ViewerComparator {
@Override
public int compare(Viewer viewer, Object e1, Object e2){
LoincCode lCode = (LoincCode) e1;
LoincCode rCode = (LoincCode) e2;
return lCode.getCode().compareTo(rCode.getCode());
}
}
private class FilterKeyListener extends KeyAdapter {
private Text text;
private StructuredViewer viewer;
FilterKeyListener(Text filterTxt, StructuredViewer viewer){
text = filterTxt;
this.viewer = viewer;
}
public void keyReleased(KeyEvent ke){
String txt = text.getText();
if (txt.length() > 1) {
filterCodeText.setSearchText(txt);
viewer.getControl().setRedraw(false);
viewer.refresh();
viewer.getControl().setRedraw(true);
} else {
filterCodeText.setSearchText(null);
viewer.getControl().setRedraw(false);
viewer.refresh();
viewer.getControl().setRedraw(true);
}
}
}
}