package at.medevit.elexis.inbox.core.ui.preferences;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ListViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import at.medevit.elexis.inbox.core.ui.LabResultLabelProvider;
import at.medevit.elexis.inbox.core.ui.LabResultLabelProvider.LabelFields;
import ch.elexis.core.data.activator.CoreHub;
import ch.elexis.core.ui.icons.Images;
public class InboxPreferences extends PreferencePage implements IWorkbenchPreferencePage {
private static final String INBOX = "inbox/";
public static final String INBOX_LABRESULT_LBL_CHOOSEN = INBOX + "labresult/label/choosen";
public static final String INBOX_LABRESULT_LBL_AVAILABLE = INBOX + "labresult/label/available";
//Default choosen / available
public static final String DEF_CHOOSEN = LabResultLabelProvider.LabelFields.LAB_VALUE_SHORT
.toString()
+ ","
+ LabResultLabelProvider.LabelFields.LAB_VALUE_NAME.toString()
+ ","
+ LabResultLabelProvider.LabelFields.LAB_RESULT.toString();
public static final String DEF_AVAILABLE = LabResultLabelProvider.LabelFields.REF_RANGE
.toString()
+ ","
+ LabResultLabelProvider.LabelFields.ORIGIN.toString()
+ ","
+ LabResultLabelProvider.LabelFields.DATE.toString();
private static List<LabelFields> choosenLabels;
private static ListViewer lvChoosen;
private ListViewer lvAvailable;
private static String[] choosen;
private String[] available;
private Label lblPreview;
private String prefixPrevLabel = "Label Vorschau";
public InboxPreferences(){
super("Inbox");
choosen = CoreHub.userCfg.get(INBOX_LABRESULT_LBL_CHOOSEN, DEF_CHOOSEN).split(",");
int nrValues = LabResultLabelProvider.LabelFields.values().length;
if (choosen.length == nrValues) {
available = new String[] {};
} else {
available =
CoreHub.userCfg.get(INBOX_LABRESULT_LBL_AVAILABLE, DEF_AVAILABLE).split(",");
}
}
@Override
protected Control createContents(Composite parent){
Composite area = new Composite(parent, SWT.NONE);
area.setLayoutData(new GridData(GridData.FILL_BOTH));
area.setLayout(new GridLayout(1, true));
Group grpLabel = new Group(area, SWT.NONE);
grpLabel.setLayoutData(new GridData(GridData.FILL_BOTH));
grpLabel.setLayout(new GridLayout(3, true));
grpLabel.setText("Laborwerte Label Optionen");
Label lblChoosen = new Label(grpLabel, SWT.NONE);
lblChoosen.setText("Gewählt");
new Label(grpLabel, SWT.NONE);
Label lblAvailable = new Label(grpLabel, SWT.NONE);
lblAvailable.setText("Noch verfügbar");
GridData gdLvChoosen = new GridData();
gdLvChoosen.horizontalAlignment = SWT.FILL;
gdLvChoosen.verticalAlignment = SWT.CENTER;
gdLvChoosen.minimumHeight = 100;
gdLvChoosen.heightHint = 100;
lvChoosen = new ListViewer(grpLabel, SWT.BORDER | SWT.V_SCROLL);
lvChoosen.getList().setLayoutData(gdLvChoosen);
lvChoosen.setContentProvider(new ArrayContentProvider());
lvChoosen.setInput(choosen);
Composite btnArea = new Composite(grpLabel, SWT.NONE);
btnArea.setLayout(new GridLayout());
btnArea.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, false));
Button btnAdd = new Button(btnArea, SWT.PUSH);
btnAdd.setImage(Images.IMG_PREVIOUS.getImage());
btnAdd.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e){
IStructuredSelection sel = (IStructuredSelection) lvAvailable.getSelection();
String item = (String) sel.getFirstElement();
if (item != null) {
lvAvailable.remove(item);
lvChoosen.add(item);
lblPreview.setText(getPreviewLabel());
}
}
});
Button btnRemove = new Button(btnArea, SWT.PUSH);
btnRemove.setImage(Images.IMG_NEXT.getImage());
btnRemove.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e){
IStructuredSelection sel = (IStructuredSelection) lvChoosen.getSelection();
String item = (String) sel.getFirstElement();
if (item != null) {
lvChoosen.remove(item);
lvAvailable.add(item);
lblPreview.setText(getPreviewLabel());
}
}
});
GridData gdLvAvailable = new GridData();
gdLvAvailable.horizontalAlignment = SWT.FILL;
gdLvAvailable.verticalAlignment = SWT.CENTER;
gdLvAvailable.minimumHeight = 100;
gdLvAvailable.heightHint = 100;
lvAvailable = new ListViewer(grpLabel, SWT.BORDER | SWT.V_SCROLL);
lvAvailable.getList().setLayoutData(gdLvAvailable);
lvAvailable.setContentProvider(new ArrayContentProvider());
lvAvailable.setInput(available);
new Label(grpLabel, SWT.NONE);
new Label(grpLabel, SWT.NONE);
new Label(grpLabel, SWT.NONE);
lblPreview = new Label(grpLabel, SWT.NONE);
lblPreview.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 3, 1));
lblPreview.setText(getPreviewLabel());
return area;
}
@Override
public boolean performOk(){
CoreHub.userCfg.set(INBOX_LABRESULT_LBL_CHOOSEN, getListAsString(lvChoosen.getList()
.getItems()));
CoreHub.userCfg.set(INBOX_LABRESULT_LBL_AVAILABLE, getListAsString(lvAvailable.getList()
.getItems()));
CoreHub.userCfg.flush();
loadChoosenLabel();
return super.performOk();
}
private String getPreviewLabel(){
StringBuilder sb = new StringBuilder();
for (String s : lvChoosen.getList().getItems()) {
sb.append(s);
sb.append(" ");
}
return prefixPrevLabel + ":\t" + sb.toString();
}
private String getListAsString(String[] items){
StringBuilder sb = new StringBuilder();
for (String item : items) {
sb.append(item);
sb.append(",");
}
return sb.toString();
}
@Override
public void init(IWorkbench workbench){}
private static void loadChoosenLabel(){
String[] labels = CoreHub.userCfg.get(INBOX_LABRESULT_LBL_CHOOSEN, DEF_CHOOSEN).split(",");
choosenLabels = new ArrayList<LabResultLabelProvider.LabelFields>();
for (String label : labels) {
LabelFields lblField = LabelFields.getEnum(label);
if (lblField != null) {
choosenLabels.add(lblField);
}
}
}
public static List<LabelFields> getChoosenLabel(){
if (choosenLabels == null || choosenLabels.isEmpty()) {
loadChoosenLabel();
}
return choosenLabels;
}
}