package org.jboss.ballroom.client.widgets.window;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.dom.client.Element;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.LayoutPanel;
import com.google.gwt.user.client.ui.Widget;
/**
* A panel that trap focus on it's child contents.
*
* @see Focus
*
* @author Heiko Braun
* @date 3/12/12
*/
public class TrappedFocusPanel extends LayoutPanel {
protected Focus focus;
public TrappedFocusPanel() {
super();
setStyleName("fill-layout");
this.sinkEvents(Event.ONKEYDOWN);
focus = new Focus(getElement());
}
public TrappedFocusPanel(Widget child) {
super();
setStyleName("fill-layout");
this.sinkEvents(Event.ONKEYDOWN);
this.sinkEvents(Event.ONMOUSEDOWN);
add(child);
focus = new Focus(getElement());
}
@Override
protected void onAttach() {
super.onAttach();
Scheduler.get().scheduleDeferred(
new Scheduler.ScheduledCommand() {
@Override
public void execute() {
//focus = new Focus(getElement());
focus.onFirstInput();
}
}
);
}
public Focus getFocus() {
return focus;
}
@Override
public void onBrowserEvent(Event event) {
int type = DOM.eventGetType(event);
switch (type) {
case Event.ONKEYDOWN:
if(event.getKeyCode()== KeyCodes.KEY_TAB)
{
event.preventDefault();
event.stopPropagation();
if(event.getShiftKey())
focus.prev();
else
focus.next();
}
break;
case Event.ONMOUSEDOWN:
Element element = event.getEventTarget().cast();
focus.onElement(element);
break;
default:
return;
}
}
}