/*******************************************************************************
* Copyright (c) 2007-2010, G. Weirich and Elexis
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* G. Weirich - initial implementation
*
*******************************************************************************/
package ch.elexis.icpc.views;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.DropTargetEvent;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.forms.widgets.Form;
import ch.elexis.core.ui.Hub;
import ch.elexis.core.ui.UiDesk;
import ch.elexis.core.ui.actions.CodeSelectorHandler;
import ch.elexis.data.PersistentObject;
import ch.elexis.icpc.Encounter;
import ch.elexis.icpc.IcpcCode;
import ch.elexis.core.ui.util.PersistentObjectDropTarget;
import ch.elexis.core.ui.util.SWTHelper;
import ch.rgw.tools.ExHandler;
/**
* An ICPC-Encounter. Every encounter belongs to exactly one Episode, but an Episode can (and will
* usually) contain several Encounters. An Encounter has an RFE (Reason for encounter, Problem), a
* diagnosis and a plan. This display will allow the user to attach those Elements by drag&drop
*
* @author Gerry
*
*/
public class EncounterDisplay extends Composite {
Form form;
Group gRfe, gDiag, gProc;
Label lRfe, lDiag, lProc;
Encounter actEncounter;
PersistentObjectDropTarget podRfe, podDiag, podProc;
public EncounterDisplay(Composite parent){
super(parent, SWT.NONE);
form = UiDesk.getToolkit().createForm(this);
setLayout(new GridLayout());
form.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true));
Composite body = form.getBody();
body.setLayout(new GridLayout());
gRfe = new Group(body, SWT.NONE);
gRfe.setText("RFE / Problem");
GridData gd = SWTHelper.getFillGridData(1, true, 1, true);
gd.heightHint = 30;
gRfe.setLayoutData(gd);
podRfe = new PersistentObjectDropTarget(gRfe, new PersistentObjectDropTarget.IReceiver() {
public boolean accept(PersistentObject o){
if (o instanceof IcpcCode) {
return true;
}
return false;
}
public void dropped(PersistentObject o, DropTargetEvent ev){
if ((actEncounter) != null && (o instanceof IcpcCode)) {
actEncounter.setRFE((IcpcCode) o);
setEncounter(actEncounter);
}
CodeSelectorHandler.getInstance().removeCodeSelectorTarget();
}
});
gRfe.setLayout(new FillLayout());
gRfe.addMouseListener(new ClickReact(podRfe, "RFE"));
lRfe = new Label(gRfe, SWT.WRAP);
gDiag = new Group(body, SWT.NONE);
gDiag.setText("Diagnose");
gDiag.setLayoutData(GridDataFactory.copyData(gd));
podDiag = new PersistentObjectDropTarget(gDiag, new PersistentObjectDropTarget.IReceiver() {
public boolean accept(PersistentObject o){
if (o instanceof IcpcCode) {
return true;
}
return false;
}
public void dropped(PersistentObject o, DropTargetEvent ev){
if ((actEncounter) != null && (o instanceof IcpcCode)) {
actEncounter.setDiag((IcpcCode) o);
setEncounter(actEncounter);
}
CodeSelectorHandler.getInstance().removeCodeSelectorTarget();
}
});
gDiag.setLayout(new FillLayout());
gDiag.addMouseListener(new ClickReact(podDiag, "DG"));
lDiag = new Label(gDiag, SWT.WRAP);
gProc = new Group(body, SWT.NONE);
gProc.setText("Procedere");
podProc = new PersistentObjectDropTarget(gProc, new PersistentObjectDropTarget.IReceiver() {
public boolean accept(PersistentObject o){
if (o instanceof IcpcCode) {
return true;
}
return false;
}
public void dropped(PersistentObject o, DropTargetEvent ev){
if ((actEncounter) != null && (o instanceof IcpcCode)) {
actEncounter.setProc((IcpcCode) o);
setEncounter(actEncounter);
}
CodeSelectorHandler.getInstance().removeCodeSelectorTarget();
}
});
gProc.setLayoutData(GridDataFactory.copyData(gd));
gProc.setLayout(new FillLayout());
gProc.addMouseListener(new ClickReact(podProc, "PROC"));
lProc = new Label(gProc, SWT.WRAP);
}
public void setEncounter(Encounter e){
actEncounter = e;
if (e == null) {
form.setText("Keine Episode gewählt");
lRfe.setText("");
lDiag.setText("");
lProc.setText("");
} else {
form.setText(e.getEpisode().getLabel());
IcpcCode rfe = e.getRFE();
lRfe.setText(rfe == null ? "" : rfe.getLabel());
IcpcCode diag = e.getDiag();
lDiag.setText(diag == null ? "" : diag.getLabel());
IcpcCode proc = e.getProc();
lProc.setText(proc == null ? "" : proc.getLabel());
}
}
class ClickReact extends MouseAdapter {
PersistentObjectDropTarget pod;
String mode;
ClickReact(PersistentObjectDropTarget pod, String mode){
this.pod = pod;
this.mode = mode;
}
@Override
public void mouseUp(MouseEvent arg0){
try {
ICPCCodesView cov =
(ICPCCodesView) Hub.plugin.getWorkbench().getActiveWorkbenchWindow()
.getActivePage().showView(ICPCCodesView.ID);
CodeSelectorHandler.getInstance().setCodeSelectorTarget(pod);
cov.setComponent(mode);
} catch (Exception ex) {
ExHandler.handle(ex);
}
super.mouseUp(arg0);
}
}
}