2010-01-08 10 views
7

Existe-t-il un exemple d'utilisation de IDecorationContext pour les décorations d'étiquettes?Comment utiliser une API d'IDecorationContext à partir d'Eclipse JFace

Par le regard de celui-ci, IDecorationContext classe semble fournir une sorte de support de décoration contextuelle, mais pour la vie de moi, je ne peux pas trouver un exemple de code utilisant cette fonction ...

Quelqu'un at-il réellement utilisé contexte de décoration et si oui, quels cas d'utilisation at-il résolus?


PS: Je cherche un moyen d'appliquer des décorations d'image pour opposer les étiquettes et selon l'endroit où l'objet est affiché, la taille des icônes de base varie (par exemple, les icônes « petites » traditionnelles dans table- et l'arbre éléments et icônes plus grandes pour les en-têtes de contenu).

Les décorations appliquées aux icônes d'origine doivent choisir les décorations de taille appropriée en conséquence.

IDecorationContext semble correspondre à la facture de ce dont j'ai besoin pour, mais la documentation est aussi rare que l'on peut attendre d'une caractéristique mineure d'une bibliothèque open source et il n'y a pas d'exemples à trouver.

recherche sur Google pour le « IDecorationContext » n'a pas révélé quelque chose d'intéressant non plus, donc je changerai StackOverflow la sagesse de la foule dans l'espoir gars à côté obtenir la question serait en mesure d'obtenir leur réponse plus rapide;)

Répondre

7

Je ne l'ai pas utilisez IDecorationContext, mais vous pouvez le voir utilisé dans org.eclipse.jface.viewers.LabelDecorator.

Il est également abordée dans this thread (même s'il n'y a pas de réponse, qui peut au moins vous donner un point de départ)

Mon approche actuelle est d'étendre org.eclipse.ui.decorators en utilisant un ILightweightLabelDecorator à ajouter une superposition de remplacement aux icônes respectives:

public class ProjectLabelDecorator extends LabelProvider 
    implements ILightweightLabelDecorator { 

    ... 

    public void decorate(Object element, IDecoration decoration) { 
     if (element instanceof IFolder) { 
     IFolder folder = (IFolder) element; 
    try { 
      if (folder.getProject().hasNature("rttdt.nature")) { 
       if (ProjectNature.isTestcase(folder)) { 
        IDecorationContext context = 
         decoration.getDecorationContext(); 
        if (context instanceof DecorationContext) { 
         ((DecorationContext) context).putProperty(
         IDecoration.ENABLE_REPLACE, Boolean.TRUE); 
        } 
        decoration.addOverlay(fTestcaseOverlay, 
         IDecoration.REPLACE); 
       } 
     } catch (CoreException e) { 
     } 
     } 
    } 

    ... 
} 
+0

Note à moi-même: cela semble être ma 2000e réponse sur SO. – VonC