在Eclipse插件中我放置了一个利用多个视图的算法

时间:2011-07-06 12:47:38

标签: eclipse eclipse-plugin eclipse-rcp

我有一个包含4个视图的Eclipse插件。编程功能必须位于这些视图的“上方”,将它们绑定在一起。我称之为“主人”

有人可以就此功能的最佳位置提供建议吗?实际上,我希望在应用程序打开并初始化视图后启动“master”。

在我生成的RCP应用程序插件中,我有一个Activitor,一个Client,一个Perspective,一个ApplicationActionBarAdvisor,一个ApplicationWorkbenchAdvisor和一个ApplicationWorkbenchWindowAdvisor。这些似乎都不适合托管“主人”。

编辑:经过一番进一步的调查后,我怀疑ApplicationWindowAdvisor持有我的答案。它有许多方法可以被覆盖到跳转到应用程序生命周期阶段。与此问题相关的似乎是: postStartup postWindowOpen postWindowCreate

我很欣赏在创建/初始化所有视图后调用哪个方法的任何指针。

编辑2 :更多googling曝光使用 org.eclipse.ui.startup 扩展点,因为 IStartup.earlyStartup()也在Workbench之后运行 完全开始了。

欢呼声, 伊恩

3 个答案:

答案 0 :(得分:2)

也许您可以定义一个OSGi服务(请参阅Lars Vogel的教程,详细了解如何:http://www.vogella.de/articles/OSGi/article.html)。

可以声明性地或使用插件激活器初始化此服务;然后每个视图都可以连接到这个服务。

另一方面,如果你想在视图之间进行通信,你可以简单地使用工作台选择服务 - 在这种情况下,所有视图在某种程度上彼此独立地运行,没有中央控制。

编辑响应问题中的更改:两种提议的方法都与视图的打开(或关闭)无关。应用程序启动后执行 postStartup ;窗口打开后执行 postWindowOpen ;虽然 postWindowCreate 在创建窗口后打开,但在打开之前打开。

earlyStartup()可以在工作台启动后执行,但它仍然无法确定是否打开了相应的视图 - 视图与windows有不同的生命周期。

在全球范围内,您必须提供一些可供每个视图使用的常用服务;这可以在应用程序生命周期的大多数时间点注册 - 您应该选择最符合您需求的那个。

答案 1 :(得分:2)

我认为你在混合概念。算法不适用于视图,但适用于视图显示的模型

视图只不过是一个窗口,它将内存中的位转换为用户可以发现有用的东西。

所以你真正想要的是将视图中的模型与视图本身分开。这也将使测试变得更加简单。让他们在变更时发布事件。

您的算法应该订阅所有四个模型的事件并完成其工作,将结果放在另一个模型中,其中相同或其他视图可以拾取它。

在视图中,还订阅模型发出的相应事件并相应地更新它们。

这样,您可以将模型与视图分开。当用户重新排列视图或关闭视图时,您不会遇到麻烦。

答案 2 :(得分:1)

我认为您可以做的最好的事情是使用这些视图设置一个Perspective并锁定它们,这样用户就不会关闭它们。

我不记得你究竟是怎么做到这一点的,但我认为在扩展点声明中将视角设置为“固定”可能会有所帮助。