| /* |
| * 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(); |
| } |
| } |