package com.gwt.mvp.client.presenter.switcher;
import com.gwt.mvp.client.EventBus;
import com.gwt.mvp.client.Presenter;
import com.gwt.mvp.client.presenter.ContainerPresenter;
/**
* @author ibouakl
* @author jguibert
*/
public class SwitchPresenter<D extends SwitchDisplay> extends ContainerPresenter<D, Presenter> {
public SwitchPresenter(D display, EventBus eventBus, Presenter... presenters) {
super(display, eventBus, presenters);
}
@Override
protected void onChildPresenterRevealed(Presenter presenter) {
revealDisplay();
firePresenterRevealedEvent(false);
}
/**
* Reveal all child and add them on display.
*/
@Override
protected void onRevealDisplay() {
for (Presenter p : children) {
if (p != null) {
p.revealDisplay();
display.add(p.getDisplay());
}
}
}
public boolean removePresenter(Presenter presenter) {
if (contains(presenter)) {
children.remove(presenter);
if (presenter.isBound()) {
presenter.unbind();
}
if (isRevealed() && presenter.isRevealed()) {
display.remove(presenter.getDisplay());
presenter.disposeDisplay();
}
return true;
}
return false;
}
public void removeAllPresenter() {
for (Presenter p : children) {
removePresenter(p);
}
}
public void setCurrentPresenter(Presenter presenter) {
if (isRevealed() && presenter != null && contains(presenter)) {
display.show(presenter.getDisplay().asWidget());
}
}
/**
* Adds the presenter. If container is revealed, the presenter will be revealed to.
*
* @param presenter The presenter to add.
* @return If added, returns <code>true</code>.
*/
public boolean addPresenter(Presenter presenter) {
if (!contains(presenter)) {
children.add(presenter);
/** bind if neccessary */
if (isBound()) {
presenter.bind();
}
if (isRevealed()) {
presenter.revealDisplay();
display.add(presenter.getDisplay());
}
}
return true;
}
}