/* * Copyright 2008 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.gen2.widgetbase.client; import com.google.gwt.gen2.event.dom.client.DomEvent; import com.google.gwt.gen2.event.shared.AbstractEvent; import com.google.gwt.gen2.event.shared.EventHandler; import com.google.gwt.gen2.event.shared.HandlerManager; import com.google.gwt.gen2.event.shared.HandlerRegistration; import com.google.gwt.gen2.event.shared.HasHandlerManager; import com.google.gwt.user.client.Event; import com.google.gwt.user.client.ui.Widget; /** * All top-level incubator widgets should extend {@link Gen2Widget}. * {@link Gen2Widget} will include all the extra handler and styling support * needed by gen2 widgets. * * @deprecated gen2Widget's functionality has been subsumed by the 1.6 Widget * functionality */ @Deprecated public abstract class Gen2Widget extends Widget implements HasHandlerManager { private HandlerManager handlerManager; /** * Returns this widget's {@link HandlerManager} used for event management. * * @return the handler manager */ public final HandlerManager getHandlerManager() { if (handlerManager == null) { handlerManager = createLegacyHandlerManager(); } return handlerManager; } @Override public void onBrowserEvent(Event nativeEvent) { super.onBrowserEvent(nativeEvent); if (handlerManager != null) { DomEvent.fireNativeEvent(nativeEvent, handlerManager); } } @Override public void setStyleName(String name) { setStylePrimaryName(name); } // This code can probably not be compiled out, but this toString is // sufficiently more useful the cost seems worth it. @Override public String toString() { String accum = this.getStylePrimaryName() + " widget"; String id = this.getElement().getId(); if (id != null && id.trim().length() > 0) { accum += "id " + id; } return accum; } /** * Adds a native event handler to the widget and sinks the corresponding * native event. If you do not wish to sink the native event, use the * addHandler method instead. * * @param <HandlerType> the type of handler to add * @param key the event key * @param handler the handler * @return {@link HandlerRegistration} used to remove the handler */ protected <HandlerType extends EventHandler> HandlerRegistration addDomHandler( DomEvent.Type<?, HandlerType> key, final HandlerType handler) { sinkEvents(key.getNativeEventType()); return addHandler(key, handler); } /** * Adds a handler. * * @param <HandlerType> the type of handler to add * @param type the event type * @param handler the handler * @return {@link HandlerRegistration} used to remove the handler */ protected <HandlerType extends EventHandler> HandlerRegistration addHandler( AbstractEvent.Type<?, HandlerType> type, final HandlerType handler) { return getHandlerManager().addHandler(type, handler); } /** * <p> * Creates the {@link HandlerManager} used by this widget for event * management. * </p> * <p> * Note that {@link Gen2Widget} is deprecated and should not be used. The * HandlerManager has been moved to GWT trunk and included in {@link Widget}, * so Gen2Widget contains both the deprecated {@link HandlerManager} and the * non-deprecated {@link com.google.gwt.event.shared.HandlerManager}. * </p> * * @return the handler manager * @see #createHandlerManager() */ protected HandlerManager createLegacyHandlerManager() { return new HandlerManager(this); } /** * Fires an event. * * @param event the event */ protected void fireEvent(AbstractEvent event) { if (handlerManager != null) { handlerManager.fireEvent(event); } } /** * Is the event handled by one or more handlers? * * @param type event type * @return does this event type have a current handler */ protected final boolean isEventHandled(AbstractEvent.Type type) { return handlerManager == null ? false : handlerManager.isEventHandled(type); } /** * Removes the given handler from the specified event type. Normally, * applications should call {@link HandlerRegistration#removeHandler()} * instead. * * @param <HandlerType> handler type * * @param type the event type * @param handler the handler */ protected <HandlerType extends EventHandler> void removeHandler( AbstractEvent.Type<?, HandlerType> type, final HandlerType handler) { if (handlerManager == null) { handlerManager = new HandlerManager(this); } handlerManager.removeHandler(type, handler); } }