tabbed的模式扩展属性视图

tabbed的方式扩展属性视图

tab页的扩展方式由三个扩展点组成:

org.eclipse.ui.views.properties.tabbed.PropertyContributor:扩展tab属性页的整个骨架,包括action等

org.eclipse.ui.views.properties.tabbed.PropertyTabs:扩展选项卡的选项页,每一个选项页都是一个PropertyTab,它本身是不现实任何内容的,它只是作为一个容器存在。

org.eclipse.ui.views.properties.tabbed.PropertySections:一个tab页里面现实的基本单位,一个PropertyTab页中可以只有一个PropertySection,也可以有多个。

 

org.eclipse.ui.views.properties.tabbed.PropertyContributor扩展点:

1.指定一个countributorId:这个像一个唯一键一样,绑定着所有与这个tab属性页相关的信息。包括某个part要返回一个TabbedPropertySheetPage对象,也需要传入一个countributorId。这样当前part中的元素被选中的时候,就会触发这个tab属性视图。

2.ILabelProvider :属性视图头上显示的东西,都是在这个接口中定义。

3.ITypeMapper:一个转换的接口public Class mapType(Object object);是它的唯一方法。

 

org.eclipse.ui.views.properties.tabbed.PropertyTabs扩展点:

这个扩展点很简单,其实就是把一组tab页绑定到某一个tabbed上。所以这样会指定两样东西。

一个是绑定到目标上的countributorId,另一个就是为每一个PropertyTab取一个ID。

 

org.eclipse.ui.views.properties.tabbed.PropertySections扩展点:

1.在PropertySections上会指定这一组PropertySections是绑定到那个PropertyContributor上的。

2.每一个PropertySection上面会指定要绑定的PropertyTab的ID,和为自己设定一个ID。这样三个扩展点就串起来了,为啥PropertySections上指定的不是PropertyTab的ID?因为一个PropertySections扩展点上扩展的PropertySection并不一定绑定在同一个PropertyTab上,它们不是包括关系。

3.org.eclipse.ui.views.properties.tabbed.AbstractPropertySection每一个PropertySection都需要实现一个AbstractPropertySection,这个类就是一个PropertySection的展现。

注意:在扩展PropertySections扩展点的时候,有一个input的属性,是必须指定的。因为忽略了这个细节,我纠结了半天才找出原因。

 

input属性描述的是当前section适合那些节点,当输入为input属性描述的类型时,才会显示当前section。

 

当你input属性中描述的类型比较窄的时候,可以扩展ITypeMapper,它是在section之前调用的,主要是类型转换的。例如,本来你选中的是一个editpart,但是你可以获取editpart的model返回,这样input会判断model的类型而不是editpart的类型。

 

 

 

一篇很好的文章:http://www.eclipse.org/articles/Article-Tabbed-Properties/tabbed_properties_view.html