Refresh d'un LayoutContainer
Bonjour,
Je développe actuellement une application sous GWT / GXT en utilisant la méthode MVP.
J'ai un écran principal qui contient un TabPanel.
Dans un des TabItem, j'ai un TreePanel qui affiche une liste de titres.
Dans les autres TabItems, j'ai des données qui peuvent mettre à jour mon TreePanel.
Pour celà, lorsqu'une donnée est modifiée, le TabItem appelle l'évènement "onRefresh" de mon presenter qui reconstruit le Store et le TreePanel.
=> problème : bien que les données de ma vue soit correctement mis à jour (vérifié en debug), au niveau de l'affichage le TreePanel n'est pas raffraichit !
J'ai essayé "Repaint", "Layout" et "Recalculate" => pas de résultat !
mon presenter :
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 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
import java.util.ArrayList;
import java.util.List;
import com.extjs.gxt.ui.client.data.BaseTreeModel;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.event.TreePanelEvent;
import com.extjs.gxt.ui.client.store.TreeStore;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
import com.extjs.gxt.ui.client.widget.treepanel.TreePanel;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.inject.Inject;
import fr.pmo.gwt.monappli.client.commun.PresenterGTX;
import fr.pmo.gwt.monappli.client.commun.event.RefreshListeTitreEvent;
import fr.pmo.gwt.monappli.client.commun.handler.RefreshListeTitreEventHandler;
import fr.pmo.gwt.monappli.client.divers.Util;
import fr.pmo.gwt.monappli.shared.ListeTitreComplete;
import fr.pmo.gwt.monappli.shared.bean.metier.activite.Titre;
import fr.pmo.gwt.monappli.shared.model.TitreModel;
public class ListeTitrePresenter implements PresenterGTX, ListeTitreView.Presenter, RefreshListeTitreEventHandler {
/** Bus d'évènements */
@Inject
private EventBus eventBus;
private List<HandlerRegistration> handlerRegistrationListe = new ArrayList<HandlerRegistration>();
private TreePanel<BaseTreeModel> treeTitre;
private LayoutContainer container;
private ListeTitreView display;
@Inject
public ListeTitrePresenter(ListeTitreView view) {
this.display = view;
}
/**
* {@inheritDoc}
*/
@Override
public void go(LayoutContainer container) {
bind();
display.setPresenter(this);
this.container = container;
container.add(display.asWidget());
container.layout();
}
public void bind() {
ArrayList<Titre> liste = ListeTitreComplete.getListe();
if (null != liste) {
treeTitre = getTreeStore(liste);
}
display.setTree(treeTitre);
display.getTreePanel().addListener(Events.OnClick, new Listener<TreePanelEvent<TitreModel>>() {
@Override
public void handleEvent(TreePanelEvent<TitreModel> tpe) {
TitreModel itemSelect = tpe.getItem();
if ((null != itemSelect.getCode()) && !itemSelect.getCode().isEmpty()) {
Titre titre = Util.getTitreFiche(itemSelect.getCode(), itemSelect.getTitre());
Util.loadFiche(titre, serieService, eventBus, container);
}
};
});
}
public TreePanel<BaseTreeModel> getTreeStore(ArrayList<Titre> liste) {
TreeStore<BaseTreeModel> storeTitre = new TreeStore<BaseTreeModel>();
treeTitre = new TreePanel<BaseTreeModel>(storeTitre);
...
return treeTitre;
}
/**
* {@inheritDoc}
*/
@Override
public void onRefresh(RefreshListeTitreEvent event) {
bind();
//TODO refresh
container.repaint();
container.recalculate();
container.layout();
}
/**
* {@inheritDoc}
*/
@Override
public void onLoad() {
// connect handler
handlerRegistrationListe.add(eventBus.addHandler(RefreshListeTitreEvent.TYPE, this));
}
/**
* {@inheritDoc}
*/
@Override
public void onUnload() {
// disconnect handler
for (HandlerRegistration hr : handlerRegistrationListe) {
hr.removeHandler();
}
handlerRegistrationListe.clear();
}
} |
ma vue :
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 98 99 100 101 102 103 104 105 106
|
import com.extjs.gxt.ui.client.Style.Orientation;
import com.extjs.gxt.ui.client.Style.Scroll;
import com.extjs.gxt.ui.client.data.BaseTreeModel;
import com.extjs.gxt.ui.client.store.TreeStore;
import com.extjs.gxt.ui.client.widget.layout.RowLayout;
import com.extjs.gxt.ui.client.widget.treepanel.TreePanel;
import com.google.gwt.user.client.Element;
import fr.pmo.gwt.monappli.client.commun.AbstractView;
import fr.pmo.gwt.monappli.shared.bean.metier.activite.Titre;
public class ListeTitreViewImpl extends AbstractView implements ListeTitreView {
private Presenter presenter;
private TreePanel<BaseTreeModel> treePanel;
public ListeTitreViewImpl() {
super();
setScrollMode(Scroll.AUTO);
treePanel = new TreePanel<BaseTreeModel>(new TreeStore<BaseTreeModel>());
setLayout(new RowLayout(Orientation.VERTICAL));
}
/*
* (non-Javadoc)
*
* @see com.extjs.gxt.ui.client.widget.LayoutContainer#onRender(com.google.gwt. user.client.Element, int)
*/
@Override
protected void onRender(Element parent, int index) {
super.onRender(parent, index);
setStyleAttribute("paddingLeft", "10px");
setStyleAttribute("paddingTop", "10px");
treePanel.setWidth(300);
treePanel.setDisplayProperty("titre");
add(treePanel);
}
/**
* {@inheritDoc}
*/
@Override
public void setPresenter(Presenter presenter) {
this.presenter = presenter;
}
/**
* {@inheritDoc}
*/
@Override
public TreePanel<BaseTreeModel> getTreePanel() {
return treePanel;
}
/**
* {@inheritDoc}
*/
@Override
public void setTree(TreePanel<BaseTreeModel> treePanel) {
if (null != treePanel) {
this.treePanel = treePanel;
//TODO refresh
repaint();
layout();
recalculate();
}
}
/* (non-Javadoc)
* @see com.google.gwt.user.client.ui.Widget#onLoad()
*/
@Override
public void onLoad() {
super.onLoad();
presenter.onLoad();
}
/* (non-Javadoc)
* @see com.google.gwt.user.client.ui.Widget#onUnload()
*/
@Override
public void onUnload() {
super.onUnload();
presenter.onUnload();
}
} |
Merci d'avance à ceux qui voudront bien de me donner un coup de main.