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 :

Menu popup visible que sur un fichier binaire


Sujet :

Eclipse Platform

  1. #1
    Membre habitué Avatar de kkt8
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 472
    Points : 193
    Points
    193
    Par défaut Menu popup visible que sur un fichier binaire
    Bonjour,

    J'ai un menu popup que je veux voir s'afficher seulement à la sélection d'un fichier binaire (org.eclipse.cdt.core.model.IBinary), pour ce faire, j'avais, dans la définition de mon point d'extension menu (org.eclipse.ui.menus), définit un visiblewhen comme suit :
    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
     
    <visibleWhen>
         <iterate>
              <or>
               <adapt type="org.eclipse.core.resources.IResource">
                   <test
                        property="org.eclipse.core.resources.name"
                        value="*.out">
                   </test>
                </adapt>
                <adapt type="org.eclipse.core.resources.IResource">
                    <test
                        property="org.eclipse.core.resources.name"
                        value="*.bin">
                    </test>
                  </adapt>
                  <adapt type="org.eclipse.core.resources.IResource">
                     <test
                         property="org.eclipse.core.resources.name"
                         value="*.exe">
                      </test>
                   	</adapt>
           </iterate>
    </visibleWhen>
    Cependant, je suis tombée sur le cas où un utilisateur change l'artifact extension en "pouet". Et là mon menu ne s'affiche plus alors que j'ai toujours un binaire qui s'exécute correctement.
    Du coup j'ai tenté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <visibleWhen>
           <instanceof
                  value="org.eclipse.cdt.core.model.IBinary">
           </instanceof>
     </visibleWhen>
    Mais ça ne marche pas !
    Une idée ?


    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,

    Comment tu sais que c'est un IBinary? (J'ai jamais réellement touché à CDT...). A priori, dans les commands expressions (utilisé dans les visibleWhen, activeWhen, ...), ce sont des IResource qui sont passé à la sélection dans les iterate.
    Du coup, tu peux pas faire un "instanceof"...

    Voilà, à+
    Gueritarish

  3. #3
    Membre habitué Avatar de kkt8
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 472
    Points : 193
    Points
    193
    Par défaut
    Salut,

    en debuggant j'ai vu que j'avais à faire à un IBinary, et donc je voudrais travailler toujours sur ce type.
    L'instanceof, j'ai bien tenté (cf le [CODE] 2) mais pas de menu ....

    a+

  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
    Hop,

    J'ai trouvé une solution:
    Il faut rajouter un propertyTester (extension org.eclipse.core.expressions.propertyTesters):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <extension
         point="org.eclipse.core.expressions.propertyTesters">
      <propertyTester
            class="my.package.BinaryFileTester"
            id="org.eclipse.core.binary.tester"
            namespace="org.eclipse.cdt"
            properties="binaryFile"
            type="org.eclipse.core.resources.IResource">
      </propertyTester>
    </extension>
    Et la classe BinaryFileTester:
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    import java.util.List;
     
    import org.eclipse.cdt.core.model.CModelException;
    import org.eclipse.cdt.core.model.CoreModel;
    import org.eclipse.cdt.core.model.IBinary;
    import org.eclipse.cdt.core.model.ICElement;
    import org.eclipse.cdt.core.model.ICModel;
    import org.eclipse.cdt.core.model.ICProject;
    import org.eclipse.core.expressions.PropertyTester;
    import org.eclipse.core.resources.IFile;
    import org.eclipse.core.resources.IProject;
    import org.eclipse.core.resources.ResourcesPlugin;
     
    public class BinaryFileTester extends PropertyTester {
     
    	/**
             * The list of C or C++ projects.
             */
    	private List<ICElement> cProjects;
     
    	public BinaryFileTester() {
    		ICModel cModel = CoreModel.create(ResourcesPlugin.getWorkspace().getRoot());
    		try
    		{
    			cProjects = cModel.getChildrenOfType(ICModel.C_PROJECT);
    		} catch (CModelException e)
    		{
    			e.printStackTrace();
    		}
    	}
     
    	/**
             * {@inheritDoc}
             */
    	@Override
    	public boolean test(Object receiver, String property, Object[] args, Object expectedValue)
    	{
    		boolean enabled = false;
    		if (receiver instanceof IFile)
    		{
    			String fileName = ((IFile) receiver).getName();
    			IProject parentProject = ((IFile) receiver).getProject();
    			try
    			{
    				ICProject element;
    				ICProject sameProject = null;
    				for (int i = 0; i < cProjects.size(); i++)
    				{
    					element = cProjects.get(i).getCProject();
    					if (parentProject.getName().equals(element.getElementName()))
    					{
    						sameProject = element;
    						break;
    					}
    				}
    				if (sameProject != null)
    				{
    					IBinary[] binaries = sameProject.getBinaryContainer().getBinaries();
    					for (IBinary iBinary : binaries)
    					{
    						if (fileName.equals(iBinary.getElementName()))
    						{
    							enabled = true;
    							break;
    						}
    					}
    				}
    			} catch (CModelException e)
    			{
    				e.printStackTrace();
    			}
    		}
    		return enabled;
    	}
    }
    Et l'utilisation dans le point d'extension org.eclipse.ui.menus:

    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
    <command
           commandId="my.command.for.binaries"
           style="push"
           tooltip="Task on Binary">
       <visibleWhen
               checkEnabled="false">
           <iterate
                   operator="or">
               <adapt
                       type="org.eclipse.core.resources.IResource">
                   <test
                           property="org.eclipse.cdt.binaryFile"
                           value="true">
                   </test>
               </adapt>
           </iterate>
       </visibleWhen>
    </command>
    En fait, les IBinarys sont propre aux projets C.
    Je ne crois pas que ça marche avec un projet C++... A tester...

  5. #5
    Membre habitué Avatar de kkt8
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 472
    Points : 193
    Points
    193
    Par défaut
    Alors ça marche mais dans mon cas le .pouet n'étant pas déclaré comme un contentType (org.eclise.core.contenttype.contentTypes) il n'est pas un binary au sens Eclipse donc ne sera pas dans le getBinaryContainer.



    je ne peux pas être exhaustive sur les points d'entrée contentType puisque l'utilisateur a moyen de créer l'extension qu'il veut ...
    je vais quand même regarder si j'ai moyen de récup mon file par un autre moyen!

    Merci !

  6. #6
    Membre habitué Avatar de kkt8
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 472
    Points : 193
    Points
    193
    Par défaut
    Bon ben pas de solution tant que les contentType (liste des extensions possibles pour les binaires) seront à définir !
    D'un côté, il faut définir toutes les extensions des fichiers que l'on souhaite voir comme des IBinary mais de l'autre l'utilisateur a possibilité de changer l'extension en n'importe quoi !!!

    Ca se mord la queue !
    Tant pis pour moi !

    Merci !

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 02/07/2014, 12h58
  2. Réponses: 1
    Dernier message: 17/12/2013, 16h01
  3. Réponses: 0
    Dernier message: 04/08/2008, 16h15
  4. Réponses: 6
    Dernier message: 06/03/2007, 18h57
  5. menu popup sur une zone de text
    Par jesus144 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 27/05/2005, 00h15

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