与自己互动的自定义标记图(Custom marker view with own interacti

2019-09-17 01:46发布

我想创建自己的问题的看法。
我发现下面的教程和一切工作正常。

但是否有可能增加一个自己的DoubleClickListener或类似的东西?
我想在用户操作,这是清单上执行的反应。

感谢您的任何建议。

Answer 1:

这里是我会做什么:

通过覆盖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
                }
            }

        });
    }
}


Answer 2:

我发现了一个解决方案,而不是最好的,但可以接受的方式。
我用的是SelectionServiceViewPart时注册一个新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 ...
            }
        }
    }
});


文章来源: Custom marker view with own interactions