前文中 http://winseclone.iteye.com/blog/1774307 介绍了使用Properties的方法。但是TableTree 形式的Properties视图,局限性比较大,不能很好的发挥。如下操作在Properties就很难实现:
-
调整属性,重要的常用的属性放置在前!
- 在属性上添加其他操作,如在Class对象上通过ctrl+<单击>能跳转到对应的class类,并用编辑器打开。
Tabbed Properties效果
Tabbed Properties与表格式Properties不同,采用的是通过表单形式来编辑属性。如下图所示:
图中主要分3部分:
1、最外面层是Contributor,由Label + TabContainer;
2、中间层是TabContainer,可以包括n个Tab,每个Tab则是一个SectionContainer;
3、内层是SectionContainer, 由n个Section组成。
每个层可以使用一个扩展点来实现。对应Tabbed提供的3个扩展点:
-
org.eclipse.ui.views.properties.tabbed.propertyContributor
-
org.eclipse.ui.views.properties.tabbed.propertyTabs
-
org.eclipse.ui.views.properties.tabbed.propertySections
这里,我们先按照步骤一步步的实现效果,然后再讲解3个扩展点常用的属性。
实现Tabbed Properties View
· 更新SampleView.java
1、实现ITabbedPropertySheetPageContributor接口
public String getContributorId() {
return SampleView.ID;
}
2 重写SampleView的getAdapter方法。修改默认的IPropertySheetPage.class适配对象
public Object getAdapter(Class adapter) {
if (adapter == IPropertySheetPage.class) {
return new TabbedPropertySheetPage(this);
}
return super.getAdapter(adapter);
}
· 实现ISection,定义控件以及布局
实现自定义的IFilter和Section
StringFilter
· 扩展点实现
添加tabbed的3个扩展点。
contributorId填写为对应SampleView的Id(即SampleView.ID的值)。具体Contributor,Tab,Section的属性配置按照层次关系填写即可。
<extension
point="org.eclipse.ui.views.properties.tabbed.propertyContributor">
<propertyContributor
contributorId="plugin.properties.views.SampleView"
labelProvider="org.eclipse.jface.viewers.LabelProvider">
<propertyCategory
category="Sample"></propertyCategory>
<propertyCategory
category="AdvancedCategory"></propertyCategory>
</propertyContributor>
</extension>
<extension
point="org.eclipse.ui.views.properties.tabbed.propertyTabs">
<propertyTabs
contributorId="plugin.properties.views.SampleView">
<propertyTab
category="AdvancedCategory"
id="plugin.properties.advancedTab"
label="Advanced">
</propertyTab>
<propertyTab
category="Sample"
id="plugin.properties.sampleTab"
label="Sample">
</propertyTab>
</propertyTabs>
</extension>
<extension
point="org.eclipse.ui.views.properties.tabbed.propertySections">
<propertySections
contributorId="plugin.properties.views.SampleView">
<propertySection
class="org.eclipse.ui.views.properties.tabbed.AdvancedPropertySection"
id="plugin.properties.advanceSection"
tab="plugin.properties.advancedTab">
<input
type="plugin.properties.views.StringWrapper">
</input>
</propertySection>
<propertySection
class="plugin.properties.section.StringTypeSection"
filter="plugin.properties.section.StringFilter"
id="plugin.properties.sampleSection"
tab="plugin.properties.sampleTab">
</propertySection>
</propertySections>
</extension>
另外,编写Tabbed Properties页签视图需要懂swt,以及FormLayout布局。
对于一个属性显示一行的TabbedProperties可以通过topcased插件来生成。这个插件还是不错的。但是如果复杂一点的就需要自己定义了。
扩展点含义
下面主要讲一下3个扩展点的常用属性,及其子节点
1、 org.eclipse.ui.views.properties.tabbed.propertyContributor
#propertyContributor节点的属性
-
contributorId Tabbed PropertySheetPage贡献者的ID,即选中元素所在View或Editor的ID。 同时View和Editor也需要实现ITabbedPropertySheetPageContributor 接口,这个接口只有一个方法,要求返回的值即该contributorId。
-
typeMapper - 实现类型的映射。TabbedPropertyRegistryClassSectionFilter.appliesToSelection(ISectionDescriptor, ISelection) 起到mappingFilter的作用。因为我们选择的元素并不一定是实现IPropertySource的元素(即能够给property view提供内容的元素),比如在GEF中,我们选择的finger实际上是选择了对应的EditPart,而实际上实现了IPropertySource一般的是model部分的元素,所以这时候我们要将Editpart映射到对应的model元素[r3]
-
labelProvider - 标题显示提供者Provider(ILabelProvider)
-
actionProvider - 没啥用。TabbedPropertySheetPage.validateRegistry(ISelection)中会调用registry.getActionProvider(),但在中间就返回了。
-
sectionDescriptorProvider - (应该是类似于propertySections扩展点的作用)
-
tabDescriptorProvider - (应该是类似于propertyTabs扩展点的作用)
通过Extensions标签页扩展点的“Show extension point description”查看该扩展点的详细描述。
#propertyContributor#propertyCategory属性
用于聚合多个tabs,将会在propertyTab标签中用到;
注意至少要定义一个category,来聚合tabs,否则,可能会显示property失败。
2、org.eclipse.ui.views.properties.tabbed.propertyTabs
#propertyTabs#propertyTab节点的属性
-
label - Tab显示的名称.
-
category - 对应上面的propertyCategory属性的category的值.
-
id - The unique id for the tab,将会用于propertySection标签。
3、org.eclipse.ui.views.properties.tabbed.propertySections
#propertySections#propertySection属性
-
tab - 该section需要放置到Tab,对应propertyTab扩展点的id属性值.
-
id - 表示该section的唯一ID.
-
class - section的实现类,用于描述这个section的控件和布局。
-
filter - 对象过滤,只有通过该filter的对象才会显示该section
如果没有选择fitler,则需要添加input子节点!
源码:
s1: 本文实现的例子
https://github.com/winse/hello/tree/8c8ae8a1a83c7cfe27287631e5b575d50f17d75c
s2: topcased相关源码
http://subversion.moskitt.org/gvcase-adaptations/topcased/branches/org.topcased.modeler/src/org/topcased/modeler/editor/properties/filters/DiagramElementFilter.java
http://gforge.enseeiht.fr/scm/viewvc.php/plugins/modeler/org.topcased.tabbedproperties/src/org/topcased/tabbedproperties/sections/?diff_format=s&root=topcased-mf
http://gforge.enseeiht.fr/scm/viewvc.php/*checkout*/plugins/modeler/org.topcased.modeler/plugin.xml?revision=1.127&root=topcased-mf
参考:
r1:最权威的tabbed_properties的使用说明
http://www.eclipse.org/articles/Article-Tabbed-Properties/tabbed_properties_view.html
r2:一个通用的页签式视图框架(可以了解一下,使用的不是Eclipse提供的扩展点)
http://www.ibm.com/developerworks/cn/opensource/os-cn-eclipse-tabview/index.html
r3:Eclipse Tabbed Properties View
http://hi.baidu.com/uvfluhpkkjfglor/item/5526fd459565ec14886d1071
- 大小: 7.1 KB
- 大小: 9.7 KB
- 大小: 43.7 KB
分享到:
相关推荐
关于组织参加“第八届‘泰迪杯’数据挖掘挑战赛”的通知-4页
PyMySQL-1.1.0rc1.tar.gz
技术资料分享CC2530中文数据手册完全版非常好的技术资料.zip
docker构建php开发环境
VB程序实例,可供参考学习使用,希望对你有所帮助
pytz库的主要功能 时区转换:pytz库允许用户将时间从一个时区转换到另一个时区,这对于处理跨国业务或需要处理多地时间的数据分析尤为重要。 历史时区数据支持:pytz库不仅提供了当前的时区数据,还包含了历史上不同时期的时区信息,这使得它在处理历史数据时具有无与伦比的优势。 夏令时处理:pytz库能够自动处理夏令时的变化,当获取某个时区的时间时,它会自动考虑是否处于夏令时期间。 与datetime模块集成:pytz库可以与Python标准库中的datetime模块一起使用,以确保在涉及不同时区的场景中时间的准确性。
VB程序实例-为程序添加快捷键.zip
画2、3维的隐含数
pytz库的主要功能 时区转换:pytz库允许用户将时间从一个时区转换到另一个时区,这对于处理跨国业务或需要处理多地时间的数据分析尤为重要。 历史时区数据支持:pytz库不仅提供了当前的时区数据,还包含了历史上不同时期的时区信息,这使得它在处理历史数据时具有无与伦比的优势。 夏令时处理:pytz库能够自动处理夏令时的变化,当获取某个时区的时间时,它会自动考虑是否处于夏令时期间。 与datetime模块集成:pytz库可以与Python标准库中的datetime模块一起使用,以确保在涉及不同时区的场景中时间的准确性。
加载虚拟光驱并打开ma软件.
VB程序实例-图像的缩小.zip
Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
yolo系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值
推荐几个国外 Java 大佬的优质博客.docx
Arduino一分钟快速在vs code 编译开发Arduino
强网杯objective-c可视化演示5中的常见排序算法,包括选择排序、气泡排序、插入排序、快速排序、堆排序等.zip
VB程序实例,可供参考学习使用,希望对你有所帮助
yolo系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值
强网杯
技术资料分享AT070TN92非常好的技术资料.zip