package com.gwt.mvp.client.presenter;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.Event.NativePreviewEvent;
import com.google.gwt.user.client.Event.NativePreviewHandler;
import com.gwt.mvp.client.EventBus;
import com.gwt.mvp.client.Presenter;
import com.gwt.mvp.client.event.ShortcutKeyboards;
import com.gwt.mvp.client.event.ShortcutKeyboardsEvent;
/**
* <code>RootPresenter</code> class.
*
*/
public class RootPresenter extends CompositePresenter<RootDisplay> {
private boolean isCtrl;
/**
* Build a new instance of RootPresenter.
*
* @param display root display instance
* @param eventBus event bus instance
*/
public RootPresenter(final RootDisplay display, final EventBus eventBus) {
super(display, eventBus);
Event.addNativePreviewHandler(new NativePreviewHandler() {
@Override
public void onPreviewNativeEvent(NativePreviewEvent event) {
switch (event.getTypeInt()) {
case Event.ONKEYDOWN:
if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ESCAPE) {
eventBus.fireEvent(new ShortcutKeyboardsEvent(ShortcutKeyboards.Esc));
}
if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_CTRL) {
isCtrl = true;
eventBus.fireEvent(new ShortcutKeyboardsEvent(ShortcutKeyboards.CtrlDown));
}
if (event.getNativeEvent().getKeyCode() == 83 && isCtrl) {
eventBus.fireEvent(new ShortcutKeyboardsEvent(ShortcutKeyboards.CtrlS));
isCtrl = false;
event.cancel();
}
if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_SHIFT) {
eventBus.fireEvent(new ShortcutKeyboardsEvent(ShortcutKeyboards.ShiftDown));
}
break;
case Event.ONKEYUP:
if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_CTRL) {
isCtrl = false;
eventBus.fireEvent(new ShortcutKeyboardsEvent(ShortcutKeyboards.CtrlUp));
}
if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_SHIFT) {
eventBus.fireEvent(new ShortcutKeyboardsEvent(ShortcutKeyboards.ShiftUp));
}
break;
default:
break;
}
}
});
}
public void addPresenter(final Presenter... presenters) {
for (Presenter presenter : presenters) {
super.addPresenter("root", presenter);
}
}
/**
* Utility method: bind and reveal <code>RootPresenter</code>.
*/
public void revealRoot() {
bind();
revealDisplay();
}
}