我的应用程序有5个插件.每个插件都有自己的透视图,因此每个透视扩展定义都在单个插件的plugin.xml下.
现在,我想控制这些透视图在我的应用程序中出现的顺序.怎么做?
有一个主插件包含"ApplicationWorkBenchAdvisor.java".这有initialize()方法,我在其中使用透视注册表进行迭代
PlatformUI.getWorkbench().getPerspectiveRegistry().getPerspectives();
然后以逗号分隔的方式将透视ID附加到String变量(pbar),稍后将使用此变量.
PlatformUI.getPreferenceStore().setDefault(IWorkbenchPreferenceConstants.PERSPECTIVE_BAR_EXTRAS, pbar); PlatformUI.getPreferenceStore().setValue(IWorkbenchPreferenceConstants.PERSPECTIVE_BAR_EXTRAS, pbar);
当迭代透视注册表时,我可以比较透视ID并对其进行排序(当通过比较id添加到'pbar'时)我希望它出现的方式,但是,我不想在这里进行此排序,因为它看起来像一个脏的方式.
还有其他地方我们可以解决透视出现的顺序吗?(每个透视图都位于不同的插件中).
1)我们还可以控制透视切换器中的排序吗?
2)是否有办法控制进入透视注册表以造成所需的订单.如果没有,我们可以写回透视注册表吗?
如果您的应用程序被封装为eclipse产品,您可以调整该plugin.properties/plugin_customization.ini
文件.
(由产品扩展点中的' preferenceCustomization
'属性引用的文件.)
此文件是java.io.Properties格式文件.通常,此文件用于设置作为插件的公共API的一部分发布的首选项的值.
(这样的文件的例子)org.eclipse.platform
因此,如果表示透视顺序的字符串可以作为属性引用,则可以在其中定义默认顺序.
由于IWorkbenchPreferenceConstants
提到的源代码:
/** * Lists the extra perspectives to show in the perspective bar. * The value is a comma-separated list of perspective ids. * The default is the empty string. * * @since 3.2 */ public static final String JavaDoc PERSPECTIVE_BAR_EXTRAS = "PERSPECTIVE_BAR_EXTRAS"; //$NON-NLS-1$
也许plugin_customization.ini
文件中的一行:
org.eclipse.ui/PERSPECTIVE_BAR_EXTRAS=perspectiveId1,perspectiveId2,perspectiveId3
允许您指定该订单而无需对其进行硬编码.
IPerspectiveRegistry(或PerspectiveRegistry)不会编写任何内容(特别是对于扩展中定义的透视图)
订购可以在工作台的状态中找到(存储在工作区中,然后在再次启动时恢复.metadata/.plugins/org.eclipse.ui.workbench/workbench.xml
)
你确认:
IPerspectiveRegistry registry = PlatformUI.getWorkbench().getPerspectiveRegistry(); IPerspectiveDescriptor[] perspectives = registry.getPerspectives();
当plugin_customization.ini
确实正确定义该顺序时,顺序不正确?
利物浦5 - 0阿斯顿维拉确认(在评论中),但也表明(有序)ini文件条目在内部被记录到偏好商店,这意味着它们可以通过偏好商店API检索:
PatformUI.getPreferenceStore().getDefault( IWorkbenchPreferenceConstants.PERSPECTIVE_BAR_EXTRAS)
利物浦5比0阿斯顿维拉然后添加:
透视注册表(初始"
PlatformUI.getWorkbench().getPerspectiveRegistry().getPerspectives();
"位)保持不变(和无序).
但是,您仍然可以通过首选项 " 轻松访问有序的透视列表 " . 因此,对于其他任务,我们可以使用存储有序perpective id列表的有序变量,而不是迭代透视注册表(仍然是无序的).
.
.
.
.
注意:另一种可能性是在RCP应用程序中替换Perspective-Switcher
=>到:
您可以在菜单或按钮中更轻松地定义订单.
极端解决方案:重新实现透视切换器.
总结所有的观察和发现,
1)无法更改透视注册表中的条目.它是只读的.
2)为了使透视图以透视栏上我们想要的顺序出现,我们可以通过在plugin_customization.ini(或preferences.ini)中添加一个条目来实现它,如下所示.
org.eclipse.ui/PERSPECTIVE_BAR_EXTRAS=perspectiveId1,perspectiveId2,perspectiveId3
3)如果我们想要获取这个有序列表,我们无法直接获取它.但是当这个ini文件条目内部记录在PreferenceStore中时,我们可以使用以下API从PreferenceStore获取相同的值,如下所示.
PlatformUI.getPreferenceStore().getDefault( IWorkbenchPreferenceConstants.PERSPECTIVE_BAR_EXTRAS);
为什么有人需要访问ini文件中定义的条目呢?
好吧,就我而言,我有一个视图,我必须显示每个视角的链接.由于我的透视栏按所需顺序排序,我还希望在显示视角链接时在视图中保持相同的顺序.
4)没有已知的方法在默认透视切换器的显示中造成相同的排序顺序.虽然可以编写新的自定义透视切换器以实现所需的效果.