第 7 章:定义屏幕流

GUIX Studio 支持屏幕转换逻辑的自动生成和执行。 用户通过创建和编辑图形屏幕流图来定义屏幕转换逻辑。 当屏幕流图被添加到项目中时,它启用了两个重要功能:1) 应用程序可以在 Studio 环境中执行;2) Studio 自动生成事件处理程序和屏幕转换逻辑,以在生成的规范文件内实现指定的屏幕流,从而消除应用程序的这一负担。

在桌面上的 Studio 环境中运行应用程序是一项便捷功能,它可以节省时间,因为不需要经过编译/链接周期来执行应用程序。 当然,在不编译应用程序的情况下所能执行的操作也有一些限制。 在 GUIX Studio 环境中运行应用程序时,无法使用自定义绘图函数、自定义事件处理程序和复杂事件处理。 尽管如此,借助这一功能,可以自动生成屏幕转换逻辑,并编写从一个屏幕转换到另一个屏幕的动画。 这些效果和动画可以直接在 GUIX Studio 环境中观察到。

请注意,如果你定义屏幕流、触发器和操作(我们将在下面的段落中描述),则不仅是启用在 Studio 环境中执行 UI,还是启用由 GUIX Studio 在规范文件中生成逻辑来处理事件并根据这些事件执行操作(如从一个屏幕转换到另一个屏幕)。

配置屏幕流

必须先进行一些定义,然后才能在 Studio 环境中执行应用程序。 首先,必须通过在 Studio“属性”视图中选中“在启动时可见”属性来指明应在程序启动时显示的顶层屏幕。 此标志表示此屏幕应在程序启动时首先显示。 如果需要,可以有多个屏幕具有此标志。

在定义了启动时可见的屏幕后,用户可以定义 UI 应用程序如何从一个屏幕转换到另一个屏幕。 GUIX Studio 提供了图形屏幕流图来定义屏幕转换逻辑。 只需选择菜单选项“配置屏幕流”即可显示屏幕流编辑对话框(见图 30 中的屏幕截图)。

GUIX Studio“编辑屏幕流”对话框的屏幕截图。

图 30

项目中定义的每个顶层屏幕都显示为一个框,其中显示屏幕名称。 此框是一个占位符,表示项目中定义的每个顶层屏幕。 可以根据需要移动这些框并调整大小。 如果定义了从一个顶层屏幕转换到另一个顶层屏幕,则两个屏幕之间会显示一条带有箭头的连接线,以指明从一个屏幕转换到另一个屏幕。

屏幕流图左侧的树状视图显示了每个顶层屏幕,你可以选择应在屏幕流图上绘制哪些顶层屏幕。

屏幕流图是可滚动的。 可以将任何屏幕块向右下拖动到可见区域之外,从而放大可滚动的窗口。 在可滚动的窗口放大后,就可以通过向下滚动鼠标滚轮来缩小,使其适应可见区域的大小。 如果可滚动的窗口已缩小,则可以向上滚动鼠标滚轮,使其有足够大的空间来容纳所有块。

若要定义屏幕转换,请右键单击相应屏幕的占位符,以显示“编辑触发器列表”对话框(见图 31)。

GUIX Studio“编辑触发器列表”对话框的屏幕截图。

图 31

“编辑触发器列表”对话框列出了用户定义的将触发屏幕转换的事件,这就是我们称这些事件为触发器的原因所在。 触发器通常是由所选屏幕的一个或多个子小组件生成的信号。

若要定义新的触发器,请选择“编辑触发器列表”对话框中的“添加新触发器”按钮,以显示“添加触发器”对话框(如图 32 所示)。

GUIX Studio“添加触发器”对话框的屏幕截图。

图 32

可以定义将触发一组新操作的事件类型,并定义在收到触发器事件时执行的操作。

在定义要用于触发新屏幕转换动画的事件类型后,保存这一新触发器,然后它就会显示在“编辑触发器列表”对话框中。

可以通过在“编辑触发器列表”对话框中选择事件,然后选择“编辑触发器事件”按钮来修改此事件(无需修改要执行的相关操作)。

同样,可以通过选择事件并单击“删除所选触发器”按钮,从列表中删除任何触发器事件。

若要指定应根据特定触发器事件而发生的动画或屏幕转换,请选择相应触发器事件,然后单击“编辑操作”按钮。 请注意,可以根据每个定义的触发器来触发多个操作。

单击“编辑操作”按钮会显示“编辑触发器操作”对话框(如图 33 所示):

GUIX Studio“编辑触发器操作”对话框的屏幕截图。

图 33

在此对话框中,可以定义要根据此触发器事件实现的任意数量的操作。 可以为每个操作指定一个有意义的名称,这样有助于将每个操作定义与视觉动画或转换相关联。 上面的示例定义了两个名为“fade_in_text_screen”和“fade_out_button_screen”的操作。

若要定义要实现的新操作,请单击“添加新操作”按钮来显示“选择操作”对话框(如图 34 所示):

GUIX Studio“选择操作”对话框的屏幕截图。

图 34

可选择的操作类型包括:

  • 动画:启动包含指定信息的动画。
  • 附加:将目标屏幕附加到父屏幕;如果没有指定父屏幕,则目标屏幕附加到根窗口。
  • 拆离:将目标屏幕与其父屏幕拆离。
  • 隐藏:隐藏目标屏幕。
  • 屏幕堆栈弹出:从内部屏幕堆栈中弹出屏幕。
  • 屏幕堆栈推送:将屏幕指针推送到内部屏幕堆栈。
  • 屏幕堆栈重置:从内部屏幕堆栈中删除所有屏幕指针。
  • 显示:显示目标屏幕。
  • 切换:将目标屏幕附加到当前屏幕的父屏幕,并将当前屏幕与其父屏幕拆离。
  • 窗口执行:模式地执行目标屏幕。
  • 窗口执行停止:退出当前屏幕的模式执行。

在定义了要根据所选触发器事件执行的操作后,相应操作就会显示在“编辑触发器操作”对话框中。 可以选择此操作来修改它的参数,如图 35 所示。

GUIX Studio“编辑触发器操作”对话框的屏幕截图。

图 35

如果操作类型是动画,则右侧会显示一组动画参数,便于你定义要执行的滑动和/或淡化类型动画。 当动画操作完成时,也可以决定动画是否应自动与其父屏幕拆离,并/或被推送到内部屏幕堆栈,这在定义多层菜单系统时通常很有用。

对于滑动和淡化动画,也可以通过选择“选择缓动函数”按钮来定义要使用的缓动函数。 缓动函数是设计用来更接近模拟现实运动事件的各种曲线。 选择此按钮会显示“选择缓动函数”对话框(如图 36 所示):

GUIX Studio“选择缓动函数”对话框的屏幕截图。

图 36

若要定义多个操作与一个触发器事件关联,那么为每个操作分配有意义的名称是很有用的。 操作名称必须遵循 C 语法命名规则,因为这些名称将在生成的规范文件中用于定义事件和操作表。

当你在 GUIX Studio 中定义触发器事件和操作时,就会在项目规范文件中生成自动事件处理程序,以处理这些事件并执行指定的操作。 也就是说,你不需要在应用程序代码中处理这些事件,尽管触发器事件仍会传递到你定义的任何自定义事件处理程序。 换句话说,Studio 生成的事件处理程序增强(而不是替换)你自己的自定义事件处理程序。

运行应用程序

在创建启动屏幕和屏幕流图后,就可以在 Studio 中运行应用程序,具体方法为选择工具栏上的“运行应用程序”

“运行应用程序”按钮的屏幕截图。

按钮、依次选择“项目”菜单中的“编辑”|“运行应用程序”,或选择“编辑屏幕流”对话框底部的“运行”按钮。

在运行应用程序时,你会看到指定为“在启动时可见”的屏幕在新窗口中显示。 这些屏幕上的子小组件是完全可操作的。 可以单击按钮、操作滑块和滚轮等。 如果为这些小组件定义了自定义绘图函数或自定义事件处理,则当然不会在此模式下运行应用程序时看到这些。 但如果你定义了包含触发器事件和操作的屏幕流图,那么这些触发器是可操作的,并且屏幕将按你所定义的方式转换,包括你可能已定义的任何动画。