为用户界面编制脚本

平台脚本编制插件允许您使用 JavaScript 来开发各种工作台扩展。此支持是使用 Rhino JavaScript 引擎来提供的。可以使用 JavaScript 来向工作台添加下列内容:

下列各节假定您具有 JavaScript、工作台扩展和 SWT 的工作经验。

概念

在工作台中,脚本是作为常规项目文件来管理的。通常,创建单独的项目来包含脚本。提供了专门的编辑器来编辑脚本。

平台支持两种类型的脚本:

  1. 批处理脚本使用 JavaScript 来调用各种工作台对象上的方法,并处理结果。这些脚本很适合创建不是基本工作台功能的一部分的新的、重复的操作。
  2. UI 脚本 类似于带有编制了脚本的 UI 事件的客户机端 HTML 页面。这些脚本很适合于创建需要更费心地与用户交互的脚本。
脚本编写者通过作为局部 JavaScript 变量来显示的几个平台对象来访问工作台环境。脚本还可以使用 JavaScript 的设施来创建 Java 对象并调用它们的方法。

一旦创建了包含脚本的文件,就可以通过首选项对话框(窗口 -> 首选项 -> 脚本)来将该文件注册至工作台。在首选项页面中展开此条目时将显示可以编制脚本的工作台扩展点的列表。通过在首选项树中选择脚本,并按首选项页面中相应的添加按钮, 就可以将脚本添加到每个扩展点中。

首次注册每个脚本时,必须重新启动工作台。一旦注册之后,就可以修改脚本并立即执行脚本,而不需要重新启动工作台。

来自脚本的所有控制台输出,以及在运行脚本时所检测到的所有错误都会写入脚本控制台。可以将脚本控制台添加到其他任何透视图中, 或者可以始终从“脚本编制”透视图(缺省情况下包含控制台视图)来运行脚本。

脚本的限制

添加到工作台的脚本只能访问在下列插件中定义的 API 方法:

未来的发行版将取消此限制,从而可以为任何插件编制脚本。

编写批处理脚本

“批处理”脚本只是 JavaScript 语句的集合, 这些语句通过调用平台对象的 API 方法并处理结果来使用平台对象。脚本编写者可以使用三个平台对象:
  1. 工具箱 — 用来实现 org.eclipse.scripting.IToolkit 的实用程序对象。它为基本工作区资源处理、提示和装入持久脚本状态提供了便捷的方法。
  2. 插件org.eclipse.core.runtime.Plugin 的缺省实例。它提供对插件方法的访问。所有用户脚本都是作为由平台脚本编制支持管理的单个插件的一部分来执行的。
  3. 平台 — 具有对应于 org.eclipse.core.runtime.Platform 的方法的便捷对象。它提供对一般平台功能的访问。
方法 toolkit.print(String) 用于将输出写入到脚本控制台中。

除了预定义的局部变量之外,JavaScript 语言还允许您创建 Java 对象并使用它们的公用 API。JavaScript 特性可用于此目的。以下代码片段使用特性来获取安装 URL 和显示位图对象。

 

var install = Packages.org.eclipse.core.boot.BootLoader.getInstallURL();
var splash = new Packages.java.net.URL(install,"splash.bmp");

编写用户界面脚本

可以利用平台脚本编制支持来创建基于 SWT 的用户界面。获得的脚本非常类似于客户机端的 HTML 页面,只有很小的区别: 脚本编制编辑器是由脚本编制插件提供的。此编辑器支持源视图和预览,它显示源页面在执行时将如何呈示。编辑器利用轮廓视图和透视图视图, 因此,在编辑 UI 脚本时应该显示这些视图。

UI 脚本编辑器被注册为类型为 xhtml 的文件的缺省编辑器。

通过示例最容易了解 UI 脚本。有关特定的技术,参见脚本编制示例。以下路线图描述可以在脚本中使用的元素以及它们的受支持属性和事件块。

主体

表单

UI 元素

布局控件

脚本编制

通常,所有 UI 元素都可以指定标识属性。这将定义具有相同名称的局部脚本变量。通过这些局部变量,脚本可以处理 UI 元素。可用方法通常是等价 SWT 小窗口的那些方法。

可以通过在 UI 元素组之间插入换行符 <br /> 来开始新的布局行,以最有效地执行简单的 UI 布局。脚本呈示支持执行缺省布局,在大多数较简单的情况下这已经足够了。

通过使用表来控制 UI 元素的位置,可以获得更复杂的布局。另外,可以使用 <fieldset> 元素来将单独的 UI 元素分组 (但是,在 Web 页面设计中并不会频繁使用有效的 HTML)。

实际的脚本功能主体是使用 <script> 元素来定义的。这些功能是因为在相应的 UI 元素的“onXXX”属性(例如,onloadonreset)中指定的调用而触发的(就象在 HTML 页面中一样)。

对于 UI 脚本,toolkit 局部变量是 org.eclipse.scripting.IToolkitUI 接口的对象实例。它包含在对批处理脚本显示的工具箱对象中不可用的方法。

向工作台注册脚本

一旦作为工作台资源创建了这些脚本,就可以使用工作台首选项对话框将它们注册到相应的工作台扩展点中。

脚本是使用添加对话框来添加的。对话框将提示您输入以下信息:

将 UI 脚本编制与 Java 配合使用

UI 脚本编制设施将支持使用 Java 作为它的脚本语言而不是 JavaScript。当使用 Java 来作为脚本编制语言时,必须创建 org.eclipse.scripting.Renderer 的实例。此对象将用来呈示 UI,可以与一个或多个同样用 Java 编写的事件处理程序对象相关联。使用呈示程序的 addObject(String,Object) 方法来添加事件处理程序。

即使在利用 Java 来进行脚本编制时,也会使用 JavaScript 事件模型。各种“onXXX”子句是如前文所述指定的。在此情况下,它们是作为对已注册的事件处理程序上的方法的反射性回调来实现的, 而不是作为对“内联” JavaScript 函数的调用来实现的。

显式使用脚本适配器

我们已经了解了工作台用户可以如何添加和管理脚本。还可以由插件提供脚本作为扩展。这是通过指定脚本适配器替代实现类来作为扩展定义中的属性来实现的。适配器规范包含要执行的实际脚本的名称。例如,脚本编制示例 plugin.xml 中的以下标记添加了操作集, 并指定 ScriptAdapterWorkbenchAction, 同时将脚本名指定为 class。相关标记采用的是粗体。


<extension point = "org.eclipse.ui.actionSets">
    <actionSet 
        id="scriptActionSet" 
        label="%S_Script_Examples"
        visible="true">
        ...
        <action id = "scriptaction1"
            menubarPath = "window/org_eclipse_scripting_examples/slot1"
            toolbarPath = "%S_Script_Examples"
            label = "%S_Scripted_Action_Example"
            tooltip = "%S_Perform_Scripted_JavaScript_Action"
            icon = "icons/full/ctool16/script_scp.gif"
            class=
            "org.eclipse.scripting/org.eclipse.scripting.ScriptAdapterWorkbenchAction:file=platform:/plugin/org.eclipse.scripting.examples/excalibur.js language=javascript">
       
</action>
        ...

可以将标准脚本适配器作为任何插件的 plugin.xml 规范的部分直接引用。可以在 org.eclipse.scripting 包中找到受支持的适配器的列表。

脚本编制示例说明这些适配器的其他用途。脚本示例插件通过使用预定义的适配器来实现每个脚本扩展。有关其他详细信息,参考 plugin.xml 文件。

参考

org.eclipse.scripting 的 “API 规范”包含有关脚本编制支持的附加信息。

脚本编制示例还提供了描述和用法信息。有关进一步的信息,参见脚本编制示例