Как захватить значение ячейки TableViewer где контекстное меню активировано в затмении e4?

голоса
1

В одном из моих затмение e4 приложения JMSToolBox , некоторые данные отображаются в TableViewer
контекстном меню A определяется в файле e4 модели ( e4xmi) и связан с TableViewerтак

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

В приложении к контекстному меню в модели e4, «пункт меню» связан с Dynamic Menu Contributionклассом , который динамически добавлять пункты меню в меню:

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);
   }

Теперь, что я хочу сделать , это захватить данные в основной ячейке , где была активирована контекстное меню, и получить это значение обратно в методе аннотированный по @AboutToShowдля того , чтобы добавить MDirectMenuItemзаписи в контекстное меню с меткой , содержащей такое значение
Q : как сделать это с помощью Eclipse RCP e4?

В прилагаемом рисунке, щелкните правой кнопкой мыши произошло в ячейке с содержанием = ID:414d5120514d41414544202020202020ee4bb25612666920. Я хотел бы получить это значение обратно в @AboutToShowметоде и добавить пункты меню в Open Payload as...меню на основе этого значения Thanks

введите

Задан 07/11/2018 в 20:07
источник пользователем
На других языках...                            


1 ответов

голоса
0

Я нашел способ сделать это!
Я не уверен , что это лучший способ, но , по крайней мере , это работает , и это довольно просто

Следующий код здесь , чтобы проиллюстрировать эту идею, она не действует Java. В той части , которые управляют TableViewer:

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

JTBFocusCellHighlighterучебный класс:

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());
   }
}

Реализация Реальный код: JTBSessionContentViewPart , JTBFocusCellHighlighter и FilterMenu

Ответил 13/11/2018 в 21:58
источник пользователем

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