Eclipse plugin EclipseRCP:如何对属于不同插件的透视按钮进行排序?

Eclipse plugin EclipseRCP:如何对属于不同插件的透视按钮进行排序?,eclipse-plugin,eclipse-rcp,Eclipse Plugin,Eclipse Rcp,我的应用程序有5个插件。每个插件都有自己的透视图,因此每个透视图扩展定义都位于各个插件的plugin.xml下 现在,我想控制这些透视图在应用程序中的显示顺序。怎么做 有一个主要插件包含“ApplicationWorkBenchAdvisor.java”。这有initialize()方法,在该方法中,我使用 PlatformUI.getWorkbench().getPerspectiveRegistry().getPerspectives(); 然后以逗号分隔的方式将透视ID附加到一个字符串变

我的应用程序有5个插件。每个插件都有自己的透视图,因此每个透视图扩展定义都位于各个插件的plugin.xml下

现在,我想控制这些透视图在应用程序中的显示顺序。怎么做

有一个主要插件包含“ApplicationWorkBenchAdvisor.java”。这有initialize()方法,在该方法中,我使用

PlatformUI.getWorkbench().getPerspectiveRegistry().getPerspectives();
然后以逗号分隔的方式将透视ID附加到一个字符串变量(pbar)中,该变量以后会像这样使用

PlatformUI.getPreferenceStore().setDefault(IWorkbenchPreferenceConstants.PERSPECTIVE_BAR_EXTRAS, pbar);
PlatformUI.getPreferenceStore().setValue(IWorkbenchPreferenceConstants.PERSPECTIVE_BAR_EXTRAS, pbar);
当迭代透视图注册表时,我可以比较透视图ID并按我希望的方式对其进行排序(当通过比较ID添加到“pbar”时),但我不想在这里进行排序,因为它看起来像一种肮脏的方式

还有其他地方可以确定透视图的显示顺序吗?(每个透视图位于不同的插件中)

补充 1) 我们还可以控制透视切换器中的顺序吗


2) 是否有一种方法可以控制进入透视注册表的条目,以实现所需的顺序。如果没有,我们能否写回perspective registry?

如果您的应用程序被封装为eclipse产品,您可以调整该文件。
(文件由您的中的“
preferenceCustomization
”属性引用。)
此文件是java.io.Properties格式的文件。通常,此文件用于设置作为插件公共API一部分发布的首选项的值。
(示例)

因此,如果表示透视顺序的字符串可以作为属性引用,则可以在其中定义默认顺序。
由于源代码中提到:

 /**
  * 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\u customization.ini
文件中的一行:

org.eclipse.ui/PERSPECTIVE_BAR_EXTRAS=perspectiveId1,perspectiveId2,perspectiveId3
将允许您指定该顺序,而无需硬编码

补充说明: (或)没有写任何东西(特别是对于扩展中定义的透视图)

可以在工作台的状态中找到排序(存储在工作区中,然后在再次启动时恢复,
.metadata/.plugins/org.eclipse.ui.workbench/workbench.xml

你是否确认:

IPerspectiveRegistry registry = PlatformUI.getWorkbench().getPerspectiveRegistry();
IPerspectiveDescriptor[] perspectives = registry.getPerspectives();
plugin\u customization.ini
正确定义顺序时,顺序不正确

确实确认(在注释中),但也表明(有序)ini文件条目在内部被记录到首选项存储,这意味着它们可以通过首选项存储API检索:

PatformUI.getPreferenceStore().getDefault( 
    IWorkbenchPreferenceConstants.PERSPECTIVE_BAR_EXTRAS)
利物浦5-0击败阿斯顿维拉,然后加上:

透视图注册表(初始“
PlatformUI.getWorkbench().getPerspectiveRegistry().getPerspectiveRegistry();
”位)保持不变(无序)。
但是,您仍然可以通过首选项存储“轻松访问透视图的有序列表” 因此,对于其他任务,我们可以使用存储有序透视ID列表的有序变量,而不是遍历透视注册表(它仍然是无序的)

.
.
.
.


注:另一种可能性是

=>至:

您可以更轻松地在菜单或按钮中定义顺序


极限解:


总结所有观察和发现

1) 无法更改透视注册表中的条目。它是只读的

2) 要使透视图按我们希望的顺序显示在透视栏上,我们可以通过在plugin_customization.ini(或preferences.ini)中添加一个条目来实现,如下所示

org.eclipse.ui/PERSPECTIVE_BAR_EXTRAS=perspectiveId1,perspectiveId2,perspectiveId3
PlatformUI.getPreferenceStore().getDefault( 
    IWorkbenchPreferenceConstants.PERSPECTIVE_BAR_EXTRAS);
3) 如果我们想获取这个有序列表,我们不能直接获取它。但是,由于这个ini文件条目在PreferenceStore中被内部记录,我们可以使用下面的API从PreferenceStore获取相同的值,如下所示

org.eclipse.ui/PERSPECTIVE_BAR_EXTRAS=perspectiveId1,perspectiveId2,perspectiveId3
PlatformUI.getPreferenceStore().getDefault( 
    IWorkbenchPreferenceConstants.PERSPECTIVE_BAR_EXTRAS);
为什么有人需要访问ini文件中定义的条目?

在我的例子中,我有一个视图,其中我必须显示指向每个透视图的链接。由于我的透视栏是按所需顺序排序的,所以我还希望在显示透视链接时在视图中保持相同的顺序


4) 在默认值透视切换器的显示中,没有已知的方法施加相同的排序顺序。虽然可以编写一个新的自定义透视切换器来实现所需的效果。

Brilliant,但ini文件中的行可以实现这一点。但是,我有一个默认视图,其中显示指向透视图的链接。我希望这些链接的顺序也是一样的。(我在这里迭代thr的透视图注册表,所以它的顺序不是期望的)。(续)…而且透视切换器没有按顺序显示透视图。是否有方法访问ini文件中定义的变量?使用该变量,我至少可以修复视图中的顺序(如果没有)。切换器。或者更好……是否有办法控制/更改pers的输入。登记处?非常感谢。我确认,当我迭代透视图注册表(如您所示)时,透视图的顺序与ini文件中给出的顺序不同。但是,ini文件条目确实使透视图按顺序显示在UI上。有没有办法在我的程序中读取此ini文件条目?非常感谢。“有办法在我的程序中读取此ini文件条目吗?”:我不知道。我将搜索更多。您好,我刚刚发现我们可以使用API“PlatformUI.getPreferenceStore().setDefault(iWorkbenchReferenceConstants.PERSPECTIVE\u BAR\u EXTRAS)”通过另一个调整来检索ini文件值。毕竟,ini条目进入pref.store:-)。谢谢你的帮助。我只能向您提供一次:-(根据要求添加了一些注释。您的最后一条注释是否意味着您能够在ini文件中指定正确的顺序后,使用setDefault()调用设置正确的透视顺序?请修复我答案中的注释,但我想它不能完全解决问题