从文档看,似乎有两个偏好的API – 一个在org.eclipse.core.runtime.preferences
,一个在org.eclipse.jface.preference
扩展/实现OSGI prefererence API,另一个,JFace具体,在org.eclipse.jface.preference
.然后我们也有org.eclipse.ui.preferences
.
OSGI API具有层次结构树 – 首选项节点(Preferences或IEclipsePreferences)可以具有多个子节点,它们本身可以包含单个名称 – 值对以及更多子节点.这似乎是适合我的用例 – 我有一个动态数量的“首选项组”,每个都有大约三个字符串属性(名称,描述,命令),它很好地映射到这些节点.
JFace API没有这样的层次结构,每个插件只有一个平均的IPreferenceStore.但是它提供了首选编辑器页面,然后可以通过实现IWorkbenchPreferencePage和using the “org.eclipse.ui.preferencePages” extension point将它们包含在通常的首选项对话框(Window / Preferences)中.(我仍然需要自己实现一部分偏好页面,但是这个API为此提供了一个很好的基础,它似乎.)
看来,org.eclipse.ui.preferences
API通过提供基于IEclipsePreferences的IPreferenceStore实现,以某种方式桥接这两个API,但我仍然看不到如何使用它.
所以这里我的问题:如何在首选项对话框中使用分级OSGI首选项?我只需要一个级别,但我需要用户能够动态添加新的节点(每个约有三个首选项). (这些节点不一定要有新的首选页面.)
解决方法
相当于获取匹配的IEclipsePreferences对象将是InstanceScope.INSTANCE.getNode(“bundle.id”).这将允许您在其下方添加更多节点,但是它们将无法从您的IPreferenceStore访问.但是,您的偏好页面可以将其首选存储设置为插件的主要存储,并仍然使用IEclipsePreferences或辅助IPreferenceStore来访问额外的首选项(您只需要自己编码,类似于org.eclipse.ui.internal.dialogs .EditorsPreferencePage).