从文本编辑器插件中的操作更新视图插件

时间:2011-07-02 17:07:07

标签: build eclipse-plugin project text-editor

我有两个eclipse插件(自定义文本编辑器插件和一个视图插件作为两个不同的项目)。文本编辑器中有一个操作,用于构建所有相关源文件的“函数”索引。在这个动作结束时,我想在view插件的tableviewer中显示索引('functions'列表)。你会说最好的方法是什么?视图不必听编辑器。只有当编辑器插件中的操作触发时才应该更新。

我从编辑器插件导出了一个包,并从视图插件中导出了另一个包,因为文本编辑器插件需要引用视图类型来在视图插件中填充tableViewer,而视图插件需要在tableviewer的contentProvider中引用编辑器类型。但是我收到了构建路径错误:

在项目的构建路径中检测到一个循环

我该如何解决这个问题?或者如果这是一个糟糕的方法,我有更好的方法吗?

感谢。

TK。

1 个答案:

答案 0 :(得分:1)

首先,不允许插件之间的循环引用。因此,当您需要在插件之间双向共享信息时,通常需要重构问题,为其中一个方向设置一个侦听器模式。

在这种情况下,我将使用与现有Outline视图相同的视图结构。因此,您的视图应该对PageBookView进行子类化,IEditorPart具有相当简单的协议,用于参与编辑器如何向视图提供数据。

基本上我会像在Outline视图中那样做,并让编辑器本身通过自适应提供视图的内容。 “大纲”视图通过跟踪当前编辑器来执行此操作,每当“看到”新编辑器时,“大纲”视图都会尝试将IContentOutlinePage调整为ContentOutline。编辑器负责此特定编辑器的视图页面中需要的SWT小部件和监听器等...仔细查看IWorkbenchPage.showView(...)的JavaDoc - 这是对协议的一个相当好的描述参与。

如果您有多个“开放”编辑器,则新视图将自动显示活动编辑器的相关信息,而不是“仅”上次执行操作时处于活动状态的编辑器。

使用此方案,您的操作将只是

  • 显示(并激活)新视图。这可以通过{{1}}。
  • 完成
  • 请求提供页面更新其视图...