Bonjour à tous,

Je dispose d'un arbre avec des feuilles et des dossiers modélisés
par des classes LeafTreeModel et FolderTreeModel qui étendent TreeModel.

Pour cela j'utilise un TreeGrid.
Après avoir ajouter une feuille à un dossier (via un bouton) je cherche à la
sélectionner dans la foulée
mais je n'y arrive pas.

Voici un extrait du code du loader:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
RpcProxy<List<TreeModel>> proxy = new RpcProxy<List<TreeModel>>() {
 
			@Override
			protected void load(Object loadConfig,
					final AsyncCallback<List<TreeModel>> callback)
			{
			}
 
// tree loader
TreeLoader<TreeModel> loader = new BaseTreeLoader<TreeModel>(proxy) {
			@Override
			public boolean hasChildren(TreeModel parent)
			{
				return parent instanceof FolderTreeModel;
			}
		};
 
// creation du store et de la TreeGrid
TreeStore<TreeModel> store = new TreeStore<TreeModel>(loader);
tree = new TreeGrid<TreeModel>(store, cm);
Ensuite dans le bloc qui contient l'action d'ajout à l'arbre:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
ActionService.Util.getInstance().createLeaf(folderId, ...
	new AsyncCallback<Leaf>() {
 
	@Override
	public void onFailure(Throwable caught)
	{
	}
	@Override
	public void onSuccess(Leaf result)
	{
         TreeGrid<TreeModel> tree = treeview.getTree();
         LeafTreeModel leaf = new LeafTreeModel(new LeafModel(result));
         // recuperation du dossier pere
         ModelData paent = tree.getSelectionModel().getSelectedItem();
         TreeModel nodeParent = (TreeModel) parent;
        // j'ouvre le dossier pour pouvoir la selectionner
        tree.setExpanded(nodeParent, true);
 
        }
Ca fonctionne encore mais ensuite j'ai beau tenté de sélectionner la ligne via un select :

TreeGridSelectionModel selectionModel = (TreeGridSelectionModel) tree.getSelectionModel();
selectionModel.select(leaf, true);

Ca ne marche pas.
Je pense que c'est parce que je recharge le loader via la méthode setExpanded et comme la mécanique est asynchrone...

Si quelqu'un a une idée..
Merci d'avance !