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 & visibleWhen (& label dynamic)


Sujet :

Eclipse Platform

  1. #1
    Membre expérimenté Avatar de nchal
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 512
    Points : 1 656
    Points
    1 656
    Par défaut Menu & visibleWhen (& label dynamic)
    Bonjour à tous,

    J'ai un menu avec en enfant un dynamic. Lors de l'ouverture du menu, je parcours un fichier xml et je crée les items correspondant dans le dynamic.

    Ma question est : est-il possible de faire en sorte que mon menu ne s'affiche pas si le fichier en question est vide (et donc, le nombre d'item dans le dynamic est 0).
    J'ai essayé du côté du visibleWhen mais au vu de la pauvreté de mon niveau en RCP et de la doc, je suis bien embêté...

    D'avance merci, toute aide est la bienvenue :S

    PS : si jamais, j'aimerai également que le label du menu soit décrit dans un fichier externe et chargé au lancement d'eclipse... mais j'ai pas trouvé un moyen de changer le label défini dans le plugin.xml, enfin si, grâce au fill du AbstractHandler mais ça me fait passer par le parent du truc et surtout, ça a comportement bizarre & moche...
    Si la réponse vous convient, un petit ça encourage.
    Avant tout nouveau post, pensez à : la FAQ, Google et la fonction Recherche
    Si vous devez poster, pensez à: Ecrire en français, la balise [CODE] (#) et surtout

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Fais que le menu soit lui même géré en dynamique par le ContributionItem. Tu pourras ainsi tout gérer dynamiquement (le texte du menu y compris) (si la méthode getContributionItems() retourne 0 élément, le menu ne s'affiche pas).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre expérimenté Avatar de nchal
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 512
    Points : 1 656
    Points
    1 656
    Par défaut
    Merci pour ta réponse, ça m'a bien débloqué !
    J'ai pu faire exactement ce que je voulais !!

    Je fourni le code pour ceux qui cherchent, au cas où (je me casse les dents à cause de la pauvreté de la doc...)

    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
     
    public class ProjectMenuHandler
        extends ExtensionContributionFactory
    {
    @Override
        public void createContributionItems(IServiceLocator serviceLocator, IContributionRoot additions)
        {
     
            for (Entry<String, Map<String, String>> menuEntry : values.entrySet())
            {
                MenuManager menuManager = new MenuManager(menuEntry.getKey());
     
                for (Entry<String, String> subMenuEntry : menuEntry.getValue().entrySet())
                {
                    CommandContributionItemParameter commandContributionItemParameter =
                        new CommandContributionItemParameter(PlatformUI.getWorkbench(), CONFIG_COMMAND, CONFIG_COMMAND,
                            CommandContributionItem.STYLE_PUSH);
                    commandContributionItemParameter.label = subMenuEntry.getKey();
                    commandContributionItemParameter.parameters = new HashMap<String, String>();
                    commandContributionItemParameter.parameters.put("configCommandParameter", subMenuEntry.getValue());
     
                    CommandContributionItem item = new CommandContributionItem(commandContributionItemParameter);
     
                    menuManager.add(item);
                }
     
                additions.addContributionItem(menuManager, null);
            }
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <extension
             point="org.eclipse.ui.menus">
          <menuContribution
                allPopups="false"
                class="project.ProjectMenuHandler"
                locationURI="menu:org.eclipse.ui.main.menu?after=help">
          </menuContribution>
       </extension>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <handler
                class="project.ConfigHandler"
                commandId="project.configCommand">
    </handler>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <command
                categoryId="category.project"
                id="project.configCommand"
                name="item">
                   <commandParameter
                      id="configCommandParameter"
                      name="Project plugin menu value"
                      optional="true">
                   </commandParameter>
          </command>
    Si la réponse vous convient, un petit ça encourage.
    Avant tout nouveau post, pensez à : la FAQ, Google et la fonction Recherche
    Si vous devez poster, pensez à: Ecrire en français, la balise [CODE] (#) et surtout

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Ce n'est pas la solution à laquelle je pensais mais c'est aussi une solution.

    La solution à laquelle je pensais est du genre (j'ajoute un menu dynamic sur le ProjectExplorer) :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <extension
              point="org.eclipse.ui.menus">
           <menuContribution
                 allPopups="false"
                 locationURI="popup:org.eclipse.ui.navigator.ProjectExplorer#PopupMenu?after=additions">
              <dynamic
                    class="monprojet.monpackage.MonMenuDynamic"
                    id="monprojet.monmenu">
              </dynamic>
           </menuContribution>
        </extension>

    Exemple bidon : la classe affiche pour le premier item de la sélection, si c'est un fichier, un menu constitué du nom du fichier, avec pour sous-menus les éléments de son path...

    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
    public class MonMenuDynamic extends CompoundContributionItem {
     
    	public MonMenuDynamic() { 
    	}	
     
    	@Override
    	protected IContributionItem[] getContributionItems() {
    		ISelection selection = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getSelection();
     
    		if ( selection instanceof IStructuredSelection ) {
    			IStructuredSelection structuredSelection = (IStructuredSelection) selection;
    			Object element = structuredSelection.getFirstElement();
    			if ( element instanceof ICompilationUnit ) {
    				ICompilationUnit compilationUnit = (ICompilationUnit)element; 
    				return buildMenu(compilationUnit.getPath().toFile().toPath());
    			}
    			else if ( element instanceof IFile ) {
    				IFile file = (IFile)element; 
    				return buildMenu(file.getProjectRelativePath().toFile().toPath());
    			}
    		}
     
    		return new IContributionItem[0];
     
    	}
     
    	private IContributionItem[] buildMenu(Path path) {
    		MenuManager menu = new MenuManager(path.getFileName().toString());
    		addSubMenus(menu, path.subpath(0, path.getNameCount()-1));
    		return new IContributionItem[]{menu};
    	} 
     
    	private void addSubMenus(MenuManager menu, Path path) {
    		for(Path chunk : (Iterable<Path>)()-> path.iterator()) {
    			menu.add(new ActionContributionItem(new MyAction(chunk.toString())));
    		}
    	}
     
            // action bidon qui fait rien
    	private static class MyAction extends Action {
    		public MyAction(String name) {
    			super(name);
    		} 		
    	}
    }
    Résultat :
    Je sélectionne un fichier .java :
    Nom : Capture1.JPG
Affichages : 319
Taille : 19,8 Ko
    Je sélectionne un fichier xml :
    Nom : Capture2.JPG
Affichages : 293
Taille : 19,2 Ko
    Je sélectionne un package (donc un dossier) : aucun menu s'affiche
    Nom : Capture3.JPG
Affichages : 294
Taille : 18,5 Ko
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

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

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