10#include <com/sun/star/awt/XWindow.hpp>
11#include <com/sun/star/beans/PropertyValue.hpp>
12#include <com/sun/star/document/XExtendedFilterDetection.hpp>
13#include <com/sun/star/document/XFilter.hpp>
14#include <com/sun/star/document/XImporter.hpp>
15#include <com/sun/star/io/XInputStream.hpp>
16#include <com/sun/star/lang/XInitialization.hpp>
17#include <com/sun/star/lang/XServiceInfo.hpp>
18#include <com/sun/star/uno/Reference.h>
19#include <com/sun/star/uno/XComponentContext.hpp>
20#include <com/sun/star/xml/sax/XFastDocumentHandler.hpp>
22#include <osl/diagnose.h>
40template <
class Generator>
42 :
public cppu::WeakImplHelper<css::document::XFilter, css::document::XImporter,
43 css::document::XExtendedFilterDetection,
44 css::lang::XInitialization>
52 const css::uno::Reference<css::uno::XComponentContext>&
getXContext()
const
59 filter(
const css::uno::Sequence<css::beans::PropertyValue>& rDescriptor)
override
62 css::uno::Reference<css::io::XInputStream> xInputStream;
64 if (!xInputStream.is())
70 css::uno::Reference<css::awt::XWindow> xDialogParent;
71 aDescriptor[
"ParentWindow"] >>= xDialogParent;
74 css::uno::Reference<XInterface> xInternalFilter
75 =
mxContext->getServiceManager()->createInstanceWithContext(
77 assert(xInternalFilter);
78 css::uno::Reference<css::xml::sax::XFastDocumentHandler> xInternalHandler(
79 xInternalFilter, css::uno::UNO_QUERY);
80 assert(xInternalHandler);
83 css::uno::Reference<css::document::XImporter> xImporter(xInternalHandler,
86 xImporter->setTargetDocument(
mxDoc);
96 exporter.addDocumentHandler(&aHandler, ODF_FLAT_XML);
104 virtual void SAL_CALL
cancel()
override {}
108 virtual void SAL_CALL
115 virtual OUString SAL_CALL
116 detect(css::uno::Sequence<css::beans::PropertyValue>& Descriptor)
override
119 sal_Int32
nLength = Descriptor.getLength();
121 const css::beans::PropertyValue* pValue = Descriptor.getConstArray();
122 css::uno::Reference<css::io::XInputStream> xInputStream;
125 if (pValue[
i].
Name ==
"TypeName")
127 else if (pValue[
i].
Name ==
"InputStream")
128 pValue[
i].Value >>= xInputStream;
131 if (!xInputStream.is())
138 assert(!sTypeName.isEmpty());
142 Descriptor.realloc(
nLength + 1);
143 Descriptor.getArray()[location].Name =
"TypeName";
146 Descriptor.getArray()[location].Value <<= sTypeName;
153 virtual void SAL_CALL
154 initialize(
const css::uno::Sequence<css::uno::Any>& )
override
159 virtual bool doDetectFormat(librevenge::RVNGInputStream& rInput, OUString& rTypeName) = 0;
165 css::uno::Reference<css::uno::XComponentContext>
mxContext;
166 css::uno::Reference<css::lang::XComponent>
mxDoc;
172template <
class Generator>
173struct ImportFilter :
public cppu::ImplInheritanceHelper<detail::ImportFilterImpl<Generator>,
174 css::lang::XServiceInfo>
176 ImportFilter(
const css::uno::Reference<css::uno::XComponentContext>& rxContext)
177 :
cppu::ImplInheritanceHelper<
detail::ImportFilterImpl<Generator>, css::lang::XServiceInfo>(
static weld::Window * GetFrameWeld(const css::uno::Reference< css::awt::XWindow > &rWindow)
virtual bool doImportDocument(weld::Window *pParent, librevenge::RVNGInputStream &rInput, Generator &rGenerator, utl::MediaDescriptor &rDescriptor)=0
css::uno::Reference< css::lang::XComponent > mxDoc
virtual void SAL_CALL initialize(const css::uno::Sequence< css::uno::Any > &) override
virtual sal_Bool SAL_CALL filter(const css::uno::Sequence< css::beans::PropertyValue > &rDescriptor) override
virtual bool doDetectFormat(librevenge::RVNGInputStream &rInput, OUString &rTypeName)=0
virtual void SAL_CALL setTargetDocument(const css::uno::Reference< css::lang::XComponent > &xDoc) override
virtual void SAL_CALL cancel() override
virtual OUString SAL_CALL detect(css::uno::Sequence< css::beans::PropertyValue > &Descriptor) override
css::uno::Reference< css::uno::XComponentContext > mxContext
const css::uno::Reference< css::uno::XComponentContext > & getXContext() const
ImportFilterImpl(css::uno::Reference< css::uno::XComponentContext > xContext)
virtual void doRegisterHandlers(Generator &)
const css::uno::Reference< css::lang::XComponent > & getTargetDocument() const
Definition of XML import service used with a Generator.
A base class for import filters.
ImportFilter(const css::uno::Reference< css::uno::XComponentContext > &rxContext)