package org.iatrix.messwerte.preferences;
import java.util.ArrayList;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.ListViewer;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Spinner;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.forms.widgets.TableWrapData;
import org.eclipse.ui.forms.widgets.TableWrapLayout;
import org.iatrix.messwerte.Constants;
import ch.elexis.core.data.activator.CoreHub;
import ch.elexis.core.ui.util.SWTHelper;
import ch.elexis.data.Labor;
import ch.elexis.data.Query;
import ch.rgw.tools.StringTool;
public class MesswertePreferences extends PreferencePage implements IWorkbenchPreferencePage {
// name: Messwerte Iatrix
// category: Iatrix
public static final String ID = "org.iatrix.messwerte.preferences.MesswertePreferences";
private static final int VISIBLE_NUMBER_OF_LABORS = 5;
private ListViewer ownLaborsList;
private Spinner spinnerNoCol;
public MesswertePreferences(){}
public MesswertePreferences(String title){
super(title);
}
/**
* @wbp.parser.constructor
*/
public MesswertePreferences(String title, ImageDescriptor image){
super(title, image);
}
@Override
protected Control createContents(Composite parent){
Composite mainArea = new Composite(parent, SWT.NONE);
mainArea.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true));
TableWrapLayout layout = new TableWrapLayout();
layout.numColumns = 2;
layout.leftMargin = 0;
layout.rightMargin = 0;
layout.topMargin = 0;
layout.bottomMargin = 0;
mainArea.setLayout(layout);
TableWrapData twd;
Label label;
Text infoText = new Text(mainArea, SWT.MULTI | SWT.READ_ONLY | SWT.WRAP);
infoText.setLayoutData(SWTHelper.getFillTableWrapData(2, true, 1, false));
infoText.setText("Bitte wählen Sie die Labors aus, für welche Sie die Werte"
+ " in der Praxis selber ermitteln.");
label = new Label(mainArea, SWT.NONE);
label.setText("Praxislabors:");
ownLaborsList = new ListViewer(mainArea, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
List list = ownLaborsList.getList();
twd = SWTHelper.getFillTableWrapData(1, true, 1, false);
twd.heightHint = VISIBLE_NUMBER_OF_LABORS * list.getItemHeight();
list.setLayoutData(twd);
ownLaborsList.setContentProvider(new LaborsListContentProvider());
ownLaborsList.setLabelProvider(new LaborsListLabelProvider());
ownLaborsList.setInput(this);
Label lblNoCols = new Label(mainArea, SWT.NONE);
lblNoCols.setText("Spalten pro Seite:");
spinnerNoCol = new Spinner(mainArea, SWT.BORDER);
spinnerNoCol.setPageIncrement(1);
spinnerNoCol.setMaximum(10);
spinnerNoCol.setMinimum(1);
spinnerNoCol.setSelection(7);
loadFromConfig();
return mainArea;
}
private void loadFromConfig(){
java.util.List<Labor> labors = new ArrayList<Labor>();
String localLabors =
CoreHub.globalCfg.get(Constants.CFG_LOCAL_LABORS, Constants.CFG_DEFAULT_LOCAL_LABORS);
String[] laborIds = localLabors.split("\\s*,\\s*");
for (String laborId : laborIds) {
if (!StringTool.isNothing(laborId)) {
Labor labor = Labor.load(laborId);
if (labor != null && labor.exists()) {
labors.add(labor);
}
}
}
IStructuredSelection selection = new StructuredSelection(labors);
ownLaborsList.setSelection(selection);
spinnerNoCol.setSelection(CoreHub.localCfg.get(
Constants.CFG_MESSWERTE_VIEW_NUMBER_OF_COLUMNS, new Integer(
Constants.CFG_MESSWERTE_VIEW_NUMBER_OF_COLUMNS_DEFAULT)));
}
private void storeToConfig(){
java.util.List<String> selectedLaborsIds = new ArrayList<String>();
IStructuredSelection selection = (IStructuredSelection) ownLaborsList.getSelection();
for (Object element : selection.toArray()) {
if (element instanceof Labor) {
Labor labor = (Labor) element;
selectedLaborsIds.add(labor.getId());
}
}
String cfgValue = StringTool.join(selectedLaborsIds, ",");
CoreHub.globalCfg.set(Constants.CFG_LOCAL_LABORS, cfgValue);
if (spinnerNoCol.getSelection() != CoreHub.localCfg.get(
Constants.CFG_MESSWERTE_VIEW_NUMBER_OF_COLUMNS,
Constants.CFG_MESSWERTE_VIEW_NUMBER_OF_COLUMNS_DEFAULT)) {
MessageDialog.openInformation(PlatformUI.getWorkbench().getDisplay().getActiveShell(),
"Information", "Bitte schliessen Sie den Messwerte Iatrix View \n "
+ "und öffnen Sie Ihn dann erneut um die Änderungen wirksam zu machen.");
CoreHub.localCfg.set(Constants.CFG_MESSWERTE_VIEW_NUMBER_OF_COLUMNS,
spinnerNoCol.getSelection());
}
}
public void init(IWorkbench workbench){
// nothing to do
}
protected void performDefaults(){
// default for labors list: no selection
IStructuredSelection selection = new StructuredSelection();
ownLaborsList.setSelection(selection);
// default for number of columns: CFG_MESSWERTE_VIEW_NUMBER_OF_COLUMNS_DEFAULT String
spinnerNoCol.setSelection(Constants.CFG_MESSWERTE_VIEW_NUMBER_OF_COLUMNS_DEFAULT);
super.performDefaults();
}
public boolean performOk(){
storeToConfig();
return true;
}
class LaborsListContentProvider implements IStructuredContentProvider {
public Object[] getElements(Object inputElement){
Query<Labor> query = new Query<Labor>(Labor.class);
query.orderBy(false, "Name");
java.util.List<Labor> labors = query.execute();
if (labors != null) {
return labors.toArray();
} else {
return new Object[] {};
}
}
public void dispose(){
// nothing to do
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput){
// nothing to do
}
}
class LaborsListLabelProvider extends LabelProvider {
public String getText(Object element){
if (element instanceof Labor) {
Labor labor = (Labor) element;
return labor.getLabel();
} else
return super.getText(element);
}
}
}