package org.tessell.widgets;
import org.tessell.gwt.dom.client.GwtElement;
import org.tessell.gwt.dom.client.IsElement;
import org.tessell.gwt.dom.client.IsStyle;
import org.tessell.gwt.user.client.ui.IsWidget;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.Node;
import com.google.gwt.dom.client.NodeList;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.ui.Widget;
public class TextList extends Widget implements IsTextList {
private String childTag = "dd";
private String childStyleName = null;
private boolean enabled = true;
public TextList() {
setElement(Document.get().createDivElement());
}
@Override
public void add(final String text) {
final Element child = DOM.createElement(childTag);
child.setInnerText(text);
if (childStyleName != null) {
child.addClassName(childStyleName);
}
getElement().appendChild(child);
}
@Override
public void add(final int index, final String text) {
final Element child = DOM.createElement(childTag);
child.setInnerText(text);
if (childStyleName != null) {
child.addClassName(childStyleName);
}
getElement().insertBefore(child, getElement().getChild(index));
}
@Override
public void remove(final String text) {
final NodeList<Node> nodes = getElement().getChildNodes();
for (int i = 0; i < nodes.getLength(); i++) {
final Node node = nodes.getItem(i);
if (Element.is(node)) {
final Element element = Element.as(node);
if (element.getInnerText().equals(text)) {
getElement().removeChild(node);
break;
}
}
}
}
@Override
public String remove(final int index) {
final Node node = getElement().getChildNodes().getItem(index);
if (Element.is(node)) {
final Element element = Element.as(node);
getElement().removeChild(node);
return element.getInnerText();
} else {
return null;
}
}
@Override
public void clear() {
final NodeList<Node> nodes = getElement().getChildNodes();
for (int i = 0; i < nodes.getLength(); i++) {
final Node node = nodes.getItem(i);
if (Element.is(node)) {
getElement().removeChild(node);
}
}
}
public String getChildTag() {
return childTag;
}
public void setChildTag(final String childTag) {
this.childTag = childTag;
}
public String getChildStyleName() {
return childStyleName;
}
public void setChildStyleName(final String childStyleName) {
this.childStyleName = childStyleName;
}
@Override
public Widget asWidget() {
return this;
}
@Override
public IsStyle getStyle() {
return getIsElement().getStyle();
}
@Override
public IsElement getIsElement() {
return new GwtElement(getElement());
}
@Override
public IsWidget getIsParent() {
return (IsWidget) getParent();
}
@Override
public boolean hasErrors() {
return getElement().getChildCount() > 0;
}
@Override
public boolean isEnabled() {
return enabled;
}
@Override
public void setEnabled(final boolean enabled) {
this.enabled = enabled;
}
}