diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/com/vaadin/terminal/gwt/client/ApplicationConnection.java | 3 | ||||
-rw-r--r-- | src/com/vaadin/terminal/gwt/client/WidgetSet.java | 56 | ||||
-rw-r--r-- | src/com/vaadin/ui/AbstractSelect.java | 5 | ||||
-rw-r--r-- | src/com/vaadin/ui/ComboBox.java | 12 | ||||
-rw-r--r-- | src/com/vaadin/ui/Form.java | 11 | ||||
-rw-r--r-- | src/com/vaadin/ui/Select.java | 6 |
6 files changed, 25 insertions, 68 deletions
diff --git a/src/com/vaadin/terminal/gwt/client/ApplicationConnection.java b/src/com/vaadin/terminal/gwt/client/ApplicationConnection.java index 65827fac0c..201c3a1cd6 100644 --- a/src/com/vaadin/terminal/gwt/client/ApplicationConnection.java +++ b/src/com/vaadin/terminal/gwt/client/ApplicationConnection.java @@ -1886,7 +1886,8 @@ public class ApplicationConnection { final String pid = uidl.getId(); if (!paintableMap.hasPaintable(pid)) { // Create and register a new paintable if no old was found - VPaintableWidget p = widgetSet.createWidget(uidl, configuration); + VPaintableWidget p = widgetSet.createWidget(uidl.getTag(), + configuration); p.setConnection(this); p.setId(pid); p.init(); diff --git a/src/com/vaadin/terminal/gwt/client/WidgetSet.java b/src/com/vaadin/terminal/gwt/client/WidgetSet.java index 390d79ce17..7874c9d068 100644 --- a/src/com/vaadin/terminal/gwt/client/WidgetSet.java +++ b/src/com/vaadin/terminal/gwt/client/WidgetSet.java @@ -6,8 +6,6 @@ package com.vaadin.terminal.gwt.client; import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ui.VFilterSelectPaintable; -import com.vaadin.terminal.gwt.client.ui.VListSelectPaintable; import com.vaadin.terminal.gwt.client.ui.VUnknownComponentPaintable; public class WidgetSet { @@ -24,15 +22,15 @@ public class WidgetSet { * component must be a {@link Widget} that implements * {@link VPaintableWidget}. * - * @param uidl - * UIDL to be painted with returned component. + * @param tag + * component type tag for the component to create * @param client * the application connection that whishes to instantiate widget * * @return New uninitialized and unregistered component that can paint given * UIDL. */ - public VPaintableWidget createWidget(UIDL uidl, + public VPaintableWidget createWidget(String tag, ApplicationConfiguration conf) { /* * Yes, this (including the generated code in WidgetMap) may look very @@ -40,15 +38,14 @@ public class WidgetSet { * Luckily this is mostly written by WidgetSetGenerator, here are just * some hacks. Extra instantiation code is needed if client side widget * has no "native" counterpart on client side. - * - * TODO should try to get rid of these exceptions here */ - final Class<? extends VPaintableWidget> classType = resolveWidgetType( - uidl, conf); + Class<? extends VPaintableWidget> classType = resolveWidgetType(tag, + conf); + if (classType == null || classType == VUnknownComponentPaintable.class) { String serverSideName = conf - .getUnknownServerClassNameByEncodedTagName(uidl.getTag()); + .getUnknownServerClassNameByEncodedTagName(tag); VUnknownComponentPaintable c = GWT .create(VUnknownComponentPaintable.class); c.setServerSideClassName(serverSideName); @@ -62,43 +59,16 @@ public class WidgetSet { } - protected Class<? extends VPaintableWidget> resolveWidgetType(UIDL uidl, + protected Class<? extends VPaintableWidget> resolveWidgetType(String tag, ApplicationConfiguration conf) { - final String tag = uidl.getTag(); - Class<? extends VPaintableWidget> widgetClass = conf .getWidgetClassByEncodedTag(tag); - // add our historical quirks - - if (widgetClass == VFilterSelectPaintable.class) { - if (uidl.hasAttribute("type")) { - final String type = uidl.getStringAttribute("type").intern(); - if ("legacy-multi" == type) { - return VListSelectPaintable.class; - } - } - } return widgetClass; } /** - * Test if the given component implementation conforms to UIDL. - * - * @param currentWidget - * Current implementation of the component - * @param uidl - * UIDL to test against - * @return true iff createWidget would return a new component of the same - * class than currentWidget - */ - public boolean isCorrectImplementation(Widget currentWidget, UIDL uidl, - ApplicationConfiguration conf) { - return currentWidget.getClass() == resolveWidgetType(uidl, conf); - } - - /** * Due its nature, GWT does not support dynamic classloading. To bypass this * limitation, widgetset must have function that returns Class by its fully * qualified name. @@ -115,16 +85,6 @@ public class WidgetSet { Class<? extends VPaintableWidget> implementationByServerSideClassName = widgetMap .getImplementationByServerSideClassName(fullyqualifiedName); - /* - * Also ensure that our historical quirks have their instantiators - * loaded. Without these, legacy code will throw NPEs when e.g. a Select - * is in multiselect mode, causing the clientside implementation to - * *actually* be VListSelect, when the annotation says VFilterSelect - */ - if (fullyqualifiedName.equals("com.vaadin.ui.Select")) { - loadImplementation(VListSelectPaintable.class); - } - return implementationByServerSideClassName; } diff --git a/src/com/vaadin/ui/AbstractSelect.java b/src/com/vaadin/ui/AbstractSelect.java index 5e086f0b8d..47f132aa77 100644 --- a/src/com/vaadin/ui/AbstractSelect.java +++ b/src/com/vaadin/ui/AbstractSelect.java @@ -976,10 +976,13 @@ public abstract class AbstractSelect extends AbstractField<Object> implements } /** - * Sets the multiselect mode. Setting multiselect mode false may loose + * Sets the multiselect mode. Setting multiselect mode false may lose * selection information: if selected items set contains one or more * selected items, only one of the selected items is kept as selected. * + * Subclasses of AbstractSelect can choose not to support changing the + * multiselect mode, and may throw {@link UnsupportedOperationException}. + * * @param multiSelect * the New value of property multiSelect. */ diff --git a/src/com/vaadin/ui/ComboBox.java b/src/com/vaadin/ui/ComboBox.java index 013fe6ab85..12db8c18af 100644 --- a/src/com/vaadin/ui/ComboBox.java +++ b/src/com/vaadin/ui/ComboBox.java @@ -34,36 +34,24 @@ public class ComboBox extends Select { private boolean textInputAllowed = true; public ComboBox() { - setMultiSelect(false); setNewItemsAllowed(false); } public ComboBox(String caption, Collection<?> options) { super(caption, options); - setMultiSelect(false); setNewItemsAllowed(false); } public ComboBox(String caption, Container dataSource) { super(caption, dataSource); - setMultiSelect(false); setNewItemsAllowed(false); } public ComboBox(String caption) { super(caption); - setMultiSelect(false); setNewItemsAllowed(false); } - @Override - public void setMultiSelect(boolean multiSelect) { - if (multiSelect && !isMultiSelect()) { - throw new UnsupportedOperationException("Multiselect not supported"); - } - super.setMultiSelect(multiSelect); - } - /** * Gets the current input prompt. * diff --git a/src/com/vaadin/ui/Form.java b/src/com/vaadin/ui/Form.java index c79804c7e7..dd3710cd2c 100644 --- a/src/com/vaadin/ui/Form.java +++ b/src/com/vaadin/ui/Form.java @@ -861,13 +861,16 @@ public class Form extends AbstractField<Object> implements Item.Editor, * match. Null values are not supported. * </p> * + * Note: since Vaadin 7.0, returns an {@link AbstractSelect} instead of a + * {@link Select}. + * * @param propertyId * the id of the property. * @param values * @param descriptions * @return the select property generated */ - public Select replaceWithSelect(Object propertyId, Object[] values, + public AbstractSelect replaceWithSelect(Object propertyId, Object[] values, Object[] descriptions) { // Checks the parameters @@ -927,10 +930,8 @@ public class Form extends AbstractField<Object> implements Item.Editor, } // Creates the new field matching to old field parameters - final Select newField = new Select(); - if (isMultiselect) { - newField.setMultiSelect(true); - } + final AbstractSelect newField = isMultiselect ? new ListSelect() + : new Select(); newField.setCaption(oldField.getCaption()); newField.setReadOnly(oldField.isReadOnly()); newField.setReadThrough(oldField.isReadThrough()); diff --git a/src/com/vaadin/ui/Select.java b/src/com/vaadin/ui/Select.java index 38785f3ab9..c1da88acea 100644 --- a/src/com/vaadin/ui/Select.java +++ b/src/com/vaadin/ui/Select.java @@ -754,11 +754,15 @@ public class Select extends AbstractSelect implements AbstractSelect.Filtering, * @deprecated use {@link ListSelect}, {@link OptionGroup} or * {@link TwinColSelect} instead * @see com.vaadin.ui.AbstractSelect#setMultiSelect(boolean) + * @throws UnsupportedOperationException + * if trying to activate multiselect mode */ @Deprecated @Override public void setMultiSelect(boolean multiSelect) { - super.setMultiSelect(multiSelect); + if (multiSelect) { + throw new UnsupportedOperationException("Multiselect not supported"); + } } /** |