/* * Copyright 2013, Arondor * * 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.arondor.common.reflection.gwt.client.view; import java.util.List; import java.util.logging.Logger; import com.arondor.common.reflection.gwt.client.presenter.fields.EnumTreeNodePresenter.EnumDisplay; import com.google.gwt.event.dom.client.ChangeEvent; import com.google.gwt.event.dom.client.ChangeHandler; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.user.client.ui.ListBox; import com.google.gwt.user.client.ui.UIObject; public class EnumListView extends AbstractTreeNodeView implements EnumDisplay { private static final Logger LOG = Logger.getLogger(EnumListView.class.getName()); private ListBox enumListInput = new ListBox(); private final static String NULL_VALUE = "null"; public EnumListView(UIObject parentNode) { super(parentNode); setHasRemoveButton(true); getContents().add(enumListInput.asWidget()); } public void initEnumList(List<String> enumList) { LOG.finest("Selected enum values : " + enumList); enumListInput.clear(); enumListInput.addItem(NULL_VALUE); for (String enumValue : enumList) { enumListInput.addItem(enumValue); } } private void doSelect(String value) { if (value == null) { LOG.finest("No enum value selected, return"); return; } LOG.finest("Selecting enum : " + value + " from a choice of " + enumListInput.getItemCount() + " items"); for (int idx = 0; idx < enumListInput.getItemCount(); idx++) { if (enumListInput.getItemText(idx).equals(value)) { enumListInput.setSelectedIndex(idx); return; } } // enumListInput.addItem(value); // enumListInput.setSelectedIndex(enumListInput.getItemCount() - 1); } public HandlerRegistration addValueChangeHandler(final ValueChangeHandler<String> valueChangeHandler) { return enumListInput.addChangeHandler(new ChangeHandler() { public void onChange(ChangeEvent event) { if (enumListInput.getSelectedIndex() != -1) { String value = enumListInput.getValue(enumListInput.getSelectedIndex()); setActive(true); valueChangeHandler.onValueChange(new MyValueChangeEvent<String>(value)); } } }); } public void setValue(String value) { doSelect(value); if (NULL_VALUE.equals(value)) { setActive(false); } else { setActive(true); } } public void setDefaultValue(String defaultValue) { doSelect(defaultValue); } public void clear() { int idx = enumListInput.getSelectedIndex(); LOG.finest("Item " + idx + " is selected, deselect it"); enumListInput.setItemSelected(idx, false); } }