2017-08-22 4 views
0

Je veux créer un menu déroulant dans eclipse rcp par ordre alphabétique, ces menus déroulants doivent être organisés en fonction des alphabets.Comment créer un menu déroulant dans eclipse rcp selon les alphabets dynamiquement

Ainsi, sous le menu principal, je veux afficher les alphabets. S'il y a une contribution liée à l'alphabet, alors je dois créer un menu déroulant sous cet alphabet.

// Use case 
Menu 
    A -> Action, 
    B -> Bind, 
    C -> Click 

S'il vous plaît jeter un oeil dans le diagramme de cas d'utilisation ci-joint enter image description here

+0

Regardez l'élément 'de dynamic' du point d'extension' org.eclipse.ui.menus' - [voir ici] (https://wiki.eclipse.org/Menu_Contributions/Populating_a_dynamic_submenu) –

Répondre

0

Si vous êtes e4, dans le modèle Application.e4xmi, ajouter à un "Menu" un "Dynamic Menu Contribution"
Lien ce menu dynamique à une classe construira le menu comme ceci:

public class DynamicMenuContributor { 
    @Inject 
    private EModelService  modelService; 
    @AboutToShow 
    public void aboutToShow(List<MMenuElement> items) { 

    for (String s : <your collection of letters>) { 
     MDirectMenuItem dynamicItem = modelService.createModelElement(MDirectMenuItem.class); 
     dynamicItem.setLabel(s); 
     dynamicItem.setContributorURI(<contributor uri>); 
     dynamicItem.setContributionURI(<point the class that will handle the menu event>); 
     // dynamicItem.setType(ItemType.RADIO); 
     // dynamicItem.setSelected(selected); 
     // dynamicItem.setIconURI(<url to icon>); 
     // dynamicItem.getTransientData().put(<param1 name>, <param1 value>); 
     // dynamicItem.getTransientData().put(<param2 name>, <param2value>); 

     items.add(dynamicItem); 
    } 
    } 
} 

Avec une classe pour gérer l'événement comme celui-ci:

public class DynamicMenuSelectiontHandler { 
    @Execute 
    public void execute(MMenuItem menuItem) { 
    <param1> = menuItem.getTransientData().get(<param 1 name>); 
    <param2> = menuItem.getTransientData().get(<param 2 name>); 
    <put your logic here> 
    } 
}