我正在开发一个 Eclipse 插件(或者实际上是基于 Eclipse 的应用程序的插件),它需要用户输入一些配置。
从文档来看,似乎有两种首选 API - 一种是org.eclipse.core.runtime.preferences,扩展/实施OSGI 首选项 API,另一个是 JFace 特定的,在org.eclipse.jface.preference。然后我们有org.eclipse.ui.preferences, too.
OSGI API 有一个分层节点树 - 一个偏好节点(Preferences
or IEclipsePreferences
)可以有多个子节点,这些子节点本身可以包含单独的名称值对以及更多子节点。这似乎适合我的用例 - 我有动态数量的“首选项组”,每个组都有大约三个字符串属性(名称、描述、命令),它们可以很好地映射到这些节点。
JFace API 没有这样的层次结构,只有一个平面IPreferenceStore
对于每个插件。但它提供了首选项编辑器页面,然后可以通过实现将其包含在通常的首选项对话框(窗口/首选项)中IWorkbenchPreferencePage
and 使用“org.eclipse.ui.preferencePages”扩展点。 (我仍然需要自己实现部分首选项页面,但这个 API 似乎为此提供了良好的基础。)
看来org.eclipse.ui.preferencesAPI 通过提供基于 IEclipsePreferences 的 IPreferenceStore 实现以某种方式桥接这两个 API,但我仍然不知道如何使用它。
所以这是我的问题:如何使用分层OSGIPreferences
在首选项对话框中?我只需要一级,但我需要用户能够动态添加新节点(每个节点大约有三个首选项)。 (不过,这些节点不必有新的首选项页面。)
似乎在首选项页面级别,它希望与首选项存储一起工作。大多数插件从提供的默认值中获取其首选项存储org.eclipse.ui.plugin.AbstractUIPlugin.getPreferenceStore()
。这可以松散地转换为带有 InstanceScope 的 ScopedPreferenceStore 以及与其bundle.id 匹配的节点。
获取匹配的 IEclipsePreferences 对象的等效方法是InstanceScope.INSTANCE.getNode("bundle.id")
。这将允许您在下面添加更多节点,但无法从 IPreferenceStore 访问它们。但是,您的首选项页面可以将其首选项存储设置为插件的主要首选项,并且仍然使用 IEclipsePreferences 或辅助 IPreferenceStore 来访问额外的首选项(您只需自己编写代码,类似于org.eclipse.ui.internal.dialogs.EditorsPreferencePage
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)