/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package automenta.netention.ui.view; import automenta.netention.Property; import automenta.netention.PropertyValue; import automenta.netention.value.string.StringIs; import automenta.netention.value.string.StringProp; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Button.ClickListener; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.NativeSelect; import com.vaadin.ui.TextField; /** * * @author seh */ abstract public class ValueEditPanel extends HorizontalLayout { final public HorizontalLayout modePanel = new HorizontalLayout(); final public HorizontalLayout valuePanel = new HorizontalLayout(); private final Property property; private ValueEditor editor; public static interface ValueEditor { public void setValue(PropertyValue pv); public PropertyValue getValue(); } public static class StringValueEditor implements ValueEditor { private PropertyValue value; private TextField isEdit = new TextField(); private final ValueEditPanel panel; private final NativeSelect modeSelect; public StringValueEditor(ValueEditPanel panel, Property p, PropertyValue value) { super(); modeSelect = new NativeSelect(""); modeSelect.removeAllItems(); modeSelect.setNullSelectionAllowed(false); modeSelect.addItem("is"); modeSelect.addItem("equals"); modeSelect.addItem("doesn't equal"); modeSelect.setValue("is"); this.panel = panel; panel.modePanel.removeAllComponents(); panel.modePanel.addComponent(modeSelect); setValue(value); } @Override public void setValue(PropertyValue pv) { if (value instanceof StringIs) set((StringIs)value); } @Override public PropertyValue getValue() { return value; } protected void set(StringIs s) { this.value = s; panel.valuePanel.removeAllComponents(); isEdit.setValue(s.getValue()); panel.valuePanel.addComponent(isEdit); } } public ValueEditPanel(Property p, PropertyValue initialValue) { super(); this.property = p; Label propertyName = new Label(p.getName()); addComponent(propertyName); addComponent(modePanel); addComponent(valuePanel); Button removeButton = new Button("X"); removeButton.addListener(new ClickListener() { @Override public void buttonClick(ClickEvent event) { removeThis(); } }); addComponent(removeButton); setValue(initialValue); } protected void setValue(PropertyValue value) { if (property instanceof StringProp) { this.editor = new StringValueEditor(this, property, value); } } abstract public void removeThis(); }