知识一:
用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>
是一致的!
// 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>
static private final String[] m_serviceNames = { "com.sun.star.frame.ProtocolHandler" };