3

我的应用程序有 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)有没有办法控制进入透视注册表以产生所需的顺序。如果不能,我们可以写回透视注册表吗?

4

2 回答 2

8

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

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();”位)保持不变(并且无序)。
但是,您仍然可以通过偏好存储“轻松访问有序的视角列表” 。 因此,对于其他任务,我们可以使用存储有序透视 id 列表的有序变量,而不是遍历透视注册表(仍然是无序的)。

.
.
.
.


注意:另一种可能性是替换 RCP 应用程序中的透视切换器

替代文字 => 到:替代文字

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


极端解决方案:重新实现一个透视切换器

http://www.richclient2.de/wp-content/uploads/2006/08/persp_header.png

于 2009-04-02T06:43:06.223 回答
5

总结所有的观察和发现,

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) 没有已知的方法可以在默认透视切换器的显示中施加相同的排序顺序。同时可以编写一个新的自定义透视切换器来达到预期的效果。

于 2009-04-08T06:47:40.257 回答