teichmann@5835: package org.dive4elements.river.client.client.ui; raimund@2898: sascha@2899: import com.google.gwt.core.client.GWT; raimund@2898: import com.google.gwt.i18n.client.NumberFormat; christian@4131: raimund@2898: import com.smartgwt.client.util.SC; raimund@2898: import com.smartgwt.client.widgets.Canvas; raimund@2898: import com.smartgwt.client.widgets.Label; sascha@2899: import com.smartgwt.client.widgets.form.DynamicForm; sascha@2899: import com.smartgwt.client.widgets.form.fields.TextItem; raimund@2898: import com.smartgwt.client.widgets.layout.HLayout; raimund@2898: import com.smartgwt.client.widgets.layout.VLayout; raimund@2898: teichmann@5835: import org.dive4elements.river.client.client.FLYSConstants; teichmann@5835: import org.dive4elements.river.client.shared.model.Data; teichmann@5835: import org.dive4elements.river.client.shared.model.DataItem; teichmann@5835: import org.dive4elements.river.client.shared.model.DataList; teichmann@5835: import org.dive4elements.river.client.shared.model.DefaultData; teichmann@5835: import org.dive4elements.river.client.shared.model.DefaultDataItem; sascha@2899: christian@4131: import java.util.ArrayList; christian@4131: import java.util.List; christian@4131: raimund@2898: /** raimund@2898: * This UIProvider creates a panel for location or distance input. raimund@2898: * raimund@2898: * @author Raimund Renkert raimund@2898: */ raimund@2898: public class DoubleInputPanel raimund@2898: extends AbstractUIProvider raimund@2898: { christian@4131: christian@4131: private static final long serialVersionUID = 2006773072352563622L; christian@4131: raimund@2898: /** The message class that provides i18n strings. */ raimund@2898: protected FLYSConstants MSG = GWT.create(FLYSConstants.class); raimund@2898: raimund@2898: private TextItem inputPanel; raimund@2898: raimund@2898: private double value; raimund@2898: felix@4279: protected String dataName; felix@4279: felix@4060: raimund@2898: public DoubleInputPanel() { felix@4279: dataName = "outliers"; felix@4279: } felix@4279: felix@4279: felix@4279: public DoubleInputPanel(String dataName) { felix@4279: this.dataName = dataName; raimund@2898: } raimund@2898: raimund@2898: christian@4131: @Override raimund@2898: public Canvas create(DataList list) { raimund@2898: VLayout layout = new VLayout(); raimund@2898: raimund@2898: Canvas helper = createHelper(); raimund@2898: this.helperContainer.addMember(helper); raimund@2898: raimund@2898: Canvas submit = getNextButton(); raimund@2898: Canvas widget = createWidget(list); raimund@2898: raimund@2898: layout.addMember(widget); raimund@2898: layout.addMember(submit); raimund@2898: return layout; raimund@2898: } raimund@2898: raimund@2898: felix@4060: /** Create a labelled input-panel. */ raimund@2898: public Canvas createWidget(DataList data) { raimund@2898: VLayout layout = new VLayout(); raimund@2898: raimund@2898: Label title = new Label(data.get(0).getDescription()); raimund@2898: title.setHeight("25px"); raimund@2898: ingo@3369: DataItem defaultItem = data.get(0).getDefault(); ingo@3369: raimund@2898: DynamicForm form = new DynamicForm(); raimund@2898: inputPanel = new TextItem(); felix@4279: inputPanel.setTitle(dataName); raimund@2898: inputPanel.setShowTitle(false); ingo@3369: ingo@3369: if (defaultItem != null) { ingo@3369: inputPanel.setValue(defaultItem.getStringValue()); ingo@3369: } ingo@3369: raimund@2898: form.setFields(inputPanel); raimund@2898: raimund@2898: layout.addMember(title); raimund@2898: layout.addMember(form); raimund@2898: raimund@2898: return layout; raimund@2898: } raimund@2898: felix@4279: raimund@2898: protected Canvas createHelper() { raimund@2898: return new VLayout(); raimund@2898: } raimund@2898: felix@4060: felix@4060: /** Create canvas to show previously entered value. */ raimund@2898: @Override raimund@2898: public Canvas createOld(DataList dataList) { raimund@2898: List items = dataList.getAll(); raimund@2898: felix@4279: Data d = getData(items, dataName); raimund@2898: DataItem[] item = d.getItems(); raimund@2898: raimund@2898: String v = item[0].getLabel(); raimund@2898: raimund@2898: Label old = new Label(v); raimund@2898: old.setWidth(130); raimund@2898: raimund@2898: HLayout layout = new HLayout(); raimund@2898: layout.setWidth("400px"); raimund@2898: raimund@2898: Label label = new Label(dataList.getLabel()); raimund@2898: label.setWidth("200px"); raimund@2898: raimund@2898: Canvas back = getBackButton(dataList.getState()); raimund@2898: raimund@2898: layout.addMember(label); raimund@2898: layout.addMember(old); raimund@2898: layout.addMember(back); raimund@2898: raimund@2898: return layout; raimund@2898: } raimund@2898: raimund@2898: raimund@2898: /** raimund@2898: * This method returns the selected data. raimund@2898: * raimund@2898: * @return the selected/inserted data. raimund@2898: */ christian@4131: @Override raimund@2898: public Data[] getData() { raimund@2898: List data = new ArrayList(); raimund@2898: raimund@2898: boolean valid = saveDataValues(); raimund@2898: if(valid) { raimund@2898: raimund@2898: String vs = Double.valueOf(this.value).toString(); felix@4279: DataItem item = new DefaultDataItem(dataName, dataName, vs); raimund@2898: data.add(new DefaultData( teichmann@4736: dataName, raimund@2898: null, raimund@2898: null, raimund@2898: new DataItem[] { item })); raimund@2898: } raimund@2898: sascha@3379: return data.toArray(new Data[data.size()]); raimund@2898: } raimund@2898: raimund@2898: raimund@2898: protected boolean saveDataValues() { raimund@2898: String st = inputPanel.getValueAsString(); raimund@2898: if (st == null) { raimund@2898: SC.warn("fehler... TODO"); raimund@2898: return false; raimund@2898: } raimund@2898: raimund@2898: try { raimund@2898: NumberFormat nf = NumberFormat.getDecimalFormat(); raimund@2898: double d = nf.parse(st); raimund@2898: this.value = d; raimund@2898: } raimund@2898: catch(NumberFormatException nfe) { raimund@2898: SC.warn("fehler... nfe... TODO"); raimund@2898: return false; raimund@2898: } raimund@2898: return true; raimund@2898: } raimund@2898: } felix@4060: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :