Comment capturer la valeur d'une cellule d'un TableViewer où un menu contextuel a été activé dans Eclipse e4?

voix
1

Dans l' une de mes applications Eclipse e4 JMSToolBox , certaines données sont affichées dans un TableViewer
Un menu contextuel est défini dans le fichier modèle e4 ( e4xmi) et lié au TableViewercomme celui - ci

menuService.registerContextMenu(tableViwere.getTable(), <name of the e4 part menu>);

Attaché au menu contextuel dans le modèle e4, un « élément de menu » est lié à une Dynamic Menu Contributionclasse qui ajoutent dynamiquement les éléments de menu au menu:

public class VisualizerShowPayloadAsMenu {
   @Inject private EModelService       modelService;
   @AboutToShow
   public void aboutToShow(EModelService modelService, List<MMenuElement> items) {
      // Not the real code..., illustrate adding a dynamic menu item to the contextual menu
      MDirectMenuItem dynamicItem = modelService.createModelElement(MDirectMenuItem.class);
      dynamicItem.setLabel(<name..>);
      dynamicItem.setContributorURI(Constants.BASE_CORE_PLUGIN);// platform:/plugin/org.titou10.jtb.core);
      dynamicItem.setContributionURI(Constants.VISUALIZER_MENU_URI);// bundleclass://org.titou10.jtb.core/org.titou10.jtb.visualizer.ui.VisualizerShowPayloadAsHandler);
      items.add(dynamicItem);
   }

Maintenant, ce que je veux faire est de saisir les données dans la cellule sous - jacente où le menu contextuel a été activé, et obtenir cette valeur de retour dans la méthode annotée par @AboutToShowafin d'ajouter des MDirectMenuItementrées dans le menu contextuel avec une étiquette contenant la valeur
Q : comment faire avec eclipse rcp e4?

Dans l'image ci - joint, le clic droit est arrivé dans la cellule avec le contenu = ID:414d5120514d41414544202020202020ee4bb25612666920. Je voudrais obtenir cette valeur de retour dans la @AboutToShowméthode et ajouter des éléments de menu dans le Open Payload as...menu à base de cette valeur Merci

entrez

Créé 07/11/2018 à 20:07
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

J'ai trouvé un moyen de le faire!
Je ne suis pas sûr que c'est la meilleure façon, mais au moins il fonctionne et il est assez simple

Le code suivant est ici pour illustrer l'idée, il n'est pas valide Java. Dans la partie qui gèrent les TableViewer:

TableViewer tableViewer = new TableViewer(composite, SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI);
{...}
new TableViewerFocusCellManager(tableViewer, new JTBFocusCellHighlighter(tableViewer, windowContext));

JTBFocusCellHighlighterclasse:

public class JTBFocusCellHighlighter extends FocusCellHighlighter {
   private IEclipseContext windowContext;
   private Table           table;
   public JTBFocusCellHighlighter(ColumnViewer viewer, IEclipseContext windowContext) {
      super(viewer);
      this.windowContext = windowContext;
      this.table = ((TableViewer) viewer).getTable();
   }
   @Override
   protected void focusCellChanged(ViewerCell newCell, ViewerCell oldCell) {
      super.focusCellChanged(newCell, oldCell);
      // Capture the content of the cell (or other info..) and store it in Eclipse Context
      windowContext.set("key", newCell.getText());
      TableColumn tableColumn = table.getColumn(newCell.getColumnIndex());
   }
}

La mise en œuvre du code réel: JTBSessionContentViewPart , JTBFocusCellHighlighter et FilterMenu

Créé 13/11/2018 à 21:58
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more