Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Nested presenters with GWTP

Tags:

gwt-platform

I have content slots in my mainpresenter, how can i put, when app load, put the home presenter in one slot and the menu slot in the another ?

or isn't possible?

thanks in advance.

like image 938
caarlos0 Avatar asked Sep 28 '11 03:09

caarlos0


2 Answers

Yes you can ! In the following example code, I assume that your HomePresenter is a place and extends Presenter, and your MenuPresenter extends PresenterWidget.
In your MainPresenter :

@ContentSlot public static final Type<RevealContentHandler<?>> MAIN_SLOT = new Type<RevealContentHandler<?>>();  
@ContentSlot public static final Type<RevealContentHandler<?>> MENU_SLOT = new Type<RevealContentHandler<?>>();

@Override
protected void onReveal() {
    super.onReveal();
    setInSlot(MENU_SLOT, menuPresenter);
}

In your HomePresenter :

@Override
protected void revealInParent() {
    RevealContentEvent.fire(this, MainPresenter.MAIN_SLOT, this);
}

Then in MainView :

@UiField Panel mainContainer;
@UiField Panel menuContainer;

@Override
public void setInSlot(Object slot, Widget content) {
    if (slot == MainPresenter.MAIN_SLOT) {
        mainContainer.clear();
        mainContainer.add(content);
    } else if (slot == MainPresenter.MENU_SLOT) {
        menuContainer.clear();
        menuContainer.add(content);
    } else {
        super.setInSlot(slot, content);
    }
}
like image 127
Mikael Couzic Avatar answered Nov 03 '22 13:11

Mikael Couzic


For users of GWTP 1.5+, note that a lot of new changes have been introduced to slots, and revealing presenters. The case in question may now be accomplished using a NestedSlot for the page content and a PermanentSlot for a menu that you want displayed on all of your pages.

Fortunately, these changes are well documented. See the GWTP slot documentation for an explanation on the new slot types with examples on how to use them.

like image 36
The Gilbert Arenas Dagger Avatar answered Nov 03 '22 13:11

The Gilbert Arenas Dagger