Bonjour,

je voudrais avoir un item dans un CheckboxTreeViewer qui s'affiche sur toute la largeur, pour simuler une table avec groupement.

Ca marche bien (pour l'instant j'ai testé que sur Windows) :

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
Listener paintListener = new Listener() {

  public void handleEvent(Event event) {
    TreeItem item = ((TreeItem)event.item);
    Object element = item.getData(); 
    if ( element instanceof BundleHandler ) {
      //event.doit=false;
      switch(event.type) {		 
        case SWT.PaintItem: { 
          String text = ((BundleHandler)element).getLabel();
          if ( text!=null ) {
            Point size = event.gc.stringExtent(text);
            int yOffset = Math.max(0, (event.height - size.y) / 2); 
            event.gc.drawString(text, item.getBounds(0).x + item.getBounds(event.index).x-event.x+2 , event.y + yOffset, true);
          }
          break;
        }
      }
    }
  }

}; 
treeViewer.getTree().addListener(SWT.PaintItem, paintListener);
Par contre le +2 que j'ai dû mettre "en dur" me gène : je suppose qu'il s'agit de trims , genre marge, mais je n'arrive pas à trouver un moyen d'en calculer une valeur générique qui s'adapte donc à l'environnement. Je ne vois pas d'où viennent ces 2 pixels de décalage.

Quelqu'un a une idée de ce à quoi cet offset correspond ?
Ou voit-il à un moyen de le déterminer de manière à ce que cela fonctionne sur tous les os et avec toutes les tailles de polices ?