OpenOffice API (七) 其他知识

知识一:

用OpenOffice API编写插件的步骤:

1、provide descripttion.xml --提供一个描述文件;

2、provide an extension identifier --提供一个扩展标示

3、provide an version --提供版本

4、provide an icon  --提供一个icon

5、provide an displayname --显示的名字

6、provide description 提供描述(具体内容)

7、授权许可之类的

生成的插件是:形如  name.ext  ,

描述文件descripttion.xml给出版本信息之类;


(以上知识从sdk文档翻译而来)


知识二:

 OpenOffice 用的是FCM框架,即:Frame--Controller-Model 和MVC框架有点类似,但不是MVC;

FCM将程序分为三部分:

document object -----Model

Screen Interaction with the model  --Controller

controller-window linkage  Frame

程序创建Frame 时,必须调用 com.sun.star.frame.XFame的initalize ,

创建frame时,创建会要求获得com.sun.star.awt.XWindow接口,在周围的窗口中实例化并成为frame的容器(container)窗口。这个窗口实例(传入到了initialize()方法中了)必须支持com.sun.star.awt.topWindow

(以上知识从sdk文档翻译而来)

 public void initialize( Object[] object )
            throws com.sun.star.uno.Exception {

            if ( object.length > 0 )
            {
                m_xFrame = ( XFrame ) UnoRuntime.queryInterface(
                    XFrame.class, object[ 0 ] );
            }
......
container窗口必须广播窗口事件,比如窗口激活啊windowActivated(),等

container窗口并不一定是独立的窗口;是可以停靠的,(但没弄过,sdk给出的例子有停靠的实现)



知识三

例子中的protocolHandler.xcu此文件是一个分发协议文件的句柄文件,其定义了组件在OOo中分发的名称。

<node oor:name="HandlerSet">
		<node oor:name="ProtocolHandlerAddon$ProtocolHandlerAddonImpl" oor:op="replace">
			<prop oor:name="Protocols" oor:type="oor:string-list">
				<value>org.openoffice.Office.addon.example:*</value>
			</prop>
		</node>

这里定义的 值:org.openoffice.Office.addon.example 和代码文件ProtocolHandlerAddon.java中的aURL.Protocol.compareTo("org.openoffice.Office.addon.example:") == 0 

是一致的!

 // XDispatchProvider
        public XDispatch queryDispatch( /*IN*/com.sun.star.util.URL aURL,
                                        /*IN*/String sTargetFrameName,
                                        /*IN*/int iSearchFlags ) {
            XDispatch xRet = null;
            if ( aURL.Protocol.compareTo("org.openoffice.Office.addon.example:") == 0 ) {
                if ( aURL.Path.compareTo( "Function1" ) == 0 )
                    xRet = this;
                if ( aURL.Path.compareTo( "Function2" ) == 0 )
                    xRet = this;
                if ( aURL.Path.compareTo( "Help" ) == 0 )
                    xRet = this;
            }
            return xRet;
        }

  public void dispatch( /*IN*/com.sun.star.util.URL aURL,
                              /*IN*/com.sun.star.beans.PropertyValue[] aArguments ) {
            
            if ( aURL.Protocol.compareTo("org.openoffice.Office.addon.example:") == 0 )
            {
             
......

样例中的ProtocolHandlerAddon_java.components这个文件中定义了组件的服务名称:

  <implementation name="ProtocolHandlerAddon$ProtocolHandlerAddonImpl">
      <service name="com.sun.star.frame.ProtocolHandler"/>
    </implementation>

这和ProtocolHandlerAddon.java代码必须一致!
  static private final String[] m_serviceNames = { "com.sun.star.frame.ProtocolHandler" };




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值