读书人

Rich Client Tutorial Part 三 翻译

发布时间: 2012-11-21 08:23:25 作者: rapoo

Rich Client Tutorial Part 3 翻译

介绍??????? 前两部分通过一个简单的应用阐述了RCP(Rich Client Platform)的基本概念。我们使用了Eclipse SDK提供的一个叫“Hello RCP”的插件项目模板。现在我们将深入探讨一个复杂的应用。我们能向应用程序中一次添加一样东西,但实际上这不是最好的办法。
当你自己写应用程序时,最快的办法是找一个模板或其它和你要创建的应用相类似的程序,然后拷贝。这也是我要使用的办法,使用一个叫“RCP Mail”的模板。在该教程的结尾有你需要理解掌握的信息,包含了该例子是如何工作的,然后你就可以基于此创建你自己的应用了。 RCP Mail template这个RCP Mail 模板不是一个真正功能性的mail应用程序,但却是一个独立的RCP例子,教我们如何: 通过actions添加顶层菜单和工具栏 通过actions添加键盘绑定(keybindings )
创建不可关闭的视图和多个相同实例的视图 用placeholders为新的视图创建透视图 使用默认的About对话框 创建一个产品定义(product definition)

想第一部分一样,选择 File > New > Project, 展开Plug-in Development 然后再选择 Plug-in Project 打开一个插件项目创建向导.输入项目的名字,如 org.eclipse.ui.tutorials.rcp.part3,

在选择"Would you like to create a rich client application?"时选择 Yes. 然后点击下一步,选择RCP Mail Template后点击Finish

Rich Client Tutorial Part 三 翻译

Rich Client Tutorial Part 三 翻译

Figure 1. 通过RCP Mail Template生成的实例可以作为你自己RCP应用的骨架使用。

在Plug-in Manifest属性页中点击"Launch an Eclipse application"测试该应用,如果成功就会看到下面的图:

Rich Client Tutorial Part 三 翻译

Views

RCP Mail 有两个视图,左边展示的是mail消息,右边是特定的mail消息。这些views都是通过org.eclipse.ui.views扩展点扩展而来,是在plugin.xml 中定义。 Listing 1 展示了 Message view的定义:

Listing 1. Message view defined in plugin.xml

   
point="org.eclipse.ui.views">

name="Message"
allowMultiple="true"
icon="icons/sample2.gif"
alt="Rich Client Tutorial Part 三 翻译" height="13" src="/img/2012/10/18/1343004185.gif" /> public static final String ID = "org.eclipse.ui.tutorials.rcp.part3.view";

Rich Client Tutorial Part 三 翻译 public void createPartControl(Composite parent) {
Composite top = new Composite(parent, SWT.NONE);
...etc...
}

public void setFocus() {
}
}

Notes:

定义了一个ID常量,ID_模式在Eclipse源代码中随处可见。这里使用的ID和plug-in manifest中的id是一样的,当我们需要获得该视图时需要用到该ID。 Rich Client Tutorial Part 三 翻译 createPartControl 方法是该类中最重要的方法. 在这里需要创建视图中需要的 JFace 或 SWT 控件. 关于View编程不在该教程讨论之列,但在引用部分有一些资源可供你学习。

你也许会奇怪,Eclipse是如何知道把Mailbox视图放在左边,而把Messages放在右边?这就需要用到透视图Perspective了。

透视图Perspectives

Views 和editors只能显示在 perspective中., 可以在plugin.xml中通过扩展 org.eclipse.ui.perspectives 来定义透视图. The initial layout for it (i.e., what parts it starts up with) is set up in code. Listing 3 展示了RCP Mail application中的初始化布局代码 。

Listing 3. Perspective.java

String editorArea = layout.getEditorArea();
  • layout.addStandaloneView(NavigationView.ID, IFolderLayout folder = layout.createFolder( layout.getViewLayout(NavigationView.ID).setCloseable( 因为该例子没有使用到编辑器,所以在你关闭编辑器后在工作台窗口的中间不会看到一大片空白。如果你使用了编辑器,则删除该行。 Rich Client Tutorial Part 三 翻译 该 行在透视图中添加Navigation视图,默认是可见的。 这是一个独立的视图,意味着它不能和其它视图相互折叠,同时没有标题栏。代表位置的参数指定了视图显示在编辑器区域的左边,占据工作台窗口水平区域的 1/4。你也许很奇怪,因为我们没有使用编辑器区域,但它好像隐藏在某处,即使它是不可见的。 Rich Client Tutorial Part 三 翻译 还记得我们什么时候创建的Messages视图吗,它使用的 allowMultiple="true"吗? 这意味着你不能确定Messages视图的位置,因为它们不只一个。所以首先你需要为它们创建一个folder,然后调用addPlaceholder() 方法把folder与和Message 视图标识id相匹配的pattern 联系起来. 最后调用 addView() 添加视图. 在一个真实的应用中你也许要记住哪个message先被打开,以便在程序重启后重新打开。 Rich Client Tutorial Part 三 翻译 设置Navigation视图不能关闭

    为了在下次启动应用时恢复用户的布局和窗口的大小,需要在WorkbenchAdvisor中添加configurer.setSaveAndRestore(true);initialize()方法中。

    Actions, commands, menus, and toolbars 在Eclipse 3.2 或 3.3 中可能被重构了,所以该文很有可能会改变。

    makeActions() 是由平台来调用的,用来创建所有与菜单和工具栏想关联的 actions 。一个Action是一个拥有用户接口组件(菜单和工具栏如何显示)和功能组件(动作)的简单类。可以通过查看Javadoc 的 ActionFactory 和ContributionItemFactory来了解被支持的 Workbench actions列表。 Rich Client Tutorial Part 三 翻译 fillMenuBar() 是用actions来填充工作台的菜单栏. RCP Mail 包含了两个顶层菜单, "File" 和 "Help". 首先你要为每个顶层菜单创建一个 MenuManager,然后将菜单添加到菜单栏,将actions添加到菜单。 Rich Client Tutorial Part 三 翻译 fillCoolBar() 定义了Workbench的coolbar . 一个 coolbar 是 toolbars的集合, 而一个 toolbar 又是actions的集合. 在这个实例中只有一个 toolbar. 你先创建一个新的toolbar manager , 然后添加 toolbar 到 coolbar, 最好添加actions 到toolbar.

    创建一些placeholders来容纳那些通过插件添加进来的附加菜单项是一个好办法. 在开始编码时,你应该使用那些标准的placeholder命名。通过使用预定义的groups,你可以像用插件plug-ins把菜单和工具栏项添加到 Eclipse IDE一样把它们添加进你的 RCP应用中.除了在Javadoc的IWorkbenchActionConstants以外没有其它任何的资料文档,即使在Javadoc中也没有任何指南。最好的参考就是Eclipse IDE 源代码本身。

    确保在你的插件构建配置中包含了images和icons文件(在Plug-in Manifest 中的Build 标签,或者 build.properties 文件). 否则它们不会包含在插件的jar包中或在导出操作时不会拷贝它们。 模板中我们注意到了那些,但很容易在你自己的应用中忘记。

    ?

    后记:花了一天的时间把这篇文章翻译完了,感觉上看得懂,但翻译起来有点拿不准,可能是我的英文太烂的原因吧。最近的项目需要用rcp技术来做,这是一篇入门的文章,以后我还会持续写一些自己的积累和体会。