首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Eclipse (XText) SelectionListener注册

Eclipse (XText) SelectionListener注册
EN

Stack Overflow用户
提问于 2013-05-31 21:40:51
回答 1查看 120关注 0票数 1

我已经实现了一个视图,它将自己注册为listner,以便在XText编辑器和相关大纲中进行更改。为此,我添加了这一行

代码语言:javascript
运行
复制
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().addSelectionListener(this);

在视图(实现ISelectionListener接口)的createPartControl方法中。因此,在selectionChanged方法中,我检查所选内容是ITextSelection,还是来自XTextEditor的情况,还是来自大纲的IStructuredSelection。

问题是,这样做时,当我启动Eclipse时,大纲被认为是“不可用的”。如果我单击大纲,它就会刷新,内容会显示出来,侦听视图也会正确更新。我做错了什么?我应该做些什么来避免大纲最初的“不可用”?

EN

回答 1

Stack Overflow用户

发布于 2015-08-28 18:45:53

我最近遇到了这个问题,并通过在扩展ViewPart的类中实现IPartListener2,然后在createPartcontrol方法中添加一个部件侦听器来解决它,如下所示:

代码语言:javascript
运行
复制
getSite().getWorkbenchWindow().getPartService().addPartListener(this);

现在,通过在您的partOpened方法中使用类似这样的内容(这必须在您实际使用part listener之前实现),您将获得最初可用的视图内容:

代码语言:javascript
运行
复制
public void partOpened(IWorkbenchPartReference partRef) {

    if(partRef.getPage().getActiveEditor() instanceof XtextEditor) {
        somepart=partRef.getPage().getActiveEditor();
        final XtextEditor editor = (XtextEditor)somepart;
        final IXtextDocument document = editor.getDocument();
        document.readOnly(new IUnitOfWork.Void<XtextResource>(){
            public void process (XtextResource resource) throws Exception {
                IParseResult parseResult = resource.getParseResult();
                if(parseResult ==null)
                    return;
            CompositeNode rootNode=(CompositeNode) parseResult.getRootNode();
            LeafNode node = (LeafNode)NodeModelUtils.findLeafNodeAtOffset(rootNode, 0);
            EObject object =NodeModelUtils.findActualSemanticObjectFor(node);
            view.setInput(object);
            }
            });
        }
}

这将使您正在实现的视图在您激活XtextEditor (特定于您的数字用户线)时获取其内容。为了使视图在您更改编辑器中处于活动状态的文件中的任何内容时实时更改内容,您应该实现一个IDocumentListener并覆盖DocumentChanged方法。如果这样做,您将不再依赖于SelectionListener,因为当文档中的某些内容发生更改时,视图将自动更新

希望这能有所帮助!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16858699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档