【问题标题】:Eclipse: Connecting a TextEditor to the Properties ViewEclipse:将 TextEditor 连接到属性视图
【发布时间】:2011-11-06 22:23:22
【问题描述】:
我目前正在实现一个 Eclipse-Plugin,它使用标准属性视图,连接到一个导航器。它还具有文本编辑器,能够将其文档中的区域连接到可以为 PropertiesView 提供属性的某些对象(即显示在导航器中的相同对象)。
但是,我发现的教程仅处理使用预实现查看器的视图,该查看器已经支持将选定元素传递给属性视图。
TextEditor 不这样做(我正在使用 jface 和 AbstractTextEditor 类的子类),因为它的 SelectionProvider 仅返回有关偏移量和选择长度的信息。
如何修改我的 TextEditor 的 SelectionProvider,以便它提供可用于属性视图的信息?
提前谢谢你
【问题讨论】:
标签:
eclipse
eclipse-plugin
eclipse-rcp
jface
【解决方案1】:
好的,我自己已经设法找到了解决方案。
首先,我必须在TextEditor 的子类中实现getAdapter() 方法,以便它返回IPropertySourceProvider 的适配器,它可以处理在我的AbstractTextEditor 中选择的元素类型.
然后,我实现了一个扩展TextSelection 的ISelection,为了不干扰AbstractTextEditor 提供的任何特定于选择的机制,并实现了接口IStructuredSelection,因为Properties View 使用这个接口仅限ISelection。
IStructuredSelection 具有数组的基本方法,但是,在我的情况下,它只能选择单个元素,因此这些方法的实现很简单。
最后一步是将我的ISelection 放到正确的位置。覆盖 AbstractTextEditor 的ISelectionProvider 的getSelection() 方法是不行的,因为很明显,触发SelectionChangedEvents 的方法并没有使用这个方法。
因此,我没有使用标准的SourceViewer,而是使用了我自己的实现,其中我基本上覆盖了方法fireSelectionChanged(int offset, int length) 和firePostSelectionChanged(int offset, int lenght),这样它们就可以使用包含我的ISelection 的事件。
剩下的就是在适配器中为IPropertySourceProvider 处理我的对象,方法是它为给定的对象返回一个IPropertySource,如各种教程中所示。