/******************************************************************************* * 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: * A. Kaufmann - initial implementation * P. Chaubert - adapted to Messwerte V2 * medshare GmbH - adapted to Messwerte V2.1 in February 2012 * *******************************************************************************/ package com.hilotec.elexis.messwerte.v2.data.typen; import java.util.ArrayList; import java.util.HashMap; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Widget; import ch.elexis.core.ui.selectors.ActiveControl; import ch.elexis.core.ui.selectors.ComboField; import ch.elexis.core.ui.selectors.TextField; import ch.elexis.core.ui.util.SWTHelper; import ch.rgw.tools.StringTool; import com.hilotec.elexis.messwerte.v2.data.Messwert; import com.hilotec.elexis.messwerte.v2.data.MesswertBase; import com.hilotec.elexis.messwerte.v2.views.Messages; /** * @author Antoine Kaufmann */ public class MesswertTypEnum extends MesswertBase implements IMesswertTyp { int defVal = 0; private final HashMap<Messwert, Widget> widgetMap; /** * Bezeichnungen fuer die einzelnen Auswahlmoeglichkeiten */ public ArrayList<String> choices = new ArrayList<String>(); /** * Werte fuer die Auswahlmoeglichkeiten. (notwendig, da die Combo nur fortlaufende Werte nimmt. */ private final ArrayList<Integer> values = new ArrayList<Integer>(); public MesswertTypEnum(String n, String t, String u){ super(n, t, u); widgetMap = new HashMap<Messwert, Widget>(); } public String erstelleDarstellungswert(Messwert messwert){ return getDarstellungswert(messwert.getWert()); } public String getDefault(Messwert messwert){ Integer retVal = defVal; if (formula != null) { try { String sWert = evalateFormula(formula, messwert, retVal.toString()); if (sWert != null) retVal = Integer.parseInt(sWert); } finally {} } return retVal.toString(); } public void setDefault(String str){ defVal = StringTool.parseSafeInt(str); } /** * Neue Auswahlmoeglichkeit fuer dieses Enum-Feld anfuegen * * @param c * Beschriftung dieser Auswahlmoeglichkeit * @param v * Wert fuer diese Auswahlmoeglichkeit */ public void addChoice(String c, int v){ choices.add(c); values.add(v); } public Widget createWidget(Composite parent, Messwert messwert){ widget = new Combo(parent, SWT.DROP_DOWN); for (int i = 0; i < choices.size(); i++) { ((Combo) widget).add(choices.get(i), i); } try { int wert = Integer.parseInt(messwert.getWert()); for (int i = 0; i < values.size(); i++) { if (values.get(i).compareTo(wert) == 0) { ((Combo) widget).select(i); break; } } } catch (NumberFormatException e) { e.printStackTrace(); } ((Combo) widget).setLayoutData(SWTHelper.getFillGridData(1, true, 1, false)); setShown(true); return widget; } public ActiveControl createControl(Composite parent, Messwert messwert, boolean bEditable){ int flags = 0; if (!bEditable) { flags |= TextField.READONLY; } IMesswertTyp dft = messwert.getTyp(); String labelText = dft.getTitle(); if (!dft.getUnit().equals("")) { //$NON-NLS-1$ labelText += " [" + dft.getUnit() + "]"; //$NON-NLS-1$ //$NON-NLS-2$ } Composite c = new Composite(parent, SWT.NONE); GridLayout gl = new GridLayout(1, false); gl.marginHeight = 0; gl.verticalSpacing = 0; c.setLayout(gl); ComboField cf = new ComboField(c, flags, labelText, choices.toArray(new String[0])); cf.setText(messwert.getDarstellungswert()); c.pack(); widgetMap.put(messwert, cf); return cf; } public String getDarstellungswert(String wert){ try { int iWert = StringTool.parseSafeInt(wert); for (int i = 0; i < values.size(); i++) { if (values.get(i) == iWert) { return choices.get(i); } } } catch (Exception e) {} return ""; //$NON-NLS-1$ } @Override public void saveInput(Messwert messwert){ messwert.setWert(Integer.toString(values.get(((Combo) widget).getSelectionIndex()))); } @Override public boolean checkInput(Messwert messwert, String pattern){ Boolean validValue = false; try { validValue = (((Combo) widget).getSelectionIndex() > -1); if (!validValue) { setInvalidmessage(Messages.InvalidMessage_EnumValue); } } catch (NumberFormatException e) { e.printStackTrace(); } return validValue; } @Override public String getActualValue(){ return ((Combo) widget).getText(); } }