1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #ifndef INCLUDED_REPORTDESIGN_INC_REPORTDEFINITION_HXX
21 #define INCLUDED_REPORTDESIGN_INC_REPORTDEFINITION_HXX
25 #include "ReportHelperDefines.hxx"
27 #include <com/sun/star/datatransfer/XTransferable.hpp>
28 #include <com/sun/star/document/XDocumentEventBroadcaster.hpp>
29 #include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
30 #include <com/sun/star/document/XUndoManagerSupplier.hpp>
31 #include <com/sun/star/frame/XModule.hpp>
32 #include <com/sun/star/frame/XTitle.hpp>
33 #include <com/sun/star/frame/XTitleChangeBroadcaster.hpp>
34 #include <com/sun/star/frame/XUntitledNumbers.hpp>
35 #include <com/sun/star/lang/XServiceInfo.hpp>
36 #include <com/sun/star/lang/XUnoTunnel.hpp>
37 #include <com/sun/star/report/XReportDefinition.hpp>
38 #include <com/sun/star/util/XNumberFormatsSupplier.hpp>
39 #include <com/sun/star/ui/XUIConfigurationManager2.hpp>
41 #include <comphelper/embeddedobjectcontainer.hxx>
42 #include <comphelper/uno3.hxx>
43 #include <cppuhelper/basemutex.hxx>
44 #include <cppuhelper/compbase.hxx>
45 #include <cppuhelper/propertysetmixin.hxx>
46 #include <svx/unomod.hxx>
57 class MediaDescriptor
;
59 namespace reportdesign
61 class OReportComponentProperties
;
62 typedef cppu::PartialWeakComponentImplHelper
< css::report::XReportDefinition
63 , css::document::XEventBroadcaster
64 , css::document::XDocumentEventBroadcaster
65 , css::lang::XServiceInfo
67 , css::lang::XUnoTunnel
68 , css::util::XNumberFormatsSupplier
70 , css::frame::XTitleChangeBroadcaster
71 , css::frame::XUntitledNumbers
72 , css::document::XDocumentPropertiesSupplier
73 , css::datatransfer::XTransferable
74 , css::document::XUndoManagerSupplier
76 > ReportDefinitionBase
;
78 typedef ::cppu::PropertySetMixin
< css::report::XReportDefinition
> ReportDefinitionPropertySet
;
80 struct OReportDefinitionImpl
;
81 /** \class OReportDefinition Defines the implementation of a \interface com:::sun::star::report::XReportDefinition
82 * \ingroup reportdesign_api
85 class REPORTDESIGN_DLLPUBLIC OReportDefinition final
:public ::cppu::BaseMutex
86 ,public ReportDefinitionBase
87 ,public ReportDefinitionPropertySet
88 ,public ::comphelper::IEmbeddedHelper
90 std::shared_ptr
<OReportComponentProperties
> m_aProps
;
91 std::shared_ptr
<OReportDefinitionImpl
> m_pImpl
;
93 OReportDefinition(const OReportDefinition
&) = delete;
94 OReportDefinition
& operator=(const OReportDefinition
&) = delete;
96 void setSection( const OUString
& _sProperty
98 ,const OUString
& _sName
99 ,css::uno::Reference
< css::report::XSection
>& _member
);
101 template <typename T
> void set( const OUString
& _sProperty
107 ::osl::MutexGuard
aGuard(m_aMutex
);
108 prepareSet(_sProperty
, css::uno::Any(_member
), css::uno::Any(Value
), &l
);
114 void set( const OUString
& _sProperty
120 ::osl::MutexGuard
aGuard(m_aMutex
);
121 prepareSet(_sProperty
, css::uno::Any(_member
), css::uno::Any(Value
), &l
);
127 /// write a single XML stream into the package
128 bool WriteThroughComponent(
129 /// the component we export
130 const css::uno::Reference
< css::lang::XComponent
> & xComponent
,
131 const char* pStreamName
, /// the stream name
132 const char* pServiceName
, /// service name of the component
133 /// the argument (XInitialization)
134 const css::uno::Sequence
< css::uno::Any
> & rArguments
,
135 /// output descriptor
136 const css::uno::Sequence
< css::beans::PropertyValue
> & rMediaDesc
,
137 const css::uno::Reference
< css::embed::XStorage
>& _xStorageToSaveTo
);
139 /// write a single output stream
140 /// (to be called either directly or by WriteThroughComponent(...))
141 bool WriteThroughComponent(
142 const css::uno::Reference
< css::io::XOutputStream
> & xOutputStream
,
143 const css::uno::Reference
< css::lang::XComponent
> & xComponent
,
144 const char* pServiceName
,
145 const css::uno::Sequence
< css::uno::Any
> & rArguments
,
146 const css::uno::Sequence
< css::beans::PropertyValue
> & rMediaDesc
);
148 void notifyEvent(const OUString
& _sEventName
);
150 void fillArgs(utl::MediaDescriptor
& _aDescriptor
);
152 css::uno::Reference
< css::frame::XTitle
> impl_getTitleHelper_throw();
153 css::uno::Reference
< css::frame::XUntitledNumbers
> impl_getUntitledHelper_throw();
155 /** loads the report definition from the given storage
160 void impl_loadFromStorage_nolck_throw(
161 const css::uno::Reference
< css::embed::XStorage
>& _rxStorage
,
162 const css::uno::Sequence
< css::beans::PropertyValue
>& _rArguments
165 virtual ~OReportDefinition() override
;
167 /** this function is called upon disposing the component
169 virtual void SAL_CALL
disposing() override
;
171 explicit OReportDefinition(css::uno::Reference
< css::uno::XComponentContext
> const & _xContext
);
172 explicit OReportDefinition(css::uno::Reference
< css::uno::XComponentContext
> const & _xContext
173 ,const css::uno::Reference
< css::lang::XMultiServiceFactory
> & _xFactory
174 ,css::uno::Reference
< css::drawing::XShape
>& _xShape
);
176 /// @throws css::uno::RuntimeException
177 static css::uno::Sequence
< OUString
> getSupportedServiceNames_Static();
178 /// @throws css::uno::RuntimeException
179 static OUString
getImplementationName_Static();
180 static css::uno::Reference
< css::uno::XInterface
>
181 create(css::uno::Reference
< css::uno::XComponentContext
> const & xContext
);
183 css::uno::Reference
< css::uno::XComponentContext
> getContext();
186 /** abstract SdrModel provider */
187 virtual SdrModel
& getSdrModelFromUnoModel() const override
;
190 //TTTT Needed? Or same as above?
191 static const css::uno::Sequence
< sal_Int8
> & getUnoTunnelId();
192 static std::shared_ptr
<rptui::OReportModel
> getSdrModel(const css::uno::Reference
< css::report::XReportDefinition
>& _xReportDefinition
);
195 DECLARE_XINTERFACE( )
196 DECLARE_XTYPEPROVIDER( )
197 // css::lang::XServiceInfo
198 virtual sal_Bool SAL_CALL
supportsService( const OUString
& ServiceName
) override
;
199 virtual OUString SAL_CALL
getImplementationName( ) override
;
200 virtual css::uno::Sequence
< OUString
> SAL_CALL
getSupportedServiceNames( ) override
;
202 // css::beans::XPropertySet
203 virtual css::uno::Reference
< css::beans::XPropertySetInfo
> SAL_CALL
getPropertySetInfo( ) override
;
204 virtual void SAL_CALL
setPropertyValue( const OUString
& aPropertyName
, const css::uno::Any
& aValue
) override
;
205 virtual css::uno::Any SAL_CALL
getPropertyValue( const OUString
& PropertyName
) override
;
206 virtual void SAL_CALL
addPropertyChangeListener( const OUString
& aPropertyName
, const css::uno::Reference
< css::beans::XPropertyChangeListener
>& xListener
) override
;
207 virtual void SAL_CALL
removePropertyChangeListener( const OUString
& aPropertyName
, const css::uno::Reference
< css::beans::XPropertyChangeListener
>& aListener
) override
;
208 virtual void SAL_CALL
addVetoableChangeListener( const OUString
& PropertyName
, const css::uno::Reference
< css::beans::XVetoableChangeListener
>& aListener
) override
;
209 virtual void SAL_CALL
removeVetoableChangeListener( const OUString
& PropertyName
, const css::uno::Reference
< css::beans::XVetoableChangeListener
>& aListener
) override
;
212 virtual OUString SAL_CALL
getMimeType() override
;
213 virtual void SAL_CALL
setMimeType( const OUString
& _mimetype
) override
;
214 virtual OUString SAL_CALL
getCaption() override
;
215 virtual void SAL_CALL
setCaption( const OUString
& _caption
) override
;
216 virtual ::sal_Int16 SAL_CALL
getGroupKeepTogether() override
;
217 virtual void SAL_CALL
setGroupKeepTogether( ::sal_Int16 _groupkeeptogether
) override
;
218 virtual ::sal_Int16 SAL_CALL
getPageHeaderOption() override
;
219 virtual void SAL_CALL
setPageHeaderOption( ::sal_Int16 _pageheaderoption
) override
;
220 virtual ::sal_Int16 SAL_CALL
getPageFooterOption() override
;
221 virtual void SAL_CALL
setPageFooterOption( ::sal_Int16 _pagefooteroption
) override
;
222 virtual OUString SAL_CALL
getCommand() override
;
223 virtual void SAL_CALL
setCommand( const OUString
& _command
) override
;
224 virtual ::sal_Int32 SAL_CALL
getCommandType() override
;
225 virtual void SAL_CALL
setCommandType( ::sal_Int32 _commandtype
) override
;
226 virtual OUString SAL_CALL
getFilter() override
;
227 virtual void SAL_CALL
setFilter( const OUString
& _filter
) override
;
228 virtual sal_Bool SAL_CALL
getEscapeProcessing() override
;
229 virtual void SAL_CALL
setEscapeProcessing( sal_Bool _escapeprocessing
) override
;
230 virtual css::uno::Reference
< css::sdbc::XConnection
> SAL_CALL
getActiveConnection() override
;
231 virtual void SAL_CALL
setActiveConnection( const css::uno::Reference
< css::sdbc::XConnection
>& _activeconnection
) override
;
232 virtual OUString SAL_CALL
getDataSourceName() override
;
233 virtual void SAL_CALL
setDataSourceName( const OUString
& _datasourcename
) override
;
234 virtual sal_Bool SAL_CALL
getReportHeaderOn() override
;
235 virtual void SAL_CALL
setReportHeaderOn( sal_Bool _reportheaderon
) override
;
236 virtual sal_Bool SAL_CALL
getReportFooterOn() override
;
237 virtual void SAL_CALL
setReportFooterOn( sal_Bool _reportfooteron
) override
;
238 virtual sal_Bool SAL_CALL
getPageHeaderOn() override
;
239 virtual void SAL_CALL
setPageHeaderOn( sal_Bool _pageheaderon
) override
;
240 virtual sal_Bool SAL_CALL
getPageFooterOn() override
;
241 virtual void SAL_CALL
setPageFooterOn( sal_Bool _pagefooteron
) override
;
242 virtual css::uno::Reference
< css::report::XGroups
> SAL_CALL
getGroups() override
;
243 virtual css::uno::Reference
< css::report::XSection
> SAL_CALL
getReportHeader() override
;
244 virtual css::uno::Reference
< css::report::XSection
> SAL_CALL
getPageHeader() override
;
245 virtual css::uno::Reference
< css::report::XSection
> SAL_CALL
getDetail() override
;
246 virtual css::uno::Reference
< css::report::XSection
> SAL_CALL
getPageFooter() override
;
247 virtual css::uno::Reference
< css::report::XSection
> SAL_CALL
getReportFooter() override
;
248 virtual css::uno::Reference
< css::document::XEventBroadcaster
> SAL_CALL
getEventBroadcaster( ) override
;
249 virtual css::uno::Sequence
< OUString
> SAL_CALL
getAvailableMimeTypes( ) override
;
252 REPORTCOMPONENT_HEADER()
258 virtual OUString SAL_CALL
getShapeType( ) override
;
261 virtual css::uno::Reference
< css::report::XFunctions
> SAL_CALL
getFunctions() override
;
264 virtual css::uno::Reference
< css::util::XCloneable
> SAL_CALL
createClone( ) override
;
267 virtual void SAL_CALL
dispose() override
;
268 virtual void SAL_CALL
addEventListener(const css::uno::Reference
< css::lang::XEventListener
> & aListener
) override
270 cppu::WeakComponentImplHelperBase::addEventListener(aListener
);
272 virtual void SAL_CALL
removeEventListener(const css::uno::Reference
< css::lang::XEventListener
> & aListener
) override
274 cppu::WeakComponentImplHelperBase::removeEventListener(aListener
);
278 virtual css::uno::Reference
< css::uno::XInterface
> SAL_CALL
getParent( ) override
;
279 virtual void SAL_CALL
setParent( const css::uno::Reference
< css::uno::XInterface
>& Parent
) override
;
282 virtual void SAL_CALL
addCloseListener( const css::uno::Reference
< css::util::XCloseListener
>& Listener
) override
;
283 virtual void SAL_CALL
removeCloseListener( const css::uno::Reference
< css::util::XCloseListener
>& Listener
) override
;
286 virtual void SAL_CALL
close( sal_Bool DeliverOwnership
) override
;
289 virtual sal_Bool SAL_CALL
attachResource( const OUString
& URL
, const css::uno::Sequence
< css::beans::PropertyValue
>& Arguments
) override
;
290 virtual OUString SAL_CALL
getURL( ) override
;
291 virtual css::uno::Sequence
< css::beans::PropertyValue
> SAL_CALL
getArgs( ) override
;
292 virtual void SAL_CALL
connectController( const css::uno::Reference
< css::frame::XController
>& Controller
) override
;
293 virtual void SAL_CALL
disconnectController( const css::uno::Reference
< css::frame::XController
>& Controller
) override
;
294 virtual void SAL_CALL
lockControllers( ) override
;
295 virtual void SAL_CALL
unlockControllers( ) override
;
296 virtual sal_Bool SAL_CALL
hasControllersLocked( ) override
;
297 virtual css::uno::Reference
< css::frame::XController
> SAL_CALL
getCurrentController( ) override
;
298 virtual void SAL_CALL
setCurrentController( const css::uno::Reference
< css::frame::XController
>& Controller
) override
;
299 virtual css::uno::Reference
< css::uno::XInterface
> SAL_CALL
getCurrentSelection( ) override
;
301 // XStorageBasedDocument
302 virtual void SAL_CALL
loadFromStorage( const css::uno::Reference
< css::embed::XStorage
>& xStorage
, const css::uno::Sequence
< css::beans::PropertyValue
>& aMediaDescriptor
) override
;
303 virtual void SAL_CALL
storeToStorage( const css::uno::Reference
< css::embed::XStorage
>& xStorage
, const css::uno::Sequence
< css::beans::PropertyValue
>& aMediaDescriptor
) override
;
304 virtual void SAL_CALL
switchToStorage( const css::uno::Reference
< css::embed::XStorage
>& xStorage
) override
;
305 virtual css::uno::Reference
< css::embed::XStorage
> SAL_CALL
getDocumentStorage( ) override
;
306 virtual void SAL_CALL
addStorageChangeListener( const css::uno::Reference
< css::document::XStorageChangeListener
>& xListener
) override
;
307 virtual void SAL_CALL
removeStorageChangeListener( const css::uno::Reference
< css::document::XStorageChangeListener
>& xListener
) override
;
310 virtual css::uno::Reference
< css::container::XIndexAccess
> SAL_CALL
getViewData( ) override
;
311 virtual void SAL_CALL
setViewData( const css::uno::Reference
< css::container::XIndexAccess
>& Data
) override
;
314 virtual void SAL_CALL
initNew( ) override
;
315 virtual void SAL_CALL
load( const css::uno::Sequence
< css::beans::PropertyValue
>& lArguments
) override
;
318 virtual void SAL_CALL
setVisualAreaSize( ::sal_Int64 nAspect
, const css::awt::Size
& aSize
) override
;
319 virtual css::awt::Size SAL_CALL
getVisualAreaSize( ::sal_Int64 nAspect
) override
;
320 virtual css::embed::VisualRepresentation SAL_CALL
getPreferredVisualRepresentation( ::sal_Int64 nAspect
) override
;
321 virtual ::sal_Int32 SAL_CALL
getMapUnit( ::sal_Int64 nAspect
) override
;
324 virtual sal_Bool SAL_CALL
disableSetModified( ) override
;
325 virtual sal_Bool SAL_CALL
enableSetModified( ) override
;
326 virtual sal_Bool SAL_CALL
isSetModifiedEnabled( ) override
;
329 virtual sal_Bool SAL_CALL
isModified( ) override
;
330 virtual void SAL_CALL
setModified( sal_Bool bModified
) override
;
332 // XModifyBroadcaster
333 virtual void SAL_CALL
addModifyListener( const css::uno::Reference
< css::util::XModifyListener
>& aListener
) override
;
334 virtual void SAL_CALL
removeModifyListener( const css::uno::Reference
< css::util::XModifyListener
>& aListener
) override
;
336 // document::XEventBroadcaster
337 virtual void SAL_CALL
addEventListener( const css::uno::Reference
< css::document::XEventListener
>& aListener
) override
;
338 virtual void SAL_CALL
removeEventListener( const css::uno::Reference
< css::document::XEventListener
>& aListener
) override
;
340 // document::XDocumentEventBroadcaster
341 virtual void SAL_CALL
addDocumentEventListener( const css::uno::Reference
< css::document::XDocumentEventListener
>& rListener
) override
;
342 virtual void SAL_CALL
removeDocumentEventListener( const css::uno::Reference
< css::document::XDocumentEventListener
>& rListener
) override
;
343 virtual void SAL_CALL
notifyDocumentEvent( const OUString
& rEventName
, const css::uno::Reference
< css::frame::XController2
>& rViewController
, const css::uno::Any
& rSupplement
) override
;
345 // XUIConfigurationManagerSupplier
346 virtual css::uno::Reference
< css::ui::XUIConfigurationManager
> SAL_CALL
getUIConfigurationManager( ) override
;
348 // XDocumentSubStorageSupplier
349 virtual css::uno::Reference
< css::embed::XStorage
> SAL_CALL
getDocumentSubStorage( const OUString
& aStorageName
, sal_Int32 nMode
) override
;
350 virtual css::uno::Sequence
< OUString
> SAL_CALL
getDocumentSubStoragesNames( ) override
;
352 // css::lang::XUnoTunnel
353 virtual sal_Int64 SAL_CALL
getSomething( const css::uno::Sequence
< sal_Int8
>& aIdentifier
) override
;
355 // SvxUnoDrawMSFactory
356 virtual css::uno::Reference
< css::uno::XInterface
> SAL_CALL
createInstance( const OUString
& aServiceSpecifier
) override
;
357 virtual css::uno::Reference
< css::uno::XInterface
> SAL_CALL
createInstanceWithArguments( const OUString
& ServiceSpecifier
, const css::uno::Sequence
< css::uno::Any
>& Arguments
) override
;
358 css::uno::Sequence
< OUString
> SAL_CALL
getAvailableServiceNames() override
;
360 // XStyleFamiliesSupplier
361 virtual css::uno::Reference
< css::container::XNameAccess
> SAL_CALL
getStyleFamilies( ) override
;
364 virtual void SAL_CALL
setIdentifier( const OUString
& Identifier
) override
;
365 virtual OUString SAL_CALL
getIdentifier( ) override
;
367 // XNumberFormatsSupplier
368 virtual css::uno::Reference
< css::beans::XPropertySet
> SAL_CALL
getNumberFormatSettings( ) override
;
369 virtual css::uno::Reference
< css::util::XNumberFormats
> SAL_CALL
getNumberFormats( ) override
;
372 virtual OUString SAL_CALL
getTitle( ) override
;
373 virtual void SAL_CALL
setTitle( const OUString
& sTitle
) override
;
375 // XTitleChangeBroadcaster
376 virtual void SAL_CALL
addTitleChangeListener( const css::uno::Reference
< css::frame::XTitleChangeListener
>& xListener
) override
;
377 virtual void SAL_CALL
removeTitleChangeListener( const css::uno::Reference
< css::frame::XTitleChangeListener
>& xListener
) override
;
380 virtual ::sal_Int32 SAL_CALL
leaseNumber( const css::uno::Reference
< css::uno::XInterface
>& xComponent
) override
;
381 virtual void SAL_CALL
releaseNumber( ::sal_Int32 nNumber
) override
;
382 virtual void SAL_CALL
releaseNumberForComponent( const css::uno::Reference
< css::uno::XInterface
>& xComponent
) override
;
383 virtual OUString SAL_CALL
getUntitledPrefix( ) override
;
385 // XDocumentPropertiesSupplier
386 virtual css::uno::Reference
< css::document::XDocumentProperties
> SAL_CALL
getDocumentProperties( ) override
;
389 virtual css::uno::Any SAL_CALL
getTransferData( const css::datatransfer::DataFlavor
& aFlavor
) override
;
390 virtual css::uno::Sequence
< css::datatransfer::DataFlavor
> SAL_CALL
getTransferDataFlavors( ) override
;
391 virtual sal_Bool SAL_CALL
isDataFlavorSupported( const css::datatransfer::DataFlavor
& aFlavor
) override
;
393 // XUndoManagerSupplier
394 virtual css::uno::Reference
< css::document::XUndoManager
> SAL_CALL
getUndoManager( ) override
;
396 // comphelper::IEmbeddedHelper
397 virtual css::uno::Reference
< css::embed::XStorage
> getStorage() const override
;
398 virtual ::comphelper::EmbeddedObjectContainer
& getEmbeddedObjectContainer() const override
;
399 virtual css::uno::Reference
< css::task::XInteractionHandler
> getInteractionHandler() const override
;
400 virtual bool isEnableSetModified() const override
;
401 virtual OUString
getDocumentBaseURL() const override
;
403 /// @throws css::uno::RuntimeException
404 css::uno::Reference
< css::ui::XUIConfigurationManager2
> getUIConfigurationManager2( );
407 } // namespace reportdesign
409 #endif // INCLUDED_REPORTDESIGN_INC_REPORTDEFINITION_HXX
411 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */