/** * This file is part of pwt. * * pwt is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser * General Public License as published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * pwt is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser * General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License along with pwt. If not, * see <http://www.gnu.org/licenses/>. */ package fr.putnami.pwt.core.widget.client; import com.google.gwt.dom.client.LIElement; import com.google.gwt.event.dom.client.BlurEvent; import com.google.gwt.event.dom.client.BlurHandler; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.DoubleClickEvent; import com.google.gwt.event.dom.client.DoubleClickHandler; import com.google.gwt.event.dom.client.DragEndEvent; import com.google.gwt.event.dom.client.DragEndHandler; import com.google.gwt.event.dom.client.DragEnterEvent; import com.google.gwt.event.dom.client.DragEnterHandler; import com.google.gwt.event.dom.client.DragEvent; import com.google.gwt.event.dom.client.DragHandler; import com.google.gwt.event.dom.client.DragLeaveEvent; import com.google.gwt.event.dom.client.DragLeaveHandler; import com.google.gwt.event.dom.client.DragOverEvent; import com.google.gwt.event.dom.client.DragOverHandler; import com.google.gwt.event.dom.client.DragStartEvent; import com.google.gwt.event.dom.client.DragStartHandler; import com.google.gwt.event.dom.client.DropEvent; import com.google.gwt.event.dom.client.DropHandler; import com.google.gwt.event.dom.client.FocusEvent; import com.google.gwt.event.dom.client.FocusHandler; import com.google.gwt.event.dom.client.GestureChangeEvent; import com.google.gwt.event.dom.client.GestureChangeHandler; import com.google.gwt.event.dom.client.GestureEndEvent; import com.google.gwt.event.dom.client.GestureEndHandler; import com.google.gwt.event.dom.client.GestureStartEvent; import com.google.gwt.event.dom.client.GestureStartHandler; import com.google.gwt.event.dom.client.HasAllDragAndDropHandlers; import com.google.gwt.event.dom.client.HasAllFocusHandlers; import com.google.gwt.event.dom.client.HasAllGestureHandlers; import com.google.gwt.event.dom.client.HasAllKeyHandlers; import com.google.gwt.event.dom.client.HasAllMouseHandlers; import com.google.gwt.event.dom.client.HasAllTouchHandlers; import com.google.gwt.event.dom.client.HasClickHandlers; import com.google.gwt.event.dom.client.HasDoubleClickHandlers; import com.google.gwt.event.dom.client.KeyDownEvent; import com.google.gwt.event.dom.client.KeyDownHandler; import com.google.gwt.event.dom.client.KeyPressEvent; import com.google.gwt.event.dom.client.KeyPressHandler; import com.google.gwt.event.dom.client.KeyUpEvent; import com.google.gwt.event.dom.client.KeyUpHandler; import com.google.gwt.event.dom.client.MouseDownEvent; import com.google.gwt.event.dom.client.MouseDownHandler; import com.google.gwt.event.dom.client.MouseMoveEvent; import com.google.gwt.event.dom.client.MouseMoveHandler; import com.google.gwt.event.dom.client.MouseOutEvent; import com.google.gwt.event.dom.client.MouseOutHandler; import com.google.gwt.event.dom.client.MouseOverEvent; import com.google.gwt.event.dom.client.MouseOverHandler; import com.google.gwt.event.dom.client.MouseUpEvent; import com.google.gwt.event.dom.client.MouseUpHandler; import com.google.gwt.event.dom.client.MouseWheelEvent; import com.google.gwt.event.dom.client.MouseWheelHandler; import com.google.gwt.event.dom.client.TouchCancelEvent; import com.google.gwt.event.dom.client.TouchCancelHandler; import com.google.gwt.event.dom.client.TouchEndEvent; import com.google.gwt.event.dom.client.TouchEndHandler; import com.google.gwt.event.dom.client.TouchMoveEvent; import com.google.gwt.event.dom.client.TouchMoveHandler; import com.google.gwt.event.dom.client.TouchStartEvent; import com.google.gwt.event.dom.client.TouchStartHandler; import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.user.client.ui.Focusable; import com.google.gwt.user.client.ui.IsWidget; import com.google.gwt.user.client.ui.impl.FocusImpl; import fr.putnami.pwt.core.model.client.base.HasDrawable; import fr.putnami.pwt.core.theme.client.CssStyle; import fr.putnami.pwt.core.widget.client.base.AbstractHTMLPanel; import fr.putnami.pwt.core.widget.client.base.SimpleStyle; import fr.putnami.pwt.core.widget.client.util.StyleUtils; public class ListItem extends AbstractHTMLPanel implements HasDrawable, Focusable, HasAllDragAndDropHandlers, HasAllMouseHandlers, HasClickHandlers, HasDoubleClickHandlers, HasAllKeyHandlers, HasAllFocusHandlers, HasAllGestureHandlers, HasAllTouchHandlers { private static final FocusImpl FOCUS_IMPL = FocusImpl.getFocusImplForPanel(); private static final CssStyle STYLE_ACTIVE = new SimpleStyle("active"); private boolean active = false; public ListItem() { super(LIElement.TAG, AbstractHTMLPanel.EMPTY_HTML); } public ListItem(String html) { super(LIElement.TAG, html); } protected ListItem(ListItem source) { super(source); this.setActive(source.active); } @Override public IsWidget cloneWidget() { return new ListItem(this); } public boolean isActive() { return this.active; } public void setActive(boolean active) { this.active = active; StyleUtils.toggleStyle(this.getElement(), ListItem.STYLE_ACTIVE, active); } @Override public void redraw() { this.setActive(this.active); } @Override public int getTabIndex() { return ListItem.FOCUS_IMPL.getTabIndex(this.getElement()); } @Override public void setAccessKey(char key) { ListItem.FOCUS_IMPL.setAccessKey(this.getElement(), key); } @Override public void setFocus(boolean focused) { if (focused) { ListItem.FOCUS_IMPL.focus(this.getElement()); } else { ListItem.FOCUS_IMPL.blur(this.getElement()); } } @Override public void setTabIndex(int index) { ListItem.FOCUS_IMPL.setTabIndex(this.getElement(), index); } @Override public HandlerRegistration addBlurHandler(BlurHandler handler) { return this.addDomHandler(handler, BlurEvent.getType()); } @Override public HandlerRegistration addClickHandler(ClickHandler handler) { return this.addDomHandler(handler, ClickEvent.getType()); } @Override public HandlerRegistration addDoubleClickHandler(DoubleClickHandler handler) { return this.addDomHandler(handler, DoubleClickEvent.getType()); } @Override public HandlerRegistration addDragEndHandler(DragEndHandler handler) { return this.addBitlessDomHandler(handler, DragEndEvent.getType()); } @Override public HandlerRegistration addDragEnterHandler(DragEnterHandler handler) { return this.addBitlessDomHandler(handler, DragEnterEvent.getType()); } @Override public HandlerRegistration addDragHandler(DragHandler handler) { return this.addBitlessDomHandler(handler, DragEvent.getType()); } @Override public HandlerRegistration addDragLeaveHandler(DragLeaveHandler handler) { return this.addBitlessDomHandler(handler, DragLeaveEvent.getType()); } @Override public HandlerRegistration addDragOverHandler(DragOverHandler handler) { return this.addBitlessDomHandler(handler, DragOverEvent.getType()); } @Override public HandlerRegistration addDragStartHandler(DragStartHandler handler) { return this.addBitlessDomHandler(handler, DragStartEvent.getType()); } @Override public HandlerRegistration addDropHandler(DropHandler handler) { return this.addBitlessDomHandler(handler, DropEvent.getType()); } @Override public HandlerRegistration addFocusHandler(FocusHandler handler) { return this.addDomHandler(handler, FocusEvent.getType()); } @Override public HandlerRegistration addGestureChangeHandler(GestureChangeHandler handler) { return this.addDomHandler(handler, GestureChangeEvent.getType()); } @Override public HandlerRegistration addGestureEndHandler(GestureEndHandler handler) { return this.addDomHandler(handler, GestureEndEvent.getType()); } @Override public HandlerRegistration addGestureStartHandler(GestureStartHandler handler) { return this.addDomHandler(handler, GestureStartEvent.getType()); } @Override public HandlerRegistration addKeyDownHandler(KeyDownHandler handler) { return this.addDomHandler(handler, KeyDownEvent.getType()); } @Override public HandlerRegistration addKeyPressHandler(KeyPressHandler handler) { return this.addDomHandler(handler, KeyPressEvent.getType()); } @Override public HandlerRegistration addKeyUpHandler(KeyUpHandler handler) { return this.addDomHandler(handler, KeyUpEvent.getType()); } @Override public HandlerRegistration addMouseDownHandler(MouseDownHandler handler) { return this.addDomHandler(handler, MouseDownEvent.getType()); } @Override public HandlerRegistration addMouseMoveHandler(MouseMoveHandler handler) { return this.addDomHandler(handler, MouseMoveEvent.getType()); } @Override public HandlerRegistration addMouseOutHandler(MouseOutHandler handler) { return this.addDomHandler(handler, MouseOutEvent.getType()); } @Override public HandlerRegistration addMouseOverHandler(MouseOverHandler handler) { return this.addDomHandler(handler, MouseOverEvent.getType()); } @Override public HandlerRegistration addMouseUpHandler(MouseUpHandler handler) { return this.addDomHandler(handler, MouseUpEvent.getType()); } @Override public HandlerRegistration addMouseWheelHandler(MouseWheelHandler handler) { return this.addDomHandler(handler, MouseWheelEvent.getType()); } @Override public HandlerRegistration addTouchCancelHandler(TouchCancelHandler handler) { return this.addDomHandler(handler, TouchCancelEvent.getType()); } @Override public HandlerRegistration addTouchEndHandler(TouchEndHandler handler) { return this.addDomHandler(handler, TouchEndEvent.getType()); } @Override public HandlerRegistration addTouchMoveHandler(TouchMoveHandler handler) { return this.addDomHandler(handler, TouchMoveEvent.getType()); } @Override public HandlerRegistration addTouchStartHandler(TouchStartHandler handler) { return this.addDomHandler(handler, TouchStartEvent.getType()); } }