Affichage item dans TabPanel
Je développe actuellement une application en GWT (+GXT).
Cette dernière affiche un TabPanel au milieu d'un BorderLayout.
Dans chaque item de mon TabPanel, j'affiche une page si cette dernière n'est pas déjà affichée (même titre).
Quand j'affiche ma page (item) dans un RootLayoutPanel, j'ai toutes les infos désirées.
Quand je l'affiche via mon TabPanel, rien ne s'affiche à l'intérieur de mon TabItem (tout est blanc).
Mon controleur :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
public class MyControler implements Presenter, ValueChangeHandler<String> {
private final EventBus eventBus;
private SerietvGinInjector injector;
private HasWidgets container;
private MyView vuePrincipale;
private MessageBox waitBox;
public MyControler(MyGinInjector injector) {
this.injector = injector;
this.eventBus = injector.getEventBus();
}
public void go(HasWidgets container) {
this.container = container;
vuePrincipale = new MyView();
this.container.add(vuePrincipale);
if ((History.getToken() != null) && (History.getToken().equals(""))) {
History.newItem(Constante.MenuAccueil);
} else {
// Déclenchement de l'état initial de l'historique
History.fireCurrentHistoryState();
}
}
public void onValueChange(ValueChangeEvent<String> event) {
String token = event.getValue();
if (token != null) {
...
// Si le token correspond à l'affichage d'une fiche
if (Constante.ConsultFiche.equals(token)) {
PresenterGTX presenter = new FichePresenter(injector, new FicheView(injector));
presenter.go(vuePrincipale);
}
}
} |
ma vue principale
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
|
public class MyView extends LayoutContainer {
private Viewport viewport;
private TitreWidget north;;
private MenuWidget west;
private TabPanel center;
public MyView() {
super();
}
protected void onRender(Element target, int index) {
super.onRender(target, index);
viewport = new Viewport();
viewport.setLayout(new BorderLayout());
viewport.setStyleAttribute("padding", "10px");
north = new TitreWidget();
west = new MenuWidget();
center = new TabPanel();
center.setMinTabWidth(115);
center.setResizeTabs(true);
center.setAnimScroll(true);
center.setTabScroll(true);
center.setCloseContextMenu(true);
BorderLayoutData northData = new BorderLayoutData(LayoutRegion.NORTH, 50);
northData.setCollapsible(true);
northData.setFloatable(true);
northData.setHideCollapseTool(true);
northData.setSplit(true);
northData.setMargins(new Margins(0, 0, 5, 0));
BorderLayoutData westData = new BorderLayoutData(LayoutRegion.WEST, 150);
westData.setSplit(true);
westData.setCollapsible(true);
westData.setMargins(new Margins(0,5,0,0));
BorderLayoutData centerData = new BorderLayoutData(LayoutRegion.CENTER);
centerData.setMargins(new Margins(0,5,0,0));
viewport.add(north, northData);
viewport.add(west, westData);
viewport.add(center, centerData);
add(viewport);
}
public boolean add(Widget widget) {
if (widget instanceof ListeTitreView) {
addItem(widget, "Liste des titres");
} else {
if (widget instanceof FicheView) {
String titre = ((FicheView) widget).getTitre();
addItem(widget, "Fiche ".concat(titre));
} else {
super.add(widget);
}
}
return attachChildren;
}
private void addItem(Widget widget, String titre) {
String itemListe = null;
for(TabItem item : center.getItems()) {
if (titre.equals(item.getText())) {
itemListe = item.getId();
break;
}
}
if (null != itemListe) {
// L'item existe deja
center.getItemByItemId(itemListe).removeAll();
center.getItemByItemId(itemListe).add(widget);
center.setSelection(center.getItemByItemId(itemListe));
} else {
// Creation de l'item
MyTabItem tabItem = new MyTabItem(titre);
tabItem.add(widget);
center.add(tabItem);
center.setSelection(center.getItem(center.getItemCount()));
}
}
} |
mon TabItem
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
public class MyTabItem extends TabItem {
public MyTabItem(String title) {
super(title);
setBorders(false);
setScrollMode(Scroll.AUTO);
setText(title);
setLayout(new FitLayout());
setWidth("100%");
setClosable(true);
}
} |
Mon presenter
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
public class FichePresenter implements PresenterGTX {
private final Display display;
private MyGinInjector injector;
public interface Display {
Widget asWidget();
}
public FichePresenter(MyGinInjector injector, Display view) {
this.injector = injector;
this.display = view;
}
public void go(LayoutContainer container) {
container.add(display.asWidget());
} |
ma view FichView
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
public class FicheView extends LayoutContainer implements FichePresenter.Display {
/** Injecteur */
MyGinInjector injector;
/** Bus d'évènements */
private EventBus eventBus;
/** la fiche courante */
private Fiche fiche;
public FicheView(MyGinInjector injector) {
super();
this.injector = injector;
this.eventBus = injector.getEventBus();
fiche = Contexte.getFiche();
}
protected void onRender(Element parent, int index) {
super.onRender(parent, index);
setLayout(new AccordionLayout());
add(new SerieWidget(injector, fiche));
add(new ProductionWidget(injector, fiche));
add(new CastingWidget(injector, fiche));
}
public String getTitre() {
return serie.getTitre();
}
public Widget asWidget() {
return this;
}
} |