我正在尝试创建自己的问题视图 我找到了以下tutorial,一切正常。
但有没有可能添加自己的 DoubleClickListener 或类似的内容? 我想对在列表上执行的用户操作做出反应。
感谢您的任何建议。
答案 0 :(得分:0)
以下是我要做的事情:
通过覆盖public void createPartControl(final Composite parent)
,您将获得父组合。通过调用parent.getChildren(),您可以遍历可用的控件。 ExtendedMarkersView
“默认”控件是MarkersTreeViewer,它是一个treeViewer,因此控件将是一棵树。你有树,你可以添加你想要的任何听众,这里是片段:
@Override
public void createPartControl(final Composite parent) {
super.createPartControl(parent);
for (final Control control : parent.getChildren()) {
if (!(control instanceof Tree)) {
continue;
}
tree = (Tree) control;
final Listener[] listeners = tree.getListeners(SWT.DefaultSelection);
if (listeners != null) {
for (final Listener listener : listeners) {
tree.removeListener(SWT.DefaultSelection, listener);
}
}
tree.addMouseListener(new MouseAdapter() {
@Override
public void mouseDoubleClick(final MouseEvent e) {
if (e.widget instanceof Tree) {
final Tree tree = (Tree) e.widget;
// do whatever you want
}
}
});
}
}
答案 1 :(得分:0)
我找到了一个解决方案,而不是最好的方案,但这是一种可接受的方式 我在 ViewPart 中使用 SelectionService 并注册一个新的 SelectionListener 。
我的解决方案只接受问题视图中的选择,也许有更好的方法来区分事件。
site.getWorkbenchWindow().getSelectionService().addSelectionListener(new ISelectionListener() {
@Override
public void selectionChanged(IWorkbenchPart part, ISelection selection) {
IStructuredSelection s = (IStructuredSelection) selection;
if (s.getFirstElement() instanceof MarkerItem) {
MarkerItem marker = (MarkerItem) s.getFirstElement();
if (marker != null && marker.getMarker() != null) {
IMarker iMarker = marker.getMarker();
// More Code here ...
}
}
}
});