This change uses shared state for the read-only flag, text input allowed flag and input prompt. Change-Id: I3bdc6843288c5309311461a3d036293d79004e22feature/databinding
@@ -23,13 +23,14 @@ import com.google.gwt.core.client.Scheduler; | |||
import com.google.gwt.core.client.Scheduler.ScheduledCommand; | |||
import com.vaadin.client.ApplicationConnection; | |||
import com.vaadin.client.Paintable; | |||
import com.vaadin.client.Profiler; | |||
import com.vaadin.client.UIDL; | |||
import com.vaadin.client.communication.StateChangeEvent; | |||
import com.vaadin.client.ui.AbstractFieldConnector; | |||
import com.vaadin.client.ui.SimpleManagedLayout; | |||
import com.vaadin.client.ui.VFilterSelect; | |||
import com.vaadin.client.ui.VFilterSelect.FilterSelectSuggestion; | |||
import com.vaadin.shared.ui.Connect; | |||
import com.vaadin.shared.ui.combobox.ComboBoxConstants; | |||
import com.vaadin.shared.ui.combobox.ComboBoxState; | |||
import com.vaadin.shared.ui.combobox.FilteringMode; | |||
import com.vaadin.ui.ComboBox; | |||
@@ -42,6 +43,28 @@ public class ComboBoxConnector extends AbstractFieldConnector implements | |||
// update textbox text by a changed item caption. | |||
private boolean oldSuggestionTextMatchTheOldSelection; | |||
@Override | |||
public void onStateChanged(StateChangeEvent stateChangeEvent) { | |||
super.onStateChanged(stateChangeEvent); | |||
Profiler.enter("ComboBoxConnector.onStateChanged update content"); | |||
getWidget().readonly = isReadOnly(); | |||
getWidget().updateReadOnly(); | |||
getWidget().immediate = getState().immediate; | |||
getWidget().setTextInputEnabled(getState().textInputAllowed); | |||
if (getState().inputPrompt != null) { | |||
getWidget().inputPrompt = getState().inputPrompt; | |||
} else { | |||
getWidget().inputPrompt = ""; | |||
} | |||
Profiler.leave("ComboBoxConnector.onStateChanged update content"); | |||
} | |||
/* | |||
* (non-Javadoc) | |||
* | |||
@@ -54,20 +77,10 @@ public class ComboBoxConnector extends AbstractFieldConnector implements | |||
getWidget().client = client; | |||
getWidget().paintableId = uidl.getId(); | |||
getWidget().readonly = isReadOnly(); | |||
getWidget().updateReadOnly(); | |||
if (!isRealUpdate(uidl)) { | |||
return; | |||
} | |||
// Inverse logic here to make the default case (text input enabled) | |||
// work without additional UIDL messages | |||
boolean noTextInput = uidl | |||
.hasAttribute(ComboBoxConstants.ATTR_NO_TEXT_INPUT) | |||
&& uidl.getBooleanAttribute(ComboBoxConstants.ATTR_NO_TEXT_INPUT); | |||
getWidget().setTextInputEnabled(!noTextInput); | |||
// not a FocusWidget -> needs own tabindex handling | |||
getWidget().tb.setTabIndex(getState().tabIndex); | |||
@@ -76,8 +89,6 @@ public class ComboBoxConnector extends AbstractFieldConnector implements | |||
.getStringAttribute("filteringmode")); | |||
} | |||
getWidget().immediate = getState().immediate; | |||
getWidget().nullSelectionAllowed = uidl.hasAttribute("nullselect"); | |||
getWidget().nullSelectItem = uidl.hasAttribute("nullselectitem") | |||
@@ -89,14 +100,6 @@ public class ComboBoxConnector extends AbstractFieldConnector implements | |||
getWidget().pageLength = uidl.getIntAttribute("pagelength"); | |||
} | |||
if (uidl.hasAttribute(ComboBoxConstants.ATTR_INPUTPROMPT)) { | |||
// input prompt changed from server | |||
getWidget().inputPrompt = uidl | |||
.getStringAttribute(ComboBoxConstants.ATTR_INPUTPROMPT); | |||
} else { | |||
getWidget().inputPrompt = ""; | |||
} | |||
getWidget().suggestionPopup.updateStyleNames(uidl, getState()); | |||
getWidget().allowNewItem = uidl.hasAttribute("allownewitem"); |
@@ -34,7 +34,6 @@ import com.vaadin.event.FieldEvents.FocusListener; | |||
import com.vaadin.server.PaintException; | |||
import com.vaadin.server.PaintTarget; | |||
import com.vaadin.server.Resource; | |||
import com.vaadin.shared.ui.combobox.ComboBoxConstants; | |||
import com.vaadin.shared.ui.combobox.ComboBoxState; | |||
import com.vaadin.shared.ui.combobox.FilteringMode; | |||
@@ -75,8 +74,6 @@ public class ComboBox extends AbstractSelect implements | |||
public String getStyle(ComboBox source, Object itemId); | |||
} | |||
private String inputPrompt = null; | |||
/** | |||
* Holds value of property pageLength. 0 disables paging. | |||
*/ | |||
@@ -121,13 +118,6 @@ public class ComboBox extends AbstractSelect implements | |||
*/ | |||
private boolean scrollToSelectedItem = true; | |||
/** | |||
* If text input is not allowed, the ComboBox behaves like a pretty | |||
* NativeSelect - the user can not enter any text and clicking the text | |||
* field opens the drop down with options | |||
*/ | |||
private boolean textInputAllowed = true; | |||
private ItemStyleGenerator itemStyleGenerator = null; | |||
public ComboBox() { | |||
@@ -164,7 +154,7 @@ public class ComboBox extends AbstractSelect implements | |||
* @return the current input prompt, or null if not enabled | |||
*/ | |||
public String getInputPrompt() { | |||
return inputPrompt; | |||
return getState(false).inputPrompt; | |||
} | |||
/** | |||
@@ -175,8 +165,7 @@ public class ComboBox extends AbstractSelect implements | |||
* the desired input prompt, or null to disable | |||
*/ | |||
public void setInputPrompt(String inputPrompt) { | |||
this.inputPrompt = inputPrompt; | |||
markAsDirty(); | |||
getState().inputPrompt = inputPrompt; | |||
} | |||
private boolean isFilteringNeeded() { | |||
@@ -188,15 +177,6 @@ public class ComboBox extends AbstractSelect implements | |||
public void paintContent(PaintTarget target) throws PaintException { | |||
isPainting = true; | |||
try { | |||
if (inputPrompt != null) { | |||
target.addAttribute(ComboBoxConstants.ATTR_INPUTPROMPT, | |||
inputPrompt); | |||
} | |||
if (!textInputAllowed) { | |||
target.addAttribute(ComboBoxConstants.ATTR_NO_TEXT_INPUT, true); | |||
} | |||
// clear caption change listeners | |||
getCaptionChangeListener().clear(); | |||
@@ -368,8 +348,7 @@ public class ComboBox extends AbstractSelect implements | |||
* selection | |||
*/ | |||
public void setTextInputAllowed(boolean textInputAllowed) { | |||
this.textInputAllowed = textInputAllowed; | |||
markAsDirty(); | |||
getState().textInputAllowed = textInputAllowed; | |||
} | |||
/** | |||
@@ -381,7 +360,7 @@ public class ComboBox extends AbstractSelect implements | |||
* @return | |||
*/ | |||
public boolean isTextInputAllowed() { | |||
return textInputAllowed; | |||
return getState(false).textInputAllowed; | |||
} | |||
@Override | |||
@@ -389,6 +368,11 @@ public class ComboBox extends AbstractSelect implements | |||
return (ComboBoxState) super.getState(); | |||
} | |||
@Override | |||
protected ComboBoxState getState(boolean markAsDirty) { | |||
return (ComboBoxState) super.getState(markAsDirty); | |||
} | |||
/** | |||
* Returns the filtered options for the current page using a container | |||
* filter. |
@@ -1,27 +0,0 @@ | |||
/* | |||
* Copyright 2000-2014 Vaadin Ltd. | |||
* | |||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not | |||
* use this file except in compliance with the License. You may obtain a copy of | |||
* the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | |||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | |||
* License for the specific language governing permissions and limitations under | |||
* the License. | |||
*/ | |||
package com.vaadin.shared.ui.combobox; | |||
import java.io.Serializable; | |||
@Deprecated | |||
public class ComboBoxConstants implements Serializable { | |||
@Deprecated | |||
public static final String ATTR_INPUTPROMPT = "prompt"; | |||
@Deprecated | |||
public static final String ATTR_NO_TEXT_INPUT = "noInput"; | |||
} |
@@ -26,4 +26,22 @@ public class ComboBoxState extends AbstractSelectState { | |||
{ | |||
primaryStyleName = "v-filterselect"; | |||
} | |||
/** | |||
* If text input is not allowed, the ComboBox behaves like a pretty | |||
* NativeSelect - the user can not enter any text and clicking the text | |||
* field opens the drop down with options. | |||
* | |||
* @since | |||
*/ | |||
public boolean textInputAllowed = true; | |||
/** | |||
* A textual prompt that is displayed when the select would otherwise be | |||
* empty, to prompt the user for input. | |||
* | |||
* @since | |||
*/ | |||
public String inputPrompt = null; | |||
} |