我们已经了解了工作台允许用户控制插件功能的外观所采用的一些方法。可以使用窗口 > 显示视图菜单隐藏或显示视图。可以使用窗口 > 定制透视图... 菜单隐藏或显示操作集。这些功能帮助用户组织工作台。
透视图在工作台窗口内部提供附加组织层。当用户在任务之间移动时,他们可以在透视图之间进行切换。透视图定义视图集合、 视图布局和用户首次打开透视图时应使用的可视操作集。
透视图是使用 IPerspectiveFactory 实现的。IPerspectiveFactory 的实现器应该利用描述透视图及其透视图页面布局的信息来配置 IPageLayout。
IPageLayout 的其中一项主要工作就是描述工作台窗口中的编辑器和视图的布置。注意,这些布局不同于 SWT 中的布局类。尽管 IPageLayout 和布局解决相似的问题(缩放和定位大型区域中的小窗口), 但是,您不需要了解 SWT 布局就可以提供透视图页面布局。
利用一个区域来初始化透视图页面布局,以便显示编辑器。透视图工厂负责添加与编辑器相关的附加视图。根据与另一个部件的相对关系(顶部、底部、左边和右边),将视图添加到布局中。还可为并非最初显示的项添加占位符(空的空间)。
要组织相关视图并减少混乱,可以使用 IFolderLayout 来将视图分组到选项卡式文件夹中。例如,“资源”透视图将文件夹内的资源导航器放在工作台的左上角。占位符常用于文件夹布局。“资源”透视图为与资源导航器处于同一个文件夹中的书签视图定义占位符。如果用户显示书签视图,则它将与导航器出现在同一文件夹中,每个视图都有一个标记。
IPageLayout 还允许您定义透视图内可用的操作和快捷方式。
由透视图和 IPageLayout 提供的另一种有价值的服务是帮助您在编辑器与其相关视图之间进行导航。我们通常将视图的作用视为帮助用户查找要在编辑器中使用的对象。但是,逆向操作也很有用:在编辑器中使用对象的用户可能需要导航至视图中的该对象。这可以通过使用工作台导航 > 在其中显示菜单来完成。此命令允许用户跳至当前编辑(或选择)的对象上下文中任意数目个视图之一。例如,编辑文件的用户可能想要跳至资源导航器中的该文件。
工作台的插件体系结构允许开发者在不同的插件(这些插件甚至相互并不了解)中添加视图和编辑器。通过实现对“在其中显示”的支持,您的视图或编辑器就可支持与由其它插件添加的视图和编辑器之间的方便导航。
此导航允许用户在各视图之间快速移动或很容易地打开通常不显示在特定透视图中的视图。例如,在 Java 透视图中工作的用户可以使用导航 > 在其中显示来在“导航器”视图中查看当前编辑的 Java 文件。
如果想要允许用户使用导航 > 在其中显示从您的编辑器或视图跳至另一个视图,则您必须实现 IShowInSource。您这一方可使用协议(getShowInSource())或作为适配器直接提供其 IShowInSource。IShowInSource 允许您这一方提供由目标用来决定如何显示源代码的上下文(IShowInContext)。编辑器的“在其中显示”上下文通常是它的输入元素。对于视图,上下文通常是它的选择。在 IShowInContext 中提供了选择和输入元素来在确定如何显示源时给予目标以灵活性。
提供了编辑器的缺省上下文,因此您的编辑器可以参与“在其中显示”而不必进行任何特殊编码。对于编辑器,输入元素和选择用来创建适当的上下文。
对于视图,IShowInSource 必须由视图实现才能提供导航 > 在其中显示功能。
如果想要您的视图成为“在其中显示”操作的有效目标,必须实现 IShowInTarget。目标负责以适合于其显示的方式显示给定上下文。例如,“导航器”视图展开它的树来选择和显示在上下文中指定的资源。
目标在确定要显示的内容时应该首先检查 IShowInContext 中的选择,因为这是更具体的信息。仅当未指示任何选择时,它才应该显示输入元素。
可用目标列表是如何确定的?可以在透视图的 IPageLayout 中为透视图指定可用的目标。请回想一下,“在其中显示”导航可打开在透视图中尚未存在的视图。通过使用 IPageLayout.addShowInPart,可以按标识指定有效“在其中显示”目标。通过这种方法,可以建立有效目标而不必创建任何视图。