Documentation/DevGuide

What This Manual Covers
This manual describes how to write programs using the component technology UNO (Universal Network Objects) with LibreOffice.

Most examples provided are written in Java. As well as Java, the language binding for C++, the UNO access for LibreOffice Basic and the OLE Automation bridge that uses LibreOffice through Microsoft's component technology COM/DCOM is described.

How This Book is Organized
Every page of this book has a Table of Contents at the right side of the page. This TOC shows the content of the current part and navigation links to browse parts and pages of this book.

1. First Steps
 * The First Steps chapter describes the setting up of a Java UNO development environment to achieve the solutions you need. At the end of this chapter, you will be equipped with the essentials required for the following chapters about the LibreOffice applications.

2. Professional UNO
 * This chapter introduces API and UNO concepts and explains the specifics of the programming languages and technologies that can be used with UNO. It will help you to write industrial strength UNO programs, use one of the languages besides Java or improve your understanding of the API reference.

3. Writing UNO Components 
 * This chapter describes how to write UNO components. It also provides an insight into the UNOIDL (UNO Interface Definition Language) language and the inner workings of the service manager. Before beginning this chapter, you should be familiar with the First Steps and Professional UNO chapters.

4. Extensions 
 * This chapter describes the various aspects of LibreOffice Extensions. It explains the specifics of how Extensions can be developed, and provides an overview of the various things that you must do to develop your own Extension.

5. Advanced UNO 
 * This chapter describes the technical basis of UNO, how the language bindings and bridges work, how the service manager goes about its tasks and what the core reflection actually does.

6. Office Development 
 * This chapter describes the application framework of the LibreOffice application that includes how the LibreOffice API deals with the LibreOffice application and the features available across all parts of LibreOffice.


 * Chapters 7-10 describe how LibreOffice revolves around documents. These chapters teach you what to do with these documents programmatically.

7. Text Documents
 * This chapter text document describes the document model which is able to handle text contents. By model we mean data that forms the basis of a document and is organized in a manner that allows working with the data independently from their visual representation in a graphical user interface.

8. Spreadsheet Documents
 * This chapter discusses spreadsheet objects. Spreadsheets support complex calculations, but support only basic formatting capabilities.

9. Drawings and Presentations
 * This chapter discusses Drawing objects. Draw is a vector-oriented applications with the ability to create drawings. It support a number of different shape types, such as rectangle, text, curve, or graphic shapes, that can be edited and arranged in various ways. Draw is especially adapted for printed or standalone graphics.

10. Charts
 * This chapter discusses Charts. Chart documents produce graphical representations of numeric data. They are always embedded objects inside other OpenOffice.org documents. The chart document is a document model similar to Writer, Calc and Draw document models, and it can be edited using this document model.

11. LibreOffice Basic
 * This chapter provides the functionality to create and manage Basic macros and dialogs.

12. Database Access
 * This chapter describes how you can take advantage of this capability in your own projects. LibreOffice can connect to databases in a universal manner.

13. Forms
 * This chapter describes how LibreOffice documents contain form controls that are programmed using an event-driven programming model. The Forms chapter shows you how to enhance your documents with controls for data input.

14. Universal Content Broker
 * This chapter describes how the Universal Content Broker is the generic resource access service used by the entire office application. It handles not only files and directories, but hierarchic and non-hierarchic contents, in general.

15. Configuration Management
 * This chapter describes how the LibreOffice API offers access to the office configuration options that are found in the Tools > Options dialog.

16. JavaBean for Office Components
 * This chapter describes how the OfficeBean JavaBean component allows the developer to integrate office functionality in Java applications.

17. Accessibility
 * This chapter explains the Accessibility API, and how you can work to bring your applications in line with accessibility requirements.

18. Scripting Framework
 * This chapter describes the user interface features of the Scripting Framework, and provides a guide on how to get started with writing Scripting Framework macros.

19. Graphical User Interfaces
 * This chapter is for extension developers who want to add functionality to their LibreOffice application and want to create a consistent user interface. It explains how you can add your own GUI to your LibreOffice applications.

Appendices
Appendix A. Guidelines and Specifications
 * The guidelines and specifications provide extra information about the LibreOffice API.

Appendix B. IDL Documentation Guidelines
 * How IDL files are used to create correct online documentation for the LibreOffice API.

Appendix C. Universal Content Providers
 * A listing of universal content providers.

Appendix D. UNOIDL Syntax Specification
 * A listing of the language specification for UNOIDL in pseudo BNF notation (the IDL grammar).

Glossary
 * Definition and explanation of LibreOffice terms, concepts and abbreviations.

LibreOffice Version History
LibreOffice (LO) started as a fork of OpenOffice.org in 2010, but after several years of development, it is far superior compared to the original OpenOffice.org and the successor Apache OpenOffice.

Before that, OpenOffice has existed in several versions:


 * OpenOffice.org (OOo) - an open source edition
 * StarOffice and StarSuite - "branded" editions derived from OpenOffice.org
 * Apache OpenOffice (AOO) - in 2011, Oracle donated the code of OpenOffice.org to Apache.

In 2000, Sun Microsystems released the source code of their current developer version of StarOffice on OpenOffice.org, and made the ongoing development process public. Sun's development team, which developed StarOffice, continued its work on OpenOffice.org, and developers from all over the world joined them to port, translate, repair bugs and discuss future plans. StarOffice 6.0 and OpenOffice.org 1.0, which were released in spring 2002, share the same code basis.

Related documentation
The API and UDK projects on LibreOffice have related documentation, examples and FAQs (frequently asked questions) on the LibreOffice API. Most important are probably the references, you can find them at api.libreoffice.org, which provides:


 * The API Reference covers the programmable features of LibreOffice.
 * The Java Reference describes the features of the Java UNO runtime environment.
 * The C++ Reference is about the C++ language binding.

Conventions
This book uses the following formatting conventions:
 * Bold refers to the keys on the keyboard or elements of a user interface, such as the OK button or File menu.
 * Italics are used for emphasis and to signify the first use of a term. Italics are also used for web sites, file and directory names and email addresses.
 * is used in all Code Listings and for everything that is typed when programming.

LibreOffice
The acknowledgement for the LibreOffice Developer's Guide will be added here. This guide is currently under major revision.

OpenOffice.org
This acknowledgement is from the original OpenOffice.org 3.1 Developer's Guide, released in April 2009.

A publication like this can never be the work of a single person – it is the result of tremendous team effort. Of course, the OpenOffice.org/StarOffice development team played the most important role by creating the API in the first place. The knowledge and experience of this team will be documented here. Furthermore, there were several devoted individuals who contributed to making this documentation reality.

First of all, we would like to thank Ralf Kuhnert and Dietrich Schulten. Using their technical expertise and articulate mode of expression, they accomplished the challenging task of gathering the wealth of API knowledge from the minds of the developers and transforming it into an understandable document.

Many reviewers were involved in the creation of this documentation. Special thanks go to Michael Hönnig who was one of the few who reviewed almost every single word. His input also played a decisive role in how the documentation was structured. A big thank you also goes to Diane O'Brien for taking on the daunting task of reviewing the final draft and providing us with extensive feed back at such short notice.

When looking at the diagrams and graphics, it is clear that a creative person with the right touch for design and aesthetics was involved. Many thanks, therefore, are due Stella Schulze who redrew all of the diagrams and graphics from the originals supplied by various developers. We also thank Svante Schubert who converted the original XML file format into HTML pages and was most patient with us in spite of our demands and changes. Special thanks also to Jörg Heilig, who made this whole project possible.

Jürgen would like to thank Götz Wohlberg for all his help in getting the right people involved and making sure things ran smoothly.

Götz would like to thank Jürgen Schmidt for his never-ending energy to hold everything together and for pushing the contributors in the right direction. He can be considered as the heart of the opus because of his guidance and endurance throughout the entire project.

We would like to take this opportunity to thank all these people – and anyone else we forgot! – for their support.

Jürgen Schmidt, Götz Wohlberg