package ch.elexis.core.ui.medication.views;
import java.text.MessageFormat;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.layout.TableColumnLayout;
import org.eclipse.jface.viewers.ColumnPixelData;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.ui.IWorkbenchPartSite;
import ch.elexis.core.constants.StringConstants;
import ch.elexis.core.model.IPersistentObject;
import ch.elexis.core.model.prescription.EntryType;
import ch.elexis.core.ui.icons.ImageSize;
import ch.elexis.core.ui.icons.Images;
import ch.elexis.data.Rezept;
import ch.elexis.data.Verrechnet;
public class MedicationViewerHelper {
public static TableViewerColumn createTypeColumn(TableViewer viewer, TableColumnLayout layout,
int columnIndex){
TableViewerColumn ret = new TableViewerColumn(viewer, SWT.NONE);
TableColumn tblclmnStateDisposition = ret.getColumn();
layout.setColumnData(tblclmnStateDisposition, new ColumnPixelData(20, false, false));
tblclmnStateDisposition.addSelectionListener(
getSelectionAdapter(viewer, tblclmnStateDisposition, columnIndex));
ret.setLabelProvider(new MedicationCellLabelProvider() {
@Override
public String getText(Object element){
return "";
}
@Override
public Image getImage(Object element){
return ((MedicationTableViewerItem) element).getImage();
}
});
return ret;
}
public static TableViewerColumn createArticleColumn(TableViewer viewer,
TableColumnLayout layout, int columnIndex){
TableViewerColumn ret = new TableViewerColumn(viewer, SWT.NONE);
final TableColumn tblclmnArticle = ret.getColumn();
layout.setColumnData(tblclmnArticle, new ColumnPixelData(250, true, true));
tblclmnArticle.setText(Messages.TherapieplanComposite_tblclmnArticle_text);
tblclmnArticle
.addSelectionListener(getSelectionAdapter(viewer, tblclmnArticle, columnIndex));
ret.setLabelProvider(new MedicationCellLabelProvider() {
@Override
public String getText(Object element){
MedicationTableViewerItem pres = (MedicationTableViewerItem) element;
return pres.getArtikelLabel();
}
@Override
public String getToolTipText(Object element){
MedicationTableViewerItem pres = (MedicationTableViewerItem) element;
String label = "";
if (pres.isFixedMediation()) {
String date = pres.getBeginDate();
if (date != null && !date.isEmpty()) {
label = MessageFormat.format(Messages.MedicationComposite_startedAt, date);
}
} else {
IPersistentObject po = pres.getLastDisposed();
if (po != null) {
if (po instanceof Rezept) {
Rezept rp = (Rezept) po;
label = MessageFormat
.format(Messages.MedicationComposite_lastReceivedAt, rp.getDate());
} else if (po instanceof Verrechnet) {
Verrechnet v = (Verrechnet) po;
if (v.getKons() != null) {
label = MessageFormat.format(
Messages.MedicationComposite_lastReceivedAt,
v.getKons().getDatum());
}
}
} else {
String date = pres.getEndDate();
String reason = pres.getStopReason() == null ? "?" : pres.getStopReason();
label = MessageFormat.format(Messages.MedicationComposite_stopDateAndReason,
date, reason);
}
}
return label;
}
});
return ret;
}
public static TableViewerColumn createDosageColumn(TableViewer viewer,
TableColumnLayout layout, int columnIndex){
TableViewerColumn ret = new TableViewerColumn(viewer, SWT.NONE);
ret.setLabelProvider(new MedicationCellLabelProvider() {
@Override
public String getText(Object element){
MedicationTableViewerItem pres = (MedicationTableViewerItem) element;
String dosis = pres.getDosis();
return (dosis.equals(StringConstants.ZERO) ? Messages.MedicationComposite_stopped
: dosis);
}
});
TableColumn tblclmnDosage = ret.getColumn();
tblclmnDosage.setToolTipText(Messages.TherapieplanComposite_tblclmnDosage_toolTipText);
tblclmnDosage.addSelectionListener(getSelectionAdapter(viewer, tblclmnDosage, columnIndex));
layout.setColumnData(tblclmnDosage, new ColumnPixelData(60, true, true));
ret.getColumn().setText(Messages.TherapieplanComposite_tblclmnDosage_text);
return ret;
}
public static TableViewerColumn createBeginColumn(TableViewer viewer,
TableColumnLayout layout, int columnIndex){
TableViewerColumn ret = new TableViewerColumn(viewer, SWT.CENTER);
TableColumn tblclmnEnacted = ret.getColumn();
layout.setColumnData(tblclmnEnacted, new ColumnPixelData(60, true, true));
tblclmnEnacted.setImage(Images.resize(Images.IMG_NEXT_WO_SHADOW.getImage(),
ImageSize._12x12_TableColumnIconSize));
tblclmnEnacted
.addSelectionListener(getSelectionAdapter(viewer, tblclmnEnacted, columnIndex));
ret.setLabelProvider(new MedicationCellLabelProvider() {
@Override
public String getText(Object element){
MedicationTableViewerItem pres = (MedicationTableViewerItem) element;
return pres.getBeginDate();
}
});
return ret;
}
public static TableViewerColumn createIntakeCommentColumn(TableViewer viewer,
TableColumnLayout layout, int columnIndex){
TableViewerColumn ret = new TableViewerColumn(viewer, SWT.NONE);
TableColumn tblclmnComment = ret.getColumn();
layout.setColumnData(tblclmnComment,
new ColumnWeightData(1, ColumnWeightData.MINIMUM_WIDTH, true));
tblclmnComment.setText(Messages.TherapieplanComposite_tblclmnComment_text);
tblclmnComment
.addSelectionListener(getSelectionAdapter(viewer, tblclmnComment, columnIndex));
ret.setLabelProvider(new MedicationCellLabelProvider() {
@Override
public String getText(Object element){
MedicationTableViewerItem pres = (MedicationTableViewerItem) element;
return pres.getRemark();
}
});
return ret;
}
public static TableViewerColumn createStopColumn(TableViewer viewer, TableColumnLayout layout,
int columnIndex){
TableViewerColumn ret = new TableViewerColumn(viewer, SWT.CENTER);
TableColumn tblclmnStop = ret.getColumn();
ColumnPixelData stopColumnPixelData = new ColumnPixelData(60, true, true);
layout.setColumnData(tblclmnStop, stopColumnPixelData);
tblclmnStop.setImage(Images.resize(Images.IMG_ARROWSTOP_WO_SHADOW.getImage(),
ImageSize._12x12_TableColumnIconSize));
tblclmnStop.addSelectionListener(getSelectionAdapter(viewer, tblclmnStop, columnIndex));
ret.setLabelProvider(new MedicationCellLabelProvider() {
@Override
public String getText(Object element){
MedicationTableViewerItem pres = (MedicationTableViewerItem) element;
if (pres.getEntryType() != EntryType.RECIPE
&& pres.getEntryType() != EntryType.SELF_DISPENSED) {
return pres.getEndDate();
}
return "";
}
});
return ret;
}
public static TableViewerColumn createStopReasonColumn(TableViewer viewer,
TableColumnLayout layout,
int columnIndex){
TableViewerColumn ret = new TableViewerColumn(viewer, SWT.LEFT);
TableColumn tblclmnReason = ret.getColumn();
ColumnWeightData reasonColumnWeightData =
new ColumnWeightData(1, ColumnWeightData.MINIMUM_WIDTH, true);
layout.setColumnData(tblclmnReason, reasonColumnWeightData);
tblclmnReason.setText(Messages.MedicationComposite_stopReason);
tblclmnReason.addSelectionListener(getSelectionAdapter(viewer, tblclmnReason, columnIndex));
ret.setLabelProvider(new MedicationCellLabelProvider() {
@Override
public String getText(Object element){
MedicationTableViewerItem pres = (MedicationTableViewerItem) element;
if (pres.getEntryType() != EntryType.RECIPE
&& pres.getEntryType() != EntryType.SELF_DISPENSED) {
String stopReason = pres.getStopReason();
if (stopReason != null && !stopReason.isEmpty()) {
return stopReason;
}
}
return "";
}
});
return ret;
}
public static TableViewerColumn createMandantColumn(TableViewer viewer,
TableColumnLayout layout, int columnIndex){
TableViewerColumn ret = new TableViewerColumn(viewer, SWT.LEFT);
TableColumn tblclmnMandant = ret.getColumn();
ColumnWeightData mandantColumnWeightData =
new ColumnWeightData(0, 50, true);
layout.setColumnData(tblclmnMandant, mandantColumnWeightData);
tblclmnMandant.setText("Anwender");
ret.setLabelProvider(new MedicationCellLabelProvider() {
@Override
public String getText(Object element){
return ((MedicationTableViewerItem) element).getPrescriptorLabel();
}
});
return ret;
}
// public static TableViewerColumn createSuppliedUntilColumn(TableViewer viewer, TableColumnLayout layout, int columnIndex) {
// supplied until
// TableViewerColumn tableViewerColumnSuppliedUntil =
// new TableViewerColumn(medicationTableViewer, SWT.CENTER);
// TableColumn tblclmnSufficient = tableViewerColumnSuppliedUntil.getColumn();
// tcl_compositeMedicationTable.setColumnData(tblclmnSufficient,
// new ColumnPixelData(45, true, true));
// tblclmnSufficient.setText(Messages.TherapieplanComposite_tblclmnSupplied_text);
// tblclmnSufficient.addSelectionListener(getSelectionAdapter(tblclmnSufficient, columnIndex));
// tableViewerColumnSuppliedUntil.setLabelProvider(new MedicationCellLabelProvider() {
//
// @Override
// public String getText(Object element){
// // SLLOW
// MedicationTableViewerItem pres = (MedicationTableViewerItem) element;
// if (!pres.isFixedMediation() || pres.isReserveMedication())
// return "";
//
// TimeTool tt = pres.getSuppliedUntilDate();
// if (tt != null && tt.isAfterOrEqual(new TimeTool())) {
// return "OK";
// }
//
// return "?";
// }
// });
// }
public static void addContextMenu(TableViewer viewer, MedicationComposite medicationComposite,
IWorkbenchPartSite site){
// register context menu for table viewer
MenuManager menuManager = new MenuManager();
Menu menu = menuManager.createContextMenu(viewer.getTable());
viewer.getTable().setMenu(menu);
if (site != null) {
site.registerContextMenu("ch.elexis.core.ui.medication.tables", menuManager, viewer);
}
}
private static SelectionAdapter getSelectionAdapter(final TableViewer viewer,
final TableColumn column, final int index){
SelectionAdapter selectionAdapter = new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e){
ViewerSortOrder comparator = MedicationViewHelper.getSelectedComparator();
if (ViewerSortOrder.DEFAULT.equals(comparator)) {
comparator.setColumn(index);
int dir = comparator.getDirection();
viewer.getTable().setSortColumn(column);
viewer.getTable().setSortDirection(dir);
viewer.refresh(true);
}
}
};
return selectionAdapter;
}
}