package org.ovirt.engine.ui.common.widget.editor.generic;
import java.util.Collection;
import org.ovirt.engine.ui.common.widget.editor.BaseListModelSuggestBox;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.MultiWordSuggestOracle;
/**
* SuggestBox widget that adapts to UiCommon list model items. Expects all of it's items to be non null Strings
*/
public class ListModelSuggestBox extends BaseListModelSuggestBox<String> {
public ListModelSuggestBox() {
super(new MultiWordSuggestOracle());
initWidget(asSuggestBox());
handlerRegistrations.add(asSuggestBox().getValueBox().addFocusHandler(event -> Scheduler.get().scheduleDeferred(() -> asSuggestBox().showSuggestionList())));
handlerRegistrations.add(addKeyPressHandler(event -> Scheduler.get().scheduleDeferred(() -> ValueChangeEvent.fire(asSuggestBox(), asSuggestBox().getText()))));
handlerRegistrations.add(Event.addNativePreviewHandler(event -> {
if (event.getTypeInt() == Event.ONKEYDOWN && event.getNativeEvent().getKeyCode() == KeyCodes.KEY_TAB) {
// By default SuggestBox applies selection upon tab press - this is bad
event.getNativeEvent().stopPropagation();
hideSuggestions();
}
}));
}
@Override
public void setAcceptableValues(Collection<String> values) {
MultiWordSuggestOracle suggestOracle = (MultiWordSuggestOracle) asSuggestBox().getSuggestOracle();
suggestOracle.clear();
suggestOracle.addAll(values);
suggestOracle.setDefaultSuggestionsFromText(values);
}
@Override
protected void render(String value, boolean fireEvents) {
asSuggestBox().setValue(value, fireEvents);
}
@Override
protected String asEntity(String value) {
return value;
}
}