IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SWT/JFace Java Discussion :

Superposer les icones comme Eclipse


Sujet :

SWT/JFace Java

  1. #1
    Membre extrêmement actif Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 814
    Points
    814
    Par défaut Superposer les icones comme Eclipse
    Bonjour à tous,
    je me posais une question en cette belle matinée !
    Quelqu'un connait il le mécanisme qu'utilise Eclipse pour, par exemple, notifier une erreur sur un fichier Java, ou un changement sur un fichier en conf (voir PJ).

    Je ne pense pas qu'il stocke toutes les combinaisons d'icônes possibles... donc il doit y avoir un moyen de "concaténer" les icônes ?

    Merci d avance
    Images attachées Images attachées  
    Heureux soient les fêlés, car ils laisseront passer la lumière.

    Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

  2. #2
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Salut,

    En fait, il ne s'agit pas d'une concaténation d'icône, mais plus d'une "décoration" d'icône ^^
    Donc, pour décorer une icône, il te faut passer par un ILabelDecorator ou un ILightweightLabelDecorator. Il te faut pour cela déclarer un point d'extension "org.eclipse.ui.decorators" tu crées ensuite une extension "decorator" dont tu renseignes les attributs demandés (notamment la classe implémentant ILabelDecorator ou ILightweightLabelDecorator). Tu peux aussi ajouter une extension "enablement" qui te permet de préciser sur quelle classe s'applique le Decorator.
    Ensuite, au lieu de fournir un "simple" ILabelProvider à ton Viewer, tu lui fournis une instance de DecoratingLabelProvider.
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            TreeViewer viewer = new TreeViewer(myTopComposite, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL);
            viewer.setContentProvider(new MyContentProvider());
            viewer.setLabelProvider(new DecoratingLabelProvider(
                new MyLabelProvider(), PlatformUI.getWorkbench()
                    .getDecoratorManager().getLabelDecorator(MyDecorator.ID)));

    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  3. #3
    Membre extrêmement actif Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 814
    Points
    814
    Par défaut
    ah je savais bien qu'il existait qq chose merci à toi, je vais tester tout ça !

    a+
    Heureux soient les fêlés, car ils laisseront passer la lumière.

    Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

  4. #4
    Membre extrêmement actif Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 814
    Points
    814
    Par défaut
    hey hey me revoilà
    le moment est venu d'utiliser ces Decorators... évidement ça marche pas

    J'ai utilisé l'extension donnée ci-dessus, renseigné les champs utiles (icone, classe,...).

    Première question :
    Pourquoi dans ma classe implémentant ILightweightLabelDecorator je ne peux pas récupérer directement l'icone que j'ai donné dans mon extension ?

    Deuxième question :
    Pourquoi rien ne s'affiche sur mes icones ?...

    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
     
    public class LinkedMetadataDecorator implements ILightweightLabelDecorator {
     
    	public static final String	ID	= "decorators.linkedmetadata.id";
     
    	/**
             * {@inheritDoc}
             * @see org.eclipse.jface.viewers.ILightweightLabelDecorator#decorate(java.lang.Object,
             *      org.eclipse.jface.viewers.IDecoration)
             */
    	@Override
    	public void decorate(final Object element, final IDecoration decoration) {
    		decoration.addOverlay(Activator.getDefault().getImageRegistry().getDescriptor(Activator.LINK_DECORATOR_ICON),
    		        IDecoration.BOTTOM_LEFT);
    	}
    //...........
    }
    merci d'avance pour vos idées
    Images attachées Images attachées  
    Heureux soient les fêlés, car ils laisseront passer la lumière.

    Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

  5. #5
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Salut,

    Première question:
    Je ne sais pas...

    Seconde question:
    Est-ce que tu as essayé de rajouter un "enablement" à ton point d'extension avec, par exemple, un objectClass qui référencerait l'objet sur lequel doit s'appliquer le Decorator? Ensuite, j'imagine que tu dois définir le LabelProvider de ton Viewer... Tu pourrais nous montrer cette définition (de tout ton Viewer en fait)?

    Et donc, après on essayera de voir ce qui a pu mal tourner...

    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  6. #6
    Membre extrêmement actif Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 814
    Points
    814
    Par défaut
    merci ^^ , voici le code de mon LabelProvider (basique)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class DecompositionRightTreeLabelProvider extends LabelProvider {
    	@Override
    	public Image getImage(final Object element) {
    		return ((Resource) element).getTreeIcon();
    	}
     
    	@Override
    	public String getText(final Object element) {
    		return ((Resource) element).getName();
    	}
    }
    voici la création de mon DecoratingLabelProvider comme tu me l'avais indiqué :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    rightTreeViewer.setLabelProvider(new DecoratingLabelProvider(new DecompositionRightTreeLabelProvider(),
    PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator(MyDecorator.ID)));
    et voici MyDecorator :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class MyDecorator implements ILightweightLabelDecorator {
     
    	public static final String	ID	= "decorators.mydecorator.id";
     
    	@Override
    	public void decorate(final Object element, final IDecoration decoration) {
     
    		decoration.addOverlay(Activator.getDefault().getImageRegistry().getDescriptor(Activator.MY_ICON),
    		        IDecoration.BOTTOM_LEFT);
    	}

    J'ai même mis dans la création de mon TreeViewer un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PlatformUI.getWorkbench().getDecoratorManager().setEnabled(MyDecorator.ID, true);
    mais rien n'y fait

    ensuite pour ce qui est du enablement, pour l'instant ce n'est pas nécessaire...j'aimerais déjà pouvoir afficher ma décoration sur tous mes éléments, juste pour voir que ça marche ..après on verra pour filter et pr tester les conditions ^^

    Heureux soient les fêlés, car ils laisseront passer la lumière.

    Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

  7. #7
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Alors ce que je pourrais te conseiller, c'est de faire un :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    rightTreeViewer.setLabelProvider(
        new DecoratingLabelProvider(new DecompositionRightTreeLabelProvider(),
            PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator()));
    Par contre, pas la peine de passer ton setEnabled() à true (à mon avis...).
    Un autre conseil c'est de mettre un enablement. Pour ma part, j'utilise un enablement avec un objectClass qui désigne l'objet contenu dans mon Viewer et ensuite, dans la méthode decorate, je teste certaines propriétés sur cet objet.
    Je te donne ma méthode, premièrement parce que je ne connais pas toute la théorie derrière les Decorators et ensuite parce qu'elle fonctionne

    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  8. #8
    Membre extrêmement actif Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 814
    Points
    814
    Par défaut
    nikel ! j'ai fait comme tu as dit et ça fonctionne...bon par contre peux tu m'expliquer pourquoi quand j'utilise getLabelDecorator(MyDecorator.ID) ça ne marche pas, et quand je fais getLabelDecorator() ça marche ... comment sait-il quel décorateur il doit utiliser ? j'ai pas bien compris la javadoc sur cette méthode

    merci encore
    Heureux soient les fêlés, car ils laisseront passer la lumière.

    Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

  9. #9
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Salut,

    Quand tu utilises la méthode getLabelDecorator(MyDecorator.ID), comme ton Decorator est un ILightweightDecorator, cette méthode retourne null. Cf javadoc :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        /**
         * Returns the full label decorator instance for the specified decorator id
         * if it is enabled. Otherwise returns <code>null</code>. Returns
         * <code>null</code> for lightweight decorators. It is recommended that
         * getBaseLabelProvider is used instead so that lightweight decorators are
         * also checked.
         * 
         * @param decoratorId the decorator id
         * @return the label decorator
         */
        ILabelDecorator getLabelDecorator(String decoratorId);
    Par contre, la méthode getLabelDecorator(), quant à elle, renvoie un ILabelDecorator qui s'applique à tous les Decorator actif. Donc, j'imagine que tu as mis un enablement à ton Decorator ou que tu fais un setEnable() (parce que je ne sais pas si un Decorator est actif sans "info" complémentaire)...

    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  10. #10
    Membre extrêmement actif Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 814
    Points
    814
    Par défaut
    exactement j'ai mis un enablement sur le type d'objet manipulé par mon treeviewer

    un grand merci pour ces éclaircissements
    Heureux soient les fêlés, car ils laisseront passer la lumière.

    Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Sélectionner les variables comme sur Eclipse
    Par MeTaLCaM dans le forum Visual Studio
    Réponses: 1
    Dernier message: 07/09/2009, 17h46
  2. [Débutant(e)]Les servlets et Eclipse
    Par Ethylene dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 16/02/2005, 15h08
  3. Réponses: 8
    Dernier message: 17/12/2004, 15h58
  4. [RMI]comment creer les stubs sous eclipse(lancement de rmic)
    Par juflata dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 22/06/2004, 13h51
  5. Récuperer les icons des JDialog
    Par Pro_Fete dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 17/04/2003, 13h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo