blob: af13e8baa2a3ce5e892c8e12f3d6eef516366dbd [file] [log] [blame]
/*
* Copyright 2010 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.event.logical.shared;
import com.google.gwt.event.shared.EventHandler;
import com.google.gwt.event.shared.GwtEvent;
/**
* Fired when the event source is attached to the browser's document
* or detached from it.
*/
public class AttachEvent extends GwtEvent<AttachEvent.Handler> {
/**
* Implemented by objects that handle {@link AttachEvent}.
*/
public interface Handler extends EventHandler {
void onAttachOrDetach(AttachEvent event);
}
/**
* The event type.
*/
static Type<AttachEvent.Handler> TYPE;
/**
* Fires a {@link AttachEvent} on all registered handlers in the handler source.
*
* @param <S> The handler source type
* @param source the source of the handlers
* @param attached whether to announce an attach or detach
*/
public static <S extends HasAttachHandlers> void fire(S source,
boolean attached) {
if (TYPE != null) {
AttachEvent event = new AttachEvent(attached);
source.fireEvent(event);
}
}
/**
* Ensures the existence of the handler hook and then returns it.
*
* @return returns a handler hook
*/
public static Type<AttachEvent.Handler> getType() {
if (TYPE == null) {
TYPE = new Type<AttachEvent.Handler>();
}
return TYPE;
}
private final boolean attached;
/**
* Construct a new {@link AttachEvent}.
*
* @param width the new width
* @param height the new height
*/
protected AttachEvent(boolean loaded) {
this.attached = loaded;
}
@Override
public final Type<AttachEvent.Handler> getAssociatedType() {
return TYPE;
}
/**
* @return true if this event announces that the source has been attached,
* false if it has been detached
*/
public boolean isAttached() {
return attached;
}
@Override
public String toDebugString() {
assertLive();
return super.toDebugString() + " attached = " + attached;
}
@Override
protected void dispatch(AttachEvent.Handler handler) {
handler.onAttachOrDetach(this);
}
}