package at.medevit.elexis.loinc.ui.parts;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IViewSite;
import org.eclipse.ui.forms.events.ExpansionAdapter;
import org.eclipse.ui.forms.events.ExpansionEvent;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.ui.forms.widgets.Section;
import org.eclipse.ui.forms.widgets.TableWrapData;
import org.eclipse.ui.forms.widgets.TableWrapLayout;
import at.medevit.elexis.loinc.model.LoincCode;
import ch.elexis.core.data.events.ElexisEventDispatcher;
import ch.elexis.core.ui.UiDesk;
import ch.elexis.core.ui.icons.Images;
import ch.elexis.core.ui.views.IDetailDisplay;
public class LoincCodeDetailDisplay implements IDetailDisplay {
private FormToolkit toolkit;
private ScrolledForm form;
protected LoincCode actCode;
private Section infoSection;
private Text codeCode;
private Text codeShortDesc;
private Text codeUnit;
private Text codeText;
private Text codeClazz;
public LoincCodeDetailDisplay(){}
public Class getElementClass(){
return LoincCode.class;
}
public String getTitle(){
return "LOINC"; //$NON-NLS-1$
}
@Override
public Composite createDisplay(Composite parent, IViewSite site){
toolkit = UiDesk.getToolkit();
form = toolkit.createScrolledForm(parent);
TableWrapLayout twl = new TableWrapLayout();
form.getBody().setLayout(twl);
form.setText("Kein LOINC Code ausgewählt.");
form.getToolBarManager().add(new RemoveAction()); // NEW LINE
form.getToolBarManager().update(true);
// General Information
infoSection =
toolkit.createSection(form.getBody(), Section.COMPACT | Section.EXPANDED
| Section.TWISTIE | Section.TITLE_BAR);
TableWrapData twd = new TableWrapData(TableWrapData.FILL_GRAB);
twd.grabHorizontal = true;
infoSection.setLayoutData(twd);
infoSection.addExpansionListener(new SectionExpansionHandler());
infoSection.setText("Details");
Composite info = toolkit.createComposite(infoSection);
twl = new TableWrapLayout();
info.setLayout(twl);
Label lbl = toolkit.createLabel(info, "Code");
// get a bold version of the standard font
FontData[] bfd = lbl.getFont().getFontData();
bfd[0].setStyle(SWT.BOLD);
Font boldFont = new Font(Display.getCurrent(), bfd[0]);
lbl.setFont(boldFont);
codeCode = toolkit.createText(info, "");
codeCode.setEditable(false);
codeCode.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));
lbl = toolkit.createLabel(info, "Kurz Beschreibung");
lbl.setFont(boldFont);
codeShortDesc = toolkit.createText(info, "");
codeShortDesc.setEditable(false);
twd = new TableWrapData(TableWrapData.FILL_GRAB);
codeShortDesc.setLayoutData(twd);
lbl = toolkit.createLabel(info, "Einheit");
lbl.setFont(boldFont);
codeUnit = toolkit.createText(info, "");
codeUnit.setEditable(false);
twd = new TableWrapData(TableWrapData.FILL_GRAB);
codeUnit.setLayoutData(twd);
lbl = toolkit.createLabel(info, "Text");
lbl.setFont(boldFont);
codeText = toolkit.createText(info, "", SWT.MULTI | SWT.WRAP | SWT.V_SCROLL);
codeText.setEditable(false);
twd = new TableWrapData(TableWrapData.FILL_GRAB);
twd.heightHint = 100;
codeText.setLayoutData(twd);
lbl = toolkit.createLabel(info, "Klassifikation");
lbl.setFont(boldFont);
codeClazz = toolkit.createText(info, "");
codeClazz.setEditable(false);
twd = new TableWrapData(TableWrapData.FILL_GRAB);
codeClazz.setLayoutData(twd);
infoSection.setClient(info);
return form.getBody();
}
@Override
public void display(Object obj){
if (obj instanceof LoincCode) {
actCode = (LoincCode) obj;
form.setText(actCode.getLabel());
codeCode.setText(actCode.getCode());
codeShortDesc.setText(actCode.get(LoincCode.FLD_SHORTNAME));
codeUnit.setText(actCode.get(LoincCode.FLD_UNIT));
codeText.setText(actCode.getText());
codeClazz.setText(actCode.get(LoincCode.FLD_CLASS));
} else {
actCode = null;
form.setText("Kein LOINC Code ausgewählt.");
codeCode.setText("");
codeShortDesc.setText("");
codeUnit.setText("");
codeText.setText("");
codeClazz.setText("");
}
infoSection.layout();
form.reflow(true);
}
private final class SectionExpansionHandler extends ExpansionAdapter {
@Override
public void expansionStateChanged(ExpansionEvent e){
form.reflow(true);
}
}
protected class RemoveAction extends Action {
@Override
public ImageDescriptor getImageDescriptor(){
return Images.IMG_DELETE.getImageDescriptor();
}
@Override
public void run(){
if (actCode != null) {
actCode.delete();
display(null);
ElexisEventDispatcher.reload(LoincCode.class);
}
}
}
}