在我的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..."
菜单中
谢谢
答案 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