【问题标题】:Eclipse RCP: How to order perspective buttons belonging to different plugins?Eclipse RCP:如何订购属于不同插件的透视按钮?
【发布时间】:2010-10-17 01:09:28
【问题描述】:

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

【问题讨论】:

  • 按要求添加了一些 cmets。
  • 您的最后一条评论是否意味着您可以通过 setDefault() 调用在 ini 文件中指定该顺序后设置正确的透视顺序?
  • 修复我的回答中的评论,但我想它不能完全解决“透视顺序”问题,对吗?
  • 感谢您的最后评论。我已经用这个澄清更新了我的条目。在我看来,这就像我们将得到的解决您问题的方法一样接近。
  • 非常感谢您长期以来的帮助。还要感谢您使用来自 cmets 的信息更新您的答案。这也使其他人的答案更具可读性。是的,我想现在这是一个完整的答案,先生。

标签: eclipse-plugin eclipse-rcp


【解决方案1】:

如果您的应用程序被封装为 Eclipse 产品,您可以调整 plugin.properties/plugin_customization.ini 文件。
product extension point 中的“preferenceCustomization”属性引用的文件。)
此文件是 java.io.Properties 格式文件。通常,此文件用于设置作为插件公共 API 的一部分发布的首选项的值。
such a file for 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 确实正确定义了该顺序时的顺序不正确?

Liverpool 5 - 0 Aston Villa 确实证实了这一点(在 cmets 中),但也表明 (有序)ini 文件条目在内部被记录到首选项存储中,这意味着它们可以通过 检索偏好商店 API

PatformUI.getPreferenceStore().getDefault( 
    IWorkbenchPreferenceConstants.PERSPECTIVE_BAR_EXTRAS)

利物浦5-0阿斯顿维拉然后补充:

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

.
.
.
.


注意:另一种可能是Replace the Perspective-Switcher in RCP apps

=> 至:

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


极端解决方案:re-implement a perspective switcher

【讨论】:

  • 太棒了,ini 文件中的那行就可以了。但是,我有一个默认视图,其中显示了透视图的链接。我希望这些链接也以相同的顺序排列。(我在这里迭代透视注册表,因此它不是所需的顺序)。 (续)...
  • 另外,透视切换器不会按顺序显示透视。有没有办法访问 ini 文件中定义的变量?使用该变量,如果不是 pers,我至少可以修复视图中的排序。切换器。或者更好......有没有办法控制/改变进入个人。注册表?非常感谢。
  • 我确认,当我遍历透视注册表时(如您所示),透视的顺序与 ini 文件中给出的顺序不同。但是,ini 文件条目确实使透视图在 UI 上按顺序显示。有没有办法在我的程序中读取这个 ini 文件条目?非常感谢。
  • “有没有办法在我的程序中读取这个 ini 文件条目?”:我不知道。我会再搜索一些。
  • 您好 VonC,我刚刚发现我们可以使用 API“PlatformUI.getPreferenceStore().setDefault(IWorkbenchPreferenceConstants.PERSPECTIVE_BAR_EXTRAS)”通过另一个调整来检索 ini 文件值。毕竟,ini 条目进入 pref。店铺 :-)。感谢你的帮助。我只能给你一次 :-(
【解决方案2】:

总结所有观察和发现,

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

【讨论】:

    猜你喜欢
    • 2014-07-30
    • 2014-11-25
    • 2015-07-15
    • 1970-01-01
    • 2011-07-17
    • 2019-01-17
    • 2011-01-13
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多