package ch.elexis.core.ui.medication.views;
import java.util.List;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.NotEnabledException;
import org.eclipse.core.commands.NotHandledException;
import org.eclipse.core.commands.common.NotDefinedException;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.layout.TableColumnLayout;
import org.eclipse.jface.viewers.ColumnViewerToolTipSupport;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.window.ToolTip;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.handlers.IHandlerService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ch.elexis.core.data.events.ElexisEventDispatcher;
import ch.elexis.core.model.IPersistentObject;
import ch.elexis.data.Prescription;
public class MedicationTableComposite extends Composite {
private static Logger log = LoggerFactory.getLogger(MedicationTableComposite.class);
private TableViewer viewer;
private TableColumnLayout layout;
private MedicationComposite medicationComposite;
private List<Prescription> pendingInput;
public MedicationTableComposite(Composite parent, int style){
super(parent, style);
setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
layout = new TableColumnLayout();
setLayout(layout);
viewer = new TableViewer(this, SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI);
viewer.getTable().setHeaderVisible(true);
ColumnViewerToolTipSupport.enableFor(viewer, ToolTip.NO_RECREATE);
viewer.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent e){
IStructuredSelection is =
(IStructuredSelection) viewer.getSelection();
MedicationTableViewerItem presc = (MedicationTableViewerItem) is.getFirstElement();
// set last disposition information
IPersistentObject po = (presc != null) ? presc.getLastDisposed() : null;
medicationComposite.setLastDisposalPO(po);
// set writable databinding value
medicationComposite.setSelectedMedication(presc);
ElexisEventDispatcher
.fireSelectionEvent((presc != null) ? presc.getPrescription() : null);
}
});
viewer.addDoubleClickListener(new IDoubleClickListener() {
@Override
public void doubleClick(DoubleClickEvent event){
StructuredSelection ss = (StructuredSelection) event.getSelection();
if (ss != null && !ss.isEmpty()) {
try {
IHandlerService handlerService = (IHandlerService) PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getService(IHandlerService.class);
handlerService.executeCommand(
"ch.elexis.core.ui.medication.OpenArticelDetailDialog", null);
} catch (ExecutionException | NotDefinedException | NotEnabledException
| NotHandledException e) {
MessageDialog.openError(getShell(), "Fehler",
"Eigenschaften konnten nicht geƶffnet werden.");
log.error("cannot open article detail dialog", e);
}
}
}
});
MedicationViewerHelper.createTypeColumn(viewer, layout, 0);
MedicationViewerHelper.createArticleColumn(viewer, layout, 1);
MedicationViewerHelper.createDosageColumn(viewer, layout, 2);
MedicationViewerHelper.createBeginColumn(viewer, layout, 3);
MedicationViewerHelper.createIntakeCommentColumn(viewer, layout, 4);
MedicationViewerHelper.createMandantColumn(viewer, layout, 5);
viewer.setContentProvider(new MedicationTableViewerContentProvider(viewer));
}
public void setMedicationComposite(MedicationComposite medicationComposite){
this.medicationComposite = medicationComposite;
}
public TableViewer getTableViewer(){
return viewer;
}
public void setInput(List<Prescription> medicationInput){
if (isVisible()) {
viewer.setInput(medicationInput);
} else {
pendingInput = medicationInput;
}
}
public void setPendingInput(){
if (pendingInput != null) {
viewer.setInput(pendingInput);
pendingInput = null;
}
}
}