Bonjour,
Je voudrais savoir s'il y a une méthode pour initialiser complètement un TreeViewer.
Il me faut pourvoir détecter automatiquement un certain type de répertoire.
Ma fonction parcourt en profondeur mon arbre.
Le problème est que lorsque on rencontre un nœud jamais explorer, il n'a pas encore liée la donnée au nœud.
Pour éviter ce problème, je fait un expendAll() juste avant ma recherche. Ce qui provoque une apparition éclair indésirable.
De plus, l'ouverture complète de l'arbre prend du temps. Ce qui freeze l'interface.
Mon traitement est dans un job :
et l'arbre surveille la fin du job :
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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 public class JobMediadataTreeLoader extends Job { private MediaData rootMediaData = null; /** * Constructeur de la classe <code>JobMediadataTreeLoader</code>. */ public JobMediadataTreeLoader() { super("Analyse of data directory"); } /** * Retourne la variable <code>rootMediaData</code> de type <code>MediaData</code>. * @return la variable rootMediaData */ public MediaData getRootMediaData() { return rootMediaData; } /** * Positionne la variable <code>rootMediaData</code> de type <code>MediaData</code>. * @param rootMediaData la variable rootMediaData à positionner. */ public void setRootMediaData(MediaData rootMediaData) { this.rootMediaData = rootMediaData; } /** * {@inheritDoc} * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor) */ @Override protected IStatus run(IProgressMonitor monitor) { if(rootMediaData != null) { rootMediaData.analyseRecursive(); } return Status.OK_STATUS; } }
La fonction done est bien appeler avant que l'interface ne freeze. Donc le problème vient bien de la construction de 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 @Override public void done(IJobChangeEvent event) { System.out.println("done"); if(event.getJob().equals(job)) { this.getDisplay().syncExec(new Runnable() { public void run() { treeViewer.setInput(job.getRootMediaData()); treeViewer.expandAll(); openAndSelectAllProduct(treeViewer.getTree().getItems()); changeSupport.firePropertyChange("product list", null, null); } }); } }
Que puis-je faire pour régler ces problèmes ?
Merci d'avance.
Partager