当前位置:  开发笔记 > Android > 正文

Eclipse RCP:如何订购属于不同插件的透视按钮?

如何解决《EclipseRCP:如何订购属于不同插件的透视按钮?》经验,为你挑选了2个好方法。

我的应用程序有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)是否有办法控制进入透视注册表以造成所需的订单.如果没有,我们可以写回透视注册表吗?



1> VonC..:

如果您的应用程序被封装为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

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

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


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

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



2> Real Red...:

总结所有的观察和发现,

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)没有已知的方法在默认透视切换器的显示中造成相同的排序顺序.虽然可以编写新的自定义透视切换器以实现所需的效果.

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有