如何捕获在Eclipse e4中已激活上下文菜单的TableViewer单元格的值?

时间:2018-11-07 20:07:41

标签: swt eclipse-rcp e4

在我的eclipse e4应用程序JMSToolBox之一中,一些数据显示在TableViewer
上下文菜单在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条目添加到上下文菜单中
问:如何使用eclipse rcp e4?

在所附图片中,右键单击发生在content = {"ID:414d5120514d41414544202020202020ee4bb25612666920"}的单元格中。我想在@AboutToShow方法中重新获得此值,并根据该值将菜单项添加到"Open Payload as..."菜单中 谢谢

enter image description here

1 个答案:

答案 0 :(得分: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