上回说到了如何在OOo之中应用其SDK所带的类库,这次重点说说OOo应用程序的应用环境。桌面环境由桌面对象和辅助对象组成。它通过框架 API 实现其功能。目前,框架 API 包括两个组成部分:组件框架和分发框架。组件框架采用一种特殊的“框架 - 控制器 - 模型”模式来管理OOo 中的可视组件。分发框架处理来自 GUI 的命令请求。


    桌面环境
    com.sun.star.frame.Desktop 服务是 OOo 应用程序框架的核心管理实例。所有 OOo 应用程序窗口都按框架分层组织,框架中包含可视组件。桌面是该分层的最顶层框架。

    通过桌面管理的可视组件包括三种不同的对象:具有文档模型和控制器的成熟办公软件文档、具有控制器但无模型的组件(例如文献目录和数据库浏览器)以及不带启用了 API 的控制器的简单窗口(例如预览窗口)。这些组件类型的相同点是 com.sun.star.lang.XComponent 接口。带有控制器的组件也称作办公软件组件,而简单窗口组件则称作普通组件。

    下面重点说说 OOo 中的“框架 - 控制器 - 模型”模式

    著名的“模型 - 视图 - 控制器 (MVC)”模式有三个应用领域:文档数据(模型)、显示(视图)和交互(控制器)。OOo 中的“框架 - 控制器 - 模型 (FCM)”模式也是一个类似的抽象概念。FCM 模式与 MVC 模式在某些方面是相同的,但它们的目的不同,所以最好分别处理。MVC 模式和 FCM 模式中的模型和控制器是完全不同的。

    OOo 中的 FCM 模式有三个应用领域:文档对象(模型)、与模型的屏幕交互(控制器)以及控制器与窗口之间的联系纽带(框架)。

    *模型包含文档数据,还包含多种更改数据的方法(不必使用控制器对)。在模型中,可以直接访问文本、图形和工作表单元格。

    *控制器掌握着文档的当前视图状态并控制文档的屏幕显示,但是不能控制文档数据。它监视模型的变化,并能够通过复制使一个模型具有多个控制器。

    *框架包含模型控制器,并了解与之一起使用的窗口,但没有窗口功能。
    FCM 的目的是使系统具备三个与可交换窗口系统配套使用的可交换部件:

    框架
    在“框架 - 控制器 - 模型”模式中,框架的主要角色是担任可视组件和窗口系统之间的联系纽带。框架可以包含一个组件,或者一个组件与一个或多个子框架。构造框架时,必须使用容器窗口对框架进行初始化(使用com.sun.star.frame.XFrame:initialize())。这种方法需要具有外围窗口实例的com.sun.star.awt.XWindow 接口,它将成为框架的容器窗口。传送给 initialize() 的窗口实例还必须支持 com.sun.star.awt.XTopWindow 才能成为容器窗口。支持com.sun.star.awt.XTopWindow 并不意味着容器窗口独立于带有标题栏和系统菜单的底层窗口系统。XTopWindow 可在需要时充当窗口,但也可以固定或根据外围应用程序窗口而改变位置。

    将框架添加到桌面框架分层中后,桌面就成为框架的父级框架。因此,需要将桌面的com.sun.star.frame.XFramesSupplier 接口传送给 XFrame 接口中的 setCreator() 方法。在桌面提供的 com.sun.star.frame.XFrames 接口中调用 append() 方法时,内部就会发生这一过程。

    框架中的组件
“桌面环境”一节介绍了可以插入到框架中的三种可视组件。如果组件带有控制器和模型 (例如文档),或者只有控制器(例如文献目录和数据库浏览器),该组件就能实现接口com.sun.star.frame.XController 所表示的 com.sun.star.frame.Controller 功能。

    控制器
OOo 中的 控制器介于框架和文档模型之间。这是它的基本作用,它具有 getModel() 和 getFrame() 两个方法。getFrame() 方法提供控制器所附着的框架。getModel() 方法返回一个文档模型,但是,如果组件没有文档模型,它可能返回一个空引用。

    分别从框架、控制器和模型中获取另外两方
    开发人员通常需要使用已加载文档模型的控制器和框架。OOo 文档模型的com.sun.star.frame.XModel 接口通过其 com.sun.star.frame.XController 接口获取可以访问框架的控制器。下图显示了从文档模型中获取控制器和框架以及从控制器或框架中获取文档模型的方法。从框架中获取相应的组件和容器窗口。

OOo.JPG




本文依据《创作共用约定》之“署名-禁止派生-非商业用途”方式发布,即你可以免费拷贝、分发、呈现和表演当前作品,但是必须基于以下条款:

  • 署名:你必须明确标明作者的名字。

  • 非商业用途:你不可将当前作品用于商业目的。

  • 禁止派生:你不可更改、转变或者基于此作品重新构造为新作品。

对于任何二次使用或分发,你必须让其他人明确当前作品的授权条款。

在得到作者的明确允许下,这里的某些条款可以放弃。