<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.openoffice.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=129.157.136.33</id>
	<title>Apache OpenOffice Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.openoffice.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=129.157.136.33"/>
	<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/wiki/Special:Contributions/129.157.136.33"/>
	<updated>2026-05-09T11:12:42Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Documentation/DevGuide/Extensions/Creating_the_GUI_of_the_Options_Page&amp;diff=63948</id>
		<title>Documentation/DevGuide/Extensions/Creating the GUI of the Options Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Documentation/DevGuide/Extensions/Creating_the_GUI_of_the_Options_Page&amp;diff=63948"/>
		<updated>2007-12-06T12:45:57Z</updated>

		<summary type="html">&lt;p&gt;129.157.136.33: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Documentation/DevGuide/ExtensionsTOC&lt;br /&gt;
|ShowPrevNext=block&lt;br /&gt;
|PrevPage=Documentation/DevGuide/Extensions/Options Dialog&lt;br /&gt;
|NextPage=Documentation/DevGuide/Extensions/Saving and Reading Data for the Options Page&lt;br /&gt;
}}&lt;br /&gt;
{{DISPLAYTITLE:Creating the GUI of the Options Page}}&lt;br /&gt;
The GUI of an options page needs to be created by the dialog editor of {{PRODUCTNAME}}. Exporting the dialog will result in saving a &amp;#039;&amp;#039;.xdl&amp;#039;&amp;#039; file and perhaps multiple &amp;#039;&amp;#039;.properties&amp;#039;&amp;#039; files. The xdl file contains the description of the dialog in XML whereas the properties files contain localized strings. For example, if the dialog is named Dialog1 and it contains strings which are localized for German and US – English, then you will obtain these files:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;Dialog1.xdl&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;Dialog1_de_DE.properties&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;Dialog1_en-US.properties&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Please make sure that you have set the property “With title bar” to “no” for the whole dialog. Note that the maximum size that the dialog may have in the options page is a width of 260 and a height of 185.&lt;br /&gt;
&lt;br /&gt;
The exported files can be anywhere in the extensions, except in META-INF. They must also be in the same directory.&lt;br /&gt;
&lt;br /&gt;
The options dialog will use the service &amp;lt;idl&amp;gt;com.sun.star.awt.ContainerWindowProvider&amp;lt;/idl&amp;gt; to create the options pages. The service constructors takes an URL to the xdl file and an an event handler component. The latter will be used to process events which have been defined in the dialog editor for particular controls. It is also used for saving and loading the data of the controls which are on the options pages.&lt;br /&gt;
&lt;br /&gt;
{{PDL1}}&lt;br /&gt;
[[Category: Extensions]]&lt;/div&gt;</summary>
		<author><name>129.157.136.33</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Documentation/DevGuide/Extensions/Saving_and_Reading_Data_for_the_Options_Page&amp;diff=64027</id>
		<title>Documentation/DevGuide/Extensions/Saving and Reading Data for the Options Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Documentation/DevGuide/Extensions/Saving_and_Reading_Data_for_the_Options_Page&amp;diff=64027"/>
		<updated>2007-12-06T10:51:28Z</updated>

		<summary type="html">&lt;p&gt;129.157.136.33: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Documentation/DevGuide/ExtensionsTOC&lt;br /&gt;
|ShowPrevNext=block&lt;br /&gt;
|PrevPage=Documentation/DevGuide/Extensions/Creating the GUI of the Options Page&lt;br /&gt;
|NextPage=Documentation/DevGuide/Extensions/Defining the Usage of Options Pages&lt;br /&gt;
}}&lt;br /&gt;
{{DISPLAYTITLE:Saving and Reading Data for the Options Page}}&lt;br /&gt;
An options page typically allows the user to enter some data, which of course must be saved when the user presses the &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039; button. When the options page is displayed it should show the data which the user entered previously. In case nothing has ever been entered, the options page could show some “default” data or nothing at all.&lt;br /&gt;
&lt;br /&gt;
How the data is saved and where it is stored is not covered by the specification. It only defines the events “ok”, “initialize”, and “back” which the extension needs to process in order to save the entered data, initialize the controls with data, or restore the state of the controls with the previously saved data. The “ok” and “back” events are triggered by the “OK” and “Back” button of the options dialog. “initialize” is called before the options page is being displayed. In most cases “initialize” and “back” have the same meaning.&lt;br /&gt;
&lt;br /&gt;
In order to receive these events one has to provide a service that implements the interface &amp;lt;idl&amp;gt;com.sun.star.awt.XContainerWindowEventHandler&amp;lt;/idl&amp;gt;. The component is then installed like any other component. That is, one provides for example a jar file or a dll and adds the proper entries to the &amp;#039;&amp;#039;manifest.xml&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
The action events are processed in the &amp;lt;idlm&amp;gt;com.sun.star.awt.XContainerWindowEventHandler:callHandlerMethod&amp;lt;/idlm&amp;gt;. This method takes three parameters. The first is a &amp;lt;idls&amp;gt;com.sun.star.awt.XWindow&amp;lt;/idls&amp;gt; which represents the dialog for which the event is called. The second is an &amp;lt;code&amp;gt;com.sun.star.uno.Any&amp;lt;/code&amp;gt;, which describes the actual event. Therefore the IDL calls it the “EventObject”. The last parameter is a string which contains a “method name”. This method may not exists, but the name identifies an action which should be invoked. &lt;br /&gt;
&lt;br /&gt;
In case of our previously mentioned events the method is called with the respective &amp;lt;idls&amp;gt;com.sun.star.awt.XWindow&amp;lt;/idls&amp;gt; interface, a method name of “external_event”, and an any containing either “ok”, “back”, or “initialize”. For example, the java code could look like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Java&amp;quot;&amp;gt;&lt;br /&gt;
public boolean callHandlerMethod(com.sun.star.awt.XWindow aWindow,&lt;br /&gt;
  Object aEventObject, String sMethod)&lt;br /&gt;
  throws WrappedTargetException {&lt;br /&gt;
  if (sMethod.equals(&amp;quot;external_event&amp;quot;) ){&lt;br /&gt;
    try {&lt;br /&gt;
      return handleExternalEvent(aWindow, aEventObject);&lt;br /&gt;
    } catch (com.sun.star.uno.RuntimeException re) {&lt;br /&gt;
    throw re;&lt;br /&gt;
    } catch (com.sun.star.uno.Exception e) {&lt;br /&gt;
      throw new WrappedTargetException(sMethod, this, e);&lt;br /&gt;
    }&lt;br /&gt;
  } else if (sMethod.equals(&amp;quot;another_method_name&amp;quot;) ){&lt;br /&gt;
  ...&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private boolean handleExternalEvent(com.sun.star.awt.XWindow aWindow, Object aEventObject)&lt;br /&gt;
  throws com.sun.star.uno.Exception {&lt;br /&gt;
  try {&lt;br /&gt;
    String sMethod = AnyConverter.toString(aEventObject);&lt;br /&gt;
    if (sMethod.equals(&amp;quot;ok&amp;quot;)) {&lt;br /&gt;
      saveData(aWindow);&lt;br /&gt;
    } else if (sMethod.equals(&amp;quot;back&amp;quot;) || sMethod.equals(&amp;quot;initialize&amp;quot;)) {&lt;br /&gt;
      loadData(aWindow);&lt;br /&gt;
    }&lt;br /&gt;
  } catch (com.sun.star.lang.IllegalArgumentException e) {&lt;br /&gt;
    throw new com.sun.star.lang.IllegalArgumentException(&lt;br /&gt;
      &amp;quot;Method external_event requires a string in the event object argument.&amp;quot;, this,&lt;br /&gt;
      (short) -1);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;  &lt;br /&gt;
The method &amp;lt;code&amp;gt;saveData&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;loadData&amp;lt;/code&amp;gt; need to be implemented according to where the data actually is stored. In most cases the {{PRODUCTNAME}}&amp;#039;s registry is a suitable place. Then, of course, one needs to provide a configuration schema (requires an appropriate entry in the &amp;#039;&amp;#039;manifest.xml&amp;#039;&amp;#039; as well). &lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;oor:component-schema xmlns:oor=&amp;quot;http://openoffice.org/2001/registry&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; oor:name=&amp;quot;ExtensionData&amp;quot; oor:package=&amp;quot;org.openoffice.desktop.deployment.options&amp;quot; xml:lang=&amp;quot;en-US&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;info&amp;gt;&lt;br /&gt;
    &amp;lt;author&amp;gt;&amp;lt;/author&amp;gt;&lt;br /&gt;
    &amp;lt;desc&amp;gt;Contains the options data used for the test extensions.&amp;lt;/desc&amp;gt;&lt;br /&gt;
  &amp;lt;/info&amp;gt;&lt;br /&gt;
  &amp;lt;templates&amp;gt;&lt;br /&gt;
    &amp;lt;group oor:name=&amp;quot;Leaf&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;info&amp;gt;&lt;br /&gt;
        &amp;lt;desc&amp;gt;The data for one leaf.&amp;lt;/desc&amp;gt;&lt;br /&gt;
      &amp;lt;/info&amp;gt;&lt;br /&gt;
      &amp;lt;prop oor:name=&amp;quot;String0&amp;quot; oor:type=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;value&amp;gt;&amp;lt;/value&amp;gt;&lt;br /&gt;
      &amp;lt;/prop&amp;gt;&lt;br /&gt;
      &amp;lt;prop oor:name=&amp;quot;String1&amp;quot; oor:type=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;value&amp;gt;&amp;lt;/value&amp;gt;&lt;br /&gt;
      &amp;lt;/prop&amp;gt;&lt;br /&gt;
      &amp;lt;prop oor:name=&amp;quot;String2&amp;quot; oor:type=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;value&amp;gt;&amp;lt;/value&amp;gt;&lt;br /&gt;
      &amp;lt;/prop&amp;gt;&lt;br /&gt;
      &amp;lt;prop oor:name=&amp;quot;String3&amp;quot; oor:type=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;value&amp;gt;&amp;lt;/value&amp;gt;&lt;br /&gt;
      &amp;lt;/prop&amp;gt;&lt;br /&gt;
      &amp;lt;prop oor:name=&amp;quot;String4&amp;quot; oor:type=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;value&amp;gt;&amp;lt;/value&amp;gt;&lt;br /&gt;
      &amp;lt;/prop&amp;gt;&lt;br /&gt;
    &amp;lt;/group&amp;gt;&lt;br /&gt;
  &amp;lt;/templates&amp;gt;&lt;br /&gt;
  &amp;lt;component&amp;gt;&lt;br /&gt;
    &amp;lt;group oor:name=&amp;quot;Leaves&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;node-ref oor:name=&amp;quot;Writer1&amp;quot; oor:node-type=&amp;quot;Leaf&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;node-ref oor:name=&amp;quot;Writer2&amp;quot; oor:node-type=&amp;quot;Leaf&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;!-- .... --&amp;gt;&lt;br /&gt;
    &amp;lt;/group&amp;gt;&lt;br /&gt;
  &amp;lt;/component&amp;gt;&lt;br /&gt;
&amp;lt;/oor:component-schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Please make sure that the package (&amp;lt;code&amp;gt;oor:package&amp;lt;/code&amp;gt;) together with the name (&amp;lt;code&amp;gt;oor:name&amp;lt;/code&amp;gt;) for this schema are unique. For example, it should start with YOUR reversed domain name (do not use &amp;lt;code&amp;gt;org.openoffice&amp;lt;/code&amp;gt; in your code), followed by the product name and other values which together uniquely identify this registry node. &lt;br /&gt;
&lt;br /&gt;
In the example I have defined a group “Leaves”, which contains several entries and which are all of the same type. Each entry holds the data for one options page. In this case, each options page may provide five different strings.&lt;br /&gt;
&lt;br /&gt;
If a new version of the extension uses the same schema, then data, which have been entered by a user for the previous version, will be automatically applied for the new version. If this is not wanted then one need to provide a new schema. In our case we could just change the attribute oor:component-schema@ oor:name to a value, for example, ExtensionData2.&lt;br /&gt;
&lt;br /&gt;
Now the question is, how one can access the controls on the options page in order to set the data or read from them. The following code example shows the whole service as Java implementation. Please have look at the &amp;lt;code&amp;gt;loadData&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;saveData&amp;lt;/code&amp;gt; method. Please be aware that is is only an example and may need to be adapted to personal needs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package com.sun.star.comp.extensionoptions;&lt;br /&gt;
&lt;br /&gt;
import com.sun.star.lib.uno.helper.Factory;&lt;br /&gt;
import com.sun.star.lib.uno.helper.WeakBase;&lt;br /&gt;
import com.sun.star.lang.XMultiComponentFactory;&lt;br /&gt;
import com.sun.star.lang.XSingleComponentFactory;&lt;br /&gt;
import com.sun.star.lang.XMultiServiceFactory;&lt;br /&gt;
import com.sun.star.lang.WrappedTargetException;&lt;br /&gt;
import com.sun.star.lang.IllegalArgumentException;&lt;br /&gt;
import com.sun.star.lang.XInitialization;&lt;br /&gt;
import com.sun.star.lang.XTypeProvider;&lt;br /&gt;
import com.sun.star.lang.XServiceInfo;&lt;br /&gt;
import com.sun.star.lang.WrappedTargetException;&lt;br /&gt;
import com.sun.star.uno.UnoRuntime;&lt;br /&gt;
import com.sun.star.uno.Any;&lt;br /&gt;
import com.sun.star.uno.AnyConverter;&lt;br /&gt;
import com.sun.star.uno.XComponentContext;&lt;br /&gt;
import com.sun.star.uno.Exception;&lt;br /&gt;
import com.sun.star.registry.XRegistryKey;&lt;br /&gt;
import com.sun.star.awt.XContainerWindowEventHandler;&lt;br /&gt;
import com.sun.star.awt.XControl;&lt;br /&gt;
import com.sun.star.awt.XControlModel;&lt;br /&gt;
import com.sun.star.awt.XControlContainer;&lt;br /&gt;
import com.sun.star.container.XNameAccess;&lt;br /&gt;
import com.sun.star.container.NoSuchElementException;&lt;br /&gt;
import com.sun.star.beans.PropertyValue;&lt;br /&gt;
import com.sun.star.beans.PropertyState;&lt;br /&gt;
import com.sun.star.beans.XPropertySet;&lt;br /&gt;
import com.sun.star.beans.UnknownPropertyException;&lt;br /&gt;
import com.sun.star.beans.PropertyVetoException;&lt;br /&gt;
import com.sun.star.util.XChangesBatch;&lt;br /&gt;
&lt;br /&gt;
/** A handler which supports multiple options pages which all&lt;br /&gt;
* have the same controls.&lt;br /&gt;
*/&lt;br /&gt;
public class OptionsEventHandler {&lt;br /&gt;
&lt;br /&gt;
public static class _OptionsEventHandler extends WeakBase&lt;br /&gt;
implements XServiceInfo, XContainerWindowEventHandler {&lt;br /&gt;
&lt;br /&gt;
static private final String __serviceName =&lt;br /&gt;
&amp;quot;com.sun.star.comp.extensionoptions.OptionsEventHandler&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
private XComponentContext m_cmpCtx;&lt;br /&gt;
&lt;br /&gt;
private XMultiComponentFactory m_xMCF;&lt;br /&gt;
&lt;br /&gt;
private XNameAccess m_xAccessLeaves;&lt;br /&gt;
&lt;br /&gt;
/**Names of supported options pages. &lt;br /&gt;
*/&lt;br /&gt;
private String[] m_arWindowNames = {&lt;br /&gt;
&amp;quot;Writer1&amp;quot;, &amp;quot;Writer2&amp;quot;, &amp;quot;Writer3&amp;quot;, &amp;quot;Calc1&amp;quot;, &amp;quot;Calc2&amp;quot;, &amp;quot;Calc3&amp;quot;,&lt;br /&gt;
&amp;quot;Draw1&amp;quot;, &amp;quot;Draw2&amp;quot;, &amp;quot;Draw3&amp;quot;, &amp;quot;Node1_1&amp;quot;, &amp;quot;Node1_2&amp;quot;, &amp;quot;Node1_3&amp;quot;,&lt;br /&gt;
&amp;quot;Node2_1&amp;quot;, &amp;quot;Node2_2&amp;quot;, &amp;quot;Node2_3&amp;quot;, &amp;quot;Node3_1&amp;quot;, &amp;quot;Node3_2&amp;quot;, &amp;quot;Node3_3&amp;quot;};&lt;br /&gt;
&lt;br /&gt;
/**Names of the controls which are supported by this handler. All these&lt;br /&gt;
*controls must have a &amp;quot;Text&amp;quot; property.&lt;br /&gt;
*/&lt;br /&gt;
private String[] m_arStringControls = {&lt;br /&gt;
&amp;quot;String0&amp;quot;, &amp;quot;String1&amp;quot;, &amp;quot;String2&amp;quot;, &amp;quot;String3&amp;quot;, &amp;quot;String4&amp;quot;};&lt;br /&gt;
&lt;br /&gt;
public _OptionsEventHandler(XComponentContext xCompContext) {&lt;br /&gt;
  m_cmpCtx = xCompContext;&lt;br /&gt;
  m_xMCF = m_cmpCtx.getServiceManager(); &lt;br /&gt;
&lt;br /&gt;
  //Create the com.sun.star.configuration.ConfigurationUpdateAccess&lt;br /&gt;
  //for the registry node which contains the data for our option&lt;br /&gt;
  //pages.&lt;br /&gt;
  XMultiServiceFactory xConfig;&lt;br /&gt;
  try {&lt;br /&gt;
    xConfig = (XMultiServiceFactory) UnoRuntime.queryInterface(&lt;br /&gt;
      XMultiServiceFactory.class,&lt;br /&gt;
      m_cmpCtx.getServiceManager().createInstanceWithContext(&lt;br /&gt;
        &amp;quot;com.sun.star.configuration.ConfigurationProvider&amp;quot;, m_cmpCtx));&lt;br /&gt;
  } catch (com.sun.star.uno.Exception e) {&lt;br /&gt;
    e.printStackTrace();&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  //One argument for creating the ConfigurationUpdateAccess is the &amp;quot;nodepath&amp;quot;.&lt;br /&gt;
  //Our nodepath point to the node of which the direct subnodes represent the&lt;br /&gt;
  //different options pages.&lt;br /&gt;
  Object[] args = new Object[1];&lt;br /&gt;
  args[0] = new PropertyValue(&lt;br /&gt;
    &amp;quot;nodepath&amp;quot;, 0, &amp;quot;/org.openoffice.desktop.deployment.options.ExtensionData/Leaves&amp;quot;,&lt;br /&gt;
    PropertyState.DIRECT_VALUE);&lt;br /&gt;
&lt;br /&gt;
  //We get the com.sun.star.container.XNameAccess from the instance of&lt;br /&gt;
  //ConfigurationUpdateAccess and save it for later use.&lt;br /&gt;
  try {&lt;br /&gt;
    m_xAccessLeaves = (XNameAccess) UnoRuntime.queryInterface(&lt;br /&gt;
      XNameAccess.class, xConfig.createInstanceWithArguments(&lt;br /&gt;
        &amp;quot;com.sun.star.configuration.ConfigurationUpdateAccess&amp;quot;, args));&lt;br /&gt;
&lt;br /&gt;
  } catch (com.sun.star.uno.Exception e) {&lt;br /&gt;
    e.printStackTrace();&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/** This method returns an array of all supported service names.&lt;br /&gt;
* @return Array of supported service names.&lt;br /&gt;
*/&lt;br /&gt;
public String[] getSupportedServiceNames() {&lt;br /&gt;
  return getServiceNames();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/** This method is a simple helper function to used in the&lt;br /&gt;
* static component initialisation functions as well as in&lt;br /&gt;
* getSupportedServiceNames.&lt;br /&gt;
*/&lt;br /&gt;
public static String[] getServiceNames() {&lt;br /&gt;
  String[] sSupportedServiceNames = { __serviceName };&lt;br /&gt;
  return sSupportedServiceNames;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/** This method returns true, if the given service will be&lt;br /&gt;
* supported by the component.&lt;br /&gt;
* @param sServiceName Service name.&lt;br /&gt;
* @return True, if the given service name will be supported.&lt;br /&gt;
*/&lt;br /&gt;
public boolean supportsService( String sServiceName ) {&lt;br /&gt;
  return sServiceName.equals( __serviceName );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/** Return the class name of the component.&lt;br /&gt;
* @return Class name of the component.&lt;br /&gt;
*/&lt;br /&gt;
public String getImplementationName() {&lt;br /&gt;
  return _OptionsEventHandler.class.getName();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//XContainerWindowEventHandler&lt;br /&gt;
public boolean callHandlerMethod(com.sun.star.awt.XWindow aWindow,&lt;br /&gt;
  Object aEventObject, String sMethod)&lt;br /&gt;
  throws WrappedTargetException {&lt;br /&gt;
  if (sMethod.equals(&amp;quot;external_event&amp;quot;) ){&lt;br /&gt;
    try {&lt;br /&gt;
      return handleExternalEvent(aWindow, aEventObject);&lt;br /&gt;
    } catch (com.sun.star.uno.RuntimeException re) {&lt;br /&gt;
      throw re;&lt;br /&gt;
    } catch (com.sun.star.uno.Exception e) {&lt;br /&gt;
      throw new WrappedTargetException(sMethod, this, e);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // return false when event was not handled &lt;br /&gt;
  return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//XContainerWindowEventHandler&lt;br /&gt;
public String[] getSupportedMethodNames() {&lt;br /&gt;
  return new String[] {&amp;quot;external_event&amp;quot;};&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private boolean handleExternalEvent(com.sun.star.awt.XWindow aWindow, Object aEventObject)&lt;br /&gt;
  throws com.sun.star.uno.Exception {&lt;br /&gt;
  try {&lt;br /&gt;
    String sMethod = AnyConverter.toString(aEventObject);&lt;br /&gt;
    if (sMethod.equals(&amp;quot;ok&amp;quot;)) {&lt;br /&gt;
      saveData(aWindow);&lt;br /&gt;
    } else if (sMethod.equals(&amp;quot;back&amp;quot;) || sMethod.equals(&amp;quot;initialize&amp;quot;)) {&lt;br /&gt;
      loadData(aWindow);&lt;br /&gt;
    }&lt;br /&gt;
    } catch (com.sun.star.lang.IllegalArgumentException e) {&lt;br /&gt;
      throw new com.sun.star.lang.IllegalArgumentException(&lt;br /&gt;
        &amp;quot;Method external_event requires a string in the event object argument.&amp;quot;,&lt;br /&gt;
        this, (short) -1);&lt;br /&gt;
    }&lt;br /&gt;
  return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void saveData(com.sun.star.awt.XWindow aWindow)&lt;br /&gt;
  throws com.sun.star.lang.IllegalArgumentException, com.sun.star.uno.Exception { &lt;br /&gt;
&lt;br /&gt;
  //Determine the name of the options page. This serves two purposes. First, if this&lt;br /&gt;
  //options page is supported by this handler and second we use the name two locate&lt;br /&gt;
  //the corresponding data in the registry.&lt;br /&gt;
  String sWindowName = getWindowName(aWindow);&lt;br /&gt;
  if (sWindowName == null)&lt;br /&gt;
    throw new com.sun.star.lang.IllegalArgumentException(&lt;br /&gt;
      &amp;quot;This window is not supported by this handler&amp;quot;, this, (short) -1);&lt;br /&gt;
 &lt;br /&gt;
  //To access the separate controls of the window we need to obtain the&lt;br /&gt;
  //XControlContainer from the window implementation&lt;br /&gt;
  XControlContainer xContainer = (XControlContainer) UnoRuntime.queryInterface(&lt;br /&gt;
    XControlContainer.class, aWindow);&lt;br /&gt;
  if (xContainer == null)&lt;br /&gt;
    throw new com.sun.star.uno.Exception(&lt;br /&gt;
      &amp;quot;Could not get XControlContainer from window.&amp;quot;, this);&lt;br /&gt;
&lt;br /&gt;
  //This is an implementation which will be used for several options pages&lt;br /&gt;
  //which all have the same controls. m_arStringControls is an array which&lt;br /&gt;
  //contains the names. &lt;br /&gt;
  for (int i = 0; i &amp;lt; m_arStringControls.length; i++) {&lt;br /&gt;
    //To obtain the data from the controls we need to get their model.&lt;br /&gt;
    //First get the respective control from the XControlContainer.&lt;br /&gt;
    XControl xControl = xContainer.getControl(m_arStringControls[i]);&lt;br /&gt;
&lt;br /&gt;
    //This generic handler and the corresponding registry schema support&lt;br /&gt;
    //up to five text controls. However, if a options page does not use all&lt;br /&gt;
    //five controls then we will not complain here.&lt;br /&gt;
    if (xControl == null)&lt;br /&gt;
      continue;&lt;br /&gt;
&lt;br /&gt;
    //From the control we get the model, which in turn supports the&lt;br /&gt;
    //XPropertySet interface, which we finally use to get the data from&lt;br /&gt;
    //the control. &lt;br /&gt;
    XPropertySet xProp = (XPropertySet) UnoRuntime.queryInterface(&lt;br /&gt;
      XPropertySet.class, xControl.getModel());&lt;br /&gt;
&lt;br /&gt;
    if (xProp == null)&lt;br /&gt;
      throw new com.sun.star.uno.Exception(&lt;br /&gt;
        &amp;quot;Could not get XPropertySet from control.&amp;quot;, this);&lt;br /&gt;
    //Get the &amp;quot;Text&amp;quot; property.&lt;br /&gt;
    Object aText = xProp.getPropertyValue(&amp;quot;Text&amp;quot;);&lt;br /&gt;
    String sValue = null;&lt;br /&gt;
&lt;br /&gt;
    //The value is still contained in a com.sun.star.uno.Any - so convert it.&lt;br /&gt;
    try {&lt;br /&gt;
      sValue = AnyConverter.toString(aText);&lt;br /&gt;
    } catch (com.sun.star.lang.IllegalArgumentException e) {&lt;br /&gt;
      throw new com.sun.star.lang.IllegalArgumentException(&lt;br /&gt;
        &amp;quot;Wrong property type.&amp;quot;, this, (short) -1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //Now we have the actual string value of the control. What we need now is&lt;br /&gt;
    //the XPropertySet of the respective property in the registry, so that we&lt;br /&gt;
    //can store the value.&lt;br /&gt;
    //To access the registry we have previously created a service instance&lt;br /&gt;
    //of com.sun.star.configuration.ConfigurationUpdateAccess which supports&lt;br /&gt;
    //com.sun.star.container.XNameAccess. The XNameAccess is used to get the&lt;br /&gt;
    //particular registry node which represents this options page.&lt;br /&gt;
    //Fortunately the name of the window is the same as the registry node.&lt;br /&gt;
    XPropertySet xLeaf = (XPropertySet) UnoRuntime.queryInterface(&lt;br /&gt;
      XPropertySet.class, m_xAccessLeaves.getByName(sWindowName));&lt;br /&gt;
    if (xLeaf == null)&lt;br /&gt;
      throw new com.sun.star.uno.Exception(&lt;br /&gt;
        &amp;quot;XPropertySet not supported.&amp;quot;, this);&lt;br /&gt;
&lt;br /&gt;
    //Finally we can set the value&lt;br /&gt;
    xLeaf.setPropertyValue(m_arStringControls[i], sValue);&lt;br /&gt;
  }&lt;br /&gt;
  //Committing the changes will cause or changes to be written to the registry.&lt;br /&gt;
  XChangesBatch xUpdateCommit = &lt;br /&gt;
  (XChangesBatch) UnoRuntime.queryInterface(XChangesBatch.class, m_xAccessLeaves);&lt;br /&gt;
  xUpdateCommit.commitChanges();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void loadData(com.sun.star.awt.XWindow aWindow)&lt;br /&gt;
  throws com.sun.star.uno.Exception {&lt;br /&gt;
&lt;br /&gt;
  //Determine the name of the window. This serves two purposes. First, if this&lt;br /&gt;
  //window is supported by this handler and second we use the name two locate&lt;br /&gt;
  //the corresponding data in the registry.&lt;br /&gt;
  String sWindowName = getWindowName(aWindow);&lt;br /&gt;
  if (sWindowName == null)&lt;br /&gt;
    throw new com.sun.star.lang.IllegalArgumentException(&lt;br /&gt;
      &amp;quot;The window is not supported by this handler&amp;quot;, this, (short) -1);&lt;br /&gt;
&lt;br /&gt;
  //To acces the separate controls of the window we need to obtain the&lt;br /&gt;
  //XControlContainer from window implementation&lt;br /&gt;
  XControlContainer xContainer = (XControlContainer) UnoRuntime.queryInterface(&lt;br /&gt;
    XControlContainer.class, aWindow);&lt;br /&gt;
  if (xContainer == null)&lt;br /&gt;
    throw new com.sun.star.uno.Exception(&lt;br /&gt;
      &amp;quot;Could not get XControlContainer from window.&amp;quot;, this);&lt;br /&gt;
&lt;br /&gt;
  //This is an implementation which will be used for several options pages&lt;br /&gt;
  //which all have the same controls. m_arStringControls is an array which&lt;br /&gt;
  //contains the names.&lt;br /&gt;
  for (int i = 0; i &amp;lt; m_arStringControls.length; i++) {&lt;br /&gt;
    //load the values from the registry&lt;br /&gt;
    //To access the registry we have previously created a service instance&lt;br /&gt;
    //of com.sun.star.configuration.ConfigurationUpdateAccess which supports&lt;br /&gt;
    //com.sun.star.container.XNameAccess. We obtain now the section&lt;br /&gt;
    //of the registry which is assigned to this options page.&lt;br /&gt;
    XPropertySet xLeaf = (XPropertySet) UnoRuntime.queryInterface(&lt;br /&gt;
      XPropertySet.class, m_xAccessLeaves.getByName(sWindowName));&lt;br /&gt;
    if (xLeaf == null)&lt;br /&gt;
      throw new com.sun.star.uno.Exception(&lt;br /&gt;
        &amp;quot;XPropertySet not supported.&amp;quot;, this);&lt;br /&gt;
&lt;br /&gt;
    //The properties in the registry have the same name as the respective&lt;br /&gt;
    //controls. We use the names now to obtain the property values.&lt;br /&gt;
    Object aValue = xLeaf.getPropertyValue(m_arStringControls[i]);&lt;br /&gt;
&lt;br /&gt;
    //Now that we have the value we need to set it at the corresponding&lt;br /&gt;
    //control in the window. The XControlContainer, which we obtained earlier&lt;br /&gt;
    //is the means to get hold of all the controls.&lt;br /&gt;
    XControl xControl = xContainer.getControl(m_arStringControls[i]);&lt;br /&gt;
&lt;br /&gt;
    //This generic handler and the corresponding registry schema support&lt;br /&gt;
    //up to five text controls. However, if a options page does not use all&lt;br /&gt;
    //five controls then we will not complain here.&lt;br /&gt;
    if (xControl == null)&lt;br /&gt;
      continue;&lt;br /&gt;
&lt;br /&gt;
    //From the control we get the model, which in turn supports the&lt;br /&gt;
    //XPropertySet interface, which we finally use to set the data at the&lt;br /&gt;
    //control&lt;br /&gt;
    XPropertySet xProp = (XPropertySet) UnoRuntime.queryInterface(&lt;br /&gt;
      XPropertySet.class, xControl.getModel());&lt;br /&gt;
&lt;br /&gt;
    if (xProp == null)&lt;br /&gt;
      throw new com.sun.star.uno.Exception(&lt;br /&gt;
        &amp;quot;Could not get XPropertySet from control.&amp;quot;, this);&lt;br /&gt;
&lt;br /&gt;
    //This handler supports only text controls, which are named &amp;quot;Pattern Field&amp;quot;&lt;br /&gt;
    //in the dialog editor. We set the &amp;quot;Text&amp;quot; property.&lt;br /&gt;
    xProp.setPropertyValue(&amp;quot;Text&amp;quot;, aValue);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Checks if the name property of the window is one of the supported names and returns&lt;br /&gt;
//always a valid string or null&lt;br /&gt;
private String getWindowName(com.sun.star.awt.XWindow aWindow)&lt;br /&gt;
throws com.sun.star.uno.Exception {&lt;br /&gt;
&lt;br /&gt;
  if (aWindow == null)&lt;br /&gt;
    new com.sun.star.lang.IllegalArgumentException(&lt;br /&gt;
      &amp;quot;Method external_event requires that a window is passed as argument&amp;quot;,&lt;br /&gt;
      this, (short) -1);&lt;br /&gt;
&lt;br /&gt;
  //We need to get the control model of the window. Therefore the first step is&lt;br /&gt;
  //to query for it.&lt;br /&gt;
  XControl xControlDlg = (XControl) UnoRuntime.queryInterface(&lt;br /&gt;
    XControl.class, aWindow);&lt;br /&gt;
&lt;br /&gt;
  if (xControlDlg == null)&lt;br /&gt;
    throw new com.sun.star.uno.Exception(&lt;br /&gt;
      &amp;quot;Cannot obtain XControl from XWindow in method external_event.&amp;quot;);&lt;br /&gt;
  //Now get model&lt;br /&gt;
  XControlModel xModelDlg = xControlDlg.getModel();&lt;br /&gt;
&lt;br /&gt;
  if (xModelDlg == null)&lt;br /&gt;
    throw new com.sun.star.uno.Exception(&lt;br /&gt;
      &amp;quot;Cannot obtain XControlModel from XWindow in method external_event.&amp;quot;, this);&lt;br /&gt;
  //The model itself does not provide any information except that its&lt;br /&gt;
  //implementation supports XPropertySet which is used to access the data.&lt;br /&gt;
  XPropertySet xPropDlg = (XPropertySet) UnoRuntime.queryInterface(&lt;br /&gt;
    XPropertySet.class, xModelDlg);&lt;br /&gt;
  if (xPropDlg == null)&lt;br /&gt;
    throw new com.sun.star.uno.Exception(&lt;br /&gt;
      &amp;quot;Cannot obtain XPropertySet from window in method external_event.&amp;quot;, this);&lt;br /&gt;
&lt;br /&gt;
  //Get the &amp;quot;Name&amp;quot; property of the window&lt;br /&gt;
  Object aWindowName = xPropDlg.getPropertyValue(&amp;quot;Name&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  //Get the string from the returned com.sun.star.uno.Any&lt;br /&gt;
  String sName = null;&lt;br /&gt;
  try {&lt;br /&gt;
    sName = AnyConverter.toString(aWindowName);&lt;br /&gt;
  } catch (com.sun.star.lang.IllegalArgumentException e) {&lt;br /&gt;
    throw new com.sun.star.uno.Exception(&lt;br /&gt;
      &amp;quot;Name - property of window is not a string.&amp;quot;, this);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  //Eventually we can check if we this handler can &amp;quot;handle&amp;quot; this options page.&lt;br /&gt;
  //The class has a member m_arWindowNames which contains all names of windows&lt;br /&gt;
  //for which it is intended&lt;br /&gt;
  for (int i = 0; i &amp;lt; m_arWindowNames.length; i++) {&lt;br /&gt;
    if (m_arWindowNames[i].equals(sName)) {&lt;br /&gt;
      return sName;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  return null;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
* Gives a factory for creating the service.&lt;br /&gt;
* This method is called by the &amp;lt;code&amp;gt;JavaLoader&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;p&amp;gt;&lt;br /&gt;
* @return returns a &amp;lt;code&amp;gt;XSingleComponentFactory&amp;lt;/code&amp;gt; for creating&lt;br /&gt;
* the component&lt;br /&gt;
* @param sImplName the name of the implementation for which a&lt;br /&gt;
* service is desired&lt;br /&gt;
* @see com.sun.star.comp.loader.JavaLoader&lt;br /&gt;
*/&lt;br /&gt;
public static XSingleComponentFactory __getComponentFactory(String sImplName)&lt;br /&gt;
{&lt;br /&gt;
XSingleComponentFactory xFactory = null;&lt;br /&gt;
&lt;br /&gt;
if ( sImplName.equals( _OptionsEventHandler.class.getName() ) )&lt;br /&gt;
xFactory = Factory.createComponentFactory(_OptionsEventHandler.class,&lt;br /&gt;
_OptionsEventHandler.getServiceNames());&lt;br /&gt;
&lt;br /&gt;
return xFactory;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
* Writes the service information into the given registry key.&lt;br /&gt;
* This method is called by the &amp;lt;code&amp;gt;JavaLoader&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;p&amp;gt;&lt;br /&gt;
* @return returns true if the operation succeeded&lt;br /&gt;
* @param regKey the registryKey&lt;br /&gt;
* @see com.sun.star.comp.loader.JavaLoader&lt;br /&gt;
*/&lt;br /&gt;
public static boolean __writeRegistryServiceInfo(XRegistryKey regKey) {&lt;br /&gt;
return Factory.writeRegistryServiceInfo(_OptionsEventHandler.class.getName(),&lt;br /&gt;
_OptionsEventHandler.getServiceNames(),&lt;br /&gt;
regKey);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/** This method is a member of the interface for initializing an object&lt;br /&gt;
* directly after its creation.&lt;br /&gt;
* @param object This array of arbitrary objects will be passed to the&lt;br /&gt;
* component after its creation.&lt;br /&gt;
* @throws Exception Every exception will not be handled, but will be&lt;br /&gt;
* passed to the caller.&lt;br /&gt;
*/&lt;br /&gt;
public void initialize( Object[] object )&lt;br /&gt;
throws com.sun.star.uno.Exception {&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{PDL1}}&lt;br /&gt;
[[Category: Extensions]]&lt;/div&gt;</summary>
		<author><name>129.157.136.33</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Documentation/DevGuide/FirstSteps/First_Steps&amp;diff=64081</id>
		<title>Documentation/DevGuide/FirstSteps/First Steps</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Documentation/DevGuide/FirstSteps/First_Steps&amp;diff=64081"/>
		<updated>2007-06-15T07:06:07Z</updated>

		<summary type="html">&lt;p&gt;129.157.136.33: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FirstSteps|FirstSteps=block|PrevNext=block|Prev=OpenOffice.org_2.0_Developer%27s_Guide|Next=Programming}}&lt;br /&gt;
This chapter shows you the first steps when using the {{PRODUCTNAME}} API. Following these steps is essential to understand and use the chapters about {{PRODUCTNAME}} documents such as [[Text Documents]], [[Spreadsheet Documents]], and [[Drawing Documents and Presentation Documents|Drawings]]. After you have successfully done the first steps, you can go directly to the other chapters of this manual. &lt;br /&gt;
The focus of the first steps will be Java, but other languages are covered as well. If you want to use {{PRODUCTNAME}} Basic afterwards, please refer to the chapters [[OpenOffice.org Basic and Dialogs]] and [[UNO Language Bindings]]. The usage of C++ is described in [[C++ Language Binding]].&lt;br /&gt;
&lt;br /&gt;
[[Special:Whatlinkshere/Development Concepts]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Development Concepts]]&lt;/div&gt;</summary>
		<author><name>129.157.136.33</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Documentation/DevGuide/FirstSteps/First_Steps&amp;diff=64080</id>
		<title>Documentation/DevGuide/FirstSteps/First Steps</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Documentation/DevGuide/FirstSteps/First_Steps&amp;diff=64080"/>
		<updated>2007-06-15T07:05:43Z</updated>

		<summary type="html">&lt;p&gt;129.157.136.33: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FirstSteps|FirstSteps=block|PrevNext=block|Prev=OpenOffice.org_2.0_Developer%27s_Guide|Next=Programming}}&lt;br /&gt;
This chapter shows you the first steps when using the {{PRODUCTNAME}} API. Following these steps is essential to understand and use the chapters about {{PRODUCTNAME}} documents such as [[Text Documents]], [[Spreadsheet Documents]], and [[Drawing Documents and Presentation Documents|Drawings]]. After you have successfully done the first steps, you can go directly to the other chapters of this manual. &lt;br /&gt;
The focus of the first steps will be Java, but other languages are covered as well. If you want to use {{PRODUCTNAME}} Basic afterwards, please refer to the chapters [[OpenOffice.org Basic and Dialogs]] and [[UNO Language Bindings]]. The usage of C++ is described in [[C++ Language Binding]].&lt;br /&gt;
&lt;br /&gt;
[[Special:Whatlinkshere/First steps]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Development Concepts]]&lt;/div&gt;</summary>
		<author><name>129.157.136.33</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Template:Documentation/DevGuide/ProUNOTOC&amp;diff=66122</id>
		<title>Template:Documentation/DevGuide/ProUNOTOC</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Template:Documentation/DevGuide/ProUNOTOC&amp;diff=66122"/>
		<updated>2007-06-13T11:28:00Z</updated>

		<summary type="html">&lt;p&gt;129.157.136.33: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#addscript:src=sayhi|type=js|pos=head}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;PrevNext&amp;quot; style=&amp;quot;margin-bottom: 10px; font-size: xx-small; height: 2em; display: {{{PrevNext|none}}}&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;DevGuidePrev&amp;quot; style=&amp;quot;float:left;&amp;quot;&amp;gt;[[{{{Prev}}}|&amp;amp;lt; Previous Page]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;DevGuideNext&amp;quot; style=&amp;quot;float:right;&amp;quot;&amp;gt;[[{{{Next}}}|Next Page &amp;amp;gt;]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;tocwrapper&amp;quot; style=&amp;quot;float:right;  max-width: 200px; padding: 0px; border: 5px solid #fff; margin-left: 40px; margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;DevGuideProUNO&amp;quot; style=&amp;quot;border:1px solid #666; padding: 2px; font-size: xx-small; background-color: #EEE;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;tochead&amp;quot; style=&amp;quot;background-color: #FFF; padding: 2px;font-weight: bold; text-align: center;&amp;quot;&amp;gt;[[OpenOffice.org 2.0 Developer&amp;#039;s Guide]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;tocbody&amp;quot; style=&amp;quot;padding: 6px;&amp;quot;&amp;gt;&lt;br /&gt;
[[Professional UNO]]&lt;br /&gt;
&amp;lt;div id=&amp;quot;ProUNO&amp;quot; style=&amp;quot;display:{{{ProUNO|none}}};&amp;quot;&amp;gt;&lt;br /&gt;
* [[Introduction Professional UNO|Introduction]]&lt;br /&gt;
* [[API Concepts]]&lt;br /&gt;
&amp;lt;div id=ProUNO2a&amp;quot; style=&amp;quot;display:{{{ProUNO2a|none}}};margin-left: 12px;&amp;quot;&amp;gt;&lt;br /&gt;
* [[Data Types]]&lt;br /&gt;
* [[Understanding the API Reference]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* [[UNO Concepts]]&lt;br /&gt;
&amp;lt;div id=ProUNO2b&amp;quot; style=&amp;quot;display:{{{ProUNO2b|none}}};margin-left: 12px;&amp;quot;&amp;gt;&lt;br /&gt;
* [[UNO Interprocess Connections]]&lt;br /&gt;
* [[Service Manager and Component Context]]&lt;br /&gt;
* [[Using UNO Interfaces]]&lt;br /&gt;
* [[Properties]]&lt;br /&gt;
* [[Collections and Containers]]&lt;br /&gt;
* [[Event Model]]&lt;br /&gt;
* [[Exception Handling]]&lt;br /&gt;
* [[Lifetime of UNO objects]]&lt;br /&gt;
* [[Object Identity]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* [[UNO Language Bindings]]&lt;br /&gt;
&amp;lt;div id=ProUNO2c&amp;quot; style=&amp;quot;display:{{{ProUNO2c|none}}};margin-left: 12px;&amp;quot;&amp;gt;&lt;br /&gt;
* [[Java Language Binding]]&lt;br /&gt;
* [[C++ Language Binding]]&lt;br /&gt;
* [[OpenOffice.org Basic]]&lt;br /&gt;
* [[Automation Bridge]]&lt;br /&gt;
&amp;lt;div id=&amp;quot;ABridgeSvcMgr&amp;quot; style=&amp;quot;display:{{{ABridgeSvcMgr|none}}};margin-left: 12px;&amp;quot;&amp;gt;&lt;br /&gt;
* [[The Service Manager Component]]&lt;br /&gt;
* [[Using UNO from Automation]]&lt;br /&gt;
* [[Using Automation Objects from UNO]]&lt;br /&gt;
* [[Type Mappings]]&lt;br /&gt;
* [[Automation Objects with UNO Interfaces]]&lt;br /&gt;
* [[DCOM]]&lt;br /&gt;
* [[The Bridge Services]]&lt;br /&gt;
* [[Unsupported COM Features]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* [[CLI Language Binding]]&lt;br /&gt;
&amp;lt;div id=&amp;quot;CLIBinding&amp;quot; style=&amp;quot;display:{{{CLIBinding|none}}};margin-left: 12px;&amp;quot;&amp;gt;&lt;br /&gt;
* [[The Language Binding DLLs]]&lt;br /&gt;
* [[Type Mapping CLI|Type Mapping]]&lt;br /&gt;
* [[Lifetime Management and Obtaining Interfaces]]&lt;br /&gt;
* [[Writing Client Programs]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;tochead&amp;quot; style=&amp;quot;background-color: #FFF; padding: 2px;font-weight: bold; text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
[[Development Concepts|&amp;amp;larr;Previous Chapter]] &amp;amp;mdash; [[Writing UNO Components|Next Chapter&amp;amp;rarr;]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>129.157.136.33</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Template:Documentation/DevGuide/ProUNOTOC&amp;diff=66121</id>
		<title>Template:Documentation/DevGuide/ProUNOTOC</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Template:Documentation/DevGuide/ProUNOTOC&amp;diff=66121"/>
		<updated>2007-06-13T11:27:12Z</updated>

		<summary type="html">&lt;p&gt;129.157.136.33: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#addscript:src=sayhi|type=js|pos=head}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;PrevNext&amp;quot; style=&amp;quot;margin-bottom: 10px; font-size: xx-small; height: 2em; display: {{{PrevNext|none}}}&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;DevGuidePrev&amp;quot; style=&amp;quot;float:left;&amp;quot;&amp;gt;[[{{{Prev}}}|&amp;amp;lt; Previous Page]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;DevGuideNext&amp;quot; style=&amp;quot;float:right;&amp;quot;&amp;gt;[[{{{Next}}}|Next Page &amp;amp;gt;]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;tocwrapper&amp;quot; style=&amp;quot;float:right;  max-width: 200px; padding: 0px; border: 5px solid #fff; margin-left: 40px; margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;DevGuideProUNO&amp;quot; style=&amp;quot;border:1px solid #666; padding: 2px; font-size: xx-small; background-color: #EEE;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;tochead&amp;quot; style=&amp;quot;background-color: #FFF; padding: 2px;font-weight: bold; text-align: center;&amp;quot;&amp;gt;[[OpenOffice.org 2.0 Developer&amp;#039;s Guide]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;tocbody&amp;quot; style=&amp;quot;padding: 6px;&amp;quot;&amp;gt;&lt;br /&gt;
[[Professional UNO]]&lt;br /&gt;
&amp;lt;div id=&amp;quot;ProUNO&amp;quot; style=&amp;quot;display:{{{ProUNO|none}}};&amp;quot;&amp;gt;&lt;br /&gt;
* [[Introduction Professional UNO|Introduction]]&lt;br /&gt;
* [[API Concepts]]&lt;br /&gt;
&amp;lt;div id=ProUNO2a&amp;quot; style=&amp;quot;display:{{{ProUNO2a|none}}};margin-left: 12px;&amp;quot;&amp;gt;&lt;br /&gt;
* [[Data Types]]&lt;br /&gt;
* [[Understanding the API Reference]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* [[UNO Concepts]]&lt;br /&gt;
&amp;lt;div id=ProUNO2b&amp;quot; style=&amp;quot;display:{{{ProUNO2b|none}}};margin-left: 12px;&amp;quot;&amp;gt;&lt;br /&gt;
* [[UNO Interprocess Connections]]&lt;br /&gt;
* [[Service Manager and Component Context]]&lt;br /&gt;
* [[Using UNO Interfaces]]&lt;br /&gt;
* [[Properties]]&lt;br /&gt;
* [[Collections and Containers]]&lt;br /&gt;
* [[Event Model]]&lt;br /&gt;
* [[Exception Handling]]&lt;br /&gt;
* [[Lifetime of UNO objects]]&lt;br /&gt;
* [[Object Identity]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* [[UNO Language Bindings]]&lt;br /&gt;
&amp;lt;div id=ProUNO2c&amp;quot; style=&amp;quot;display:{{{ProUNO2c|none}}};margin-left: 15px;&amp;quot;&amp;gt;&lt;br /&gt;
* [[Java Language Binding]]&lt;br /&gt;
* [[C++ Language Binding]]&lt;br /&gt;
* [[OpenOffice.org Basic]]&lt;br /&gt;
* [[Automation Bridge]]&lt;br /&gt;
&amp;lt;div id=&amp;quot;ABridgeSvcMgr&amp;quot; style=&amp;quot;display:{{{ABridgeSvcMgr|none}}};margin-left: 15px;&amp;quot;&amp;gt;&lt;br /&gt;
* [[The Service Manager Component]]&lt;br /&gt;
* [[Using UNO from Automation]]&lt;br /&gt;
* [[Using Automation Objects from UNO]]&lt;br /&gt;
* [[Type Mappings]]&lt;br /&gt;
* [[Automation Objects with UNO Interfaces]]&lt;br /&gt;
* [[DCOM]]&lt;br /&gt;
* [[The Bridge Services]]&lt;br /&gt;
* [[Unsupported COM Features]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* [[CLI Language Binding]]&lt;br /&gt;
&amp;lt;div id=&amp;quot;CLIBinding&amp;quot; style=&amp;quot;display:{{{CLIBinding|none}}};margin-left: 15px;&amp;quot;&amp;gt;&lt;br /&gt;
* [[The Language Binding DLLs]]&lt;br /&gt;
* [[Type Mapping CLI|Type Mapping]]&lt;br /&gt;
* [[Lifetime Management and Obtaining Interfaces]]&lt;br /&gt;
* [[Writing Client Programs]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;tochead&amp;quot; style=&amp;quot;background-color: #FFF; padding: 2px;font-weight: bold; text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
[[Development Concepts|&amp;amp;larr;Previous Chapter]] &amp;amp;mdash; [[Writing UNO Components|Next Chapter&amp;amp;rarr;]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>129.157.136.33</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Documentation/DevGuide/FirstSteps/First_Steps&amp;diff=64059</id>
		<title>Documentation/DevGuide/FirstSteps/First Steps</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Documentation/DevGuide/FirstSteps/First_Steps&amp;diff=64059"/>
		<updated>2007-04-12T09:29:47Z</updated>

		<summary type="html">&lt;p&gt;129.157.136.33: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DevGuide|Chapter1=block}}&lt;br /&gt;
This chapter shows you the first steps when using the [PRODUCTNAME] API. Following these steps is essential to understand and use the chapters about [PRODUCTNAME] documents such as [CHAPTER:Text], [CHAPTER:Spreadsheet] and [CHAPTER:Drawing]. After you have successfully done the first steps, you can go directly to the other chapters of this manual. &lt;br /&gt;
The focus of the first steps will be Java, but other languages are covered as well. If you want to use [PRODUCTNAME] Basic afterwards, please refer to the chapters [CHAPTER:BasicAndDialogs.FirstSteps] and [CHAPTER:ProfUNO.LangBind.Basic]. The usage of C++ is described in [CHAPTER:ProfUNO.LangBind.Cpp].&lt;br /&gt;
&lt;br /&gt;
[[Category: Development Concepts]]&lt;/div&gt;</summary>
		<author><name>129.157.136.33</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Documentation/DevGuide/FirstSteps/First_Steps&amp;diff=64058</id>
		<title>Documentation/DevGuide/FirstSteps/First Steps</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Documentation/DevGuide/FirstSteps/First_Steps&amp;diff=64058"/>
		<updated>2007-04-12T09:05:31Z</updated>

		<summary type="html">&lt;p&gt;129.157.136.33: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DevGuide|Chapter1=block}}&lt;br /&gt;
{{review}}&lt;br /&gt;
This chapter shows you the first steps when using the [PRODUCTNAME] API. Following these steps is essential to understand and use the chapters about [PRODUCTNAME] documents such as [CHAPTER:Text], [CHAPTER:Spreadsheet] and [CHAPTER:Drawing]. After you have successfully done the first steps, you can go directly to the other chapters of this manual. &lt;br /&gt;
The focus of the first steps will be Java, but other languages are covered as well. If you want to use [PRODUCTNAME] Basic afterwards, please refer to the chapters [CHAPTER:BasicAndDialogs.FirstSteps] and [CHAPTER:ProfUNO.LangBind.Basic]. The usage of C++ is described in [CHAPTER:ProfUNO.LangBind.Cpp].&lt;br /&gt;
&lt;br /&gt;
[[Category: Development Concepts]]&lt;/div&gt;</summary>
		<author><name>129.157.136.33</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Documentation/DevGuide/FirstSteps/First_Steps&amp;diff=64057</id>
		<title>Documentation/DevGuide/FirstSteps/First Steps</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Documentation/DevGuide/FirstSteps/First_Steps&amp;diff=64057"/>
		<updated>2007-04-12T09:02:42Z</updated>

		<summary type="html">&lt;p&gt;129.157.136.33: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC1|toc11=block}}&lt;br /&gt;
{{review}}&lt;br /&gt;
This chapter shows you the first steps when using the [PRODUCTNAME] API. Following these steps is essential to understand and use the chapters about [PRODUCTNAME] documents such as [CHAPTER:Text], [CHAPTER:Spreadsheet] and [CHAPTER:Drawing]. After you have successfully done the first steps, you can go directly to the other chapters of this manual. &lt;br /&gt;
The focus of the first steps will be Java, but other languages are covered as well. If you want to use [PRODUCTNAME] Basic afterwards, please refer to the chapters [CHAPTER:BasicAndDialogs.FirstSteps] and [CHAPTER:ProfUNO.LangBind.Basic]. The usage of C++ is described in [CHAPTER:ProfUNO.LangBind.Cpp].&lt;br /&gt;
&lt;br /&gt;
[[Category: Development Concepts]]&lt;/div&gt;</summary>
		<author><name>129.157.136.33</name></author>
	</entry>
</feed>