<?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=Holgerbrandl</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=Holgerbrandl"/>
	<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/wiki/Special:Contributions/Holgerbrandl"/>
	<updated>2026-10-17T17:30:21Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Drawing_framework&amp;diff=78708</id>
		<title>Drawing framework</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Drawing_framework&amp;diff=78708"/>
		<updated>2008-05-25T10:49:43Z</updated>

		<summary type="html">&lt;p&gt;Holgerbrandl: fixed resource id of slidepane&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
The drawing framework is a framework used by [[Impress]] and [[Draw]] for the coordinated activation and deactivation of resources like views, panes, and tool bars.&lt;br /&gt;
&lt;br /&gt;
The primary goal in designing the drawing framework was to turn Impress and Draw into modular applications that can easily be extended by additional features.&lt;br /&gt;
This should be possible dynamically through extensions, not only statically at compile time.  The drawing framework is accessible to extensions that are deployed via the extension manager (menu entry Tools-&amp;gt;ExtensionManager...).  This allows an extension to provide for instance a new view and to control when to show this view and in which pane to display it.  This can be done in any programming language for which there is UNO API support.  The [Presenter Screen|Presenter Screen extension] is one example for this.&lt;br /&gt;
&lt;br /&gt;
The design of the drawing framework addresses the following goals:&lt;br /&gt;
&lt;br /&gt;
*ease of use&lt;br /&gt;
&lt;br /&gt;
*flexibility&lt;br /&gt;
&lt;br /&gt;
*extensibility&lt;br /&gt;
&lt;br /&gt;
*abstraction from underlying frameworks&lt;br /&gt;
&lt;br /&gt;
The drawing framework can be seen as a resource management system, where the resources are panes, views, tool bars, commands (slots).  The configuration controller synchronizes activation and deactivation of resources.  It has its name from the configuration, which describes the set of active resources, i.e. the set of visible panes, views, and tool bars.  Synchronization means that when two or more resources are to be activated or deactivated at the same time then the configuration controller&lt;br /&gt;
*orders activations and deactivations according to dependencies between resources (e.g. when a viewand a pane are to be activated then the pane is activated before the view so that the view has access to the pane),&lt;br /&gt;
*tries to minimize the overall time and&lt;br /&gt;
*reduces visual artifacts, i.e. flickering.&lt;br /&gt;
&lt;br /&gt;
The drawing framework is implemented on top of and abstracts from existing framework functionality provides mostly by the SFX2 and [[Framework]] projects.&lt;br /&gt;
&lt;br /&gt;
There is a [[Drawing Framework Glossary|glossary]] for the drawing framework.  The API of the drawing framework is documented [http://api.openoffice.org/docs/common/ref/com/sun/star/drawing/framework/module-ix.html here].&lt;br /&gt;
&lt;br /&gt;
==Current State==&lt;br /&gt;
With the experience from the implementation of the [[Presenter_Screen|Presenter Screen extension]] the first incarnation of the drawing framework (that is described by older versions of this page, see history for [http://wiki.services.openoffice.org/w/index.php?title=Drawing_framework&amp;amp;oldid=45696 this] or older versions) has been cleaned up and simplified into its current form.&lt;br /&gt;
&lt;br /&gt;
The drawing framework is used by [[Impress]] and [[Draw]] for managing views, panes, and one or two toolbars.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Framework Design==&lt;br /&gt;
&lt;br /&gt;
The following sections describe the inner structure of the drawing framework in more detail.&lt;br /&gt;
It starts with the set of supported resources, the ResourceIds that identify resources, and configurations that describe the set of active or requested resources.&lt;br /&gt;
Last comes a description of the update process that involves the actual activation and deactivation of resources.&lt;br /&gt;
&lt;br /&gt;
===Resources===&lt;br /&gt;
&lt;br /&gt;
The drawing framework has been desinged for four types of resources:&lt;br /&gt;
&lt;br /&gt;
* Panes&lt;br /&gt;
&lt;br /&gt;
* Views&lt;br /&gt;
&lt;br /&gt;
* Tool Bars&lt;br /&gt;
&lt;br /&gt;
* Command groups&lt;br /&gt;
&lt;br /&gt;
While the first three need little explanation (the little explanation is done in the API documentation) the concept of [[Drawing Framework Glossary#Command Groups|command groups]] is not used (yet) anywhere else.  A command group is a collection of commands realized by a module that implements at least the com::sun::star::frame::XDispatch interface and implements one or more commands (that to some are known as slots).&lt;br /&gt;
&lt;br /&gt;
A resource is identified by a non-empty set of URLs that describe the actual resource and its dependency on other resources.  One URL is called the resource URL and defines the type of the resource.  A possibly empty set of anchor URLs specifies a set of resources to which the one in question is anchored.  Panes for example act as containers for views and thus are their anchors: the resource URL of the left slide sorter in the left pane is &amp;lt;pre&amp;gt;private:resource/view/SlideSorter&amp;lt;/pre&amp;gt;.  Its anchor is the left pane with the URL being &amp;lt;pre&amp;gt;private:resource/floater/LeftImpressPane&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Here, the first part after private:resource/ specifies the type of resource:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pane&amp;#039;&amp;#039;&amp;#039; for panes&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;view&amp;#039;&amp;#039;&amp;#039; for views&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;toolbar&amp;#039;&amp;#039;&amp;#039; for tool bars&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;command&amp;#039;&amp;#039;&amp;#039; for command groups&lt;br /&gt;
The final part of the URL defines the actual resource.&lt;br /&gt;
&lt;br /&gt;
===ResourceId===&lt;br /&gt;
Each resource is identified by an object that implements the&lt;br /&gt;
[http://api.openoffice.org/docs/common/ref/com/sun/star/drawing/framework/ResourceId.html com::sun::star::drawing::framework::ResourceId] service with its [http://api.openoffice.org/docs/common/ref/com/sun/star/drawing/framework/XResourceId.html com::sun::star::drawing::framework::XResourceId] interface.  The XResourceId interface gives access to a set of URLs which specify the resource.  There is one URL returned by the getResourceURL() function that defines the type of the resource.  A possibly empty set of URLs returned by getAnchorURLs() specifies the anchor resource.&lt;br /&gt;
&lt;br /&gt;
Each resource in a configuration has to have a unique resource id.  Two resource ids may have the same resource URLs but then their anchors must not be the same.  An example for this would be the slide sorter being shown in two different panes.  Alternatively two resource may have the same anchor but then must not have the same resource URL.  An example for this is the view tab bar and the view in the center pane.  The anchor of both is the center pane.&lt;br /&gt;
&lt;br /&gt;
Lets take the slide sorter as an example for this.  In the left pane, the slide sorter bar is described by the ResourceId&lt;br /&gt;
&amp;lt;pre&amp;gt;private:resource/floater/LeftImpressPane, private:resource/view/SlideSorter&amp;lt;/pre&amp;gt;&lt;br /&gt;
The slide sorter view in the center pane id described by the ResourceId&lt;br /&gt;
&amp;lt;pre&amp;gt;private:resource/pane/CenterPane, private:resource/view/SlideSorter&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Panes are the typical anchor resources.  They do not have an anchor, therefore getAnchorURLs() returns an empty list for them.  An example for an anchor that is not a pane is the view tab bar.  It is linked to the center pane.  It is the anchor for its tabs that each represent one view that may by displayed in the center pane.  The resource ids of the two left most tabs are for example&lt;br /&gt;
&amp;lt;pre&amp;gt;private:resource/pane/CenterPane, private:resource/toolbar/ViewTabBar, private:resource/view/ImpressView&lt;br /&gt;
private:resource/pane/CenterPane, private:resource/toolbar/ViewTabBar, private:resource/view/OutlineView&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ResourceId service provides four functions for creating ResourceId objects.  These are createEmpty() and create() for creating an empty resource id and one that has no anchor.  The createWithAnchor() variant creates a resource whose anchor is given as ResourceId object.  When the later is empty then the resulting resource could have been created with create().  Finally createWithAnchorURL takes two URLs, one for the actual resource and one for its anchor.  These four variants cover the most common usages but it may be extended in the future (note drawing framework API is not yet marked as published and may be modified.)&lt;br /&gt;
&lt;br /&gt;
===Known Resources===&lt;br /&gt;
A list of known resources can be found [[Drawing Framework Resources|here]].&lt;br /&gt;
&lt;br /&gt;
===Configuration===&lt;br /&gt;
&lt;br /&gt;
A [[Drawing Framework Glossary#Configuration|configuration]] describes a set&lt;br /&gt;
of resources.  There are two important configurations, which ideally are&lt;br /&gt;
identical:&lt;br /&gt;
&lt;br /&gt;
*The [[Drawing Framework Glossary#Current Configuration|current configuration]] describes the set of currently active resources. The term &amp;#039;&amp;#039;active&amp;#039;&amp;#039; can mean different things for different types of resources.  For panes, views, and tool bars it means that they are visible. For a command group it means that that group is ready to process incoming slot calls.&lt;br /&gt;
&lt;br /&gt;
*The [[Drawing Framework Glossary#Requested Configuration|requested configuration]] describes the set of  resources that have been requested to be active either directly by the user or by the application in response to some user input.&lt;br /&gt;
&lt;br /&gt;
Usually the two configurations differ only temporarily after a&lt;br /&gt;
new request for the activation or deactivation of a resource has been made&lt;br /&gt;
but not yet been processed.  Eventually the current configuration is updated to&lt;br /&gt;
reflect the requested configuration.  There may, however, be circumstances,&lt;br /&gt;
that do not allow a resource to be activated or (less likely) to be deactivated.&lt;br /&gt;
One reason for this is that some resources are created asynchronously and&lt;br /&gt;
become available only after a little time.&lt;br /&gt;
&lt;br /&gt;
See the  [[Drawing Framework Glossary#Configuration|configuration]] glossary&lt;br /&gt;
entry for examples.&lt;br /&gt;
&lt;br /&gt;
It is possible obtain a copy of the requested configuration and restore it&lt;br /&gt;
later.  This allows to undo temporary changes.  For example, the in-place&lt;br /&gt;
slide show uses this feature to temporarily hide the side panes and to&lt;br /&gt;
restore them when the show ends.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Three layer design===&lt;br /&gt;
&lt;br /&gt;
The drawing framework consists of controllers, factories, and application&lt;br /&gt;
logic modules.  These  are located on three layers.  The assignment to the&lt;br /&gt;
different layers depends on the knowledge about different aspects of the&lt;br /&gt;
resource management:&lt;br /&gt;
&lt;br /&gt;
;Application Layer:The [[Drawing Framework Glossary#Application Layer|application layer]] controls &amp;#039;&amp;#039;&amp;#039;when&amp;#039;&amp;#039;&amp;#039; to activate or deactivate a resource.  This layer contains the application logic.  For example the Impress application uses a module that is responsible for activating or deactivating the slide sorter bar depending on the view that is displayed in the center pane.&lt;br /&gt;
&lt;br /&gt;
;Synchronization Layer:The [[Drawing Framework Glossary#Synchronization Layer|synchronization layer]] uses the XConfigurationController to &amp;#039;&amp;#039;&amp;#039;synchronize&amp;#039;&amp;#039;&amp;#039; the requests from the application layer with the resource controllers in the resource layer. It has no detailed knowledge about individual resources nor about the application logic.&lt;br /&gt;
&lt;br /&gt;
;Resource Layer:The resource factories in the [[Drawing Framework Glossary#Resource Layer|resource layer]] know &amp;#039;&amp;#039;&amp;#039;how&amp;#039;&amp;#039;&amp;#039; to activate or deactivate resources.  The XResourceControllers are called by the XConfigurationController to update the the current configuration so that it looks like the requested configuration.&lt;br /&gt;
&lt;br /&gt;
[[image:DrawingFrameworkDesign.png|The different parts of the drawing framework are organized in three layers]]&lt;br /&gt;
&lt;br /&gt;
The image illustrates the three layer design for the Impress application.  The ImpressModule is created by the ImpressViewShell when the user creates a new Impress document.  The ImpressModule creates the other modules in the application layer that control different aspect of the application.  For example they watch for user input and switch to different views in ther center pane accordingly.&lt;br /&gt;
&lt;br /&gt;
The modules in the application layer communicate with the XConfgurationController in the synchronization layer to make requests for the activation or deactivation of panes and views.  The XConfigurationController modifies the RequestedConfiguration accordingly. &lt;br /&gt;
&lt;br /&gt;
Eventually the CurrentConfiguration is updated.  The XConfigurationController then determines the order in which to activate and deactivate resources and calls the resource factories in that order to create resources that are activated or to release resources that are deactivated.&lt;br /&gt;
&lt;br /&gt;
Resource factories can implement a cache to store deactivated resources.  Some resources like the slide sorter bar are activated and deactivated frequently.  Caching it may speed this up.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Two phase updates===&lt;br /&gt;
&lt;br /&gt;
The drawing framework negotiates between modules implementing application&lt;br /&gt;
logic that want to show or hide a resource on one side and the resource&lt;br /&gt;
factories on the other side.  The negotiation process is iterative: the&lt;br /&gt;
activation request of a resource made by one application logic module may&lt;br /&gt;
cause the activation request of another resource made by a second module.&lt;br /&gt;
For example, when the user switches the view in the center pane to the&lt;br /&gt;
outline view, then the task pane is deactivated.&lt;br /&gt;
&lt;br /&gt;
The negation process is split into two phases, one&lt;br /&gt;
for collecting a list of all the necessary changes and the second for&lt;br /&gt;
updating the GUI to reflect these changes.&lt;br /&gt;
&lt;br /&gt;
;Negotiation Phase: The negotiation phase is triggered by the initial request, for example the switch of the view in the center pane.  In this phase only the the requested configuration is modified.  The requested change is stored in the requested configuration and then is broadcasted.  Listeners may react by making further requests for activation or deactivation of other resources.  These are again stored in the requested configuration and broadcasted and may lead to even more requests.  All requests are put into a queue which is processed until there are no more pending requests.&lt;br /&gt;
&lt;br /&gt;
;Update Phase:When all requests have been processed and the the requested configuration describes a new consistent state of the GUI then the second, the &amp;#039;&amp;#039;&amp;#039;update phase&amp;#039;&amp;#039;&amp;#039; is started.  In this phase only the current configuration is modified.&lt;br /&gt;
:That is, the requested configuration is not modified directly in this phase.  The application can of course request the activation or deactivation of resources.  Therefore, in the update phase a copy of the requested configuration is used which remains unchanged during the update.&lt;br /&gt;
:The different resource factories are asked to create or relase resources so that eventually the current configuration looks like the requested configuration.  Every activation and deactivation is broadcasted like the requests for the activations and deactivations where.&lt;br /&gt;
&lt;br /&gt;
It is the task of the configuration controller to order the activations and deactivations according to dependencies between affected resources and to optimize the update&lt;br /&gt;
phase with respect to time and visual artifacts/flickering.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Extensibility==&lt;br /&gt;
The drawing framework is designed to be extensible with regard to the set of known resources and to the application logic.&lt;br /&gt;
&lt;br /&gt;
For a new resource you have to provide a factory and register it at the configuration manager.  An example could be a new view or a new tool bar.&lt;br /&gt;
&lt;br /&gt;
For a new piece of application logic add a listener to the configuration controller and react to activations or deactivations of relevant resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Implementation and Examples==&lt;br /&gt;
The examples in the following sections show how to use the drawing framework to request and access resources and how to react to changes of the current configuration.  Note that the code is C++ like pseudo code that can not be compiled as is.&lt;br /&gt;
&lt;br /&gt;
===FrameworkHelper===&lt;br /&gt;
The ::sd::framework::FrameworkHelper class provides two things&lt;br /&gt;
* the most frequently used resource URLs so that you do not have to remember them, have trouble with resource allocation, or are able to misspell resource names, and&lt;br /&gt;
* some helper functions that simplify the work with the UNO based drawing framework from inside core code.&lt;br /&gt;
The FrameworkHelper is a multi singleton.  Its Instance() method returns for a ViewShellBase object the associated FrameworkHelper object.  The functions provided cover&lt;br /&gt;
* mapping between sd::ViewShell::ShellType and view resource URL,&lt;br /&gt;
* obtain view objects for their URLs or ResourceIds,&lt;br /&gt;
* making requests for the activation or deactivation of resources,&lt;br /&gt;
* locking configuration updates,&lt;br /&gt;
* waiting for certain events to make asynchronous requests synchronous.&lt;br /&gt;
&lt;br /&gt;
One example for that is a request for the activation of the slide sorter bar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FrameworkHelper::Instance(GetViewShellBase()).RequestView(&lt;br /&gt;
    ResourceId::createWithAnchorURL(&lt;br /&gt;
        aComponentContext,&lt;br /&gt;
        FrameworkHelper::msSlideSorterURL,&lt;br /&gt;
        FrameworkHelper::msLeftImpressPaneURL));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Drawing Framework API===&lt;br /&gt;
The following subsections provide a short introduction of the UNO API of the drawing framework.  For details please refer to the API documentation (not yet available.)&lt;br /&gt;
&lt;br /&gt;
====Getting Access to the Drawing Framework====&lt;br /&gt;
Using the UNO API of the drawing framework to access active resources or to request the activation or deactivation of resources starts with the [http://api.openoffice.org/docs/common/ref/com/sun/star/frame/XController.html XController] of an [[Impress]] or a [[Draw]] document.  From this you can obtain the [http://api.openoffice.org/docs/common/ref/com/sun/star/drawing/framework/XControllerManager.html XControllerManager] and from that the [http://api.openoffice.org/docs/common/ref/com/sun/star/drawing/framework/XConfigurationController.html XConfigurationController].  The XConfigurationController is the main access point for making requests and for accessing resources. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
using ::com::sun::star::uno;&lt;br /&gt;
using ::com::sun::star::frame;&lt;br /&gt;
using ::com::sun::star::drawing::framework;&lt;br /&gt;
&lt;br /&gt;
Reference&amp;lt;XController&amp;gt; xController;              // This is regarded as given.&lt;br /&gt;
Reference&amp;lt;XComponentContext&amp;gt; xComponentContext;  // This also is regarded as given.&lt;br /&gt;
&lt;br /&gt;
Reference&amp;lt;XControllerManager&amp;gt; xCM (xController, UNO_QUERY_THROW);&lt;br /&gt;
Reference&amp;lt;XConfigurationController&amp;gt; xCC (xCM-&amp;gt;getConfigurationController());&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Requesting a Resource Activation====&lt;br /&gt;
Once you have obtained access to the XConfigurationController, making requests to activate or deactivate resources is simple.  The following code requests the activation of the slide sorter bar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xCC-&amp;gt;requestResourceActivation(&lt;br /&gt;
    ResourceId::createWithAnchorURL(&lt;br /&gt;
        xComponentContext,&lt;br /&gt;
        FrameworkHelper::msSlideSorterURL,&lt;br /&gt;
        FrameworkHelper::msLeftImpressPaneURL));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If you compare this to the code bove that uses the FrameworkHelper to accomplish&lt;br /&gt;
the same thing then you see, that the FrameworkHelper only hides the&lt;br /&gt;
connection from the ViewShellBase to the XConfigurationController.  The rest&lt;br /&gt;
of the call is basically the same.&lt;br /&gt;
&lt;br /&gt;
However, the drawing framework does not provide too many automatisms on this&lt;br /&gt;
layer (that is the task of the modules in the application layer) so the pane&lt;br /&gt;
in which to show the slide sorter has to be requested as well.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xCC-&amp;gt;requestResourceActivation(&lt;br /&gt;
    ResourceId::create(&lt;br /&gt;
        xComponentContext,&lt;br /&gt;
        FrameworkHelper::msLeftImpressPaneURL));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note the use of ResourceId::create() instead of ResourceId::createWithAnchorURL(). This is because a pane, in contrast to the view that was requested earlier, is not bound to any other resource.&lt;br /&gt;
&lt;br /&gt;
The two requests should be executed together.  An intermediate update of the&lt;br /&gt;
current configuration is not necessary and would lead to an annoying display&lt;br /&gt;
of an empty window before the slide sorter bar is properly shown.  The&lt;br /&gt;
probability that this happens is low but not zero.  Therefore it is good&lt;br /&gt;
practice to lock the XConfigurationController while the two requests are&lt;br /&gt;
made.  This prevents unwanted updates.  You can call the lock() and unlock()&lt;br /&gt;
methods directly but it is safer to use the ConfigurationController::Lock&lt;br /&gt;
inner class to do that.  Adding this and bringing the two requests into the&lt;br /&gt;
logical order you get&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    ::sd::framework::ConfigurationController::Lock(xCC);&lt;br /&gt;
    xCC-&amp;gt;requestResourceActivation(&lt;br /&gt;
        ResourceId::create(&lt;br /&gt;
            aComponentContext,&lt;br /&gt;
            FrameworkHelper::msLeftImpressPaneURL));&lt;br /&gt;
    xCC-&amp;gt;requestResourceActivation(&lt;br /&gt;
        ResourceId::createWithAnchorURL(&lt;br /&gt;
            aComponentContext,&lt;br /&gt;
            FrameworkHelper::msSlideSorterURL,&lt;br /&gt;
            FrameworkHelper::msLeftImpressPaneURL));&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Accessing a Resource====&lt;br /&gt;
If you want to access an active resource directly then you have to ask the&lt;br /&gt;
XConfigurationController for it.  Suppose you are interested in accessing the window of the left&lt;br /&gt;
pane that shows the slide sorter bar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Reference&amp;lt;XPane&amp;gt; xPane (xCC-&amp;gt;getResource(&lt;br /&gt;
    ResourceId::create(&lt;br /&gt;
        aComponentContext,&lt;br /&gt;
        FrameworkHelper::msLeftImpressPaneURL),&lt;br /&gt;
    UNO_QUERY);&lt;br /&gt;
if (xPane.is())&lt;br /&gt;
{&lt;br /&gt;
    Reference&amp;lt;XWindow&amp;gt; xWindow (xPane-&amp;gt;getWindow());&lt;br /&gt;
    if (xWindow-&amp;gt;is())&lt;br /&gt;
    {&lt;br /&gt;
        // Do something with the window.&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Reacting to Modifications of the Configuration====&lt;br /&gt;
When you want to implement application logic then you have to react to user input by requesting changes to the current configuration.  User input can come in many ways.  Here we cover only the indirect way of (requested) changes of the current configuration made by others.&lt;br /&gt;
&lt;br /&gt;
The following code turns on the slide sorter bar when the center pane is switched to&lt;br /&gt;
the edit view, outline view, or notes view and turns it off for all other views.  The drawing framework contains a module in the application layer that does essentially the same.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class SlideSorterBarManager : public XConfigurationChangeListener {&lt;br /&gt;
public:&lt;br /&gt;
Reference&amp;lt;XConfigurationController&amp;gt; mxCC;&lt;br /&gt;
&lt;br /&gt;
void SlideSorterBarManager (const Reference&amp;lt;XConfigurationController&amp;gt;&amp;amp; rxCC)&lt;br /&gt;
    : mxCC(rxCC)&lt;br /&gt;
{&lt;br /&gt;
    Reference&amp;lt;XConfigurationControllerBroadcaster&amp;gt; xCCB (mxCC, UNO_QUERY);&lt;br /&gt;
    xCCB-&amp;gt;addConfigurationChangeListener(&lt;br /&gt;
        this,&lt;br /&gt;
        FramworkHelper::msResourceActivationRequestEvent,&lt;br /&gt;
        Any());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
virtual void notifyConfigurationChange (const ConfigurationChangeEvent&amp;amp; rEvent)&lt;br /&gt;
{&lt;br /&gt;
    if (rEvent.Type.equals(FrameworkHelper::msResourceActivationRequestEvent))&lt;br /&gt;
    {&lt;br /&gt;
        if (rEvent.ResourceId.is())&lt;br /&gt;
         &amp;amp;&amp;amp; rEvent.ResourceId-&amp;gt;isBoundToURL(FrameworkHelper::msCenterPaneURL,DIRECT))&lt;br /&gt;
        {&lt;br /&gt;
            // A resource has been requested for the center pane.&lt;br /&gt;
            ::rtl::OUString sResourceURL (rEvent.ResourceId-&amp;gt;getResourceURL());&lt;br /&gt;
            if (sResourceURL.equals(FrameworkHelper::msImpressViewURL)&lt;br /&gt;
             || sResourceURL.equals(FrameworkHelper::msOutlineViewURL)&lt;br /&gt;
             || sResourceURL.equals(FrameworkHelper::msNotesViewURL))&lt;br /&gt;
            {&lt;br /&gt;
                // Show the slide sorter bar.&lt;br /&gt;
                xCC-&amp;gt;requestResourceActivation(&lt;br /&gt;
                    ResourceId::create(&lt;br /&gt;
                        aComponentContext,&lt;br /&gt;
                        FrameworkHelper::msLeftImpressPaneURL));&lt;br /&gt;
                xCC-&amp;gt;requestResourceActivation(&lt;br /&gt;
                    ResourceId::createWithAnchorURL(&lt;br /&gt;
                        aComponentContext,&lt;br /&gt;
                        FrameworkHelper::msSlideSorterURL,&lt;br /&gt;
                        FrameworkHelper::msLeftImpressPaneURL));&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                // Hide the slide sorter bar for the handout view, the slide&lt;br /&gt;
                // sorter view, and all views that where not handled above.&lt;br /&gt;
                mxCC-&amp;gt;requestResourceDeactivation(&lt;br /&gt;
                    ResourceId::createWithAnchorURL(&lt;br /&gt;
                        aComponentContext,&lt;br /&gt;
                        FrameworkHelper::msSlideSorterURL,&lt;br /&gt;
                        FrameworkHelper::msLeftImpressPaneURL));&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
There are three things to note in this code:&lt;br /&gt;
# The first &amp;#039;&amp;#039;&amp;#039;if&amp;#039;&amp;#039;&amp;#039; statement in the notifyConfigurationChange() method is not really necessary because the listener is registered only for this one event type and thus will not be called for other event types.&lt;br /&gt;
# There is no update lock surrounding the activation requests for the slide sorter bar.  This is not necessary   here, because the listener is only called during the negotiation phase.  During this whole phase the update is locked.&lt;br /&gt;
# There is only one deactivation request, the one for the view.  The request for the pane is missing.  This is because there might be other resources bound to the pane.  However, this is one of a few places where an automatism is active: when there are no resources bound to a pane when the negotiation phase ends, then the pane is deactivated.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Providing a New Resource====&lt;br /&gt;
To provide a new resource, say a SingleColorView that fills a window with a&lt;br /&gt;
single color, you have to&lt;br /&gt;
*Provide the actual view&lt;br /&gt;
*Provide a factory that creates a view object for a given XPane object&lt;br /&gt;
*Register the factory&lt;br /&gt;
*Request the new view&lt;br /&gt;
&lt;br /&gt;
A view has to support the [http://api.openoffice.org/docs/common/ref/com/sun/star/drawing/framework/XView.html css::drawing::framework::XView] interface which is&lt;br /&gt;
derived from the XResource interface.  Both interfaces are extremely simple&lt;br /&gt;
because the drawing framework does not need to know much about its&lt;br /&gt;
resources.&lt;br /&gt;
&lt;br /&gt;
The knowledge is concentrated only in the factory and of course in the&lt;br /&gt;
implementation of the new view.  Both a new resource and its factory are&lt;br /&gt;
typically deployed together so they can use private and implementation&lt;br /&gt;
language dependent means to communicate with each other and share information.&lt;br /&gt;
&lt;br /&gt;
The factory is given a ResourceId when asked for a new resource object.  For&lt;br /&gt;
the SingleColorView the ResourceId is used to look up the corresponding&lt;br /&gt;
XPane object from which the XWindow reference is obtained.  For the standard&lt;br /&gt;
panes the XPane object supports the XUnoTunnel interface which gives access&lt;br /&gt;
to the VCL Window pointer, but that is not used here.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class SingleColorViewFactory : XResourceFactory&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    virtual Reference&amp;lt;XView&amp;gt; createResource (&lt;br /&gt;
        const Reference&amp;lt;XResourceId&amp;gt;&amp;amp; rxViewId)&lt;br /&gt;
    {&lt;br /&gt;
        Reference&amp;lt;XResource&amp;gt; xView;&lt;br /&gt;
&lt;br /&gt;
        // Get the XWindow object fort the AnchorURL of the given ResourceId.&lt;br /&gt;
        Reference&amp;lt;XControllerManager&amp;gt; xCM (xController, UNO_QUERY_THROW);&lt;br /&gt;
        Reference&amp;lt;XConfigurationController&amp;gt; xCC (xCM-&amp;gt;getConfigurationController());&lt;br /&gt;
        Reference&amp;lt;XPane&amp;gt; xPane (xCC-&amp;gt;getResource(rxViewId-&amp;gt;getAnchor()), UNO_QUERY);&lt;br /&gt;
        if (xPane.is())&lt;br /&gt;
        {&lt;br /&gt;
            // Create the view for the XWindow object.&lt;br /&gt;
            Reference&amp;lt;XWindow&amp;gt; xWindow (xPane-&amp;gt;getWindow());&lt;br /&gt;
            if (xWindow.is())&lt;br /&gt;
                xView = new SingleColorView(rxViewId, xWindow);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return xView;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    virtual void releaseView (&lt;br /&gt;
        const Reference&amp;lt;XResource&amp;gt;&amp;amp; rxView)&lt;br /&gt;
    {&lt;br /&gt;
        // Do nothing.  When the caller releases its reference to the view,&lt;br /&gt;
        // then the view will be destroyed.&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class SingleColorView : drawing::framework::XView, awt::XPaintListener&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    SingleColorView(&lt;br /&gt;
        const Reference&amp;lt;XResourceId&amp;gt;&amp;amp; rxViewId,&lt;br /&gt;
        const Reference&amp;lt;XWindow&amp;gt;&amp;amp; rxWindow)&lt;br /&gt;
        : mxViewId(rxViewId)&lt;br /&gt;
    {&lt;br /&gt;
        rxWindow-&amp;gt;addPaintListener(this);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    virtual ResourceId getResourceId (void)&lt;br /&gt;
    {&lt;br /&gt;
        return maId;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    virtual void windowPaint (const awt::PaintEvent&amp;amp; rEvent)&lt;br /&gt;
    {&lt;br /&gt;
        // Paint the area specified by the event.&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
    Reference&amp;lt;XResourceId&amp;gt; mxViewId;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The factory can be registered in two ways.&lt;br /&gt;
#Dynamically by calling XViewController::addViewFactory()&lt;br /&gt;
#Statically by adding an entry to the configuration.&lt;br /&gt;
&lt;br /&gt;
For the latter you have to provide a UNO service for the view factory, say com.sun.star.drawing.framework.SingleColorViewFactory.  With&lt;br /&gt;
this, merge the following entry into the Impress.xcu file.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;node oor:name=&amp;quot;MultiPaneGUI&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;node oor:name=&amp;quot;Framework&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;node oor:name=&amp;quot;ResourceFactories&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;node oor:name=&amp;quot;F0&amp;quot; oor:op=&amp;quot;replace&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;prop oor:name=&amp;quot;ServiceName&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;value&amp;gt;com.sun.star.drawing.framework.SingleColorViewFactory&amp;lt;/value&amp;gt;&lt;br /&gt;
        &amp;lt;/prop&amp;gt;&lt;br /&gt;
        &amp;lt;node oor:name=&amp;quot;ResourceList&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;node oor:name=&amp;quot;R0&amp;quot; oor:op=&amp;quot;replace&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;prop oor:name=&amp;quot;URL&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;value&amp;gt;private:resource/view/SingleColorView&amp;lt;/value&amp;gt;&lt;br /&gt;
            &amp;lt;/prop&amp;gt;&lt;br /&gt;
          &amp;lt;/node&amp;gt;&lt;br /&gt;
        &amp;lt;/node&amp;gt;&lt;br /&gt;
      &amp;lt;/node&amp;gt;&lt;br /&gt;
    &amp;lt;/node&amp;gt;&lt;br /&gt;
  &amp;lt;/node&amp;gt;&lt;br /&gt;
&amp;lt;/node&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
All what remains to be done is to request the view.  To show it in the right&lt;br /&gt;
pane, instead of the task panel, make this call:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xCC-&amp;gt;requestResourceActivation(&lt;br /&gt;
    ResourceId::createWithAnchorURL(&lt;br /&gt;
        xComponentContext,&lt;br /&gt;
        ::rtl::OUString::createFromAscii(&amp;quot;private:resource/view/SingleColorView&amp;quot;),&lt;br /&gt;
        FameworkHelper::msRightPaneURL));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Impress]]&lt;/div&gt;</summary>
		<author><name>Holgerbrandl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Drawing_framework&amp;diff=78707</id>
		<title>Drawing framework</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Drawing_framework&amp;diff=78707"/>
		<updated>2008-05-25T10:48:55Z</updated>

		<summary type="html">&lt;p&gt;Holgerbrandl: fixed resource id of slidepane&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
The drawing framework is a framework used by [[Impress]] and [[Draw]] for the coordinated activation and deactivation of resources like views, panes, and tool bars.&lt;br /&gt;
&lt;br /&gt;
The primary goal in designing the drawing framework was to turn Impress and Draw into modular applications that can easily be extended by additional features.&lt;br /&gt;
This should be possible dynamically through extensions, not only statically at compile time.  The drawing framework is accessible to extensions that are deployed via the extension manager (menu entry Tools-&amp;gt;ExtensionManager...).  This allows an extension to provide for instance a new view and to control when to show this view and in which pane to display it.  This can be done in any programming language for which there is UNO API support.  The [Presenter Screen|Presenter Screen extension] is one example for this.&lt;br /&gt;
&lt;br /&gt;
The design of the drawing framework addresses the following goals:&lt;br /&gt;
&lt;br /&gt;
*ease of use&lt;br /&gt;
&lt;br /&gt;
*flexibility&lt;br /&gt;
&lt;br /&gt;
*extensibility&lt;br /&gt;
&lt;br /&gt;
*abstraction from underlying frameworks&lt;br /&gt;
&lt;br /&gt;
The drawing framework can be seen as a resource management system, where the resources are panes, views, tool bars, commands (slots).  The configuration controller synchronizes activation and deactivation of resources.  It has its name from the configuration, which describes the set of active resources, i.e. the set of visible panes, views, and tool bars.  Synchronization means that when two or more resources are to be activated or deactivated at the same time then the configuration controller&lt;br /&gt;
*orders activations and deactivations according to dependencies between resources (e.g. when a viewand a pane are to be activated then the pane is activated before the view so that the view has access to the pane),&lt;br /&gt;
*tries to minimize the overall time and&lt;br /&gt;
*reduces visual artifacts, i.e. flickering.&lt;br /&gt;
&lt;br /&gt;
The drawing framework is implemented on top of and abstracts from existing framework functionality provides mostly by the SFX2 and [[Framework]] projects.&lt;br /&gt;
&lt;br /&gt;
There is a [[Drawing Framework Glossary|glossary]] for the drawing framework.  The API of the drawing framework is documented [http://api.openoffice.org/docs/common/ref/com/sun/star/drawing/framework/module-ix.html here].&lt;br /&gt;
&lt;br /&gt;
==Current State==&lt;br /&gt;
With the experience from the implementation of the [[Presenter_Screen|Presenter Screen extension]] the first incarnation of the drawing framework (that is described by older versions of this page, see history for [http://wiki.services.openoffice.org/w/index.php?title=Drawing_framework&amp;amp;oldid=45696 this] or older versions) has been cleaned up and simplified into its current form.&lt;br /&gt;
&lt;br /&gt;
The drawing framework is used by [[Impress]] and [[Draw]] for managing views, panes, and one or two toolbars.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Framework Design==&lt;br /&gt;
&lt;br /&gt;
The following sections describe the inner structure of the drawing framework in more detail.&lt;br /&gt;
It starts with the set of supported resources, the ResourceIds that identify resources, and configurations that describe the set of active or requested resources.&lt;br /&gt;
Last comes a description of the update process that involves the actual activation and deactivation of resources.&lt;br /&gt;
&lt;br /&gt;
===Resources===&lt;br /&gt;
&lt;br /&gt;
The drawing framework has been desinged for four types of resources:&lt;br /&gt;
&lt;br /&gt;
* Panes&lt;br /&gt;
&lt;br /&gt;
* Views&lt;br /&gt;
&lt;br /&gt;
* Tool Bars&lt;br /&gt;
&lt;br /&gt;
* Command groups&lt;br /&gt;
&lt;br /&gt;
While the first three need little explanation (the little explanation is done in the API documentation) the concept of [[Drawing Framework Glossary#Command Groups|command groups]] is not used (yet) anywhere else.  A command group is a collection of commands realized by a module that implements at least the com::sun::star::frame::XDispatch interface and implements one or more commands (that to some are known as slots).&lt;br /&gt;
&lt;br /&gt;
A resource is identified by a non-empty set of URLs that describe the actual resource and its dependency on other resources.  One URL is called the resource URL and defines the type of the resource.  A possibly empty set of anchor URLs specifies a set of resources to which the one in question is anchored.  Panes for example act as containers for views and thus are their anchors: the resource URL of the left slide sorter in the left pane is &amp;lt;pre&amp;gt;private:resource/view/SlideSorter&amp;lt;/pre&amp;gt;.  Its anchor is the left pane with the URL being &amp;lt;pre&amp;gt;private:resource/floater/LeftImpressPane&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Here, the first part after private:resource/ specifies the type of resource:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pane&amp;#039;&amp;#039;&amp;#039; for panes&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;view&amp;#039;&amp;#039;&amp;#039; for views&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;toolbar&amp;#039;&amp;#039;&amp;#039; for tool bars&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;command&amp;#039;&amp;#039;&amp;#039; for command groups&lt;br /&gt;
The final part of the URL defines the actual resource.&lt;br /&gt;
&lt;br /&gt;
===ResourceId===&lt;br /&gt;
Each resource is identified by an object that implements the&lt;br /&gt;
[http://api.openoffice.org/docs/common/ref/com/sun/star/drawing/framework/ResourceId.html com::sun::star::drawing::framework::ResourceId] service with its [http://api.openoffice.org/docs/common/ref/com/sun/star/drawing/framework/XResourceId.html com::sun::star::drawing::framework::XResourceId] interface.  The XResourceId interface gives access to a set of URLs which specify the resource.  There is one URL returned by the getResourceURL() function that defines the type of the resource.  A possibly empty set of URLs returned by getAnchorURLs() specifies the anchor resource.&lt;br /&gt;
&lt;br /&gt;
Each resource in a configuration has to have a unique resource id.  Two resource ids may have the same resource URLs but then their anchors must not be the same.  An example for this would be the slide sorter being shown in two different panes.  Alternatively two resource may have the same anchor but then must not have the same resource URL.  An example for this is the view tab bar and the view in the center pane.  The anchor of both is the center pane.&lt;br /&gt;
&lt;br /&gt;
Lets take the slide sorter as an example for this.  In the left pane, the slide sorter bar is described by the ResourceId&lt;br /&gt;
&amp;lt;pre&amp;gt;private:resource/pane/LeftImpressPane, private:resource/view/SlideSorter&amp;lt;/pre&amp;gt;&lt;br /&gt;
The slide sorter view in the center pane id described by the ResourceId&lt;br /&gt;
&amp;lt;pre&amp;gt;private:resource/pane/CenterPane, private:resource/view/SlideSorter&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Panes are the typical anchor resources.  They do not have an anchor, therefore getAnchorURLs() returns an empty list for them.  An example for an anchor that is not a pane is the view tab bar.  It is linked to the center pane.  It is the anchor for its tabs that each represent one view that may by displayed in the center pane.  The resource ids of the two left most tabs are for example&lt;br /&gt;
&amp;lt;pre&amp;gt;private:resource/pane/CenterPane, private:resource/toolbar/ViewTabBar, private:resource/view/ImpressView&lt;br /&gt;
private:resource/pane/CenterPane, private:resource/toolbar/ViewTabBar, private:resource/view/OutlineView&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ResourceId service provides four functions for creating ResourceId objects.  These are createEmpty() and create() for creating an empty resource id and one that has no anchor.  The createWithAnchor() variant creates a resource whose anchor is given as ResourceId object.  When the later is empty then the resulting resource could have been created with create().  Finally createWithAnchorURL takes two URLs, one for the actual resource and one for its anchor.  These four variants cover the most common usages but it may be extended in the future (note drawing framework API is not yet marked as published and may be modified.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Known Resources===&lt;br /&gt;
A list of known resources can be found [[Drawing Framework Resources|here]].&lt;br /&gt;
&lt;br /&gt;
===Configuration===&lt;br /&gt;
&lt;br /&gt;
A [[Drawing Framework Glossary#Configuration|configuration]] describes a set&lt;br /&gt;
of resources.  There are two important configurations, which ideally are&lt;br /&gt;
identical:&lt;br /&gt;
&lt;br /&gt;
*The [[Drawing Framework Glossary#Current Configuration|current configuration]] describes the set of currently active resources. The term &amp;#039;&amp;#039;active&amp;#039;&amp;#039; can mean different things for different types of resources.  For panes, views, and tool bars it means that they are visible. For a command group it means that that group is ready to process incoming slot calls.&lt;br /&gt;
&lt;br /&gt;
*The [[Drawing Framework Glossary#Requested Configuration|requested configuration]] describes the set of  resources that have been requested to be active either directly by the user or by the application in response to some user input.&lt;br /&gt;
&lt;br /&gt;
Usually the two configurations differ only temporarily after a&lt;br /&gt;
new request for the activation or deactivation of a resource has been made&lt;br /&gt;
but not yet been processed.  Eventually the current configuration is updated to&lt;br /&gt;
reflect the requested configuration.  There may, however, be circumstances,&lt;br /&gt;
that do not allow a resource to be activated or (less likely) to be deactivated.&lt;br /&gt;
One reason for this is that some resources are created asynchronously and&lt;br /&gt;
become available only after a little time.&lt;br /&gt;
&lt;br /&gt;
See the  [[Drawing Framework Glossary#Configuration|configuration]] glossary&lt;br /&gt;
entry for examples.&lt;br /&gt;
&lt;br /&gt;
It is possible obtain a copy of the requested configuration and restore it&lt;br /&gt;
later.  This allows to undo temporary changes.  For example, the in-place&lt;br /&gt;
slide show uses this feature to temporarily hide the side panes and to&lt;br /&gt;
restore them when the show ends.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Three layer design===&lt;br /&gt;
&lt;br /&gt;
The drawing framework consists of controllers, factories, and application&lt;br /&gt;
logic modules.  These  are located on three layers.  The assignment to the&lt;br /&gt;
different layers depends on the knowledge about different aspects of the&lt;br /&gt;
resource management:&lt;br /&gt;
&lt;br /&gt;
;Application Layer:The [[Drawing Framework Glossary#Application Layer|application layer]] controls &amp;#039;&amp;#039;&amp;#039;when&amp;#039;&amp;#039;&amp;#039; to activate or deactivate a resource.  This layer contains the application logic.  For example the Impress application uses a module that is responsible for activating or deactivating the slide sorter bar depending on the view that is displayed in the center pane.&lt;br /&gt;
&lt;br /&gt;
;Synchronization Layer:The [[Drawing Framework Glossary#Synchronization Layer|synchronization layer]] uses the XConfigurationController to &amp;#039;&amp;#039;&amp;#039;synchronize&amp;#039;&amp;#039;&amp;#039; the requests from the application layer with the resource controllers in the resource layer. It has no detailed knowledge about individual resources nor about the application logic.&lt;br /&gt;
&lt;br /&gt;
;Resource Layer:The resource factories in the [[Drawing Framework Glossary#Resource Layer|resource layer]] know &amp;#039;&amp;#039;&amp;#039;how&amp;#039;&amp;#039;&amp;#039; to activate or deactivate resources.  The XResourceControllers are called by the XConfigurationController to update the the current configuration so that it looks like the requested configuration.&lt;br /&gt;
&lt;br /&gt;
[[image:DrawingFrameworkDesign.png|The different parts of the drawing framework are organized in three layers]]&lt;br /&gt;
&lt;br /&gt;
The image illustrates the three layer design for the Impress application.  The ImpressModule is created by the ImpressViewShell when the user creates a new Impress document.  The ImpressModule creates the other modules in the application layer that control different aspect of the application.  For example they watch for user input and switch to different views in ther center pane accordingly.&lt;br /&gt;
&lt;br /&gt;
The modules in the application layer communicate with the XConfgurationController in the synchronization layer to make requests for the activation or deactivation of panes and views.  The XConfigurationController modifies the RequestedConfiguration accordingly. &lt;br /&gt;
&lt;br /&gt;
Eventually the CurrentConfiguration is updated.  The XConfigurationController then determines the order in which to activate and deactivate resources and calls the resource factories in that order to create resources that are activated or to release resources that are deactivated.&lt;br /&gt;
&lt;br /&gt;
Resource factories can implement a cache to store deactivated resources.  Some resources like the slide sorter bar are activated and deactivated frequently.  Caching it may speed this up.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Two phase updates===&lt;br /&gt;
&lt;br /&gt;
The drawing framework negotiates between modules implementing application&lt;br /&gt;
logic that want to show or hide a resource on one side and the resource&lt;br /&gt;
factories on the other side.  The negotiation process is iterative: the&lt;br /&gt;
activation request of a resource made by one application logic module may&lt;br /&gt;
cause the activation request of another resource made by a second module.&lt;br /&gt;
For example, when the user switches the view in the center pane to the&lt;br /&gt;
outline view, then the task pane is deactivated.&lt;br /&gt;
&lt;br /&gt;
The negation process is split into two phases, one&lt;br /&gt;
for collecting a list of all the necessary changes and the second for&lt;br /&gt;
updating the GUI to reflect these changes.&lt;br /&gt;
&lt;br /&gt;
;Negotiation Phase: The negotiation phase is triggered by the initial request, for example the switch of the view in the center pane.  In this phase only the the requested configuration is modified.  The requested change is stored in the requested configuration and then is broadcasted.  Listeners may react by making further requests for activation or deactivation of other resources.  These are again stored in the requested configuration and broadcasted and may lead to even more requests.  All requests are put into a queue which is processed until there are no more pending requests.&lt;br /&gt;
&lt;br /&gt;
;Update Phase:When all requests have been processed and the the requested configuration describes a new consistent state of the GUI then the second, the &amp;#039;&amp;#039;&amp;#039;update phase&amp;#039;&amp;#039;&amp;#039; is started.  In this phase only the current configuration is modified.&lt;br /&gt;
:That is, the requested configuration is not modified directly in this phase.  The application can of course request the activation or deactivation of resources.  Therefore, in the update phase a copy of the requested configuration is used which remains unchanged during the update.&lt;br /&gt;
:The different resource factories are asked to create or relase resources so that eventually the current configuration looks like the requested configuration.  Every activation and deactivation is broadcasted like the requests for the activations and deactivations where.&lt;br /&gt;
&lt;br /&gt;
It is the task of the configuration controller to order the activations and deactivations according to dependencies between affected resources and to optimize the update&lt;br /&gt;
phase with respect to time and visual artifacts/flickering.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Extensibility==&lt;br /&gt;
The drawing framework is designed to be extensible with regard to the set of known resources and to the application logic.&lt;br /&gt;
&lt;br /&gt;
For a new resource you have to provide a factory and register it at the configuration manager.  An example could be a new view or a new tool bar.&lt;br /&gt;
&lt;br /&gt;
For a new piece of application logic add a listener to the configuration controller and react to activations or deactivations of relevant resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Implementation and Examples==&lt;br /&gt;
The examples in the following sections show how to use the drawing framework to request and access resources and how to react to changes of the current configuration.  Note that the code is C++ like pseudo code that can not be compiled as is.&lt;br /&gt;
&lt;br /&gt;
===FrameworkHelper===&lt;br /&gt;
The ::sd::framework::FrameworkHelper class provides two things&lt;br /&gt;
* the most frequently used resource URLs so that you do not have to remember them, have trouble with resource allocation, or are able to misspell resource names, and&lt;br /&gt;
* some helper functions that simplify the work with the UNO based drawing framework from inside core code.&lt;br /&gt;
The FrameworkHelper is a multi singleton.  Its Instance() method returns for a ViewShellBase object the associated FrameworkHelper object.  The functions provided cover&lt;br /&gt;
* mapping between sd::ViewShell::ShellType and view resource URL,&lt;br /&gt;
* obtain view objects for their URLs or ResourceIds,&lt;br /&gt;
* making requests for the activation or deactivation of resources,&lt;br /&gt;
* locking configuration updates,&lt;br /&gt;
* waiting for certain events to make asynchronous requests synchronous.&lt;br /&gt;
&lt;br /&gt;
One example for that is a request for the activation of the slide sorter bar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FrameworkHelper::Instance(GetViewShellBase()).RequestView(&lt;br /&gt;
    ResourceId::createWithAnchorURL(&lt;br /&gt;
        aComponentContext,&lt;br /&gt;
        FrameworkHelper::msSlideSorterURL,&lt;br /&gt;
        FrameworkHelper::msLeftImpressPaneURL));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Drawing Framework API===&lt;br /&gt;
The following subsections provide a short introduction of the UNO API of the drawing framework.  For details please refer to the API documentation (not yet available.)&lt;br /&gt;
&lt;br /&gt;
====Getting Access to the Drawing Framework====&lt;br /&gt;
Using the UNO API of the drawing framework to access active resources or to request the activation or deactivation of resources starts with the [http://api.openoffice.org/docs/common/ref/com/sun/star/frame/XController.html XController] of an [[Impress]] or a [[Draw]] document.  From this you can obtain the [http://api.openoffice.org/docs/common/ref/com/sun/star/drawing/framework/XControllerManager.html XControllerManager] and from that the [http://api.openoffice.org/docs/common/ref/com/sun/star/drawing/framework/XConfigurationController.html XConfigurationController].  The XConfigurationController is the main access point for making requests and for accessing resources. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
using ::com::sun::star::uno;&lt;br /&gt;
using ::com::sun::star::frame;&lt;br /&gt;
using ::com::sun::star::drawing::framework;&lt;br /&gt;
&lt;br /&gt;
Reference&amp;lt;XController&amp;gt; xController;              // This is regarded as given.&lt;br /&gt;
Reference&amp;lt;XComponentContext&amp;gt; xComponentContext;  // This also is regarded as given.&lt;br /&gt;
&lt;br /&gt;
Reference&amp;lt;XControllerManager&amp;gt; xCM (xController, UNO_QUERY_THROW);&lt;br /&gt;
Reference&amp;lt;XConfigurationController&amp;gt; xCC (xCM-&amp;gt;getConfigurationController());&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Requesting a Resource Activation====&lt;br /&gt;
Once you have obtained access to the XConfigurationController, making requests to activate or deactivate resources is simple.  The following code requests the activation of the slide sorter bar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xCC-&amp;gt;requestResourceActivation(&lt;br /&gt;
    ResourceId::createWithAnchorURL(&lt;br /&gt;
        xComponentContext,&lt;br /&gt;
        FrameworkHelper::msSlideSorterURL,&lt;br /&gt;
        FrameworkHelper::msLeftImpressPaneURL));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If you compare this to the code bove that uses the FrameworkHelper to accomplish&lt;br /&gt;
the same thing then you see, that the FrameworkHelper only hides the&lt;br /&gt;
connection from the ViewShellBase to the XConfigurationController.  The rest&lt;br /&gt;
of the call is basically the same.&lt;br /&gt;
&lt;br /&gt;
However, the drawing framework does not provide too many automatisms on this&lt;br /&gt;
layer (that is the task of the modules in the application layer) so the pane&lt;br /&gt;
in which to show the slide sorter has to be requested as well.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xCC-&amp;gt;requestResourceActivation(&lt;br /&gt;
    ResourceId::create(&lt;br /&gt;
        xComponentContext,&lt;br /&gt;
        FrameworkHelper::msLeftImpressPaneURL));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note the use of ResourceId::create() instead of ResourceId::createWithAnchorURL(). This is because a pane, in contrast to the view that was requested earlier, is not bound to any other resource.&lt;br /&gt;
&lt;br /&gt;
The two requests should be executed together.  An intermediate update of the&lt;br /&gt;
current configuration is not necessary and would lead to an annoying display&lt;br /&gt;
of an empty window before the slide sorter bar is properly shown.  The&lt;br /&gt;
probability that this happens is low but not zero.  Therefore it is good&lt;br /&gt;
practice to lock the XConfigurationController while the two requests are&lt;br /&gt;
made.  This prevents unwanted updates.  You can call the lock() and unlock()&lt;br /&gt;
methods directly but it is safer to use the ConfigurationController::Lock&lt;br /&gt;
inner class to do that.  Adding this and bringing the two requests into the&lt;br /&gt;
logical order you get&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    ::sd::framework::ConfigurationController::Lock(xCC);&lt;br /&gt;
    xCC-&amp;gt;requestResourceActivation(&lt;br /&gt;
        ResourceId::create(&lt;br /&gt;
            aComponentContext,&lt;br /&gt;
            FrameworkHelper::msLeftImpressPaneURL));&lt;br /&gt;
    xCC-&amp;gt;requestResourceActivation(&lt;br /&gt;
        ResourceId::createWithAnchorURL(&lt;br /&gt;
            aComponentContext,&lt;br /&gt;
            FrameworkHelper::msSlideSorterURL,&lt;br /&gt;
            FrameworkHelper::msLeftImpressPaneURL));&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Accessing a Resource====&lt;br /&gt;
If you want to access an active resource directly then you have to ask the&lt;br /&gt;
XConfigurationController for it.  Suppose you are interested in accessing the window of the left&lt;br /&gt;
pane that shows the slide sorter bar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Reference&amp;lt;XPane&amp;gt; xPane (xCC-&amp;gt;getResource(&lt;br /&gt;
    ResourceId::create(&lt;br /&gt;
        aComponentContext,&lt;br /&gt;
        FrameworkHelper::msLeftImpressPaneURL),&lt;br /&gt;
    UNO_QUERY);&lt;br /&gt;
if (xPane.is())&lt;br /&gt;
{&lt;br /&gt;
    Reference&amp;lt;XWindow&amp;gt; xWindow (xPane-&amp;gt;getWindow());&lt;br /&gt;
    if (xWindow-&amp;gt;is())&lt;br /&gt;
    {&lt;br /&gt;
        // Do something with the window.&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Reacting to Modifications of the Configuration====&lt;br /&gt;
When you want to implement application logic then you have to react to user input by requesting changes to the current configuration.  User input can come in many ways.  Here we cover only the indirect way of (requested) changes of the current configuration made by others.&lt;br /&gt;
&lt;br /&gt;
The following code turns on the slide sorter bar when the center pane is switched to&lt;br /&gt;
the edit view, outline view, or notes view and turns it off for all other views.  The drawing framework contains a module in the application layer that does essentially the same.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class SlideSorterBarManager : public XConfigurationChangeListener {&lt;br /&gt;
public:&lt;br /&gt;
Reference&amp;lt;XConfigurationController&amp;gt; mxCC;&lt;br /&gt;
&lt;br /&gt;
void SlideSorterBarManager (const Reference&amp;lt;XConfigurationController&amp;gt;&amp;amp; rxCC)&lt;br /&gt;
    : mxCC(rxCC)&lt;br /&gt;
{&lt;br /&gt;
    Reference&amp;lt;XConfigurationControllerBroadcaster&amp;gt; xCCB (mxCC, UNO_QUERY);&lt;br /&gt;
    xCCB-&amp;gt;addConfigurationChangeListener(&lt;br /&gt;
        this,&lt;br /&gt;
        FramworkHelper::msResourceActivationRequestEvent,&lt;br /&gt;
        Any());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
virtual void notifyConfigurationChange (const ConfigurationChangeEvent&amp;amp; rEvent)&lt;br /&gt;
{&lt;br /&gt;
    if (rEvent.Type.equals(FrameworkHelper::msResourceActivationRequestEvent))&lt;br /&gt;
    {&lt;br /&gt;
        if (rEvent.ResourceId.is())&lt;br /&gt;
         &amp;amp;&amp;amp; rEvent.ResourceId-&amp;gt;isBoundToURL(FrameworkHelper::msCenterPaneURL,DIRECT))&lt;br /&gt;
        {&lt;br /&gt;
            // A resource has been requested for the center pane.&lt;br /&gt;
            ::rtl::OUString sResourceURL (rEvent.ResourceId-&amp;gt;getResourceURL());&lt;br /&gt;
            if (sResourceURL.equals(FrameworkHelper::msImpressViewURL)&lt;br /&gt;
             || sResourceURL.equals(FrameworkHelper::msOutlineViewURL)&lt;br /&gt;
             || sResourceURL.equals(FrameworkHelper::msNotesViewURL))&lt;br /&gt;
            {&lt;br /&gt;
                // Show the slide sorter bar.&lt;br /&gt;
                xCC-&amp;gt;requestResourceActivation(&lt;br /&gt;
                    ResourceId::create(&lt;br /&gt;
                        aComponentContext,&lt;br /&gt;
                        FrameworkHelper::msLeftImpressPaneURL));&lt;br /&gt;
                xCC-&amp;gt;requestResourceActivation(&lt;br /&gt;
                    ResourceId::createWithAnchorURL(&lt;br /&gt;
                        aComponentContext,&lt;br /&gt;
                        FrameworkHelper::msSlideSorterURL,&lt;br /&gt;
                        FrameworkHelper::msLeftImpressPaneURL));&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                // Hide the slide sorter bar for the handout view, the slide&lt;br /&gt;
                // sorter view, and all views that where not handled above.&lt;br /&gt;
                mxCC-&amp;gt;requestResourceDeactivation(&lt;br /&gt;
                    ResourceId::createWithAnchorURL(&lt;br /&gt;
                        aComponentContext,&lt;br /&gt;
                        FrameworkHelper::msSlideSorterURL,&lt;br /&gt;
                        FrameworkHelper::msLeftImpressPaneURL));&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
There are three things to note in this code:&lt;br /&gt;
# The first &amp;#039;&amp;#039;&amp;#039;if&amp;#039;&amp;#039;&amp;#039; statement in the notifyConfigurationChange() method is not really necessary because the listener is registered only for this one event type and thus will not be called for other event types.&lt;br /&gt;
# There is no update lock surrounding the activation requests for the slide sorter bar.  This is not necessary   here, because the listener is only called during the negotiation phase.  During this whole phase the update is locked.&lt;br /&gt;
# There is only one deactivation request, the one for the view.  The request for the pane is missing.  This is because there might be other resources bound to the pane.  However, this is one of a few places where an automatism is active: when there are no resources bound to a pane when the negotiation phase ends, then the pane is deactivated.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Providing a New Resource====&lt;br /&gt;
To provide a new resource, say a SingleColorView that fills a window with a&lt;br /&gt;
single color, you have to&lt;br /&gt;
*Provide the actual view&lt;br /&gt;
*Provide a factory that creates a view object for a given XPane object&lt;br /&gt;
*Register the factory&lt;br /&gt;
*Request the new view&lt;br /&gt;
&lt;br /&gt;
A view has to support the [http://api.openoffice.org/docs/common/ref/com/sun/star/drawing/framework/XView.html css::drawing::framework::XView] interface which is&lt;br /&gt;
derived from the XResource interface.  Both interfaces are extremely simple&lt;br /&gt;
because the drawing framework does not need to know much about its&lt;br /&gt;
resources.&lt;br /&gt;
&lt;br /&gt;
The knowledge is concentrated only in the factory and of course in the&lt;br /&gt;
implementation of the new view.  Both a new resource and its factory are&lt;br /&gt;
typically deployed together so they can use private and implementation&lt;br /&gt;
language dependent means to communicate with each other and share information.&lt;br /&gt;
&lt;br /&gt;
The factory is given a ResourceId when asked for a new resource object.  For&lt;br /&gt;
the SingleColorView the ResourceId is used to look up the corresponding&lt;br /&gt;
XPane object from which the XWindow reference is obtained.  For the standard&lt;br /&gt;
panes the XPane object supports the XUnoTunnel interface which gives access&lt;br /&gt;
to the VCL Window pointer, but that is not used here.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class SingleColorViewFactory : XResourceFactory&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    virtual Reference&amp;lt;XView&amp;gt; createResource (&lt;br /&gt;
        const Reference&amp;lt;XResourceId&amp;gt;&amp;amp; rxViewId)&lt;br /&gt;
    {&lt;br /&gt;
        Reference&amp;lt;XResource&amp;gt; xView;&lt;br /&gt;
&lt;br /&gt;
        // Get the XWindow object fort the AnchorURL of the given ResourceId.&lt;br /&gt;
        Reference&amp;lt;XControllerManager&amp;gt; xCM (xController, UNO_QUERY_THROW);&lt;br /&gt;
        Reference&amp;lt;XConfigurationController&amp;gt; xCC (xCM-&amp;gt;getConfigurationController());&lt;br /&gt;
        Reference&amp;lt;XPane&amp;gt; xPane (xCC-&amp;gt;getResource(rxViewId-&amp;gt;getAnchor()), UNO_QUERY);&lt;br /&gt;
        if (xPane.is())&lt;br /&gt;
        {&lt;br /&gt;
            // Create the view for the XWindow object.&lt;br /&gt;
            Reference&amp;lt;XWindow&amp;gt; xWindow (xPane-&amp;gt;getWindow());&lt;br /&gt;
            if (xWindow.is())&lt;br /&gt;
                xView = new SingleColorView(rxViewId, xWindow);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return xView;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    virtual void releaseView (&lt;br /&gt;
        const Reference&amp;lt;XResource&amp;gt;&amp;amp; rxView)&lt;br /&gt;
    {&lt;br /&gt;
        // Do nothing.  When the caller releases its reference to the view,&lt;br /&gt;
        // then the view will be destroyed.&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class SingleColorView : drawing::framework::XView, awt::XPaintListener&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    SingleColorView(&lt;br /&gt;
        const Reference&amp;lt;XResourceId&amp;gt;&amp;amp; rxViewId,&lt;br /&gt;
        const Reference&amp;lt;XWindow&amp;gt;&amp;amp; rxWindow)&lt;br /&gt;
        : mxViewId(rxViewId)&lt;br /&gt;
    {&lt;br /&gt;
        rxWindow-&amp;gt;addPaintListener(this);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    virtual ResourceId getResourceId (void)&lt;br /&gt;
    {&lt;br /&gt;
        return maId;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    virtual void windowPaint (const awt::PaintEvent&amp;amp; rEvent)&lt;br /&gt;
    {&lt;br /&gt;
        // Paint the area specified by the event.&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
    Reference&amp;lt;XResourceId&amp;gt; mxViewId;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The factory can be registered in two ways.&lt;br /&gt;
#Dynamically by calling XViewController::addViewFactory()&lt;br /&gt;
#Statically by adding an entry to the configuration.&lt;br /&gt;
&lt;br /&gt;
For the latter you have to provide a UNO service for the view factory, say com.sun.star.drawing.framework.SingleColorViewFactory.  With&lt;br /&gt;
this, merge the following entry into the Impress.xcu file.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;node oor:name=&amp;quot;MultiPaneGUI&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;node oor:name=&amp;quot;Framework&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;node oor:name=&amp;quot;ResourceFactories&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;node oor:name=&amp;quot;F0&amp;quot; oor:op=&amp;quot;replace&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;prop oor:name=&amp;quot;ServiceName&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;value&amp;gt;com.sun.star.drawing.framework.SingleColorViewFactory&amp;lt;/value&amp;gt;&lt;br /&gt;
        &amp;lt;/prop&amp;gt;&lt;br /&gt;
        &amp;lt;node oor:name=&amp;quot;ResourceList&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;node oor:name=&amp;quot;R0&amp;quot; oor:op=&amp;quot;replace&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;prop oor:name=&amp;quot;URL&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;value&amp;gt;private:resource/view/SingleColorView&amp;lt;/value&amp;gt;&lt;br /&gt;
            &amp;lt;/prop&amp;gt;&lt;br /&gt;
          &amp;lt;/node&amp;gt;&lt;br /&gt;
        &amp;lt;/node&amp;gt;&lt;br /&gt;
      &amp;lt;/node&amp;gt;&lt;br /&gt;
    &amp;lt;/node&amp;gt;&lt;br /&gt;
  &amp;lt;/node&amp;gt;&lt;br /&gt;
&amp;lt;/node&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
All what remains to be done is to request the view.  To show it in the right&lt;br /&gt;
pane, instead of the task panel, make this call:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xCC-&amp;gt;requestResourceActivation(&lt;br /&gt;
    ResourceId::createWithAnchorURL(&lt;br /&gt;
        xComponentContext,&lt;br /&gt;
        ::rtl::OUString::createFromAscii(&amp;quot;private:resource/view/SingleColorView&amp;quot;),&lt;br /&gt;
        FameworkHelper::msRightPaneURL));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Impress]]&lt;/div&gt;</summary>
		<author><name>Holgerbrandl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Documentation/DevGuide/WritingUNO/Intercepting_Context_Menus&amp;diff=67263</id>
		<title>Documentation/DevGuide/WritingUNO/Intercepting Context Menus</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Documentation/DevGuide/WritingUNO/Intercepting_Context_Menus&amp;diff=67263"/>
		<updated>2008-02-20T20:49:15Z</updated>

		<summary type="html">&lt;p&gt;Holgerbrandl: fixed bugs in example source code&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Documentation/DevGuide/WritingUNOTOC&lt;br /&gt;
|WritingUNO2e=block&lt;br /&gt;
|ShowPrevNext=block&lt;br /&gt;
|PrevPage=Documentation/DevGuide/WritingUNO/Disable Commands&lt;br /&gt;
|NextPage=Documentation/DevGuide/WritingUNO/File Naming Conventions&lt;br /&gt;
}}&lt;br /&gt;
{{DISPLAYTITLE:Intercepting Context Menus}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&amp;lt;!--&amp;lt;idltopic&amp;gt;com.sun.star.ui.XContextMenuInterception&amp;lt;/idltopic&amp;gt;--&amp;gt;&lt;br /&gt;
A context menu is displayed when an object is right clicked. Typically, a context menu has context dependent functions to manipulate the selected object, such as cut, copy and paste. Developers can intercept context menus before they are displayed to cancel the execution of a context menu, add, delete, or modify the menu by replacing context menu entries or complete sub menus. It is possible to provide new customized context menus.&lt;br /&gt;
&lt;br /&gt;
Context menu interception is implemented by the observer pattern. This pattern defines a one-to-many dependency between objects, so that when an object changes state, all its dependents are notified. The implementation supports more than one interceptor.The root access point for intercepting context menus is a &amp;lt;idl&amp;gt;com.sun.star.frame.Controller&amp;lt;/idl&amp;gt; object. The controller implements the interface &amp;lt;idl&amp;gt;com.sun.star.ui.XContextMenuInterception&amp;lt;/idl&amp;gt; to support context menu interception.&lt;br /&gt;
&lt;br /&gt;
=== Register and Remove an Interceptor ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;idl&amp;gt;com.sun.star.ui.XContextMenuInterception&amp;lt;/idl&amp;gt; interface enables the developer to register and remove the interceptor code. When an interceptor is registered, it is notified whenever a context menu is about to be executed. Registering an interceptor adds it to the front of the interceptor chain, so that it is called first. The order of removals is arbitrary. It is not necessary to remove the interceptor that registered last.&lt;br /&gt;
&lt;br /&gt;
=== Writing an Interceptor ===&lt;br /&gt;
&lt;br /&gt;
==== Notification ====&lt;br /&gt;
&lt;br /&gt;
A context menu interceptor implements the &amp;lt;idl&amp;gt;com.sun.star.ui.XContextMenuInterceptor&amp;lt;/idl&amp;gt;interface. This interface has one function that is called by the responsible controller whenever a context menu is about to be executed.&lt;br /&gt;
&lt;br /&gt;
  ContextMenuInterceptorAction notifyContextMenuExecute ( [in] ContextMenuExecuteEvent aEvent)&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;idl&amp;gt;com.sun.star.ui.ContextMenuExecuteEvent&amp;lt;/idl&amp;gt; is a struct that holds all the important information for an interceptor.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; cellpadding=4 style=&amp;quot;border-collapse:collapse;&amp;quot;&lt;br /&gt;
|-bgcolor=#EDEDED&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot;|Members of &amp;lt;idl&amp;gt;com.sun.star.ui.ContextMenuExecuteEvent&amp;lt;/idl&amp;gt;  &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;idlm&amp;gt;com.sun.star.ui.ContextMenuExecuteEvent:ExecutePosition&amp;lt;/idlm&amp;gt;  &lt;br /&gt;
|&amp;lt;idl&amp;gt;com.sun.star.awt.Point&amp;lt;/idl&amp;gt;. Contains the position the context menu will be executed. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;idlm&amp;gt;com.sun.star.ui.ContextMenuExecuteEvent:SourceWindow&amp;lt;/idlm&amp;gt;  &lt;br /&gt;
|&amp;lt;idl&amp;gt;com.sun.star.awt.XWindow&amp;lt;/idl&amp;gt;. Contains the window where the context menu has been requested. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;idlm&amp;gt;com.sun.star.ui.ContextMenuExecuteEvent:ActionTriggerContainer&amp;lt;/idlm&amp;gt;  &lt;br /&gt;
|&amp;lt;idl&amp;gt;com.sun.star.container.XIndexContainer&amp;lt;/idl&amp;gt;. The structure of the intercepted context menu. The member implements the &amp;lt;idl&amp;gt;com.sun.star.ui.ActionTriggerContainer&amp;lt;/idl&amp;gt; service. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;idlm&amp;gt;com.sun.star.ui.ContextMenuExecuteEvent:Selection&amp;lt;/idlm&amp;gt;  &lt;br /&gt;
|&amp;lt;idl&amp;gt;com.sun.star.view.XSelectionSupplier&amp;lt;/idl&amp;gt;. Provides the current selection inside the source window. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Querying a Menu Structure ====&lt;br /&gt;
&lt;br /&gt;
The ActionTriggerContainer member is an indexed container of context menu entries, where each menu entry is a property set. It implements the &amp;lt;idl&amp;gt;com.sun.star.ui.ActionTriggerContainer&amp;lt;/idl&amp;gt; service. The interface &amp;lt;idl&amp;gt;com.sun.star.container.XIndexContainer&amp;lt;/idl&amp;gt; directly accesses the intercepted context menu structure through methods to access, insert, remove and replace menu entries. &lt;br /&gt;
&lt;br /&gt;
All elements in an &amp;lt;code&amp;gt;ActionTriggerContainer&amp;lt;/code&amp;gt; member support the &amp;lt;idl&amp;gt;com.sun.star.beans.XPropertySet&amp;lt;/idl&amp;gt; interface to get and set property values. There are two different types of menu entries with different sets of properties: &lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; cellpadding=4 style=&amp;quot;border-collapse:collapse;&amp;quot;&lt;br /&gt;
|-bgcolor=#EDEDED&lt;br /&gt;
!Type of Menu Entry &lt;br /&gt;
!Service Name &lt;br /&gt;
|-&lt;br /&gt;
|Menu entry &lt;br /&gt;
|&amp;quot;&amp;lt;code&amp;gt;com.sun.star.ui.ActionTrigger&amp;lt;/code&amp;gt;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
|Separator &lt;br /&gt;
|&amp;quot;&amp;lt;code&amp;gt;com.sun.star.ui.ActionTriggerSeparator&amp;lt;/code&amp;gt;&amp;quot; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It is essential to determine the type of each menu entry be querying it for the interface &amp;lt;idl&amp;gt;com.sun.star.lang.XServiceInfo&amp;lt;/idl&amp;gt; and calling &lt;br /&gt;
&lt;br /&gt;
  boolean supportsService ( [in] string ServiceName )&lt;br /&gt;
&lt;br /&gt;
The following example shows a small helper class to determine the correct menu entry type. &lt;br /&gt;
&amp;lt;!--[SOURCE:OfficeDev/MenuElement.java]--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  // A helper class to determine the menu element type&lt;br /&gt;
  public class MenuElement&lt;br /&gt;
  {&lt;br /&gt;
      static public boolean IsMenuEntry( com.sun.star.beans.XPropertySet xMenuElement ) {&lt;br /&gt;
          com.sun.star.lang.XServiceInfo xServiceInfo =&lt;br /&gt;
              (com.sun.star.lang.XServiceInfo)UnoRuntime.queryInterface(&lt;br /&gt;
                  com.sun.star.lang.XServiceInfo.class, xMenuElement );&lt;br /&gt;
  &lt;br /&gt;
          return xServiceInfo.supportsService( &amp;quot;com.sun.star.ui.ActionTrigger&amp;quot; );&lt;br /&gt;
      }&lt;br /&gt;
    &lt;br /&gt;
      static public boolean IsMenuSeparator( com.sun.star.beans.XPropertySet xMenuElement ) { com.sun.star.lang.XServiceInfo xServiceInfo =&lt;br /&gt;
          (com.sun.star.lang.XServiceInfo)UnoRuntime.queryInterface(&lt;br /&gt;
              com.sun.star.lang.XServiceInfo.class, xMenuElement );&lt;br /&gt;
  &lt;br /&gt;
          return xServiceInfo.supportsService( &amp;quot;com.sun.star.ui.ActionTriggerSeparator&amp;quot; );&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Figure 4.1: Determine the menu element type&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;idl&amp;gt;com.sun.star.ui.ActionTrigger&amp;lt;/idl&amp;gt; service supported by selectable menu entries has the following properties:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; cellpadding=4 style=&amp;quot;border-collapse:collapse;&amp;quot;&lt;br /&gt;
|-bgcolor=#EDEDED&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot;|Properties of &amp;lt;idl&amp;gt;com.sun.star.ui.ActionTrigger&amp;lt;/idl&amp;gt;  &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;idlm&amp;gt;com.sun.star.ui.ActionTrigger:Text&amp;lt;/idlm&amp;gt;  &lt;br /&gt;
|string. Contains the text of the label of the menu entry. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;idlm&amp;gt;com.sun.star.ui.ActionTrigger:CommandURL&amp;lt;/idlm&amp;gt;  &lt;br /&gt;
|string. Contains the command URL that defines which function will be executed if the menu entry is selected by the user. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;idlm&amp;gt;com.sun.star.ui.ActionTrigger:HelpURL&amp;lt;/idlm&amp;gt;  &lt;br /&gt;
|string. This optional property contains a help URL that points to the help text. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;idlm&amp;gt;com.sun.star.ui.ActionTrigger:Image&amp;lt;/idlm&amp;gt;  &lt;br /&gt;
|&amp;lt;idl&amp;gt;com.sun.star.awt.XBitmap&amp;lt;/idl&amp;gt;. This property contains an image that is shown left of the menu label. The use is optional so that no image is used if this member is not initialized. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;idlm&amp;gt;com.sun.star.ui.ActionTrigger:SubContainer&amp;lt;/idlm&amp;gt;  &lt;br /&gt;
|&amp;lt;idl&amp;gt;com.sun.star.container.XIndexContainer&amp;lt;/idl&amp;gt;. This property contains an optional sub menu. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;idl&amp;gt;com.sun.star.ui.ActionTriggerSeparator&amp;lt;/idl&amp;gt; service defines only one optional property:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; cellpadding=4 style=&amp;quot;border-collapse:collapse;&amp;quot;&lt;br /&gt;
|-bgcolor=#EDEDED&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot;|Property of &amp;lt;idl&amp;gt;com.sun.star.ui.ActionTriggerSeparator&amp;lt;/idl&amp;gt;  &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;idlm&amp;gt;com.sun.star.ui.ActionTriggerSeparator:SeparatorType&amp;lt;/idlm&amp;gt;  &lt;br /&gt;
|&amp;lt;idl&amp;gt;com.sun.star.ui.ActionTriggerSeparatorType&amp;lt;/idl&amp;gt;. Specifies a certain type of a separator. Currently the following types are possible:&lt;br /&gt;
&lt;br /&gt;
* const int LINE = 0&lt;br /&gt;
* const int SPACE = 1&lt;br /&gt;
* const int LINEBREAK = 2 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Changing a Menu ====&lt;br /&gt;
&lt;br /&gt;
It is possible to accomplish certain tasks without implementing code in a context menu interceptor, such as preventing a context menu from being activated. Normally, a context menu is changed to provide additional functions to the user.&lt;br /&gt;
&lt;br /&gt;
As previously discussed, the context menu structure is queried through the ActionTriggerContainer member that is part of the &amp;lt;idl&amp;gt;com.sun.star.ui.ContextMenuExecuteEvent&amp;lt;/idl&amp;gt; structure. The &amp;lt;idl&amp;gt;com.sun.star.ui.ActionTriggerContainer&amp;lt;/idl&amp;gt; service has an additional interface &amp;lt;idl&amp;gt;com.sun.star.lang.XMultiServiceFactory&amp;lt;/idl&amp;gt; that creates [IDL:com.sun.star.ui.ActionTriggerContainer], &amp;lt;idls&amp;gt;com.sun.star.ui.ActionTriggerContainer&amp;lt;/idls&amp;gt; and &amp;lt;idl&amp;gt;com.sun.star.ui.ActionTriggerSeparator&amp;lt;/idl&amp;gt; objects. These objects are used to extend a context menu.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;idl&amp;gt;com.sun.star.lang.XMultiServiceFactory&amp;lt;/idl&amp;gt; implementation of the ActionTriggerContainer implementation supports the following strings:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; cellpadding=4 style=&amp;quot;border-collapse:collapse;&amp;quot;&lt;br /&gt;
|-bgcolor=#EDEDED&lt;br /&gt;
!String &lt;br /&gt;
!Object &lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;com.sun.star.ui.ActionTrigger&amp;quot; &lt;br /&gt;
|Creates a normal menu entry. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;com.sun.star.ui.ActionTriggerContainer&amp;quot; &lt;br /&gt;
|Creates an empty sub menu&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; . &lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;com.sun.star.ui.ActionTriggerSeparator&amp;quot; &lt;br /&gt;
|Creates an unspecified separator&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; . &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;1 A sub menu cannot exist by itself. It has to be inserted into a &amp;lt;idl&amp;gt;com.sun.star.ui.ActionTrigger&amp;lt;/idl&amp;gt; ! &amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;2 The separator has no special type. It is the responsibility of the concrete implementation to render an unspecified separator. &amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Finishing Interception ====&lt;br /&gt;
&lt;br /&gt;
Every interceptor that is called directs the controller how it continues after the call returns. The enumeration &amp;lt;idl&amp;gt;com.sun.star.ui.ContextMenuInterceptorAction&amp;lt;/idl&amp;gt; defines the possible return values.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; cellpadding=4 style=&amp;quot;border-collapse:collapse;&amp;quot;&lt;br /&gt;
|-bgcolor=#EDEDED&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot;|Values of &amp;lt;idl&amp;gt;com.sun.star.ui.ContextMenuInterceptorAction&amp;lt;/idl&amp;gt;  &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;IGNORED&amp;lt;/code&amp;gt; &lt;br /&gt;
|Called object has ignored the call. The next registered &amp;lt;idl&amp;gt;com.sun.star.ui.XContextMenuInterceptor&amp;lt;/idl&amp;gt; should be notified. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;CANCELLED&amp;lt;/code&amp;gt; &lt;br /&gt;
|The context menu must not be executed. No remaining interceptor will be called. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;EXECUTE_MODIFIED&amp;lt;/code&amp;gt; &lt;br /&gt;
|The context menu has been modified and should be executed without notifying the next registered &amp;lt;idl&amp;gt;com.sun.star.ui.XContextMenuInterceptor&amp;lt;/idl&amp;gt;. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;CONTINUE_MODIFIED&amp;lt;/code&amp;gt; &lt;br /&gt;
|The context menu was modified by the called object. The next registered &amp;lt;idl&amp;gt;com.sun.star.ui.XContextMenuInterceptor&amp;lt;/idl&amp;gt; should be notified. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following example shows a context menu interceptor that adds a a sub menu to a menu that has been intercepted at a controller, where this &amp;lt;idl&amp;gt;com.sun.star.ui.XContextMenuInterceptor&amp;lt;/idl&amp;gt; has been registered. This sub menu is inserted into the context menu at the topmost position. It provides help functions to the user that are reachable through the menu Help. &lt;br /&gt;
&amp;lt;!--[SOURCE:OfficeDev/ContextMenuInterceptor.java]--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  import com.sun.star.ui.*;&lt;br /&gt;
  import com.sun.star.lang.XMultiServiceFactory;&lt;br /&gt;
  import com.sun.star.beans.XPropertySet;&lt;br /&gt;
  import com.sun.star.container.XIndexContainer;&lt;br /&gt;
  import com.sun.star.uno.UnoRuntime;&lt;br /&gt;
  import com.sun.star.uno.Exception;&lt;br /&gt;
  import com.sun.star.beans.UnknownPropertyException;&lt;br /&gt;
  import com.sun.star.lang.IllegalArgumentException;&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  public class ContextMenuInterceptor implements XContextMenuInterceptor {&lt;br /&gt;
  &lt;br /&gt;
  public ContextMenuInterceptorAction notifyContextMenuExecute( &lt;br /&gt;
  com.sun.star.ui.ContextMenuExecuteEvent aEvent ) throws RuntimeException {&lt;br /&gt;
  &lt;br /&gt;
  try {&lt;br /&gt;
  &lt;br /&gt;
      // Retrieve context menu container and query for service factory to&lt;br /&gt;
      // create sub menus, menu entries and separators&lt;br /&gt;
      com.sun.star.container.XIndexContainer xContextMenu = aEvent.ActionTriggerContainer;&lt;br /&gt;
      com.sun.star.lang.XMultiServiceFactory xMenuElementFactory = &lt;br /&gt;
          (com.sun.star.lang.XMultiServiceFactory)UnoRuntime.queryInterface(&lt;br /&gt;
              com.sun.star.lang.XMultiServiceFactory.class, xContextMenu );&lt;br /&gt;
      if ( xMenuElementFactory != null ) {&lt;br /&gt;
          // create root menu entry for sub menu and sub menu&lt;br /&gt;
          com.sun.star.beans.XPropertySet xRootMenuEntry =&lt;br /&gt;
              (XPropertySet)UnoRuntime.queryInterface(&lt;br /&gt;
                  com.sun.star.beans.XPropertySet.class, &lt;br /&gt;
                  xMenuElementFactory.createInstance ( &amp;quot;com.sun.star.ui.ActionTrigger&amp;quot; ));&lt;br /&gt;
  &lt;br /&gt;
              // create a line separator for our new help sub menu&lt;br /&gt;
              com.sun.star.beans.XPropertySet xSeparator = &lt;br /&gt;
              (com.sun.star.beans.XPropertySet)UnoRuntime.queryInterface( &lt;br /&gt;
                  com.sun.star.beans.XPropertySet.class, &lt;br /&gt;
                  xMenuElementFactory.createInstance( &amp;quot;com.sun.star.ui.ActionTriggerSeparator&amp;quot; ) );&lt;br /&gt;
    &lt;br /&gt;
              Short aSeparatorType = new Short( ActionTriggerSeparatorType.LINE );&lt;br /&gt;
              xSeparator.setPropertyValue( &amp;quot;SeparatorType&amp;quot;, (Object)aSeparatorType );&lt;br /&gt;
    &lt;br /&gt;
              // query sub menu for index container to get access&lt;br /&gt;
              com.sun.star.container.XIndexContainer xSubMenuContainer =&lt;br /&gt;
              (com.sun.star.container.XIndexContainer)UnoRuntime.queryInterface( &lt;br /&gt;
                  com.sun.star.container.XIndexContainer.class,&lt;br /&gt;
                      xMenuElementFactory.createInstance( &lt;br /&gt;
              &amp;quot;com.sun.star.ui.ActionTriggerContainer&amp;quot; ));&lt;br /&gt;
  &lt;br /&gt;
              // intialize root menu entry &amp;quot;Help&amp;quot;&lt;br /&gt;
              xRootMenuEntry.setPropertyValue( &amp;quot;Text&amp;quot;, new String( &amp;quot;Help&amp;quot; ));&lt;br /&gt;
              xRootMenuEntry.setPropertyValue( &amp;quot;CommandURL&amp;quot;, new String( &amp;quot;slot:5410&amp;quot; ));&lt;br /&gt;
              xRootMenuEntry.setPropertyValue( &amp;quot;HelpURL&amp;quot;, new String( &amp;quot;5410&amp;quot; ));&lt;br /&gt;
              xRootMenuEntry.setPropertyValue( &amp;quot;SubContainer&amp;quot;, (Object)xSubMenuContainer );&lt;br /&gt;
    &lt;br /&gt;
              // create menu entries for the new sub menu&lt;br /&gt;
    &lt;br /&gt;
              // intialize help/content menu entry&lt;br /&gt;
              // entry &amp;quot;Content&amp;quot;&lt;br /&gt;
              XPropertySet xMenuEntry = (XPropertySet)UnoRuntime.queryInterface( &lt;br /&gt;
                  XPropertySet.class, xMenuElementFactory.createInstance (&lt;br /&gt;
                      &amp;quot;com.sun.star.ui.ActionTrigger&amp;quot; ));&lt;br /&gt;
    &lt;br /&gt;
              xMenuEntry.setPropertyValue( &amp;quot;Text&amp;quot;, new String( &amp;quot;Content&amp;quot; ));&lt;br /&gt;
              xMenuEntry.setPropertyValue( &amp;quot;CommandURL&amp;quot;, new String( &amp;quot;slot:5401&amp;quot; ));&lt;br /&gt;
              xMenuEntry.setPropertyValue( &amp;quot;HelpURL&amp;quot;, new String( &amp;quot;5401&amp;quot; ));&lt;br /&gt;
  &lt;br /&gt;
              // insert menu entry to sub menu&lt;br /&gt;
              xSubMenuContainer.insertByIndex ( 0, (Object)xMenuEntry );&lt;br /&gt;
  &lt;br /&gt;
              // intialize help/help agent&lt;br /&gt;
              // entry &amp;quot;Help Agent&amp;quot;&lt;br /&gt;
              xMenuEntry = (com.sun.star.beans.XPropertySet)UnoRuntime.queryInterface( &lt;br /&gt;
                  com.sun.star.beans.XPropertySet.class,&lt;br /&gt;
                      xMenuElementFactory.createInstance (&lt;br /&gt;
                          &amp;quot;com.sun.star.ui.ActionTrigger&amp;quot; ));&lt;br /&gt;
              xMenuEntry.setPropertyValue( &amp;quot;Text&amp;quot;, new String( &amp;quot;Help Agent&amp;quot; ));&lt;br /&gt;
              xMenuEntry.setPropertyValue( &amp;quot;CommandURL&amp;quot;, new String( &amp;quot;slot:5962&amp;quot; ));&lt;br /&gt;
              xMenuEntry.setPropertyValue( &amp;quot;HelpURL&amp;quot;, new String( &amp;quot;5962&amp;quot; ));&lt;br /&gt;
    &lt;br /&gt;
              // insert menu entry to sub menu&lt;br /&gt;
              xSubMenuContainer.insertByIndex( 1, (Object)xMenuEntry );&lt;br /&gt;
  &lt;br /&gt;
              // intialize help/tips&lt;br /&gt;
              // entry &amp;quot;Tips&amp;quot;&lt;br /&gt;
              xMenuEntry = (com.sun.star.beans.XPropertySet)UnoRuntime.queryInterface( &lt;br /&gt;
                  com.sun.star.beans.XPropertySet.class,&lt;br /&gt;
                      xMenuElementFactory.createInstance( &lt;br /&gt;
                          &amp;quot;com.sun.star.ui.ActionTrigger&amp;quot; ));&lt;br /&gt;
              xMenuEntry.setPropertyValue( &amp;quot;Text&amp;quot;, new String( &amp;quot;Tips&amp;quot; ));&lt;br /&gt;
              xMenuEntry.setPropertyValue( &amp;quot;CommandURL&amp;quot;, new String( &amp;quot;slot:5404&amp;quot; ));&lt;br /&gt;
              xMenuEntry.setPropertyValue( &amp;quot;HelpURL&amp;quot;, new String( &amp;quot;5404&amp;quot; ));&lt;br /&gt;
  &lt;br /&gt;
              // insert menu entry to sub menu&lt;br /&gt;
              xSubMenuContainer.insertByIndex ( 2, (Object)xMenuEntry );&lt;br /&gt;
  &lt;br /&gt;
              // add separator into the given context menu&lt;br /&gt;
              xContextMenu.insertByIndex ( 0, (Object)xSeparator );&lt;br /&gt;
    &lt;br /&gt;
              // add new sub menu into the given context menu&lt;br /&gt;
              xContextMenu.insertByIndex ( 0, (Object)xRootMenuEntry );&lt;br /&gt;
  &lt;br /&gt;
              // The controller should execute the modified context menu and stop notifying other&lt;br /&gt;
              // interceptors.&lt;br /&gt;
              return com.sun.star.ui.ContextMenuInterceptorAction.EXECUTE_MODIFIED ;&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
      catch ( com.sun.star.beans.UnknownPropertyException ex ) {&lt;br /&gt;
          // do something useful&lt;br /&gt;
          // we used a unknown property &lt;br /&gt;
      }&lt;br /&gt;
      catch ( com.sun.star.lang.IndexOutOfBoundsException ex ) {&lt;br /&gt;
          // do something useful&lt;br /&gt;
          // we used an invalid index for accessing a container&lt;br /&gt;
      }&lt;br /&gt;
      catch ( com.sun.star.uno.Exception ex ) {&lt;br /&gt;
          // something strange has happend!&lt;br /&gt;
      }&lt;br /&gt;
      catch ( java.lang.Throwable ex ) {&lt;br /&gt;
          // catch java exceptions - do something useful&lt;br /&gt;
      }&lt;br /&gt;
    &lt;br /&gt;
      return com.sun.star.ui.ContextMenuInterceptorAction.IGNORED;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
{{PDL1}}&lt;br /&gt;
[[Category: Writing UNO Components]]&lt;/div&gt;</summary>
		<author><name>Holgerbrandl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User_talk:Holgerbrandl&amp;diff=49937</id>
		<title>User talk:Holgerbrandl</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User_talk:Holgerbrandl&amp;diff=49937"/>
		<updated>2007-10-09T22:44:55Z</updated>

		<summary type="html">&lt;p&gt;Holgerbrandl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Mmp|Mmp]],10:51, 25 September 2007 (CEST): What is the relation between [[OpenCards]] and the [[MediaWiki Extension]]? You&amp;#039;ve added it to the MediaWiki category.&lt;br /&gt;
&lt;br /&gt;
[[User:Holgerbrandl|Holgerbrandl]] 00:44, 10 October 2007 (CEST)good point. There&amp;#039;s no relation.  fixed. :-)&lt;/div&gt;</summary>
		<author><name>Holgerbrandl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User_talk:Holgerbrandl&amp;diff=49936</id>
		<title>User talk:Holgerbrandl</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User_talk:Holgerbrandl&amp;diff=49936"/>
		<updated>2007-10-09T22:44:41Z</updated>

		<summary type="html">&lt;p&gt;Holgerbrandl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Mmp|Mmp]],10:51, 25 September 2007 (CEST): What is the relation between [[OpenCards]] and the [[MediaWiki Extension]]? You&amp;#039;ve added it to the MediaWiki category.&lt;br /&gt;
&lt;br /&gt;
--[[User:Holgerbrandl|Holgerbrandl]] 00:44, 10 October 2007 (CEST)good point. There&amp;#039;s no relation.  fixed. :-)&lt;/div&gt;</summary>
		<author><name>Holgerbrandl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User_talk:Holgerbrandl&amp;diff=49935</id>
		<title>User talk:Holgerbrandl</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User_talk:Holgerbrandl&amp;diff=49935"/>
		<updated>2007-10-09T22:44:10Z</updated>

		<summary type="html">&lt;p&gt;Holgerbrandl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:Mmp|Mmp]],10:51, 25 September 2007 (CEST): What is the relation between [[OpenCards]] and the [[MediaWiki Extension]]? You&amp;#039;ve added it to the MediaWiki category.&lt;br /&gt;
&lt;br /&gt;
good point. There&amp;#039;s no relation.  fixed. :-)&lt;/div&gt;</summary>
		<author><name>Holgerbrandl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=OpenCards&amp;diff=49934</id>
		<title>OpenCards</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=OpenCards&amp;diff=49934"/>
		<updated>2007-10-09T22:42:43Z</updated>

		<summary type="html">&lt;p&gt;Holgerbrandl: /* Team */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.opencards.info OpenCards] is a flashcard learning extension for OpenOffice Impress. The basic idea of OpenCards is to use slide-titles as flashcard fronts and the slide contents as their backs. Based on state-of-the-art memorization and scheduling algorithms OpenCards will help you to learn any set of flashcards.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
# [[User:holgerbrandl|Holger]]  (developer)&lt;br /&gt;
# Other roles: Doreen (artwork &amp;amp; testing)&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
Our major community support and communication tool are the [http://sourceforge.net/forum/?group_id=198974 support forums] hosted at our sourceforge [http://sourceforge.net/projects/opencards/ project page].&lt;br /&gt;
&lt;br /&gt;
[[Category:Extensions]]&lt;/div&gt;</summary>
		<author><name>Holgerbrandl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=OpenCards&amp;diff=49933</id>
		<title>OpenCards</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=OpenCards&amp;diff=49933"/>
		<updated>2007-10-09T22:42:20Z</updated>

		<summary type="html">&lt;p&gt;Holgerbrandl: removed from unrelated category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.opencards.info OpenCards] is a flashcard learning extension for OpenOffice Impress. The basic idea of OpenCards is to use slide-titles as flashcard fronts and the slide contents as their backs. Based on state-of-the-art memorization and scheduling algorithms OpenCards will help you to learn any set of flashcards.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
# [[User:holgerbrandl|Holger]]  (lead and user experience)&lt;br /&gt;
# Other roles: Doreen (artwork &amp;amp; testing)&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
Our major community support and communication tool are the [http://sourceforge.net/forum/?group_id=198974 support forums] hosted at our sourceforge [http://sourceforge.net/projects/opencards/ project page].&lt;br /&gt;
&lt;br /&gt;
[[Category:Extensions]]&lt;/div&gt;</summary>
		<author><name>Holgerbrandl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=OpenCards&amp;diff=47467</id>
		<title>OpenCards</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=OpenCards&amp;diff=47467"/>
		<updated>2007-09-21T12:32:27Z</updated>

		<summary type="html">&lt;p&gt;Holgerbrandl: started OpenCards wiki-entry&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.opencards.info OpenCards] is a flashcard learning extension for OpenOffice Impress. The basic idea of OpenCards is to use slide-titles as flashcard fronts and the slide contents as their backs. Based on state-of-the-art memorization and scheduling algorithms OpenCards will help you to learn any set of flashcards.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
# [[User:holgerbrandl|Holger]]  (lead and user experience)&lt;br /&gt;
# Other roles: Doreen (artwork &amp;amp; testing)&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
Our major community support and communication tool are the [http://sourceforge.net/forum/?group_id=198974 support forums] hosted at our sourceforge [http://sourceforge.net/projects/opencards/ project page].&lt;br /&gt;
&lt;br /&gt;
[[Category:MediaWiki Extension]]&lt;br /&gt;
[[Category:Extensions]]&lt;/div&gt;</summary>
		<author><name>Holgerbrandl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Extensions_repository&amp;diff=41703</id>
		<title>Extensions repository</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Extensions_repository&amp;diff=41703"/>
		<updated>2007-08-08T17:11:24Z</updated>

		<summary type="html">&lt;p&gt;Holgerbrandl: /* List of existing Extensions */  Added OpenCards extension&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Extensions}}&lt;br /&gt;
&lt;br /&gt;
This list provides Extensions that are available for deployment. Some have been tested, some not : Be careful when using them. We can not guarantee them at this level.&lt;br /&gt;
&lt;br /&gt;
If you want to submit some Extensions to be relayed at end-user level through embedded tool, complete this list and send an email on the [mailto:users@extensions.openoffice.org users@extensions.openoffice.org] to inform us that something new is available. Your addon will then be reviewed and you may obtain some feedback on it.&lt;br /&gt;
&lt;br /&gt;
A [[Extensions/website-todo|website is being designed]]. Will be announced when ready - any help appreciated :-)&lt;br /&gt;
&lt;br /&gt;
[[Extensions_repository/Design|Design for Extensions website]]. The design elements which could be used in the extensions website.&lt;br /&gt;
&lt;br /&gt;
For the moment any free licensing is accepted to be listed. [[Extensions_charter|Read the charter]] regarding conditions&lt;br /&gt;
&lt;br /&gt;
If you want to translate an extension, please contact the author. A localization framework will be soon available&lt;br /&gt;
&lt;br /&gt;
== List of existing Extensions ==&lt;br /&gt;
* [http://people.redhat.com/caolanm/PhotoAlbum  PhotoaAlbumMaker]&lt;br /&gt;
:Localized: English - Category: Add-On - License: GPL - OOoVersion: 2.02&lt;br /&gt;
:Description:  Create digital photo albums with OpenOffice.org Impress&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/project/showfiles.php?group_id=87718&amp;amp;package_id=200846  BorderLiner]&lt;br /&gt;
:Localized: English - Category: Tables - License: LGPL - OOoVersion: 2.02&lt;br /&gt;
:Description: An Openoffice.org macro to draw borders in Calc and Writer tables and other objects just with a couple of key strokes&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/project/showfiles.php?group_id=87718&amp;amp;package_id=105792  History Manager]&lt;br /&gt;
:Localized: ?? - Category: ?? - License: ?? - OOoVersion: ??&lt;br /&gt;
:Description:&lt;br /&gt;
&lt;br /&gt;
* [http://www.danielnaber.de/languagetool/ LanguageTool]&lt;br /&gt;
:Localized: English, German, Polish, Dutch, Latvian - Category: Linguistic - License: LGPL - OOoVersion: 2.x&lt;br /&gt;
:Description: Grammar and style checker for English, German, Polish, and Dutch. Initial support for Italian, French, and Spanish. Latvian in preparation.&lt;br /&gt;
&lt;br /&gt;
* [http://www.ooomacros.org/user.php#169339 Multipages]&lt;br /&gt;
:Localized: English, German - Category: UI tool - License: LGPL - OOoVersion: 1.1, 2.0, 2.1&lt;br /&gt;
:Description: An Openoffice.org macro (extension package) to copy, delete, sort, rename  and create multiple document pages automatically&lt;br /&gt;
&lt;br /&gt;
* [http://people.redhat.com/caolanm/oooblogger/ OOOBlogger]&lt;br /&gt;
:Localized: English - Category: Writer Tools - License: ?? - OOoVersion: ??&lt;br /&gt;
:Description :&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/projects/ooosvn OOoSVN]&lt;br /&gt;
:Localized: English - Category: ?? - License: GPL - OOoVersion: 2.0 or later&lt;br /&gt;
:Description: A project to provide change control for OpenOffice.org documents (OpenDocument and *.sx*) via subversion. Transparently checks in internal changes in files and allows users to recover any previous version, view logs and compare with older versions.&lt;br /&gt;
&lt;br /&gt;
* [http://kohei.us/ooo/solver/ Optimization Solver] formerly known as &amp;#039;&amp;#039;LPSolver&amp;#039;&amp;#039;&lt;br /&gt;
:Localized: English - Category: Calc Tools - License: LGPL - OOoVersion: 2.0&lt;br /&gt;
:Description: The Linear and Non-Linear Optimization Solver (or simply the Optimization Solver) is designed to compute an optimized solution that either maximizes or minimizes a given objective of a model while, at the same time, satisfying a set of constraints that may be defined in the model.&lt;br /&gt;
:In this wiki: [[Optimization Solver]]&lt;br /&gt;
&lt;br /&gt;
* [http://www.ipd.uka.de/~hauma/svg-import/ SVG Import Filter]&lt;br /&gt;
:Localized: ?? - Category: Add-On - License: LGPL - OOoVersion: 2.0&lt;br /&gt;
:Description: This Add-On provides a filter to enable the importing of SVG images.&lt;br /&gt;
&lt;br /&gt;
* [http://api.openoffice.org/SDK/snippets/SnippetCreator.zip Code Snippet Creator]&lt;br /&gt;
:Localized: ?? - Category: Development tool - License: ?? - OOoVersion: ??&lt;br /&gt;
:Description :&lt;br /&gt;
&lt;br /&gt;
* [http://www.openoffice.org/issues/show_bug.cgi?id=26397 Multisave]&lt;br /&gt;
:Localized: ?? - Category: ?? - License: ?? - OOoVersion: ??&lt;br /&gt;
:Description: A Macro to save a document to multiple format in a few clicks&lt;br /&gt;
&lt;br /&gt;
* [http://en.ooo-info.org/documentation/annotation_tool.html Annotation Tool]&lt;br /&gt;
:Localized: ?? - Category: ?? - License: LGPL - OOoVersion: ??&lt;br /&gt;
:Description: Extension of the note feature in Writer: text highlighting, quick remove of notes&lt;br /&gt;
&lt;br /&gt;
* [http://www.afk-support.no/pakker/afk-it/OpenOffice2/html/ Mathtype Macros]&lt;br /&gt;
:Localized: English - Category: Math tool - License: GPL - OOoVersion: 2.0.x - Platform: Windows&lt;br /&gt;
:Description: Macros for insertion of Mathtype objects in OOo Writer on the Windows platform&lt;br /&gt;
&lt;br /&gt;
* [http://quasiwiki.sourceforge.net/  QuasiWiki]&lt;br /&gt;
:Localized: English - Category: Wiki - License: GPL - OOoVersion: 2.0.x&lt;br /&gt;
:Description: QuasiWiki implements some of the basic principles of wiki in OpenOffice.org Writer. It doesn&amp;#039;t turn OpenOffice.org into a fully fledged wiki tool (hence the &amp;quot;quasi&amp;quot; prefix), but rather adds some wiki-like capabilities.&lt;br /&gt;
&lt;br /&gt;
* [http://quasiwiki.sourceforge.net/  txt2tags extension]&lt;br /&gt;
:Localized: English - Category: Markup - License: GPL - OOoVersion: 2.0.x&lt;br /&gt;
:Description: txt2tags extension allows users to apply [http://txt2tags.sourceforge.net/ txt2tags] markup to the currently opened Writer document.&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/projects/ooop/  OxygenOffice Professional contents for OpenOffice.org as extension]&lt;br /&gt;
:Localized: English, German, Hungarian, French, Italian - Category: Templates, Gallery - License: LGPL - OOoVersion: 2.x&lt;br /&gt;
:Description: Extension version of OxygenOffice Professional&amp;#039;s extra contents for OpenOffice.org like templates and galleries.&lt;br /&gt;
:Download: [http://sourceforge.net/project/showfiles.php?group_id=170021&amp;amp;package_id=208656] Direct link for extension downloads&lt;br /&gt;
:Last update: May 10, 2007&lt;br /&gt;
&lt;br /&gt;
* [http://de.openoffice.org/unbranded-source/browse/*checkout*/de/documentation/vorlagen/vorlagen_de_opendoc.oxt  German template collection]&lt;br /&gt;
:Localized: German - Category: Templates - License: LGPL - OOoVersion: 2.1&lt;br /&gt;
:Description: a collection of German templates hosted by the [http://de.openoffice.org Germanophone project]&lt;br /&gt;
&lt;br /&gt;
* [http://ooolilypond.sourceforge.net/ LilyPond for OpenOffice.org]&lt;br /&gt;
:Localized: English - Category: Music - License: ? Version: 2.1 [OOoLilyPond is a macro for OpenOffice.org that simplifies the integration of music notation in OpenOffice.org Writer of Impress. It can be used to write a book on music theory or to write down exercises for music instruments or voices which need to be commented with lots of text.]&lt;br /&gt;
&lt;br /&gt;
* [http://www.ooomacros.org/user.php#216044 Pagination]&lt;br /&gt;
:Localized: French, English - Category: Writer Add-On - License: LGPL - OOoVersion: 2.x&lt;br /&gt;
: Description: A macro to simplify the commands to paginate a document. Brings up a dialog box where you can choose among some options (position, first number, etc.)&lt;br /&gt;
&lt;br /&gt;
* [http://www.ooomacros.org/user.php#217442 Calendrier]&lt;br /&gt;
: Localized: French, English - Category: Writer Add-On - License: LGPL - OOoversion: 2.0.4&lt;br /&gt;
: Description: A tool to create calendar pages for one month or for one year.&lt;br /&gt;
&lt;br /&gt;
* [http://writerforwriters.blogspot.com/2007/03/email-backup-extension-for.html  Email Backup extension]&lt;br /&gt;
:Localized: English - Category: Markup - License: GPL - OOoVersion: 2.0.x&lt;br /&gt;
:Description: Using the Email Backup extension, you can quickly email a backup copy of the currently opened OpenOffice.org document to a specified email address.&lt;br /&gt;
&lt;br /&gt;
* [http://code.google.com/p/writertools/  Writer&amp;#039;s Tools]&lt;br /&gt;
:Localized: English - Category: Markup - License: GPL - OOoVersion: 2.0.x&lt;br /&gt;
:Description: Writer’s Tools is an OpenOffice.org extension that includes the following macros: Lookup Tool, Google Translate, Email Backup, Multi-format backup, and Open FTP Document.&lt;br /&gt;
&lt;br /&gt;
* [[Extensions_repository/Creative_Commons|Creative Commons extension]]&lt;br /&gt;
:Localized: English - Category: Add-on - License: LGPL - OOoVersion: 2.0.x&lt;br /&gt;
:Description: Creative Commons extension is an OpenOffice.org extension that allows to insert in a document Creative Commons licensing information.&lt;br /&gt;
&lt;br /&gt;
* [[http://www.pengyou-project.info/en/index.php PengYou]]&lt;br /&gt;
:Localized: English, French - Category: Add-on - License: Apache Licence - OOoVersion: 2.x&lt;br /&gt;
:Description: The PengYou extension adds a menu to OpenOffice.org that enables you to easily share documents via the PengYou document collaboration server&lt;br /&gt;
&lt;br /&gt;
* [http://gerard.deneux.free.fr/ CADOO.o]&lt;br /&gt;
:Localized: French, English - Category: Add-on - License: LGPL - OOoVersion: 2.x&lt;br /&gt;
:Description: The CADOO.o extension adds a menu to OpenOffice.org Draw with functions that makes easier to draw technical drawings&lt;br /&gt;
&lt;br /&gt;
* [http://www.opencards.info OpenCards]&lt;br /&gt;
:Localized: English (in progess: German, French, Portuguese) - Category: Impress Add-on - License: BSD - OOoVersion: 2.1&lt;br /&gt;
:Description: OpenCards is a flashcard learning extension for OpenOffice Impress. The basic idea of OpenCards is to use slide-titles as flashcard fronts and the slide contents as their backs. Based on the Leitner system OpenCards will help you to learn any set of flashcards.&lt;br /&gt;
&lt;br /&gt;
== Others Extensions Lists ==&lt;br /&gt;
* [http://linguistico.sf.net/wiki/doku.php?id=ext:estensioni Extensions on linguistico wiki] (in Italian language)&lt;br /&gt;
&lt;br /&gt;
[[Category:Extensions]]&lt;/div&gt;</summary>
		<author><name>Holgerbrandl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=OOoHelpOutline&amp;diff=38251</id>
		<title>OOoHelpOutline</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=OOoHelpOutline&amp;diff=38251"/>
		<updated>2007-07-10T03:21:29Z</updated>

		<summary type="html">&lt;p&gt;Holgerbrandl: /* Third Party Sites */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Welcome to the outline of existing OpenOffice.org user resources!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The OOo Help Outline has recently moved to OpenOffice.org&amp;#039;s Wiki to help open its accessibility as much as possible to the OpenOffice.org community, so that all may help to keep it current and reliable.&lt;br /&gt;
&lt;br /&gt;
See also [[Press coverage on OpenOffice.org]] for various articles, reviews and tips related to OpenOffice.org.&lt;br /&gt;
&lt;br /&gt;
==Product==&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
&lt;br /&gt;
* [[OOo OnlineHelp]]&lt;br /&gt;
* [http://www.openoffice.org/ OpenOffice.org&amp;#039;s Home Page]&lt;br /&gt;
** [http://www.openoffice.org/product/ OpenOffice.org Product Description]&lt;br /&gt;
** [http://www.openoffice.org/sitemap.html OpenOffice.org&amp;#039;s Site Map]&lt;br /&gt;
** [http://marketing.openoffice.org/2.0/featureguide.html OpenOffice.org 2.0 Office Suite - Guide to New Features]&lt;br /&gt;
&lt;br /&gt;
* [http://documentation.openoffice.org/manuals/index.html OpenOffice.org User Guide]&lt;br /&gt;
* [http://support.openoffice.org/index.html OpenOffice.org Support Area]&lt;br /&gt;
**List of links to free community support, commercial support and training,&amp;lt;br&amp;gt; OpenOffice.org books, and general community resources.&lt;br /&gt;
&lt;br /&gt;
* [http://openoffice.start4all.com/ openoffice.org.start4all.com]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/OpenOffice.org OpenOffice.org at Wikipedia] ([http://en.wikipedia.org/wiki/Category:OpenOffice.org OpenOffice.org Category])&lt;br /&gt;
* [http://www.oooforum.org/links.phtml OpenOffice.org Links]&lt;br /&gt;
&lt;br /&gt;
Related Products&lt;br /&gt;
* [[StarOffice|StarOffice Office Suite]]&lt;br /&gt;
* [http://portableapps.com/apps/office/suites/portable_openoffice Portable OpenOffice.org]&lt;br /&gt;
&lt;br /&gt;
===FAQs===&lt;br /&gt;
&lt;br /&gt;
* [http://user-faq.openoffice.org/ OpenOffice.org User FAQ Project]&lt;br /&gt;
* [http://documentation.openoffice.org/faqs/index.html OpenOffice.org Documentation Project FAQs]&lt;br /&gt;
* [http://www.openoffice.org/faq.html OpenOffice.org&amp;#039;s General FAQs]&lt;br /&gt;
* [http://www.bytebot.net/openoffice/faq.html The OpenOffice.org UnOfficial FAQs by Colin Charles]&lt;br /&gt;
* [http://oooauthors.org/en/FAQs/ OOoAuthors.org FAQ Compilation]&lt;br /&gt;
* [http://www.openoffice.org/FAQs/fontguide.html Font Troubleshooting Guide]&lt;br /&gt;
&lt;br /&gt;
Also from this Wiki:&lt;br /&gt;
* [[Font-FAQ]] (in progress)&lt;br /&gt;
* [[Bibliographic Hints and Tips]]&lt;br /&gt;
* [[VBA|MS Office VBA Macros]]&lt;br /&gt;
&lt;br /&gt;
===Downloads===&lt;br /&gt;
&lt;br /&gt;
* [http://download.openoffice.org/#latest OpenOffice.org Download Central]&lt;br /&gt;
* [http://download.openoffice.org/2.0.2/index.html OpenOffice.org 2.0.2]&lt;br /&gt;
* [http://download.openoffice.org/1.1.5/index.html OpenOffice.org 1.1.5]&lt;br /&gt;
* [http://www.openoffice.org/dev_docs/source/1.0.3/index.html OpenOffice.org 1.0.3.1] (use this for Windows 95)&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
&lt;br /&gt;
* [http://documentation.openoffice.org/setup_guide2/index.html OpenOffice.org&amp;#039;s Setup Guides for 1.x and 2.x]&lt;br /&gt;
** Good stuff: version 2.x of the Setup Guide provides extensive instructions&amp;lt;br&amp;gt;for installation on &amp;#039;&amp;#039;many&amp;#039;&amp;#039; Linux distros and UNIXes (in addition to Windows):&lt;br /&gt;
*** Linux: RPM-based distro, Debian-based distro, Gentoo, Slackware &lt;br /&gt;
*** UNIX: Solaris, FreeBSD, Mac OS X&lt;br /&gt;
** Another install guide for Debian: [http://www.reallylinux.com/docs/oo2install.shtml Installing OpenOffice.org 2.0 for Debian]&lt;br /&gt;
** [http://www.oooforum.org/forum/viewtopic.phtml?t=33125 Adding interface language to existing OpenOffice.org]&lt;br /&gt;
* [http://www.openoffice.org/dev_docs/instructions.html OOo&amp;#039;s Instructions for Installing and Setting Up OpenOffice.org 1.1.x]&lt;br /&gt;
* [http://download.openoffice.org/index.html OpenOffice.org&amp;#039;s Download Central]&lt;br /&gt;
* [http://www.oooforum.org/forum/viewforum.phtml?f=1 OpenOffice.org Forum: Setup and Configuration]&lt;br /&gt;
* [http://www.hypermax.net.au/~settantta/ooo/default.html Alex Fisher&amp;#039;s OpenOffice.org Introduction]&lt;br /&gt;
* [http://www.openoffice.org/FAQs/build_faq.html Build FAQs for OpenOffice.org]&lt;br /&gt;
&lt;br /&gt;
* Dictionaries: Please see [[OOoHelpOutline#Dictionaries|the Dictionaries sub-section]] for further information.&lt;br /&gt;
* Java issues&lt;br /&gt;
** [http://java.com/java/download/index.jsp Java.sun.com] - Download the [[Wikipedia:JRE|Java Runtime]] for use with OpenOffice.org (required by Base and Wizards)&lt;br /&gt;
** See also [[Java and OpenOffice.org]] for more information&lt;br /&gt;
&lt;br /&gt;
* Linux/BSD issues&lt;br /&gt;
** [https://wiki.ubuntu.com/SCIM SCIM IME and OpenOffice.org]: Workaround for the gcc ABI incompatibility issue under Linux/BSD.&lt;br /&gt;
** [http://www.bluethingy.com/linux/rh8menu.html Editing GNOME2 Menus] for Linux/BSD users&lt;br /&gt;
&lt;br /&gt;
* Mac issues: for Mac users, please see &lt;br /&gt;
** [[FAQ Openoffice.org and NeoOffice|FAQ:OpenOffice.org and NeoOffice]] and&lt;br /&gt;
** [[MacOS_X|OpenOffice.org for Mac OS X Development pages]]&lt;br /&gt;
&lt;br /&gt;
===OpenOffice.org Applications===&lt;br /&gt;
&lt;br /&gt;
====Calc====&lt;br /&gt;
&lt;br /&gt;
* [http://sc.openoffice.org/ OpenOffice.org&amp;#039;s Spreadsheet Project]&lt;br /&gt;
* [http://graphics.openoffice.org/chart/chart.html OpenOffice.org Graphics Applications – Charts]&lt;br /&gt;
* [http://documentation.openoffice.org/HOW_TO/index.html OpenOffice.org&amp;#039;s How-To Documents]&lt;br /&gt;
* [http://documentation.openoffice.org/faqs/spreadsheet/index.html Spreadsheet FAQ Index Page]&lt;br /&gt;
* [http://sc.openoffice.org/addin_howto.html How to add-in in OpenOffice.org Calc]&lt;br /&gt;
* [http://www.oooforum.org/forum/viewforum.php?f=3 OpenOffice.org Forum]&lt;br /&gt;
* [http://documentation.openoffice.org/manuals/oooauthors2/0107GS-GettingStartedWithCalc.pdf Getting Started with Calc]&lt;br /&gt;
* [http://www.richhillsoftware.com/ OpenOffice Calc Tips]&lt;br /&gt;
* [http://www.nostabo.net/openoffice.php OpenOffice.org Calc Tutorials and Resources]&lt;br /&gt;
* [http://spreadsheets.about.com/od/openofficecalc/ OpenOffice Calc Tutorials and Tips]&lt;br /&gt;
* [http://www.erack.de/bookmarks/D.html#SpreadSheet Links: Develop (targets SpreadSheet section)]&lt;br /&gt;
* [http://www.phptr.com/articles/article.asp?p=430837 Make Calc Spreadsheets Dance for You in OpenOffice.org]&lt;br /&gt;
&lt;br /&gt;
====Writer====&lt;br /&gt;
&lt;br /&gt;
* [http://sw.openoffice.org/ OpenOffice.org&amp;#039;s Word Processing Project]&lt;br /&gt;
* [http://graphics.openoffice.org/chart/chart.html OpenOffice.org Graphics applications – Charts]&lt;br /&gt;
* [http://documentation.openoffice.org/HOW_TO/index.html OpenOffice.org&amp;#039;s How-To Documents]&lt;br /&gt;
* [http://documentation.openoffice.org/faqs/word_processing/index.html Word Processor FAQ Index Page]&lt;br /&gt;
* [http://www.oooforum.org/forum/viewforum.php?f=2 OpenOffice.org Forum]&lt;br /&gt;
* [http://prdownloads.sourceforge.net/ooodocs/writer_guide_en_1.0.1.zip?download OpenOffice.org Writer Guide] - for OOo 1.0.1&lt;br /&gt;
* [http://www.taming-openoffice-org.com/writer/index.htm Taming OpenOffice.org on Writer]&lt;br /&gt;
* [http://www.onlineconnections.com.au/public/openoffice/brochureprinting.html Producing a Brochure or Booklet by Kelvin]&lt;br /&gt;
* [http://lingucomponent.openoffice.org/download_dictionary.html Spelling, Hyphenation, and Thesaurus Dictionaries: Download / Installation]&lt;br /&gt;
* [http://ooovidtutors.sf.net/ Ooovidtutors - OpenOffice.org video tutorials by mimooh]&lt;br /&gt;
* [http://www.8daysaweek.co.uk/forums/viewtopic.php?t=34 Page Numbering in OpenOffice.org (a tutorial)]&lt;br /&gt;
* &amp;#039;&amp;#039;OOoAuthors:&amp;#039;&amp;#039;&lt;br /&gt;
** [http://documentation.openoffice.org/manuals/oooauthors2/0106GS-GettingStartedWithWriter.pdf Getting Started with Writer] (free PDF)&lt;br /&gt;
** [http://documentation.openoffice.org/manuals/index.html OpenOffice.org 2.0 Writer Guide] (free PDF)&lt;br /&gt;
** [http://www.lulu.com/content/180466 Buy a printed copy of the Writer Guide]&lt;br /&gt;
&lt;br /&gt;
====Draw====&lt;br /&gt;
&lt;br /&gt;
* [http://graphics.openoffice.org/ OpenOffice.org Graphics Applications Project]&lt;br /&gt;
* [http://documentation.openoffice.org/HOW_TO/index.html OpenOffice.org&amp;#039;s How-To Documents]&lt;br /&gt;
* [http://documentation.openoffice.org/faqs/drawing_graphics/index.html Drawing FAQ Index Page]&lt;br /&gt;
* [http://www.oooforum.org/forum/viewforum.php?f=5 OpenOffice.org Forum]&lt;br /&gt;
* &amp;#039;&amp;#039;OOoAuthors:&amp;#039;&amp;#039; &lt;br /&gt;
** [http://documentation.openoffice.org/manuals/oooauthors2/0108GS-GettingStartedWithDraw.pdf Getting Started with Draw] (free PDF)&lt;br /&gt;
** [http://documentation.openoffice.org/manuals/oooauthors2/index.html OpenOffice.org 2.0 Draw Guide] (free PDF)&lt;br /&gt;
** [http://www.lulu.com/content/285709 Buy a printed copy of the Draw Guide]&lt;br /&gt;
* Two-page PDF sample reference card for&lt;br /&gt;
** [http://www.cluesheets.com/SO8DrawCS.pdf StarOffice Draw 8.0]&lt;br /&gt;
** [http://www.cuesheets.com/OO2DrawCS.pdf OpenOffice.org Draw 2.0]&lt;br /&gt;
&lt;br /&gt;
====Impress====&lt;br /&gt;
&lt;br /&gt;
* [http://graphics.openoffice.org/ OpenOffice.org Graphics Applications Project]&lt;br /&gt;
* [http://documentation.openoffice.org/faqs/presentation/index.html Presentation FAQ Index Page]&lt;br /&gt;
* [http://www.oooforum.org/forum/viewforum.phtml?f=4 OpenOffice.org Forum]&lt;br /&gt;
* TUX Magazine: [http://www.tuxmagazine.com/node/1000179 Creating a Slide Show from OOo&amp;#039;s Built-in Templates]&lt;br /&gt;
* James Abela ELT [http://www.jamesabela.co.uk/bus/Impress.html Impress Training]&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;OOoAuthors:&amp;#039;&amp;#039; &lt;br /&gt;
** [http://documentation.openoffice.org/manuals/oooauthors2/0109GS-GettingStartedWithImpress.pdf Getting Started with Impress] (free PDF)&lt;br /&gt;
** [http://documentation.openoffice.org/manuals/oooauthors2/index.html OpenOffice.org 2.x Impress Guide] (free PDF)&lt;br /&gt;
** [http://www.lulu.com/content/881167 Buy a printed copy of the Impress Guide]&lt;br /&gt;
&lt;br /&gt;
====Math / Formula Editor====&lt;br /&gt;
&lt;br /&gt;
* [http://sw.openoffice.org/ OpenOffice.org&amp;#039;s Word Processing Project]&lt;br /&gt;
* [http://documentation.openoffice.org/HOW_TO/index.html Formula Command Reference and How-to]&lt;br /&gt;
* [http://documentation.openoffice.org/faqs/formula/index.html Math FAQ Index Page]&lt;br /&gt;
* [http://www.oooforum.org/forum/viewforum.phtml?f=6 OpenOffice.org Forum Math discussion]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;OOoAuthors&amp;#039;&amp;#039;&lt;br /&gt;
* [http://documentation.openoffice.org/manuals/oooauthors2/0111GS-GettingStartedWithMath.pdf Getting Started with Math] (free PDF)&lt;br /&gt;
* [http://documentation.openoffice.org/manuals/oooauthors2/0216WG-MathObjects.pdf Math Objects: The Equation Editor] (free PDF)&lt;br /&gt;
*: same as &amp;quot;Getting Started with Math&amp;quot; but also includes reference tables.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Third-party add-ons for OpenOffice.org Math&amp;#039;&amp;#039;&lt;br /&gt;
*[http://www.dmaths.org/modules.php?name=Content&amp;amp;pa=showpage&amp;amp;pid=9 Dmaths] (with [http://www.dmaths.com/dmaths/userguide/user_guide_en.html user guide]) - a Math enhancement package for OpenOffice.org licensed under GPL&lt;br /&gt;
*[http://ooolatex.sourceforge.net/ OOoLateX] - a set of OpenOffice.org macros designed to integrate LaTeX equations&lt;br /&gt;
** Check out the [http://www.oooforum.org/forum/viewtopic.phtml?t=36 LaTeX or OpenOffice.org Math] discussion at OOoForum for more detail.&lt;br /&gt;
&lt;br /&gt;
====HTML====&lt;br /&gt;
&lt;br /&gt;
* [http://sw.openoffice.org/ OpenOffice.org&amp;#039;s Word Processing Project]&lt;br /&gt;
&lt;br /&gt;
====Base and Database ====&lt;br /&gt;
&lt;br /&gt;
* [http://en.wikipedia.org/wiki/OpenOffice.org_Base OpenOffice.org Base information and links at Wikipedia]&lt;br /&gt;
* [http://dba.openoffice.org/ OpenOffice.org&amp;#039;s Database Access Project]&lt;br /&gt;
** [http://dba.openoffice.org/howto/index.html OpenOffice.org Database How-Tos]&lt;br /&gt;
** [http://dba.openoffice.org/FAQ/index.html OpenOffice.org Database Tips &amp;#039;n&amp;#039; Tricks]&lt;br /&gt;
** [http://documentation.openoffice.org/HOW_TO/index.html Other OpenOffice.org&amp;#039;s How-To Documents]&lt;br /&gt;
&lt;br /&gt;
* [http://documentation.openoffice.org/manuals/oooauthors2/0110GS-GettingStartedWithBase.pdf Getting Started with Base]&lt;br /&gt;
* [http://sheepdogguides.com/fdb/fdb1main.htm Tutorials on using ooBase] from Sheepdog Guides &amp;#039;&amp;#039;(updated)&amp;#039;&amp;#039;&lt;br /&gt;
* [http://www.oooforum.org/forum/viewforum.phtml?f=10 OpenOffice.org Forum - Base]&lt;br /&gt;
&lt;br /&gt;
* Macro and Base: [http://www.pitonyak.org/database/ Andrew Pitonyak&amp;#039;s OOo Base macro document]&lt;br /&gt;
* ODBC and MySQL: [http://www.unixodbc.org/doc/OOoMySQL.pdf OpenOffice.org 1.0, ODBC, and MySQL &amp;#039;How-tos&amp;#039; by John McCreesh]&lt;br /&gt;
&lt;br /&gt;
* [http://homepage.ntlworld.com/garryknight/linux/oodbase.html Creating Flatfile Databases with OOo and SO 6 by Garry Knight]&lt;br /&gt;
* [http://ericzander.com/Publications/OO_MySQL_Tutorial/index.htm OO_MySQL_Tutorial by Eric Zander] (OOo 1.x)&lt;br /&gt;
* [http://kienlein.com/pages/oo.html EDV - Systeme Kienlein]&lt;br /&gt;
* [http://openoffice.homelinux.org/index.php?module=pagemaster&amp;amp;PAGE_user_op=view_page&amp;amp;PAGE_id=4&amp;amp;MMN_position=5:3 Documenation for Database and JRE]&lt;br /&gt;
&lt;br /&gt;
===Advanced Features and Topics===&lt;br /&gt;
&lt;br /&gt;
====Macros====&lt;br /&gt;
&lt;br /&gt;
* [http://documentation.openoffice.org/HOW_TO/index.html OpenOffice.org&amp;#039;s How-To Documents]&lt;br /&gt;
* [http://scripting.openoffice.org/ OpenOffice.org&amp;#039;s Scripting Home Page]&lt;br /&gt;
* [http://www.ooomacros.org/ OOoMacros]&lt;br /&gt;
* [http://www.oooforum.org/forum/viewforum.phtml?f=9 Macro and API OpenOffice.org Forum]&lt;br /&gt;
* [http://www.oooforum.org/forum/viewforum.phtml?f=11 OpenOffice.org Code Snippets Forum]&lt;br /&gt;
* [http://www.pitonyak.org/oo.php Andrew Pitonyak&amp;#039;s Macro Information]&lt;br /&gt;
* [http://www.darwinwars.com/lunatic/bugs/oo_macros.html Andrew Brown&amp;#039;s OpenOffice.org Macro Page]&lt;br /&gt;
* [http://homepages.paradise.net.nz/hillview/OOo/ Iannz OpenOffice.org Page]&lt;br /&gt;
* [http://www.oooforum.org/forum/viewtopic.phtml?t=4818 How to use OOo with Python on Windows]&lt;br /&gt;
* [http://ooodocs.sourceforge.net/modules.php%3fop=modload&amp;amp;amp;name=Downloads&amp;amp;amp;d_op=viewdownload&amp;amp;amp;cid=23 Templates and Macros from OOoDocs.org]&lt;br /&gt;
* [http://www.linuxjournal.com/article/7802 OOo Off the Wall: Macros and Add-ons]&lt;br /&gt;
* [http://disemia.com/software/openoffice/ dis-Emi-A Software: OpenOffice]&lt;br /&gt;
* [http://home.nikocity.de/sysentw/FAQ/SO-FAQ_English_Version/so-faq_english_version.html SO-FAQ]&lt;br /&gt;
* [http://perso.wanadoo.fr/moutou/index.html#OOoDoclink UNO/C++ programming (SXW and HTML formats)]&lt;br /&gt;
&lt;br /&gt;
====Styles====&lt;br /&gt;
&lt;br /&gt;
* [http://documentation.openoffice.org/manuals/oooauthors2/0206WG-IntroductionToStyles.pdf Introduction to Styles] (chapter in &amp;#039;&amp;#039;Writer Guide&amp;#039;&amp;#039;)&lt;br /&gt;
* [http://documentation.openoffice.org/manuals/oooauthors2/0207WG-WorkingWithStyles.pdf Working with Styles] (chapter in &amp;#039;&amp;#039;Writer Guide&amp;#039;&amp;#039;)&lt;br /&gt;
* [http://www.openoffice.org/servlets/ReadMsg?msgId=685429&amp;amp;amp;listName=users Setting Up to Write Text Vertically]&lt;br /&gt;
&lt;br /&gt;
====Templates====&lt;br /&gt;
&lt;br /&gt;
* [http://documentation.openoffice.org/manuals/oooauthors2/0112GS-WorkingWithTemplates.pdf Working with Templates] (chapter in &amp;#039;&amp;#039;Getting Started with OOo&amp;#039;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
* [http://documentation.openoffice.org/Samples_Templates/User/template/index.html User/Templates]&lt;br /&gt;
* [http://ooextras.sourceforge.net/ OOExtras]&lt;br /&gt;
* [http://ooodocs.sourceforge.net/modules.php%3fop=modload&amp;amp;amp;name=Downloads&amp;amp;amp;d_op=viewdownload&amp;amp;amp;cid=23 Templates and Macros from OOoDocs.org]&lt;br /&gt;
&lt;br /&gt;
====XML====&lt;br /&gt;
&lt;br /&gt;
* [http://xml.openoffice.org/ OpenOffice.org XML File Format]&lt;br /&gt;
* [http://www.w3.org/XML/ Extensible Markup Language (XML)]&lt;br /&gt;
* [http://blogs.sun.com/roller/page/shudson310 Scotty&amp;#039;s Engineering Log]&lt;br /&gt;
* [http://www.oasis-open.org/committees/office/press.php OASIS Open Office XML Format TC]&lt;br /&gt;
* [http://books.evc-cit.info/ OpenOffice.org XML Essentials]&lt;br /&gt;
* [http://www.zvon.org/ ZVON.org - The Guide to the XML Galaxy]&lt;br /&gt;
* [http://www.logilab.org/projects/xmldiff/ Logilab.org - XmlDiff]&lt;br /&gt;
&lt;br /&gt;
==== Format Conversion ====&lt;br /&gt;
&lt;br /&gt;
* For [[Wikipedia:OpenDocument|OpenDocument]] converters, please see the [[Wikipedia:List_of_applications_supporting_OpenDocument#Programmatic_support.2C_filters.2C_converters|List of applications supporting OpenDocument]] at Wikipedia.&lt;br /&gt;
* [[Firefox ODFReader extension]], still under heavy development&lt;br /&gt;
* [http://xml.openoffice.org/filters.html File Format Filters and Transformation]&lt;br /&gt;
* [http://andreas.web-graphics.com/quickguide-sxw-xhtml/ Converting OpenOffice.org documents to XHTML strict with Writer2LaTeX, by Andreas Bovens]&lt;br /&gt;
* [http://www.indesko.com/en/downloads/ooo2dbk ooo2dbk]: Generating DocBook XML from OpenOffice.org 1.x documents&lt;br /&gt;
** [http://www.tldp.org/LDP/LDP-Author-Guide/html/oo2docbook.html OOo to DocBook guide] from LDP&lt;br /&gt;
* [http://nothickmanuals.info/doku.php?id=ooodokuwiki Publishing with OOo Writer and DokuWiki]&lt;br /&gt;
&lt;br /&gt;
====Dictionaries====&lt;br /&gt;
&lt;br /&gt;
* [[Dictionaries]] Spelling, Hyphenation, and Thesaurus Dictionaries: Download / Installation&lt;br /&gt;
* [http://oooconv.free.fr/wikipedia/wikipedia_en.html OOoWikipedia]: Connect OpenOffice.org to Wikipedia for dictionary and information lookup&lt;br /&gt;
* [http://ooodocs.sourceforge.net/dictinstall/index.html OpenOffice.org Dictionary Installer] (older tool for older versions of OOo)&lt;br /&gt;
* [http://ooodi.sourceforge.net/ OOodi - OpenOffice.org Dictionary Installer for Unix]&lt;br /&gt;
* [http://lingucomponent.openoffice.org The lingucomponent project]&lt;br /&gt;
&lt;br /&gt;
====Clip Art====&lt;br /&gt;
&lt;br /&gt;
* [http://documentation.openoffice.org/Samples_Templates/User/gallery/index.html Gallery]&lt;br /&gt;
* [http://ooextras.sourceforge.net/ OOExtras]&lt;br /&gt;
* [http://www.openclipart.org/ Open Clip Art Library]&lt;br /&gt;
* [http://srufaculty.sru.edu/david.dailey/public/public_domain.htm Images in the Public Domain]&lt;br /&gt;
* [http://earth.prohosting.com/anvils/aboutMe/intro.html OOo Xfig Clipart and Network Icons for OOoDraw by Edward Chan]&lt;br /&gt;
* [http://marketing.openoffice.org/art/ OpenOffice.org Art Project]&lt;br /&gt;
* [http://www.kfacts.com/oooart/ OOoArt]&lt;br /&gt;
* [http://ooo.nicubunu.ro/ Nicu&amp;#039;s OpenOffice.org pages]&lt;br /&gt;
* [http://hooboo.free.fr/index.php La Mouette et OpenOffice.org]&lt;br /&gt;
* [http://ooodocs.sourceforge.net/graphics/ OpenOffice.org Marketing Materials]&lt;br /&gt;
&lt;br /&gt;
===Other Resources and Support Materials===&lt;br /&gt;
&lt;br /&gt;
====General====&lt;br /&gt;
&lt;br /&gt;
* [http://documentation.openoffice.org/ OpenOffice.org&amp;#039;s Documentation Project]&lt;br /&gt;
* [http://documentation.openoffice.org/manuals/index.html OpenOffice.org User Guide]&lt;br /&gt;
* [http://ooodocs.sourceforge.net/ OOoDocs]&lt;br /&gt;
* [http://sourceforge.net/project/showfiles.php?group_id=43716 SourceForge.net: Project: OOoDocs: File List]&lt;br /&gt;
* [http://documentation.openoffice.org/thirdparty.html OpenOffice.org&amp;#039;s Page of Third Party Documentation]&lt;br /&gt;
* [http://ooonewsletter.blogspot.com/ The OpenOffice.org Newsletter]&lt;br /&gt;
* [http://www.oooforum.org/ OpenOffice.org Forum]&lt;br /&gt;
* [http://www.kaaredyret.dk/openoffice.html OpenOffice.org Links by Kaaredyret.dk]&lt;br /&gt;
* [http://www.kargs.net/openoffice.html OpenOffice.org Resource Page by Steve Karg]&lt;br /&gt;
* [http://www.tutorialsforopenoffice.org/ Tutorials for OpenOffice]&lt;br /&gt;
* [http://www.edafe.org/openoffice/index.html edafe.org: openoffice.org (esp. pointed toward win users)]&lt;br /&gt;
* [http://www.erack.de/bookmarks/O.html Links: OpenSource - OpenOffice.org]&lt;br /&gt;
* [http://www.openoffice-support.net/ Tutorials, Manuals, HowTo&amp;#039;s and more] - OOo 1.x&lt;br /&gt;
* [http://ooo.chbs.dk/links/ OpenOffice.org Links]&lt;br /&gt;
* [http://www.ooo-portal.de/ Das deutsche OpenOffice.org Portal]&lt;br /&gt;
* [http://ooo.ximian.com/hackers-guide.html Unofficial OpenOffice Hacker&amp;#039;s Guide]&lt;br /&gt;
* [http://ooolib.sourceforge.net/ OpenOffice.org Utility Library]&lt;br /&gt;
* [http://ooqstart.sourceforge.net/ Open Office QuickStarter applet]&lt;br /&gt;
* [http://del.icio.us/tag/openoffice del.icio.us/tag/openoffice]&lt;br /&gt;
* [http://why.openoffice.org/ Why OpenOffice.org]&lt;br /&gt;
* [http://documentation.openoffice.org/manuals/index.html Getting Started with OpenOffice.org 2.0]&lt;br /&gt;
&lt;br /&gt;
====Books====&lt;br /&gt;
&lt;br /&gt;
* OpenOffice.org 2.x books&lt;br /&gt;
** [http://www.amazon.com/OpenOffice-org-2-Guidebook-Solveig-Haugland/dp/0974312029 OpenOffice.org 2 Guidebook]&lt;br /&gt;
** [http://www.amazon.com/exec/obidos/ASIN/0672328089 Sams Teach Yourself OpenOffice.org 2, Firefox and Thunderbird for Windows All in One]&lt;br /&gt;
** [http://www.lulu.com/content/177729 Getting Started with OpenOffice.org 2.0]&lt;br /&gt;
** [http://www.lulu.com/content/690763 OpenOffice.org 2.x Writer Guide]&lt;br /&gt;
** [http://www.lulu.com/content/881167 OpenOffice.org 2.x Impress Guide]&lt;br /&gt;
** [http://www.lulu.com/content/285709 OpenOffice.org 2.0 Draw Guide]&lt;br /&gt;
** [http://www.lulu.com/content/301623 OpenOffice.org 2.0 Migration Guide]&lt;br /&gt;
** [http://www.amazon.com/exec/obidos/ASIN/1593270720 Hacking Openoffice.org: Tips, Tricks, and Untold Secrets]&lt;br /&gt;
** [http://www.amazon.com/exec/obidos/ASIN/0131879928 Point &amp;amp; Click OpenOffice.org]&lt;br /&gt;
** [http://visibooks.com/writer2.html Visibooks Guide to Writer 2.0]&lt;br /&gt;
** [http://visibooks.com/calc2.html Visibooks Guide Calc 2.0]&lt;br /&gt;
** [http://visibooks.com/impress2.html Visibooks Guide Impress 2.0]&lt;br /&gt;
** [http://visibooks.com/base2.html Visibooks Guide Base 2.0]&lt;br /&gt;
** [http://www.conciseconceptsinc.com/ A Conceptual Guide to OpenOffice.org 2.0]&lt;br /&gt;
** [http://www.cafepress.com/getopenoffice OpenOffice.org and StarOffice Workbooks]&lt;br /&gt;
** [http://www.cluesheets.com/ ClueSheets] - Quick Reference Cards for [[StarOffice]] and OpenOffice.org &lt;br /&gt;
&lt;br /&gt;
* OpenOffice.org 1.x books&lt;br /&gt;
** [http://www.amazon.com/exec/obidos/ASIN/0131407457 OpenOffice.org 1.0 Resource Kit]&lt;br /&gt;
*** [http://www.informit.com/content/downloads/OpenOfficeUpdate.pdf Special Supplement to Changes in OpenOffice.org 1.1] (free PDF download)&lt;br /&gt;
** [http://www.amazon.com/exec/obidos/ASIN/0764542222 OpenOffice.org For Dummies]&lt;br /&gt;
** [http://www.oreilly.com/catalog/openoffice/ OpenOffice.org Writer: The Free Alternative to Microsoft Word]&lt;br /&gt;
** [http://www.hentzenwerke.com/catalog/ooo501.htm OOoSwitch: 501 Things You Wanted to Know About Switching to OpenOffice.org]&lt;br /&gt;
** [http://www.samspublishing.com/title/0672326183 Sams Teach Yourself OpenOffice.org All in One]&lt;br /&gt;
** [http://www.hentzenwerke.com/catalog/tinyooo.htm The Tiny Guide to OpenOffice.org]&lt;br /&gt;
** [http://www.hod-ami.co.il/product.asp?catalog%5Fname=hodami&amp;amp;category%5Fname=Home+and+Office&amp;amp;product%5Fid=59407 עיבוד תמלילים עם OpenOffice 1.x] ([http://www.hod-ami.co.il/images/bookdemo/59407.pdf Sample Chapter])&lt;br /&gt;
&lt;br /&gt;
* [[StarOffice]] books, mostly suitable to OpenOffice.org users&lt;br /&gt;
** [http://www.amazon.com/exec/obidos/tg/detail/-/0789728338/ref=pd_sim_books_5/104-9698914-9518356%3fv=glance&amp;amp;amp;s=books Special Edition Using StarOffice 6.0]&lt;br /&gt;
** [http://www.amazon.com/exec/obidos/tg/detail/-/0130384739/qid=1038357106/sr=8-4/ref=sr_8_4/103-6157785-3887854%3fv=glance&amp;amp;amp;s=books&amp;amp;amp;n=507846 StarOffice 6.0 Office Suite Companion]&lt;br /&gt;
&lt;br /&gt;
* Linux and OpenOffice.org related books&lt;br /&gt;
** [http://www.amazon.com/exec/obidos/ASIN/1886411867 Linux in the Workplace]&lt;br /&gt;
** [http://www.amazon.com/gp/product/0131488724 Point &amp;amp; Click Linux]&lt;br /&gt;
&lt;br /&gt;
* XML, OpenOffice.org Macros and Programming&lt;br /&gt;
** [http://www.hentzenwerke.com/catalog/oome.htm OpenOffice.org Macros Explained]&lt;br /&gt;
** [http://books.evc-cit.info/ OASIS OpenDocument Essentials]&lt;br /&gt;
&lt;br /&gt;
====E Learning====&lt;br /&gt;
&lt;br /&gt;
* [http://training.bytebot.net/ ByteBot.net Training Materials]&lt;br /&gt;
* [http://www.desktoplinux.com/news/NS2978835938.html Free online OpenOffice.org support program]&lt;br /&gt;
* [http://www.itrainonline.org/itrainonline/mmtk/opensource.shtml ItrainOnline: Resources for Trainers: MMTK: Open Source Software]&lt;br /&gt;
&lt;br /&gt;
====Compatible Applications====&lt;br /&gt;
&lt;br /&gt;
* [http://www.zope.org/Products/CMF/ Content Management Framework (CMF)]&lt;br /&gt;
* [http://peccatte.karefil.com/software/Catalogue/CatalogueENG.htm Files Metadata Miner Software]&lt;br /&gt;
* [http://gramps.sourceforge.net/ Gramps]&lt;br /&gt;
* [http://www.icoya.com/ icoya]&lt;br /&gt;
* [http://www.mozilla.org/ Mozilla]&lt;br /&gt;
* [http://www.planamesa.com/neojava/en/index.php NeoOffice/J]&lt;br /&gt;
* [http://www.opengroupware.org/ OpenGroupware.org]&lt;br /&gt;
* [http://plone.org/ Plone]&lt;br /&gt;
* [http://www.bezirksreiter.de/PyOpenOffice.htm PyOpenOffice]&lt;br /&gt;
* [http://www.scholarsaid.com/ Scholar&amp;#039;s Aid]&lt;br /&gt;
* [http://www.hj-gym.dk/~hj/writer2latex/ Writer2LaTeX]&lt;br /&gt;
* [http://www.logilab.org/projects/xmldiff/ XmlDiff]&lt;br /&gt;
* [http://zope.org/ Zope]&lt;br /&gt;
&lt;br /&gt;
==Web Site==&lt;br /&gt;
&lt;br /&gt;
===Search===&lt;br /&gt;
&lt;br /&gt;
* [http://www.openoffice.org/ Search Bar in Upper Right Corner]&lt;br /&gt;
* [http://support.openoffice.org/search.html OOo Site Search using Google]&lt;br /&gt;
* [http://www.openoffice.org/project/www/issues/query.cgi Issue Tracker Query Page]&lt;br /&gt;
* [http://darwinwars.com/lunatic/bugs/quickbugs.html Simplified Bug Finder by Andrew Brown]&lt;br /&gt;
* [http://www.openoffice.org/mail_list.html Mail List Archives]&lt;br /&gt;
* [http://www.openoffice.org/servlets/SearchList?listName=users Search the Users List Archive]&lt;br /&gt;
* [http://search.gmane.org/ Gmane Newsgroup Search Page]&lt;br /&gt;
&lt;br /&gt;
===Documentation===&lt;br /&gt;
&lt;br /&gt;
* [http://www.openoffice.org/nonav/servlets/HelpTOC OpenOffice.org&amp;#039;s Web Site Help TOC]&lt;br /&gt;
* [http://documentation.openoffice.org/ OpenOffice.org&amp;#039;s Documentation Project]&lt;br /&gt;
* [http://lingucomponent.openoffice.org/download_dictionary.html Spelling, Hyphenation, and Thesaurus Dictionaries: Download / Installation]&lt;br /&gt;
* [http://www.openoffice.org/mail_list.html OpenOffice.org&amp;#039;s Mail Lists]&lt;br /&gt;
* [http://www.openoffice.org/servlets/SummarizeList?listName=users Browse the Users List]&lt;br /&gt;
* [http://www.openoffice.org/servlets/SearchList?listName=users Search the Users List Archives]&lt;br /&gt;
* [http://development.openoffice.org/index.html OpenOffice.org for Developers]&lt;br /&gt;
* [http://api.openoffice.org/docs/DevelopersGuide/DevelopersGuide.htm Developer&amp;#039;s Guide]&lt;br /&gt;
* [http://udk.openoffice.org/python/python-bridge.html Python-UNO bridge]&lt;br /&gt;
&lt;br /&gt;
===Issue Tracker===&lt;br /&gt;
&lt;br /&gt;
* [http://qa.openoffice.org/issue_handling/project_issues.html OpenOffice.org&amp;#039;s Bugs and Issues Info]&lt;br /&gt;
* [http://qa.openoffice.org/index.html OpenOffice.org&amp;#039;s QA Project]&lt;br /&gt;
* [http://www.kegel.com/openoffice/triage.html OpenOffice.org Issues by Dan Kegel]&lt;br /&gt;
* [http://www.openoffice.org/project/www/issues/query.cgi Query Page for Existing Issue Reports]&lt;br /&gt;
* [http://darwinwars.com/lunatic/bugs/quickbugs.html Simplified Bug Finder by Andrew Brown]&lt;br /&gt;
* [http://www.openoffice.org/servlets/SearchList?listName=users Search the Users List Archives]&lt;br /&gt;
&lt;br /&gt;
===Community===&lt;br /&gt;
&lt;br /&gt;
* [http://www.openoffice.org/ OpenOffice.org&amp;#039;s Home Page]&lt;br /&gt;
* [http://marketing.openoffice.org/index.html OpenOffice.org Marketing Project]&lt;br /&gt;
* [http://www.openoffice.org/copyright/copyrightapproved.html A list of folks who have filed OOo copyright assignments]&lt;br /&gt;
* [http://www.openoffice.org/welcome/credits.html A list fo folks who have contributed to OOo]&lt;br /&gt;
* [http://www.openoffice.org/mail_list.html OpenOffice.org&amp;#039;s Mail Lists: Browse, Search or Subscribe]&lt;br /&gt;
* [http://www.openoffice.org/project/www/issues/query.cgi Issue Tracker Query Page]&lt;br /&gt;
* IRC chat channel at irc.freenode.net#openoffice.org&lt;br /&gt;
&lt;br /&gt;
===Projects===&lt;br /&gt;
&lt;br /&gt;
* [http://projects.openoffice.org/index.html Project Descriptions, Leaders, and Links to Project Pages]&lt;br /&gt;
&lt;br /&gt;
===Native Languages===&lt;br /&gt;
&lt;br /&gt;
* [http://lingucomponent.openoffice.org/download_dictionary.html Spelling, Hyphenation, and Thesaurus Dictionaries: Download / Installation]&lt;br /&gt;
* [http://ooodocs.sourceforge.net/dictinstall/index.html OpenOffice.org Dictionary Installer] (older tool for older versions of OOo)&lt;br /&gt;
* [http://l10n.openoffice.org/all_supported_languages.html l10n - All Supported Languages]&lt;br /&gt;
* [http://l10n.openoffice.org/languages.html Localization Contact Table]&lt;br /&gt;
* [http://native-lang.openoffice.org/ Native Language Confederation]&lt;br /&gt;
&lt;br /&gt;
=== Third Party Sites ===&lt;br /&gt;
&lt;br /&gt;
* [http://oooauthors.org/ OOoAuthors] for community contributions&amp;lt;br&amp;gt; &amp;amp;nbsp; on [http://oooauthors.org/en/authors/userguide2/ User Guide] and [http://oooauthors.org/en/FAQs/faqfolder_view FAQ] authoring&lt;br /&gt;
* [http://www.digitaldistribution.com/about/lessons/ OpenOffice.org 2.0 lessons in Flash format]&lt;br /&gt;
* [http://business.newsforge.com/article.pl?sid=05/11/09/2044220 OpenOffice.org training videos in Flash]&lt;br /&gt;
* [http://plan-b-for-openoffice.org Plan-B for OpenOffice.org - Support for non technical users]&lt;br /&gt;
* [http://inpics.net/ In Pictures: Online computer tutorials based on pictures]&lt;br /&gt;
** [http://inpics.net/writer2.html Writer 2.0 In Pictures]&lt;br /&gt;
** [http://inpics.net/calc2.html Calc 2.0 In Pictures]&lt;br /&gt;
** [http://inpics.net/impress2.html Impress 2.0 In Pictures]&lt;br /&gt;
** [http://inpics.net/base2.html Base 2.0 In Pictures]&lt;br /&gt;
* [http://www.oooforum.org/ OpenOffice.org Forum]&lt;br /&gt;
* [http://ooonewsletter.blogspot.com/ OpenOffice.org Newsletter]&lt;br /&gt;
* [http://ooextras.sourceforge.net/ OOExtras: Extras for OpenOffice.org]&lt;br /&gt;
* [http://www.taming-openoffice-org.com/ Taming OpenOffice.org]&lt;br /&gt;
* [http://openoffice.blogs.com/ OpenOffice.org Tips, Tricks and Ideas]&lt;br /&gt;
* [http://mindmeld.cybersite.com.au/ OpenOffice.org Knowledgebase]&lt;br /&gt;
* [http://www.whatisopenoffice.org/ What is OpenOffice.org?]&lt;br /&gt;
* [http://oooconv.free.fr/wikipedia/wikipedia_en.html OOoWikipedia-Plugin]&lt;br /&gt;
* [http://www.gnome.org/projects/ooo/ GNOME/OpenOffice.org]&lt;br /&gt;
* [http://kde.openoffice.org/ KDE Integration Project]&lt;br /&gt;
* [http://www.opencards.info OpenCards] - A free flashcard learning extension for OpenOffice Impress&lt;br /&gt;
&lt;br /&gt;
===Developer support===&lt;br /&gt;
&lt;br /&gt;
* [http://development.openoffice.org/ OpenOffice.org for Developers]&lt;br /&gt;
* [http://planet.go-oo.org/ Planet OpenOffice.org - Developer News]&lt;br /&gt;
* [http://ext.openoffice.org.nz/doku.php OpenOffice.org Extensions Wiki]&lt;br /&gt;
* [http://perso.wanadoo.fr/moutou/index.html#OOoDoclink UNO automation (in C++)]&lt;/div&gt;</summary>
		<author><name>Holgerbrandl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=OpenOffice_NetBeans_Integration&amp;diff=34966</id>
		<title>OpenOffice NetBeans Integration</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=OpenOffice_NetBeans_Integration&amp;diff=34966"/>
		<updated>2007-06-15T16:41:20Z</updated>

		<summary type="html">&lt;p&gt;Holgerbrandl: /* Other IDEs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:OOo-Netbeans-Plugin.png|right]]&lt;br /&gt;
= Overview =&lt;br /&gt;
The OpenOffice.org API plugin for NetBeans simplifies the development of OpenOffice.org extensions. You can use the OpenOffice.org API to program OpenOffice.org, and automate remote or in process tasks extend OpenOffice.org with completely new functionality. The OpenOffice.org API plugin for NetBeans simplifies accessing and using of the API in new projects and simplifies the task of creating complete OpenOffice.org extension packages (comparable to the NetBeans plugin modules).&lt;br /&gt;
&lt;br /&gt;
= Download and Installation =&lt;br /&gt;
Download the latest version from within NetBeans by clicking on Tools - Update Center. See that &amp;quot;Netbeans Update Center&amp;quot; is selected in the list of available centers and click Next. You can find the plugin in the Features section as &amp;quot;OpenOffice.org API Plugin&amp;quot;. Install it and try it out! The configuration is self explanatory, for detailed information see [[OpenOffice_NetBeans_Integration#Configuration|Configuration]].&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
Overview of the features included in the current plugin.&lt;br /&gt;
== Project Types ==&lt;br /&gt;
All project types create working code. Once the wizard is finished, a working&lt;br /&gt;
compilable project is created. It may not do anything, but it can be used&lt;br /&gt;
in OpenOffice.org from the beginning.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;[[OpenOffice_Simple_UNO_Client_Application_Project_Type|OpenOffice.org Client Application Project Type]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
This project type creates an adapted J2SE client application project with additional support of the &lt;br /&gt;
simple UNO bootstrap feature. To enable this, some pre-compiled glue code is bundled with the client &lt;br /&gt;
application. The result is a portable jar file that bootstraps OpenOffice.org on any supported OS.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;[[OpenOffice_Calc_Add-In_Project_Type|OpenOffice.org Calc Add-In Project Type]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
This project type creates an adapted J2SE class library project with special support for a UNO &lt;br /&gt;
component library and an office extension package. The wizard collects the necessary information for new &lt;br /&gt;
Calc built-in functions and abstracts from the underlying UNO technology.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;[[General_UNO_Component_Project_Type|General UNO Component Project Type]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
This project type creates an adapted J2SE class library project with special support for a&lt;br /&gt;
UNO component library and an OpenOffice.org extension package. The wizard collects information about services &lt;br /&gt;
and additional optional interfaces which should be implemented. Additional IDL types can also be&lt;br /&gt;
defined. A complete code skeleton is generated, with the component helper functions and the default interface methods already implemented.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;[[OpenOffice_Add-On_Project_Type|OpenOffice.org Add-On Project Type]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
This project type creates an adapted J2SE class library project with special support for a UNO &lt;br /&gt;
component library and an OpenOffice.org extension package. The wizard collects the necessary information for an &lt;br /&gt;
OpenOffice.org Add-On component and generates an Add-On specific code skeleton.&lt;br /&gt;
&lt;br /&gt;
== File Types ==&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;xcu file type&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Create an empty xcu file type. The files are recognized in NetBeans and &lt;br /&gt;
syntax highlighting is supported. &lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;xcs file type&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Create an empty xcs file type. The files are recognized in NetBeans and &lt;br /&gt;
syntax highlighting is supported. &lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;UNO idl file type&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
You can use a file type wizard to create idl files. In the first step, you must select the name location&lt;br /&gt;
and UNO type (e.g. Service or Interface). You can add additional &lt;br /&gt;
information in the second step. When an interface is created, the second step asks about&lt;br /&gt;
the functions that the interface should contain. A complete working idl file is created.&lt;br /&gt;
&lt;br /&gt;
== Create, deploy and debug ==&lt;br /&gt;
These are actions that are available in the context menu of an extension project in the &amp;amp;quot;Project&amp;amp;quot; &lt;br /&gt;
view.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Create OXT&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
If necessary, your code is compiled. The resulting jar file is packed into an OXT file, together with other necessary files such as configuration files, a manifest file, and images.  The OXT file is located in the &amp;amp;quot;dist&amp;amp;quot; directory of the project.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Deploy OpenOffice.org Extension&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
If necessary, &amp;amp;quot;Create OXT&amp;amp;quot; is executed. The resulting OXT file is registered inside the user installation of OpenOffice.org.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Debug Extension in Target OpenOffice.org&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
If necessary, &amp;amp;quot;Create OXT&amp;amp;quot; is executed. The resulting OXT file is registered in a temporary user installation of OpenOffice.org, which is located in the build directory of the project. (Cleaning of the project removes the user installation again.) Then OpenOffice.org is started with this user installation and the action that triggers the registered extension must be done in OpenOffice.org.&lt;br /&gt;
Execution stops at any breakpoints added to the code of the extension and debugging can start from there.&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous ==&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;External Jars&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Additional external jars that are used in an extension are automatically copied into the OXT file and added to the extension&amp;#039;s classpath. A registered extension in OpenOffice.org can still use the functionality provided there.&lt;br /&gt;
The jars can be added to the project as a single jar or as part of a NetBeans library. Note: All the jars from a library will be added to the OXT file, independent from their usage in the extension.&lt;br /&gt;
&lt;br /&gt;
= Preview =&lt;br /&gt;
No previews available at the moment.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
The plugin works only in combination with OpenOffice.org and an appropriate OpenOffice.org Software Development Kit (SDK). &lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;[http://download.openoffice.org/2.0.4/index.html#download OpenOffice.org 2.0.4]&amp;#039;&amp;#039;&amp;#039; or &amp;#039;&amp;#039;&amp;#039;[http://www.sun.com/staroffice StarOffice 8 Product Update 4]&amp;#039;&amp;#039;&amp;#039; or higher versions of both programs&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;[http://download.openoffice.org/sdk.html OpenOffice.org Software Development Kit (SDK) 2.0.4]&amp;#039;&amp;#039;&amp;#039; or a higher version&lt;br /&gt;
&lt;br /&gt;
For the Add-on wizard you must have the latest version of the uno-skeletonmaker (comes with OpenOffice.org SDK 2.2.0) and you can download a pre-compiled binary from the file section of the [http://api.openoffice.org API] project ([http://api.openoffice.org/files/documents/22/3823/uno-skeletonmaker_linux_x86zip.zip Linux-x86], [http://api.openoffice.org/files/documents/22/3824/uno-skeletonmaker_solaris_sparc.zip Solaris-Sparc], [http://api.openoffice.org/files/documents/22/3825/uno-skeletonmaker_solaris_x86.zip Solaris-x86], [http://api.openoffice.org/files/documents/22/3826/uno-skeletonmaker_windows.zip Windows])&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Before you can use the new project types you must configure the plugin because it needs an installed OpenOffice.org and OpenOffice.org SDK. &lt;br /&gt;
&lt;br /&gt;
The current version of the plugin asks during the installation for an OpenOffice.org and OpenOffice.org SDK installation. You also configure or change both programs later. Note: If you change the OpenOffice.org or OpenOffice.org SDK installation, these changes are effective for newly created projects only. This will be changed in the future, and you will be asked if you want accept these changes for existing projects.&lt;br /&gt;
&lt;br /&gt;
For changing the office and SDK installation please choose&lt;br /&gt;
*&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;Tools -&amp;gt; Options -&amp;gt; Miscellaneous -&amp;gt; StarOffice/OpenOffice.org Extensions&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&lt;br /&gt;
and select a valid OpenOffice.org and OpenOffice.org SDK installation. &lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:OpenOffice_Extensions_Plugin_Options.png|center]]&amp;lt;br&amp;gt;&lt;br /&gt;
The configuration step automatically installs a new OpenOffice.org library which can be used in other projects to support the OpenOffice.org API. Including this library in your own projects enables context sensitive help and code completion.&lt;br /&gt;
&lt;br /&gt;
== Working with new Project Types ==&lt;br /&gt;
The plugin integrates four new project types under the category &amp;#039;&amp;#039;&amp;#039;StarOffice/OpenOffice.org&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;StarOffice/OpenOffice.org Calc Add-On&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;StarOffice/OpenOffice.org Calc Add-Ins&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;StarOffice/OpenOffice.org Client Application&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;StarOffice/OpenOffice.org Component&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The wizards will collect the necessary information to create the new projects and should follow the NetBeans philosophy. You can simply choose&lt;br /&gt;
*&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;File -&amp;gt; New Project -&amp;gt; StarOffice/OpenOffice.org -&amp;gt; &amp;lt;project_type&amp;gt;&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&lt;br /&gt;
For more details about the project types please take a look at&lt;br /&gt;
*[[OpenOffice_Simple_UNO_Client_Application_Project_Type|OpenOffice.org UNO Client Application Project Type]]&lt;br /&gt;
*[[OpenOffice_Calc_Add-In_Project_Type|OpenOffice.org Calc Add-In Project Type]]&lt;br /&gt;
*[[General_UNO_Component_Project_Type|OpenOffice.org Component Project Type]]&lt;br /&gt;
*[[OpenOffice_Add-On_Project_Type|OpenOffice.org Add-On Project Type]]&lt;br /&gt;
&lt;br /&gt;
== Known Problems and Missing Features ==&lt;br /&gt;
&lt;br /&gt;
* Context sensitive help does not work on Linux (Solaris not yet tested), even the javadoc generated Java UNO runtime reference documentation does not work on Linux. Under Windows both work as expected.&lt;br /&gt;
* The integrated update center module does not work on Unix systems (known bug [http://www.netbeans.org/issues/show_bug.cgi?id=72960&amp;amp;x=23&amp;amp;y=7 72960] in NetBeans which is fixed in NetBeans 6.0). Workaround is to install NetBeans locally where you have write access.&lt;br /&gt;
* The backward compatibility mode for Calc Add-Ins creates still an &amp;#039;&amp;#039;&amp;#039;.oxt&amp;#039;&amp;#039;&amp;#039; extension package. This of course makes no sense for older OpenOffice.org versions because this file extension was first introduced in OO.org 2.0.4. Please simply rename it to &amp;#039;&amp;#039;&amp;#039;.uno.pkg&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Projects are currently not platform independent. If you want to build a project on a different platform you must adapt the &amp;#039;&amp;#039;&amp;#039;&amp;amp;lt;projectname&amp;amp;gt;/nbproject/project-uno.properties&amp;#039;&amp;#039;&amp;#039; file by hand.&lt;br /&gt;
&lt;br /&gt;
= Planned Features =&lt;br /&gt;
The focus is on creating new wizards for various tasks plus common basic functionality. The main programming language is Java. Support for C++ is also planned and depends on the C++ support in NetBeans which will be available at least for NetBeans 6.0. The planned feature list is not final and more specialized wizards for other service provider interfaces (SPI) are coming in the future.&lt;br /&gt;
&lt;br /&gt;
== New Project Types ==&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;[[OpenOffice_Scripting_Project_Type|OpenOffice.org Scripting Project Type]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;This new project type will create an adapted J2SE class library project with special support for OpenOffice.org scripting. It should provide you the possibility to import scripts from OpenOffice.org and open documents, edit, change and build these scripts, debug them and export them back (currently the support is planned for Java scripts only).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;[[OpenOffice_API_Library_Wrapper_Project_Type|OpenOffice.org API Library API Wrapper Project Type]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;This new project type should create a &amp;#039;&amp;#039;Library Wrapper Module&amp;#039;&amp;#039; to support simple usage of the OpenOffice.org API in your own projects. It bundles the necessary API jar files from OpenOffice.org in the library and in client applications. This of course is necessary to make use of the OpenOffice.org API in clients running on machines where no OpenOffice.org is installed and where the communication with OpenOffice.org is made over a remote socket connection.&lt;br /&gt;
&lt;br /&gt;
== Common Features ==&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;UNOIDL Support&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;Means support of a new file type for UNOIDL files, including compiling, UNOIDL editor with syntax highlighting. A wizard for defining new UNOIDL types should be supported as well. &lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Debug Support&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;Means debug support directly from NetBeans for new built and deployed extensions in the OpenOffice.org process as well as the debugging of scripts in OpenOffice.org.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Support of OpenOffice.org extension package&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;This must be defined in detail but it should at least support the browsing of an &amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;.oxt&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039; file in the NetBeans file system similar to jar|zip files. &lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;File type for xcu files&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;This must be defined in detail but we can think of a special editor for OpenOffice .org configuration files.&lt;br /&gt;
&lt;br /&gt;
= Quality Assurance =&lt;br /&gt;
&lt;br /&gt;
If you find bugs please submit a new [http://api.openoffice.org/issues/enter_bug.cgi?component=sdk&amp;amp;issue_type=DEFECT issue] in the category &amp;#039;&amp;#039;&amp;#039;sdk&amp;#039;&amp;#039;&amp;#039; and the subcomponent &amp;#039;&amp;#039;&amp;#039;netbeans-integration&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
* [[OpenOffice_NetBeans_Integration_QA|Schedule for OpenOffice.org NetBeans Integration QA ]]&lt;br /&gt;
&lt;br /&gt;
= Things to be done =&lt;br /&gt;
* [[OpenOffice_NetBeans_Integration/To-Dos|ToDo list]]&lt;br /&gt;
&lt;br /&gt;
= Other IDEs = &lt;br /&gt;
Although there is no dedicated OpenOffice API plugin for Intellij IDEA, it is still possible to use it for plugin-development. Three steps are necessary:&lt;br /&gt;
&lt;br /&gt;
(0. create a new java-extension using plugin-wizard of the Nebeans plugin.=&lt;br /&gt;
&lt;br /&gt;
1. Add the build.xml generated by Netbeans as an ant-file in IDEA. &lt;br /&gt;
&lt;br /&gt;
2. Add the following jar-libraries to your IDEA-project&lt;br /&gt;
* C:/Program Files/OpenOffice.org 2.2/program/classes/juh.jar&lt;br /&gt;
* C:/Program Files/OpenOffice.org 2.2/program/classes/jurt.jar&lt;br /&gt;
* C:/Program Files/OpenOffice.org 2.2/program/classes/jut.jar&lt;br /&gt;
* C:/Program Files/OpenOffice.org 2.2/program/classes/officebean.jar&lt;br /&gt;
* C:/Program Files/OpenOffice.org 2.2/program/classes/ridl.jar&lt;br /&gt;
* C:/Program Files/OpenOffice.org 2.2/program/classes/unoil.jar&lt;br /&gt;
&lt;br /&gt;
3. Finally, to make the ant-file work in IDEA, it is necessary to define two additional ant-properties (oo.sdk.home, office.home). Afterwards you&amp;#039;ll able to build and to deploy your OpenOffice-extensions using IDEA.&lt;br /&gt;
&lt;br /&gt;
= Feedback =&lt;br /&gt;
This is a preview only. Everything is under development and needs to be improved. Feedback is welcome and highly appreciated and we would like to invite you to discuss it on [mailto:dev@api.openoffice.org dev@api.openoffice.org] (Note: you have to be subscribed on the mailing list).&lt;br /&gt;
&lt;br /&gt;
You can also submit new [http://api.openoffice.org/issues/enter_bug.cgi?component=sdk&amp;amp;issue_type=FEATURE feature] or [http://api.openoffice.org/issues/enter_bug.cgi?component=sdk&amp;amp;issue_type=ENHANCEMENT enhancement] requests in the issue tracker in the category &amp;#039;&amp;#039;&amp;#039;sdk&amp;#039;&amp;#039;&amp;#039; and the subcomponent &amp;#039;&amp;#039;&amp;#039;netbeans-integration&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:NetBeans]]&lt;br /&gt;
[[Category:API]]&lt;br /&gt;
[[Category:Effort]]&lt;/div&gt;</summary>
		<author><name>Holgerbrandl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=OpenOffice_NetBeans_Integration&amp;diff=34964</id>
		<title>OpenOffice NetBeans Integration</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=OpenOffice_NetBeans_Integration&amp;diff=34964"/>
		<updated>2007-06-15T16:05:30Z</updated>

		<summary type="html">&lt;p&gt;Holgerbrandl: /* Other IDEs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:OOo-Netbeans-Plugin.png|right]]&lt;br /&gt;
= Overview =&lt;br /&gt;
The OpenOffice.org API plugin for NetBeans simplifies the development of OpenOffice.org extensions. You can use the OpenOffice.org API to program OpenOffice.org, and automate remote or in process tasks extend OpenOffice.org with completely new functionality. The OpenOffice.org API plugin for NetBeans simplifies accessing and using of the API in new projects and simplifies the task of creating complete OpenOffice.org extension packages (comparable to the NetBeans plugin modules).&lt;br /&gt;
&lt;br /&gt;
= Download and Installation =&lt;br /&gt;
Download the latest version from within NetBeans by clicking on Tools - Update Center. See that &amp;quot;Netbeans Update Center&amp;quot; is selected in the list of available centers and click Next. You can find the plugin in the Features section as &amp;quot;OpenOffice.org API Plugin&amp;quot;. Install it and try it out! The configuration is self explanatory, for detailed information see [[OpenOffice_NetBeans_Integration#Configuration|Configuration]].&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
Overview of the features included in the current plugin.&lt;br /&gt;
== Project Types ==&lt;br /&gt;
All project types create working code. Once the wizard is finished, a working&lt;br /&gt;
compilable project is created. It may not do anything, but it can be used&lt;br /&gt;
in OpenOffice.org from the beginning.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;[[OpenOffice_Simple_UNO_Client_Application_Project_Type|OpenOffice.org Client Application Project Type]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
This project type creates an adapted J2SE client application project with additional support of the &lt;br /&gt;
simple UNO bootstrap feature. To enable this, some pre-compiled glue code is bundled with the client &lt;br /&gt;
application. The result is a portable jar file that bootstraps OpenOffice.org on any supported OS.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;[[OpenOffice_Calc_Add-In_Project_Type|OpenOffice.org Calc Add-In Project Type]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
This project type creates an adapted J2SE class library project with special support for a UNO &lt;br /&gt;
component library and an office extension package. The wizard collects the necessary information for new &lt;br /&gt;
Calc built-in functions and abstracts from the underlying UNO technology.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;[[General_UNO_Component_Project_Type|General UNO Component Project Type]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
This project type creates an adapted J2SE class library project with special support for a&lt;br /&gt;
UNO component library and an OpenOffice.org extension package. The wizard collects information about services &lt;br /&gt;
and additional optional interfaces which should be implemented. Additional IDL types can also be&lt;br /&gt;
defined. A complete code skeleton is generated, with the component helper functions and the default interface methods already implemented.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;[[OpenOffice_Add-On_Project_Type|OpenOffice.org Add-On Project Type]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
This project type creates an adapted J2SE class library project with special support for a UNO &lt;br /&gt;
component library and an OpenOffice.org extension package. The wizard collects the necessary information for an &lt;br /&gt;
OpenOffice.org Add-On component and generates an Add-On specific code skeleton.&lt;br /&gt;
&lt;br /&gt;
== File Types ==&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;xcu file type&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Create an empty xcu file type. The files are recognized in NetBeans and &lt;br /&gt;
syntax highlighting is supported. &lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;xcs file type&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Create an empty xcs file type. The files are recognized in NetBeans and &lt;br /&gt;
syntax highlighting is supported. &lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;UNO idl file type&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
You can use a file type wizard to create idl files. In the first step, you must select the name location&lt;br /&gt;
and UNO type (e.g. Service or Interface). You can add additional &lt;br /&gt;
information in the second step. When an interface is created, the second step asks about&lt;br /&gt;
the functions that the interface should contain. A complete working idl file is created.&lt;br /&gt;
&lt;br /&gt;
== Create, deploy and debug ==&lt;br /&gt;
These are actions that are available in the context menu of an extension project in the &amp;amp;quot;Project&amp;amp;quot; &lt;br /&gt;
view.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Create OXT&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
If necessary, your code is compiled. The resulting jar file is packed into an OXT file, together with other necessary files such as configuration files, a manifest file, and images.  The OXT file is located in the &amp;amp;quot;dist&amp;amp;quot; directory of the project.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Deploy OpenOffice.org Extension&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
If necessary, &amp;amp;quot;Create OXT&amp;amp;quot; is executed. The resulting OXT file is registered inside the user installation of OpenOffice.org.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Debug Extension in Target OpenOffice.org&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
If necessary, &amp;amp;quot;Create OXT&amp;amp;quot; is executed. The resulting OXT file is registered in a temporary user installation of OpenOffice.org, which is located in the build directory of the project. (Cleaning of the project removes the user installation again.) Then OpenOffice.org is started with this user installation and the action that triggers the registered extension must be done in OpenOffice.org.&lt;br /&gt;
Execution stops at any breakpoints added to the code of the extension and debugging can start from there.&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous ==&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;External Jars&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Additional external jars that are used in an extension are automatically copied into the OXT file and added to the extension&amp;#039;s classpath. A registered extension in OpenOffice.org can still use the functionality provided there.&lt;br /&gt;
The jars can be added to the project as a single jar or as part of a NetBeans library. Note: All the jars from a library will be added to the OXT file, independent from their usage in the extension.&lt;br /&gt;
&lt;br /&gt;
= Preview =&lt;br /&gt;
No previews available at the moment.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
The plugin works only in combination with OpenOffice.org and an appropriate OpenOffice.org Software Development Kit (SDK). &lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;[http://download.openoffice.org/2.0.4/index.html#download OpenOffice.org 2.0.4]&amp;#039;&amp;#039;&amp;#039; or &amp;#039;&amp;#039;&amp;#039;[http://www.sun.com/staroffice StarOffice 8 Product Update 4]&amp;#039;&amp;#039;&amp;#039; or higher versions of both programs&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;[http://download.openoffice.org/sdk.html OpenOffice.org Software Development Kit (SDK) 2.0.4]&amp;#039;&amp;#039;&amp;#039; or a higher version&lt;br /&gt;
&lt;br /&gt;
For the Add-on wizard you must have the latest version of the uno-skeletonmaker (comes with OpenOffice.org SDK 2.2.0) and you can download a pre-compiled binary from the file section of the [http://api.openoffice.org API] project ([http://api.openoffice.org/files/documents/22/3823/uno-skeletonmaker_linux_x86zip.zip Linux-x86], [http://api.openoffice.org/files/documents/22/3824/uno-skeletonmaker_solaris_sparc.zip Solaris-Sparc], [http://api.openoffice.org/files/documents/22/3825/uno-skeletonmaker_solaris_x86.zip Solaris-x86], [http://api.openoffice.org/files/documents/22/3826/uno-skeletonmaker_windows.zip Windows])&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Before you can use the new project types you must configure the plugin because it needs an installed OpenOffice.org and OpenOffice.org SDK. &lt;br /&gt;
&lt;br /&gt;
The current version of the plugin asks during the installation for an OpenOffice.org and OpenOffice.org SDK installation. You also configure or change both programs later. Note: If you change the OpenOffice.org or OpenOffice.org SDK installation, these changes are effective for newly created projects only. This will be changed in the future, and you will be asked if you want accept these changes for existing projects.&lt;br /&gt;
&lt;br /&gt;
For changing the office and SDK installation please choose&lt;br /&gt;
*&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;Tools -&amp;gt; Options -&amp;gt; Miscellaneous -&amp;gt; StarOffice/OpenOffice.org Extensions&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&lt;br /&gt;
and select a valid OpenOffice.org and OpenOffice.org SDK installation. &lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:OpenOffice_Extensions_Plugin_Options.png|center]]&amp;lt;br&amp;gt;&lt;br /&gt;
The configuration step automatically installs a new OpenOffice.org library which can be used in other projects to support the OpenOffice.org API. Including this library in your own projects enables context sensitive help and code completion.&lt;br /&gt;
&lt;br /&gt;
== Working with new Project Types ==&lt;br /&gt;
The plugin integrates four new project types under the category &amp;#039;&amp;#039;&amp;#039;StarOffice/OpenOffice.org&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;StarOffice/OpenOffice.org Calc Add-On&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;StarOffice/OpenOffice.org Calc Add-Ins&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;StarOffice/OpenOffice.org Client Application&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;StarOffice/OpenOffice.org Component&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The wizards will collect the necessary information to create the new projects and should follow the NetBeans philosophy. You can simply choose&lt;br /&gt;
*&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;File -&amp;gt; New Project -&amp;gt; StarOffice/OpenOffice.org -&amp;gt; &amp;lt;project_type&amp;gt;&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&lt;br /&gt;
For more details about the project types please take a look at&lt;br /&gt;
*[[OpenOffice_Simple_UNO_Client_Application_Project_Type|OpenOffice.org UNO Client Application Project Type]]&lt;br /&gt;
*[[OpenOffice_Calc_Add-In_Project_Type|OpenOffice.org Calc Add-In Project Type]]&lt;br /&gt;
*[[General_UNO_Component_Project_Type|OpenOffice.org Component Project Type]]&lt;br /&gt;
*[[OpenOffice_Add-On_Project_Type|OpenOffice.org Add-On Project Type]]&lt;br /&gt;
&lt;br /&gt;
== Known Problems and Missing Features ==&lt;br /&gt;
&lt;br /&gt;
* Context sensitive help does not work on Linux (Solaris not yet tested), even the javadoc generated Java UNO runtime reference documentation does not work on Linux. Under Windows both work as expected.&lt;br /&gt;
* The integrated update center module does not work on Unix systems (known bug [http://www.netbeans.org/issues/show_bug.cgi?id=72960&amp;amp;x=23&amp;amp;y=7 72960] in NetBeans which is fixed in NetBeans 6.0). Workaround is to install NetBeans locally where you have write access.&lt;br /&gt;
* The backward compatibility mode for Calc Add-Ins creates still an &amp;#039;&amp;#039;&amp;#039;.oxt&amp;#039;&amp;#039;&amp;#039; extension package. This of course makes no sense for older OpenOffice.org versions because this file extension was first introduced in OO.org 2.0.4. Please simply rename it to &amp;#039;&amp;#039;&amp;#039;.uno.pkg&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Projects are currently not platform independent. If you want to build a project on a different platform you must adapt the &amp;#039;&amp;#039;&amp;#039;&amp;amp;lt;projectname&amp;amp;gt;/nbproject/project-uno.properties&amp;#039;&amp;#039;&amp;#039; file by hand.&lt;br /&gt;
&lt;br /&gt;
= Planned Features =&lt;br /&gt;
The focus is on creating new wizards for various tasks plus common basic functionality. The main programming language is Java. Support for C++ is also planned and depends on the C++ support in NetBeans which will be available at least for NetBeans 6.0. The planned feature list is not final and more specialized wizards for other service provider interfaces (SPI) are coming in the future.&lt;br /&gt;
&lt;br /&gt;
== New Project Types ==&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;[[OpenOffice_Scripting_Project_Type|OpenOffice.org Scripting Project Type]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;This new project type will create an adapted J2SE class library project with special support for OpenOffice.org scripting. It should provide you the possibility to import scripts from OpenOffice.org and open documents, edit, change and build these scripts, debug them and export them back (currently the support is planned for Java scripts only).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;[[OpenOffice_API_Library_Wrapper_Project_Type|OpenOffice.org API Library API Wrapper Project Type]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;This new project type should create a &amp;#039;&amp;#039;Library Wrapper Module&amp;#039;&amp;#039; to support simple usage of the OpenOffice.org API in your own projects. It bundles the necessary API jar files from OpenOffice.org in the library and in client applications. This of course is necessary to make use of the OpenOffice.org API in clients running on machines where no OpenOffice.org is installed and where the communication with OpenOffice.org is made over a remote socket connection.&lt;br /&gt;
&lt;br /&gt;
== Common Features ==&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;UNOIDL Support&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;Means support of a new file type for UNOIDL files, including compiling, UNOIDL editor with syntax highlighting. A wizard for defining new UNOIDL types should be supported as well. &lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Debug Support&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;Means debug support directly from NetBeans for new built and deployed extensions in the OpenOffice.org process as well as the debugging of scripts in OpenOffice.org.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Support of OpenOffice.org extension package&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;This must be defined in detail but it should at least support the browsing of an &amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;.oxt&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039; file in the NetBeans file system similar to jar|zip files. &lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;File type for xcu files&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;This must be defined in detail but we can think of a special editor for OpenOffice .org configuration files.&lt;br /&gt;
&lt;br /&gt;
= Quality Assurance =&lt;br /&gt;
&lt;br /&gt;
If you find bugs please submit a new [http://api.openoffice.org/issues/enter_bug.cgi?component=sdk&amp;amp;issue_type=DEFECT issue] in the category &amp;#039;&amp;#039;&amp;#039;sdk&amp;#039;&amp;#039;&amp;#039; and the subcomponent &amp;#039;&amp;#039;&amp;#039;netbeans-integration&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
* [[OpenOffice_NetBeans_Integration_QA|Schedule for OpenOffice.org NetBeans Integration QA ]]&lt;br /&gt;
&lt;br /&gt;
= Things to be done =&lt;br /&gt;
* [[OpenOffice_NetBeans_Integration/To-Dos|ToDo list]]&lt;br /&gt;
&lt;br /&gt;
= Other IDEs = &lt;br /&gt;
Although there is no dedicated OpenOffice API plugin for Intellij IDEA, it is still possible to use it for plugin-development. In order to do so, it&amp;#039;s just necessary to add the build.xml generated by using the Netbeans plugin-wizard as ant-file in IDEA. &lt;br /&gt;
&lt;br /&gt;
To make the ant-file work in IDEA, it is necessary to define two additional ant-properties (oo.sdk.home, office.home). Afterwards you&amp;#039;ll able to build and to deploy your OpenOffice-extensions using Idea.&lt;br /&gt;
&lt;br /&gt;
= Feedback =&lt;br /&gt;
This is a preview only. Everything is under development and needs to be improved. Feedback is welcome and highly appreciated and we would like to invite you to discuss it on [mailto:dev@api.openoffice.org dev@api.openoffice.org] (Note: you have to be subscribed on the mailing list).&lt;br /&gt;
&lt;br /&gt;
You can also submit new [http://api.openoffice.org/issues/enter_bug.cgi?component=sdk&amp;amp;issue_type=FEATURE feature] or [http://api.openoffice.org/issues/enter_bug.cgi?component=sdk&amp;amp;issue_type=ENHANCEMENT enhancement] requests in the issue tracker in the category &amp;#039;&amp;#039;&amp;#039;sdk&amp;#039;&amp;#039;&amp;#039; and the subcomponent &amp;#039;&amp;#039;&amp;#039;netbeans-integration&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:NetBeans]]&lt;br /&gt;
[[Category:API]]&lt;br /&gt;
[[Category:Effort]]&lt;/div&gt;</summary>
		<author><name>Holgerbrandl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=OpenOffice_NetBeans_Integration&amp;diff=34963</id>
		<title>OpenOffice NetBeans Integration</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=OpenOffice_NetBeans_Integration&amp;diff=34963"/>
		<updated>2007-06-15T16:04:43Z</updated>

		<summary type="html">&lt;p&gt;Holgerbrandl: added development instructions for Intellij Idea&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:OOo-Netbeans-Plugin.png|right]]&lt;br /&gt;
= Overview =&lt;br /&gt;
The OpenOffice.org API plugin for NetBeans simplifies the development of OpenOffice.org extensions. You can use the OpenOffice.org API to program OpenOffice.org, and automate remote or in process tasks extend OpenOffice.org with completely new functionality. The OpenOffice.org API plugin for NetBeans simplifies accessing and using of the API in new projects and simplifies the task of creating complete OpenOffice.org extension packages (comparable to the NetBeans plugin modules).&lt;br /&gt;
&lt;br /&gt;
= Download and Installation =&lt;br /&gt;
Download the latest version from within NetBeans by clicking on Tools - Update Center. See that &amp;quot;Netbeans Update Center&amp;quot; is selected in the list of available centers and click Next. You can find the plugin in the Features section as &amp;quot;OpenOffice.org API Plugin&amp;quot;. Install it and try it out! The configuration is self explanatory, for detailed information see [[OpenOffice_NetBeans_Integration#Configuration|Configuration]].&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
Overview of the features included in the current plugin.&lt;br /&gt;
== Project Types ==&lt;br /&gt;
All project types create working code. Once the wizard is finished, a working&lt;br /&gt;
compilable project is created. It may not do anything, but it can be used&lt;br /&gt;
in OpenOffice.org from the beginning.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;[[OpenOffice_Simple_UNO_Client_Application_Project_Type|OpenOffice.org Client Application Project Type]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
This project type creates an adapted J2SE client application project with additional support of the &lt;br /&gt;
simple UNO bootstrap feature. To enable this, some pre-compiled glue code is bundled with the client &lt;br /&gt;
application. The result is a portable jar file that bootstraps OpenOffice.org on any supported OS.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;[[OpenOffice_Calc_Add-In_Project_Type|OpenOffice.org Calc Add-In Project Type]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
This project type creates an adapted J2SE class library project with special support for a UNO &lt;br /&gt;
component library and an office extension package. The wizard collects the necessary information for new &lt;br /&gt;
Calc built-in functions and abstracts from the underlying UNO technology.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;[[General_UNO_Component_Project_Type|General UNO Component Project Type]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
This project type creates an adapted J2SE class library project with special support for a&lt;br /&gt;
UNO component library and an OpenOffice.org extension package. The wizard collects information about services &lt;br /&gt;
and additional optional interfaces which should be implemented. Additional IDL types can also be&lt;br /&gt;
defined. A complete code skeleton is generated, with the component helper functions and the default interface methods already implemented.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;[[OpenOffice_Add-On_Project_Type|OpenOffice.org Add-On Project Type]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
This project type creates an adapted J2SE class library project with special support for a UNO &lt;br /&gt;
component library and an OpenOffice.org extension package. The wizard collects the necessary information for an &lt;br /&gt;
OpenOffice.org Add-On component and generates an Add-On specific code skeleton.&lt;br /&gt;
&lt;br /&gt;
== File Types ==&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;xcu file type&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Create an empty xcu file type. The files are recognized in NetBeans and &lt;br /&gt;
syntax highlighting is supported. &lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;xcs file type&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Create an empty xcs file type. The files are recognized in NetBeans and &lt;br /&gt;
syntax highlighting is supported. &lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;UNO idl file type&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
You can use a file type wizard to create idl files. In the first step, you must select the name location&lt;br /&gt;
and UNO type (e.g. Service or Interface). You can add additional &lt;br /&gt;
information in the second step. When an interface is created, the second step asks about&lt;br /&gt;
the functions that the interface should contain. A complete working idl file is created.&lt;br /&gt;
&lt;br /&gt;
== Create, deploy and debug ==&lt;br /&gt;
These are actions that are available in the context menu of an extension project in the &amp;amp;quot;Project&amp;amp;quot; &lt;br /&gt;
view.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Create OXT&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
If necessary, your code is compiled. The resulting jar file is packed into an OXT file, together with other necessary files such as configuration files, a manifest file, and images.  The OXT file is located in the &amp;amp;quot;dist&amp;amp;quot; directory of the project.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Deploy OpenOffice.org Extension&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
If necessary, &amp;amp;quot;Create OXT&amp;amp;quot; is executed. The resulting OXT file is registered inside the user installation of OpenOffice.org.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Debug Extension in Target OpenOffice.org&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
If necessary, &amp;amp;quot;Create OXT&amp;amp;quot; is executed. The resulting OXT file is registered in a temporary user installation of OpenOffice.org, which is located in the build directory of the project. (Cleaning of the project removes the user installation again.) Then OpenOffice.org is started with this user installation and the action that triggers the registered extension must be done in OpenOffice.org.&lt;br /&gt;
Execution stops at any breakpoints added to the code of the extension and debugging can start from there.&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous ==&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;External Jars&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Additional external jars that are used in an extension are automatically copied into the OXT file and added to the extension&amp;#039;s classpath. A registered extension in OpenOffice.org can still use the functionality provided there.&lt;br /&gt;
The jars can be added to the project as a single jar or as part of a NetBeans library. Note: All the jars from a library will be added to the OXT file, independent from their usage in the extension.&lt;br /&gt;
&lt;br /&gt;
= Preview =&lt;br /&gt;
No previews available at the moment.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
The plugin works only in combination with OpenOffice.org and an appropriate OpenOffice.org Software Development Kit (SDK). &lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;[http://download.openoffice.org/2.0.4/index.html#download OpenOffice.org 2.0.4]&amp;#039;&amp;#039;&amp;#039; or &amp;#039;&amp;#039;&amp;#039;[http://www.sun.com/staroffice StarOffice 8 Product Update 4]&amp;#039;&amp;#039;&amp;#039; or higher versions of both programs&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;[http://download.openoffice.org/sdk.html OpenOffice.org Software Development Kit (SDK) 2.0.4]&amp;#039;&amp;#039;&amp;#039; or a higher version&lt;br /&gt;
&lt;br /&gt;
For the Add-on wizard you must have the latest version of the uno-skeletonmaker (comes with OpenOffice.org SDK 2.2.0) and you can download a pre-compiled binary from the file section of the [http://api.openoffice.org API] project ([http://api.openoffice.org/files/documents/22/3823/uno-skeletonmaker_linux_x86zip.zip Linux-x86], [http://api.openoffice.org/files/documents/22/3824/uno-skeletonmaker_solaris_sparc.zip Solaris-Sparc], [http://api.openoffice.org/files/documents/22/3825/uno-skeletonmaker_solaris_x86.zip Solaris-x86], [http://api.openoffice.org/files/documents/22/3826/uno-skeletonmaker_windows.zip Windows])&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Before you can use the new project types you must configure the plugin because it needs an installed OpenOffice.org and OpenOffice.org SDK. &lt;br /&gt;
&lt;br /&gt;
The current version of the plugin asks during the installation for an OpenOffice.org and OpenOffice.org SDK installation. You also configure or change both programs later. Note: If you change the OpenOffice.org or OpenOffice.org SDK installation, these changes are effective for newly created projects only. This will be changed in the future, and you will be asked if you want accept these changes for existing projects.&lt;br /&gt;
&lt;br /&gt;
For changing the office and SDK installation please choose&lt;br /&gt;
*&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;Tools -&amp;gt; Options -&amp;gt; Miscellaneous -&amp;gt; StarOffice/OpenOffice.org Extensions&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&lt;br /&gt;
and select a valid OpenOffice.org and OpenOffice.org SDK installation. &lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:OpenOffice_Extensions_Plugin_Options.png|center]]&amp;lt;br&amp;gt;&lt;br /&gt;
The configuration step automatically installs a new OpenOffice.org library which can be used in other projects to support the OpenOffice.org API. Including this library in your own projects enables context sensitive help and code completion.&lt;br /&gt;
&lt;br /&gt;
== Working with new Project Types ==&lt;br /&gt;
The plugin integrates four new project types under the category &amp;#039;&amp;#039;&amp;#039;StarOffice/OpenOffice.org&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;StarOffice/OpenOffice.org Calc Add-On&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;StarOffice/OpenOffice.org Calc Add-Ins&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;StarOffice/OpenOffice.org Client Application&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;StarOffice/OpenOffice.org Component&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The wizards will collect the necessary information to create the new projects and should follow the NetBeans philosophy. You can simply choose&lt;br /&gt;
*&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;File -&amp;gt; New Project -&amp;gt; StarOffice/OpenOffice.org -&amp;gt; &amp;lt;project_type&amp;gt;&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&lt;br /&gt;
For more details about the project types please take a look at&lt;br /&gt;
*[[OpenOffice_Simple_UNO_Client_Application_Project_Type|OpenOffice.org UNO Client Application Project Type]]&lt;br /&gt;
*[[OpenOffice_Calc_Add-In_Project_Type|OpenOffice.org Calc Add-In Project Type]]&lt;br /&gt;
*[[General_UNO_Component_Project_Type|OpenOffice.org Component Project Type]]&lt;br /&gt;
*[[OpenOffice_Add-On_Project_Type|OpenOffice.org Add-On Project Type]]&lt;br /&gt;
&lt;br /&gt;
== Known Problems and Missing Features ==&lt;br /&gt;
&lt;br /&gt;
* Context sensitive help does not work on Linux (Solaris not yet tested), even the javadoc generated Java UNO runtime reference documentation does not work on Linux. Under Windows both work as expected.&lt;br /&gt;
* The integrated update center module does not work on Unix systems (known bug [http://www.netbeans.org/issues/show_bug.cgi?id=72960&amp;amp;x=23&amp;amp;y=7 72960] in NetBeans which is fixed in NetBeans 6.0). Workaround is to install NetBeans locally where you have write access.&lt;br /&gt;
* The backward compatibility mode for Calc Add-Ins creates still an &amp;#039;&amp;#039;&amp;#039;.oxt&amp;#039;&amp;#039;&amp;#039; extension package. This of course makes no sense for older OpenOffice.org versions because this file extension was first introduced in OO.org 2.0.4. Please simply rename it to &amp;#039;&amp;#039;&amp;#039;.uno.pkg&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Projects are currently not platform independent. If you want to build a project on a different platform you must adapt the &amp;#039;&amp;#039;&amp;#039;&amp;amp;lt;projectname&amp;amp;gt;/nbproject/project-uno.properties&amp;#039;&amp;#039;&amp;#039; file by hand.&lt;br /&gt;
&lt;br /&gt;
= Planned Features =&lt;br /&gt;
The focus is on creating new wizards for various tasks plus common basic functionality. The main programming language is Java. Support for C++ is also planned and depends on the C++ support in NetBeans which will be available at least for NetBeans 6.0. The planned feature list is not final and more specialized wizards for other service provider interfaces (SPI) are coming in the future.&lt;br /&gt;
&lt;br /&gt;
== New Project Types ==&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;[[OpenOffice_Scripting_Project_Type|OpenOffice.org Scripting Project Type]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;This new project type will create an adapted J2SE class library project with special support for OpenOffice.org scripting. It should provide you the possibility to import scripts from OpenOffice.org and open documents, edit, change and build these scripts, debug them and export them back (currently the support is planned for Java scripts only).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;[[OpenOffice_API_Library_Wrapper_Project_Type|OpenOffice.org API Library API Wrapper Project Type]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;This new project type should create a &amp;#039;&amp;#039;Library Wrapper Module&amp;#039;&amp;#039; to support simple usage of the OpenOffice.org API in your own projects. It bundles the necessary API jar files from OpenOffice.org in the library and in client applications. This of course is necessary to make use of the OpenOffice.org API in clients running on machines where no OpenOffice.org is installed and where the communication with OpenOffice.org is made over a remote socket connection.&lt;br /&gt;
&lt;br /&gt;
== Common Features ==&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;UNOIDL Support&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;Means support of a new file type for UNOIDL files, including compiling, UNOIDL editor with syntax highlighting. A wizard for defining new UNOIDL types should be supported as well. &lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Debug Support&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;Means debug support directly from NetBeans for new built and deployed extensions in the OpenOffice.org process as well as the debugging of scripts in OpenOffice.org.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Support of OpenOffice.org extension package&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;This must be defined in detail but it should at least support the browsing of an &amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;.oxt&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039; file in the NetBeans file system similar to jar|zip files. &lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;File type for xcu files&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;This must be defined in detail but we can think of a special editor for OpenOffice .org configuration files.&lt;br /&gt;
&lt;br /&gt;
= Quality Assurance =&lt;br /&gt;
&lt;br /&gt;
If you find bugs please submit a new [http://api.openoffice.org/issues/enter_bug.cgi?component=sdk&amp;amp;issue_type=DEFECT issue] in the category &amp;#039;&amp;#039;&amp;#039;sdk&amp;#039;&amp;#039;&amp;#039; and the subcomponent &amp;#039;&amp;#039;&amp;#039;netbeans-integration&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
* [[OpenOffice_NetBeans_Integration_QA|Schedule for OpenOffice.org NetBeans Integration QA ]]&lt;br /&gt;
&lt;br /&gt;
= Things to be done =&lt;br /&gt;
* [[OpenOffice_NetBeans_Integration/To-Dos|ToDo list]]&lt;br /&gt;
&lt;br /&gt;
= Other IDEs = &lt;br /&gt;
Although there is no dedicated OpenOffice API plugin for Intellij IDEA, it is still possible to use it for plugin-development. In order to do so, it&amp;#039;s just necessary to add the build.xml generated by using the Netbeans plugin-wizard as ant-file within Idea. &lt;br /&gt;
&lt;br /&gt;
To make the ant-file work within IDEA, it is necessary to define two additional ant-properties (oo.sdk.home, office.home). Afterwards you&amp;#039;ll able to build and to deploy your OpenOffice-extensions using Idea.&lt;br /&gt;
&lt;br /&gt;
= Feedback =&lt;br /&gt;
This is a preview only. Everything is under development and needs to be improved. Feedback is welcome and highly appreciated and we would like to invite you to discuss it on [mailto:dev@api.openoffice.org dev@api.openoffice.org] (Note: you have to be subscribed on the mailing list).&lt;br /&gt;
&lt;br /&gt;
You can also submit new [http://api.openoffice.org/issues/enter_bug.cgi?component=sdk&amp;amp;issue_type=FEATURE feature] or [http://api.openoffice.org/issues/enter_bug.cgi?component=sdk&amp;amp;issue_type=ENHANCEMENT enhancement] requests in the issue tracker in the category &amp;#039;&amp;#039;&amp;#039;sdk&amp;#039;&amp;#039;&amp;#039; and the subcomponent &amp;#039;&amp;#039;&amp;#039;netbeans-integration&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:NetBeans]]&lt;br /&gt;
[[Category:API]]&lt;br /&gt;
[[Category:Effort]]&lt;/div&gt;</summary>
		<author><name>Holgerbrandl</name></author>
	</entry>
</feed>