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

Eclipse Platform Discussion :

[Plug-in Eclispe]Ajouter un menu contextuel pour certaines classes uniquement


Sujet :

Eclipse Platform

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut [Plug-in Eclispe]Ajouter un menu contextuel pour certaines classes uniquement
    Bonjour,
    je suis en train de développer un plug-in eclipse, je souhaite ajouter une option dans le menu contextuel, mais uniquement pour les classes qui implémentant engine. Je n'arrive pas à m'y limiter, sur ce que j'ai compris ça se joue sur l'onglet 'extensions', et plus précisemment sur l'objectClass défini dans 'Extension Element Details'... mais je ne sais pas ce que je dois y mettre.
    Pouvez-vous m'aider svp
    Merci !

  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 : 40
    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,

    Je suppose que ton interface engine est une interface que tu as créé, non?
    Sinon, comment est-ce que tu définis ton point d'extension pour le menu contextuel? Tu utilises le point d'extension org.eclipse.ui.menus? Avec le locationURI : popup:etc...?
    Si tu utilises ce point d'extension, j'imagine que tu ajoutes ton entrée au popup par une commande. Dans ce cas là, tu as peux lui ajouter un fils : visibleWhen et grâce à une core expression tu pourras limiter la visibilité de ta commande sur la selection de l'utilisateur...
    Essaie de poster le bout de ton plugin.xml qui va bien ^^

    Voilà, a+
    Gueritarish

  3. #3
    Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci de ta réponse (et désolé pour le temps de réaction, je travaille sur plusieurs choses en même temps)
    En fait c'est le point d'extension popupMenus et non menus que j'ai utilisé (comme proposé dans les templates).
    Je crée donc un objectContribution, qui doit comporter un objectClass. Cet élément
    D'après la définition du "objectClass" (a fully qualified name of the class or interface that all objects in the selection must subclass or implement), il me semblait qu'il fallait indiquer la classe engine (je me suis trompé, c'est une classe et non une interface, mais logiquement ça revient au même) dont hérite les classes pour lesquelles je veux rajouter ce menu.

    Mais avec le plugin.xml défini ci-dessous, cette option n'apparait pas :

    Code xml : 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
    <extension
             point="org.eclipse.ui.popupMenus">
          <objectContribution
                objectClass="[...].Engine"
                id="TestPlugin.contribution1">
             <menu
                   label="New Submenu"
                   path="additions"
                   id="TestPlugin.menu1">
                <separator
                      name="group1">
                </separator>
             </menu>
             <action
                   label="New Action"
                   class="testplugin.popup.actions.NewAction"
                   menubarPath="TestPlugin.menu1/group1"
                   enablesFor="1"
                   id="TestPlugin.newAction">
             </action>
          </objectContribution>



    En changeant juste le objectClass par "org.eclipse.core.resources.IFile" comme proposé par les templates, ce menu apparaît bien (mais pas sur les bons fichiers forcément) donc a priori c'est bien là que le bat blesse...

  4. #4
    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 : 40
    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,

    Réponse un peu tardive, désolé... Donc, je me suis un peu fourvoyé dans ma réponse précédente (je suis un débutant moyen+ ).
    Donc, je vais essayer répondre correctement à ta question :
    Tout d'abord sache que cet attribut objectClass dans l'ObjectContribution correspond à la classe de l'Object de la seléction... Mais pas à la classe au sens Java du terme. Il s'agit ici de savoir si c'est une IResource, un IFile, ou autre ^^

    Donc, de ce que j'ai pu tester jusqu'ici, tu as, à mon avis, 2 options :
    • Soit tu ajoutes ta commande sur toutes les popup et tu passes par un Handler. Dans ce Handler tu autorises ta commande dans la méthode isEnabled seulement si la sélection de l'utilisateur est une classe qui étend la classe Engine

    • Soit tu ajoutes ta commande dynamiquement dans toutes les popup en passant par un ContributionItem dans lequel tu ajoutes une commande seulement si la sélection de l'utilisateur est une classe qui étend Engine...

    • Soit tu attends une autre solution

    Sachant que tu peux limiter la visibilité de la commande par une core expression :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <visibleWhen checkEnabled="false">
        <with variable="activeMenuSelection">
            <iterate>
                <adapt type="org.eclipse.core.resources.IResource">
                    <test
                        property="org.eclipse.core.resources.extension"
                        value="java" />
                </adapt>
            </iterate>
        </with>
    </visibleWhen>
    Pour connaître la sélection de l'utilisateur, tu peux utiliser le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ISelection selection =
        PlatformUI.getWorkbench().getActiveWorkbenchWindow()
            .getActivePage().getSelection();
    if (selection instanceof IStructuredSelection) {
        IResource resource =
            (IResource) ((IStructuredSelection) selection).getFirstElement();
    }
    Une fois que tu as obtenu le IResource tu peux passer par un File et parcourir la classe pour savoir si elle hérite de Engine...
    Je ne connais pas d'autres solution... Il y a sûrement plus facile

    Voilà, a+
    Gueritarish

Discussions similaires

  1. Menu contextuel pour QTreeView
    Par snake0a dans le forum Qt
    Réponses: 1
    Dernier message: 28/12/2009, 14h10
  2. Réponses: 1
    Dernier message: 25/08/2009, 14h34
  3. Ajouter un menu contextuel au bouton droit de la souris pour les textboxes
    Par LiNuXaDDiKt dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/01/2008, 09h30
  4. Menu contextuel pour une cellule donnée et non l'ensemble
    Par roudy78 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/07/2007, 14h44
  5. faire un menu contextuel pour données issue d'1 table
    Par electrosat03 dans le forum Access
    Réponses: 2
    Dernier message: 27/02/2006, 19h41

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