代码之家  ›  专栏  ›  技术社区  ›  titou10

如何捕获在eclipsee4中激活了上下文菜单的TableViewer的单元格的值?

  •  1
  • titou10  · 技术社区  · 6 年前

    JMSToolBox ,一些数据显示在 TableViewer
    上下文菜单在e4模型文件中定义( e4xmi )并与

    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

    在所附图片中,在包含内容的单元格中单击鼠标右键= "ID:414d5120514d41414544202020202020ee4bb25612666920" . 我想在 @AboutToShow 方法并将菜单项添加到 "Open Payload as..." 基于该值的菜单 谢谢

    enter image description here

    1 回复  |  直到 6 年前
        1
  •  0
  •   titou10    6 年前

    我找到办法了!
    我不确定这是不是最好的方法,但至少它是有效的,而且非常简单

    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