diff options
author | Andrzej Hunt <andrzej.hunt@collabora.com> | 2014-06-09 11:33:25 +0100 |
---|---|---|
committer | Michael Meeks <michael.meeks@collabora.com> | 2014-06-11 13:44:55 +0100 |
commit | 9a1b2970ed83b7666957ca6d0394a75b5d0717fa (patch) | |
tree | 53c056fc2641b493f7d2fe7e93bc84b65e4c75b5 /include | |
parent | bb761be472ea9a590837dc6c1ca295387ac4c0b7 (diff) |
Move liblibreoffice into LibreOfficeKit.
Change-Id: Ib2754a77be470faaa6f9b27644a1d8dd082ed2b8
Diffstat (limited to 'include')
-rw-r--r-- | include/LibreOfficeKit/LibreOfficeKit.h | 52 | ||||
-rw-r--r-- | include/LibreOfficeKit/LibreOfficeKit.hxx | 97 |
2 files changed, 149 insertions, 0 deletions
diff --git a/include/LibreOfficeKit/LibreOfficeKit.h b/include/LibreOfficeKit/LibreOfficeKit.h new file mode 100644 index 000000000000..9176eba0ae38 --- /dev/null +++ b/include/LibreOfficeKit/LibreOfficeKit.h @@ -0,0 +1,52 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef INCLUDED_DESKTOP_INC_LIBREOFFICEKIT_H +#define INCLUDED_DESKTOP_INC_LIBREOFFICEKIT_H + +#ifdef __cplusplus +extern "C" +{ +#endif + +typedef struct _LibreOffice LibreOffice; +typedef struct _LibreOfficeDocument LibreOfficeDocument; + +struct _LibreOffice +{ + int nSize; + + void (*destroy) (LibreOffice *pThis); + int (*initialize) (LibreOffice *pThis, const char *pInstallPath); + LibreOfficeDocument* (*documentLoad) (LibreOffice *pThis, const char *pURL); + char* (*getError) (LibreOffice *pThis); +}; + +struct _LibreOfficeDocument +{ + int nSize; + + void (*destroy) (LibreOfficeDocument* pThis); + int (*saveAs) (LibreOfficeDocument* pThis, + const char *pUrl, + const char *pFormat); + int (*saveAsWithOptions) (LibreOfficeDocument* pThis, + const char *pUrl, + const char *pFormat, + const char *pFilterOptions); +}; + +LibreOffice* lo_init (const char* pInstallPath); + +#ifdef __cplusplus +} +#endif + +#endif +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/LibreOfficeKit/LibreOfficeKit.hxx b/include/LibreOfficeKit/LibreOfficeKit.hxx new file mode 100644 index 000000000000..d689e4b9bc97 --- /dev/null +++ b/include/LibreOfficeKit/LibreOfficeKit.hxx @@ -0,0 +1,97 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef INCLUDED_DESKTOP_INC_LIBREOFFICEKIT_HXX +#define INCLUDED_DESKTOP_INC_LIBREOFFICEKIT_HXX + +#include "LibreOfficeKit.h" + +/* + * The reasons this C++ code is not as pretty as it could be are: + * a) provide a pure C API - that's useful for some people + * b) allow ABI stability - C++ vtables are not good for that. + * c) avoid C++ types as part of the API. + */ + +class LODocument +{ +private: + LibreOfficeDocument* mpDoc; + +public: + inline LODocument(LibreOfficeDocument* pDoc) : + mpDoc(pDoc) + {} + + inline ~LODocument() + { + mpDoc->destroy(mpDoc); + } + + // Save as the given format, if format is NULL sniff from ext'n + inline bool saveAs(const char* pUrl, const char* pFormat = NULL) + { + return mpDoc->saveAs(mpDoc, pUrl, pFormat); + } + + inline bool saveAsWithOptions(const char* pUrl, const char* pFormat = NULL, const char* pFilterOptions = NULL) + { + // available since LibreOffice 4.3 + if (!mpDoc->saveAsWithOptions) + return false; + + return mpDoc->saveAsWithOptions(mpDoc, pUrl, pFormat, pFilterOptions); + } +}; + +class LibLibreOffice +{ +private: + LibreOffice* mpThis; + +public: + inline LibLibreOffice(LibreOffice* pThis) : + mpThis(pThis) + {} + + inline ~LibLibreOffice() + { + mpThis->destroy(mpThis); + } + + inline bool initialize(const char* pInstallPath) + { + return mpThis->initialize(mpThis, pInstallPath); + } + + inline LODocument* documentLoad(const char* pUrl) + { + LibreOfficeDocument* pDoc = mpThis->documentLoad(mpThis, pUrl); + if (pDoc == NULL) + return NULL; + return new LODocument(pDoc); + } + + // return the last error as a string, free me. + inline char* getError() + { + return mpThis->getError(mpThis); + } +}; + +inline LibLibreOffice* lo_cpp_init(const char* pInstallPath) +{ + LibreOffice* pThis = lo_init(pInstallPath); + if (pThis == NULL || pThis->nSize == 0) + return NULL; + return new LibLibreOffice(pThis); +} + +#endif +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |