package ch.elexis.core.ui.medication.views;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.part.ViewPart;
import ch.elexis.core.data.activator.CoreHub;
import ch.elexis.core.data.events.ElexisEvent;
import ch.elexis.core.data.events.ElexisEventDispatcher;
import ch.elexis.core.data.events.ElexisEventListener;
import ch.elexis.core.model.prescription.EntryType;
import ch.elexis.core.ui.actions.GlobalEventDispatcher;
import ch.elexis.core.ui.actions.IActivationListener;
import ch.elexis.core.ui.events.ElexisUiEventListenerImpl;
import ch.elexis.core.ui.medication.PreferenceConstants;
import ch.elexis.data.Patient;
import ch.elexis.data.PersistentObject;
import ch.elexis.data.Prescription;
public class MedicationView extends ViewPart implements IActivationListener {
public MedicationView(){}
private MedicationComposite tpc;
public static final String PART_ID = "ch.elexis.core.ui.medication.views.MedicationView"; //$NON-NLS-1$
private ElexisEventListener eeli_pat = new ElexisUiEventListenerImpl(Patient.class) {
public void runInUi(ElexisEvent ev){
updateUi(ElexisEventDispatcher.getSelectedPatient(), false);
}
};
private ElexisEventListener eeli_presc = new ElexisUiEventListenerImpl(Prescription.class,
ElexisEvent.EVENT_CREATE | ElexisEvent.EVENT_DELETE | ElexisEvent.EVENT_UPDATE) {
public void runInUi(ElexisEvent ev){
PersistentObject prescObj = ev.getObject();
if (prescObj instanceof Prescription) {
// ignore updates of recipe and self dispensed entries, if not showing history
if (!getMedicationComposite().isShowingHistory()) {
EntryType entryType = ((Prescription) prescObj).getEntryType();
if (entryType == EntryType.RECIPE || entryType == EntryType.SELF_DISPENSED) {
return;
}
}
}
updateUi(ElexisEventDispatcher.getSelectedPatient(), true);
}
};
@Override
public void createPartControl(Composite parent){
tpc = new MedicationComposite(parent, SWT.NONE, getSite());
getSite().setSelectionProvider(tpc);
GlobalEventDispatcher.addActivationListener(this, this);
int sorter = CoreHub.userCfg.get(PreferenceConstants.PREF_MEDICATIONLIST_SORT_ORDER, 1);
tpc.setViewerSortOrder(ViewerSortOrder.getSortOrderPerValue(sorter));
}
public void setMedicationTableViewerComparator(ViewerSortOrder order){
tpc.setViewerSortOrder(order);
CoreHub.userCfg.set(PreferenceConstants.PREF_MEDICATIONLIST_SORT_ORDER, order.val);
}
@Override
public void setFocus(){
tpc.setFocus();
updateUi(ElexisEventDispatcher.getSelectedPatient(), false);
}
private void updateUi(Patient pat, boolean forceUpdate){
tpc.updateUi(pat, forceUpdate);
}
@Override
public void activation(boolean mode){
if (mode) {
setFocus();
}
}
@Override
public void visible(boolean mode){
if (mode) {
ElexisEventDispatcher.getInstance().addListeners(eeli_pat, eeli_presc);
} else {
ElexisEventDispatcher.getInstance().removeListeners(eeli_pat, eeli_presc);
}
}
public void refresh(){
tpc.refresh();
}
public void resetSelection(){
tpc.resetSelectedMedication();
}
public MedicationComposite getMedicationComposite(){
return tpc;
}
}