| /* | |
| * Copyright 2011 Google Inc. | |
| * | |
| * 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.google.gwt.widget.client; | |
| import com.google.gwt.cell.client.ButtonCellBase; | |
| import com.google.gwt.cell.client.IsCollapsible; | |
| import com.google.gwt.cell.client.ButtonCellBase.Decoration; | |
| 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.FocusEvent; | |
| import com.google.gwt.event.dom.client.FocusHandler; | |
| import com.google.gwt.event.dom.client.HasAllFocusHandlers; | |
| import com.google.gwt.event.dom.client.HasAllKeyHandlers; | |
| import com.google.gwt.event.dom.client.HasClickHandlers; | |
| import com.google.gwt.event.dom.client.HasMouseDownHandlers; | |
| import com.google.gwt.event.dom.client.HasMouseOutHandlers; | |
| import com.google.gwt.event.dom.client.HasMouseOverHandlers; | |
| import com.google.gwt.event.dom.client.HasMouseUpHandlers; | |
| 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.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.shared.HandlerRegistration; | |
| import com.google.gwt.user.cellview.client.CellWidget; | |
| import com.google.gwt.user.client.ui.Focusable; | |
| import com.google.gwt.user.client.ui.HasEnabled; | |
| /** | |
| * Base class for buttons that supports content decoration. | |
| * | |
| * @param <C> the data type of the button's contents | |
| */ | |
| public class ButtonBase<C> extends CellWidget<C> implements HasEnabled, Focusable, IsCollapsible, | |
| HasAllFocusHandlers, HasMouseDownHandlers, HasMouseUpHandlers, HasMouseOutHandlers, | |
| HasMouseOverHandlers, HasClickHandlers, HasAllKeyHandlers { | |
| /** | |
| * Initialize the tab index of the cell and return it. This is needed so we | |
| * can modify the cell before calling the super constructor. | |
| * | |
| * @param <C> the cell type | |
| * @param cell the cell | |
| */ | |
| static <C extends ButtonCellBase<?>> C initializeCell(C cell) { | |
| cell.setTabIndex(0); | |
| return cell; | |
| } | |
| private final ButtonCellBase<C> cell; | |
| /** | |
| * Construct a new {@link ButtonBase} with the specified cell and an initial | |
| * value of <code>null</code>. | |
| * | |
| * @param cell the cell to wrap | |
| */ | |
| protected ButtonBase(ButtonCellBase<C> cell) { | |
| this(cell, null); | |
| } | |
| /** | |
| * Construct a new {@link ButtonBase} with the specified cell and initial | |
| * value. | |
| * | |
| * @param cell the cell to wrap | |
| * @param initialValue the initial value of the Cell | |
| */ | |
| protected ButtonBase(ButtonCellBase<C> cell, C initialValue) { | |
| super(cell, initialValue); | |
| this.cell = cell; | |
| } | |
| public HandlerRegistration addBlurHandler(BlurHandler handler) { | |
| return addDomHandler(handler, BlurEvent.getType()); | |
| } | |
| public HandlerRegistration addClickHandler(ClickHandler handler) { | |
| return addDomHandler(handler, ClickEvent.getType()); | |
| } | |
| public HandlerRegistration addFocusHandler(FocusHandler handler) { | |
| return addDomHandler(handler, FocusEvent.getType()); | |
| } | |
| public HandlerRegistration addKeyDownHandler(KeyDownHandler handler) { | |
| return addDomHandler(handler, KeyDownEvent.getType()); | |
| } | |
| public HandlerRegistration addKeyPressHandler(KeyPressHandler handler) { | |
| return addDomHandler(handler, KeyPressEvent.getType()); | |
| } | |
| public HandlerRegistration addKeyUpHandler(KeyUpHandler handler) { | |
| return addDomHandler(handler, KeyUpEvent.getType()); | |
| } | |
| public HandlerRegistration addMouseDownHandler(MouseDownHandler handler) { | |
| return addDomHandler(handler, MouseDownEvent.getType()); | |
| } | |
| public HandlerRegistration addMouseOutHandler(MouseOutHandler handler) { | |
| return addDomHandler(handler, MouseOutEvent.getType()); | |
| } | |
| public HandlerRegistration addMouseOverHandler(MouseOverHandler handler) { | |
| return addDomHandler(handler, MouseOverEvent.getType()); | |
| } | |
| public HandlerRegistration addMouseUpHandler(MouseUpHandler handler) { | |
| return addDomHandler(handler, MouseUpEvent.getType()); | |
| } | |
| /** | |
| * Get the decoration style of the button. | |
| */ | |
| public Decoration getDecoration() { | |
| return cell.getDecoration(); | |
| } | |
| public int getTabIndex() { | |
| return cell.getTabIndex(); | |
| } | |
| public boolean isCollapseLeft() { | |
| return cell.isCollapseLeft(); | |
| } | |
| public boolean isCollapseRight() { | |
| return cell.isCollapseRight(); | |
| } | |
| public boolean isEnabled() { | |
| return cell.isEnabled(); | |
| } | |
| public void setAccessKey(char key) { | |
| cell.setAccessKey(key); | |
| redraw(); | |
| } | |
| public void setCollapseLeft(boolean isCollapsed) { | |
| if (cell.isCollapseLeft() == isCollapsed) { | |
| return; | |
| } | |
| cell.setCollapseLeft(isCollapsed); | |
| redraw(); | |
| } | |
| public void setCollapseRight(boolean isCollapsed) { | |
| if (cell.isCollapseRight() == isCollapsed) { | |
| return; | |
| } | |
| cell.setCollapseRight(isCollapsed); | |
| redraw(); | |
| } | |
| /** | |
| * Set the {@link Decoration} of the button. | |
| * | |
| * @param decoration the button decoration | |
| */ | |
| public void setDecoration(Decoration decoration) { | |
| if (cell.getDecoration() == decoration) { | |
| return; | |
| } | |
| cell.setDecoration(decoration); | |
| redraw(); | |
| } | |
| public void setEnabled(boolean enabled) { | |
| if (cell.isEnabled() == enabled) { | |
| return; | |
| } | |
| cell.setEnabled(enabled); | |
| redraw(); | |
| } | |
| public void setFocus(boolean focused) { | |
| cell.setFocus(getElement(), focused); | |
| } | |
| public void setTabIndex(int index) { | |
| cell.setTabIndex(index); | |
| redraw(); | |
| } | |
| } |