LibreOffice Module reportdesign (master) 1
Section.cxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
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/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
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 .
18 */
19#include <Section.hxx>
23#include <com/sun/star/report/XReportComponent.hpp>
24#include <com/sun/star/report/ForceNewPage.hpp>
25#include <com/sun/star/lang/NoSupportException.hpp>
26#include <strings.hxx>
27#include <Tools.hxx>
28#include <RptModel.hxx>
29#include <RptPage.hxx>
31#include <ReportDefinition.hxx>
32#include <vcl/svapp.hxx>
33
34namespace reportdesign
35{
36
37 using namespace com::sun::star;
38 using namespace comphelper;
39
40
41static uno::Sequence< OUString> lcl_getGroupAbsent()
42{
43 const OUString pProps[] = {
44 OUString(PROPERTY_CANGROW)
45 ,OUString(PROPERTY_CANSHRINK)
46 };
47
48 return uno::Sequence< OUString >(pProps,SAL_N_ELEMENTS(pProps));
49}
50
51
52static uno::Sequence< OUString> lcl_getAbsent(bool _bPageSection)
53{
54 if ( _bPageSection )
55 {
56 const OUString pProps[] = {
57 OUString(PROPERTY_FORCENEWPAGE)
58 ,OUString(PROPERTY_NEWROWORCOL)
59 ,OUString(PROPERTY_KEEPTOGETHER)
60 ,OUString(PROPERTY_CANGROW)
61 ,OUString(PROPERTY_CANSHRINK)
62 ,OUString(PROPERTY_REPEATSECTION)
63 };
64 return uno::Sequence< OUString >(pProps,SAL_N_ELEMENTS(pProps));
65 }
66
67 const OUString pProps[] = {
68 OUString(PROPERTY_CANGROW)
69 ,OUString(PROPERTY_CANSHRINK)
70 ,OUString(PROPERTY_REPEATSECTION)
71 };
72
73 return uno::Sequence< OUString >(pProps,SAL_N_ELEMENTS(pProps));
74}
75
76uno::Reference<report::XSection> OSection::createOSection(
77 const uno::Reference< report::XReportDefinition >& xParentDef,
78 const uno::Reference< uno::XComponentContext >& context,
79 bool const bPageSection)
80{
82 new OSection(xParentDef, nullptr, context, lcl_getAbsent(bPageSection));
83 pNew->init();
84 return pNew;
85}
86
87uno::Reference<report::XSection> OSection::createOSection(
88 const uno::Reference< report::XGroup >& xParentGroup,
89 const uno::Reference< uno::XComponentContext >& context)
90{
92 new OSection(nullptr, xParentGroup, context, lcl_getGroupAbsent());
93 pNew->init();
94 return pNew;
95}
96
97
98OSection::OSection(const uno::Reference< report::XReportDefinition >& xParentDef
99 ,const uno::Reference< report::XGroup >& xParentGroup
100 ,const uno::Reference< uno::XComponentContext >& context
101 ,uno::Sequence< OUString> const& rStrings)
103,SectionPropertySet(context,SectionPropertySet::IMPLEMENTS_PROPERTY_SET,rStrings)
104,m_aContainerListeners(m_aMutex)
105,m_xGroup(xParentGroup)
106,m_xReportDefinition(xParentDef)
107,m_nHeight(3000)
108,m_nBackgroundColor(COL_TRANSPARENT)
109,m_nForceNewPage(report::ForceNewPage::NONE)
110,m_nNewRowOrCol(report::ForceNewPage::NONE)
111,m_bKeepTogether(false)
112,m_bRepeatSection(false)
113,m_bVisible(true)
114,m_bBacktransparent(true)
115,m_bInRemoveNotify(false)
116,m_bInInsertNotify(false)
117{
118}
119
120// TODO: VirtualFunctionFinder: This is virtual function!
121
122OSection::~OSection()
123{
124}
125
126//IMPLEMENT_FORWARD_XINTERFACE2(OSection,SectionBase,SectionPropertySet)
128
129uno::Any SAL_CALL OSection::queryInterface( const uno::Type& _rType )
130{
131 uno::Any aReturn = SectionBase::queryInterface(_rType);
132 if ( !aReturn.hasValue() )
133 aReturn = SectionPropertySet::queryInterface(_rType);
134
135 if ( !aReturn.hasValue() && OReportControlModel::isInterfaceForbidden(_rType) )
136 return aReturn;
137
138 return aReturn;
139}
140
141
142void SAL_CALL OSection::dispose()
143{
144 OSL_ENSURE(!rBHelper.bDisposed,"Already disposed!");
145 SectionPropertySet::dispose();
146 uno::Reference<lang::XComponent> const xPageComponent(m_xDrawPage,
147 uno::UNO_QUERY);
148 if (xPageComponent.is())
149 {
150 xPageComponent->dispose();
151 }
152 cppu::WeakComponentImplHelperBase::dispose();
153
154}
155
156// TODO: VirtualFunctionFinder: This is virtual function!
157
158void SAL_CALL OSection::disposing()
159{
160 lang::EventObject aDisposeEvent( static_cast< ::cppu::OWeakObject* >( this ) );
161 m_aContainerListeners.disposeAndClear( aDisposeEvent );
162}
163
164OUString SAL_CALL OSection::getImplementationName( )
165{
166 return "com.sun.star.comp.report.Section";
167}
168
169uno::Sequence< OUString> OSection::getSupportedServiceNames_Static()
170{
171 uno::Sequence<OUString> aSupported { SERVICE_SECTION };
172 return aSupported;
173}
174
175uno::Sequence< OUString> SAL_CALL OSection::getSupportedServiceNames()
176{
177 return getSupportedServiceNames_Static();
178}
179
180sal_Bool SAL_CALL OSection::supportsService( const OUString& _rServiceName )
181{
182 return cppu::supportsService(this, _rServiceName);
183}
184
185void OSection::init()
186{
187 SolarMutexGuard g; // lock while manipulating SdrModel
188 uno::Reference< report::XReportDefinition> xReport = getReportDefinition();
189 std::shared_ptr<rptui::OReportModel> pModel = OReportDefinition::getSdrModel(xReport);
190 assert(pModel && "No model set at the report definition!");
191 if ( !pModel )
192 return;
193
194 uno::Reference<report::XSection> const xSection(this);
195 SdrPage & rSdrPage(*pModel->createNewPage(xSection));
196 m_xDrawPage.set(rSdrPage.getUnoPage(), uno::UNO_QUERY_THROW);
197 m_xDrawPage_ShapeGrouper.set(m_xDrawPage, uno::UNO_QUERY_THROW);
198 // apparently we may also get OReportDrawPage which doesn't support this
199 m_xDrawPage_FormSupplier.set(m_xDrawPage, uno::UNO_QUERY);
200 m_xDrawPage_Tunnel.set(m_xDrawPage, uno::UNO_QUERY_THROW);
201 // fdo#53872: now also exchange the XDrawPage in the SdrPage so that
202 // rSdrPage.getUnoPage returns this
203 rSdrPage.SetUnoPage(this);
204 // createNewPage _should_ have stored away 2 uno::References to this,
205 // so our ref count cannot be 1 here, so this isn't destroyed here
206 assert(m_refCount > 1);
207}
208
209// XSection
210
211sal_Bool SAL_CALL OSection::getVisible()
212{
213 ::osl::MutexGuard aGuard(m_aMutex);
214 return m_bVisible;
215}
216
217void SAL_CALL OSection::setVisible( sal_Bool _visible )
218{
219 set(PROPERTY_VISIBLE,_visible,m_bVisible);
220}
221
222OUString SAL_CALL OSection::getName()
223{
224 ::osl::MutexGuard aGuard(m_aMutex);
225 return m_sName;
226}
227
228void SAL_CALL OSection::setName( const OUString& _name )
229{
231}
232
233::sal_uInt32 SAL_CALL OSection::getHeight()
234{
235 ::osl::MutexGuard aGuard(m_aMutex);
236 return m_nHeight;
237}
238
239void SAL_CALL OSection::setHeight( ::sal_uInt32 _height )
240{
241 set(PROPERTY_HEIGHT,_height,m_nHeight);
242}
243
244::sal_Int32 SAL_CALL OSection::getBackColor()
245{
246 ::osl::MutexGuard aGuard(m_aMutex);
247 return m_bBacktransparent ? static_cast<sal_Int32>(COL_TRANSPARENT) : m_nBackgroundColor;
248}
249
250void SAL_CALL OSection::setBackColor( ::sal_Int32 _backgroundcolor )
251{
252 bool bTransparent = _backgroundcolor == static_cast<sal_Int32>(COL_TRANSPARENT);
253 setBackTransparent(bTransparent);
254 if ( !bTransparent )
255 set(PROPERTY_BACKCOLOR,_backgroundcolor,m_nBackgroundColor);
256}
257
258sal_Bool SAL_CALL OSection::getBackTransparent()
259{
260 ::osl::MutexGuard aGuard(m_aMutex);
261 return m_bBacktransparent;
262}
263
264void SAL_CALL OSection::setBackTransparent( sal_Bool _backtransparent )
265{
266 set(PROPERTY_BACKTRANSPARENT,_backtransparent,m_bBacktransparent);
267 if ( _backtransparent )
268 set(PROPERTY_BACKCOLOR,static_cast<sal_Int32>(COL_TRANSPARENT),m_nBackgroundColor);
269}
270
271OUString SAL_CALL OSection::getConditionalPrintExpression()
272{
273 ::osl::MutexGuard aGuard(m_aMutex);
274 return m_sConditionalPrintExpression;
275}
276
277void SAL_CALL OSection::setConditionalPrintExpression( const OUString& _conditionalprintexpression )
278{
279 set(PROPERTY_CONDITIONALPRINTEXPRESSION,_conditionalprintexpression,m_sConditionalPrintExpression);
280}
281
282void OSection::checkNotPageHeaderFooter()
283{
284 ::osl::MutexGuard aGuard(m_aMutex);
285 uno::Reference< report::XReportDefinition > xRet = m_xReportDefinition;
286 if ( xRet.is() )
287 {
288 if ( xRet->getPageHeaderOn() && xRet->getPageHeader() == *this )
289 throw beans::UnknownPropertyException();
290 if ( xRet->getPageFooterOn() && xRet->getPageFooter() == *this )
291 throw beans::UnknownPropertyException();
292 }
293}
294
295::sal_Int16 SAL_CALL OSection::getForceNewPage()
296{
297 ::osl::MutexGuard aGuard(m_aMutex);
298
299 checkNotPageHeaderFooter();
300 return m_nForceNewPage;
301}
302
303void SAL_CALL OSection::setForceNewPage( ::sal_Int16 _forcenewpage )
304{
305 if ( _forcenewpage < report::ForceNewPage::NONE || _forcenewpage > report::ForceNewPage::BEFORE_AFTER_SECTION )
306 throwIllegallArgumentException(u"css::report::ForceNewPage"
307 ,*this
308 ,1);
309 checkNotPageHeaderFooter();
310 set(PROPERTY_FORCENEWPAGE,_forcenewpage,m_nForceNewPage);
311}
312
313::sal_Int16 SAL_CALL OSection::getNewRowOrCol()
314{
315 ::osl::MutexGuard aGuard(m_aMutex);
316 checkNotPageHeaderFooter();
317 return m_nNewRowOrCol;
318}
319
320void SAL_CALL OSection::setNewRowOrCol( ::sal_Int16 _newroworcol )
321{
322 if ( _newroworcol < report::ForceNewPage::NONE || _newroworcol > report::ForceNewPage::BEFORE_AFTER_SECTION )
323 throwIllegallArgumentException(u"css::report::ForceNewPage"
324 ,*this
325 ,1);
326 checkNotPageHeaderFooter();
327
328 set(PROPERTY_NEWROWORCOL,_newroworcol,m_nNewRowOrCol);
329}
330
331sal_Bool SAL_CALL OSection::getKeepTogether()
332{
333 ::osl::MutexGuard aGuard(m_aMutex);
334 checkNotPageHeaderFooter();
335 return m_bKeepTogether;
336}
337
338void SAL_CALL OSection::setKeepTogether( sal_Bool _keeptogether )
339{
340 {
341 ::osl::MutexGuard aGuard(m_aMutex);
342 checkNotPageHeaderFooter();
343 }
344
345 set(PROPERTY_KEEPTOGETHER,_keeptogether,m_bKeepTogether);
346}
347
348sal_Bool SAL_CALL OSection::getCanGrow()
349{
350 throw beans::UnknownPropertyException();
351}
352
353void SAL_CALL OSection::setCanGrow( sal_Bool /*_cangrow*/ )
354{
355 throw beans::UnknownPropertyException();
356}
357
358sal_Bool SAL_CALL OSection::getCanShrink()
359{
360 throw beans::UnknownPropertyException();
361}
362
363void SAL_CALL OSection::setCanShrink( sal_Bool /*_canshrink*/ )
364{
365 throw beans::UnknownPropertyException();
366}
367
368sal_Bool SAL_CALL OSection::getRepeatSection()
369{
370 ::osl::MutexGuard aGuard(m_aMutex);
371 uno::Reference< report::XGroup > xGroup = m_xGroup;
372 if ( !xGroup.is() )
373 throw beans::UnknownPropertyException();
374 return m_bRepeatSection;
375}
376
377void SAL_CALL OSection::setRepeatSection( sal_Bool _repeatsection )
378{
379 {
380 ::osl::MutexGuard aGuard(m_aMutex);
381 uno::Reference< report::XGroup > xGroup = m_xGroup;
382 if ( !xGroup.is() )
383 throw beans::UnknownPropertyException();
384 }
385 set(PROPERTY_REPEATSECTION,_repeatsection,m_bRepeatSection);
386}
387
388uno::Reference< report::XGroup > SAL_CALL OSection::getGroup()
389{
390 ::osl::MutexGuard aGuard(m_aMutex);
391 return m_xGroup;
392}
393
394uno::Reference< report::XReportDefinition > SAL_CALL OSection::getReportDefinition()
395{
396 ::osl::MutexGuard aGuard(m_aMutex);
397 uno::Reference< report::XReportDefinition > xRet = m_xReportDefinition;
398 uno::Reference< report::XGroup > xGroup = m_xGroup;
399 if ( !xRet.is() && xGroup.is() )
400 {
401 uno::Reference< report::XGroups> xGroups(xGroup->getGroups());
402 if ( xGroups.is() )
403 xRet = xGroups->getReportDefinition();
404 }
405
406 return xRet;
407}
408
409// XChild
410uno::Reference< uno::XInterface > SAL_CALL OSection::getParent( )
411{
412 uno::Reference< uno::XInterface > xRet;
413 {
414 ::osl::MutexGuard aGuard(m_aMutex);
415 xRet = m_xReportDefinition;
416 if ( !xRet.is() )
417 xRet = m_xGroup;
418 }
419 return xRet;
420}
421
422void SAL_CALL OSection::setParent( const uno::Reference< uno::XInterface >& /*Parent*/ )
423{
424 throw lang::NoSupportException();
425}
426
427// XContainer
428void SAL_CALL OSection::addContainerListener( const uno::Reference< container::XContainerListener >& xListener )
429{
430 m_aContainerListeners.addInterface(xListener);
431}
432
433void SAL_CALL OSection::removeContainerListener( const uno::Reference< container::XContainerListener >& xListener )
434{
435 m_aContainerListeners.removeInterface(xListener);
436}
437
438// XElementAccess
439uno::Type SAL_CALL OSection::getElementType( )
440{
442}
443
444sal_Bool SAL_CALL OSection::hasElements( )
445{
446 ::osl::MutexGuard aGuard(m_aMutex);
447 return m_xDrawPage.is() && m_xDrawPage->hasElements();
448}
449
450// XIndexAccess
451::sal_Int32 SAL_CALL OSection::getCount( )
452{
453 ::osl::MutexGuard aGuard(m_aMutex);
454 return m_xDrawPage.is() ? m_xDrawPage->getCount() : 0;
455}
456
457uno::Any SAL_CALL OSection::getByIndex( ::sal_Int32 Index )
458{
459 ::osl::MutexGuard aGuard(m_aMutex);
460 return m_xDrawPage.is() ? m_xDrawPage->getByIndex(Index) : uno::Any();
461}
462
463// XEnumerationAccess
464uno::Reference< container::XEnumeration > SAL_CALL OSection::createEnumeration( )
465{
466 ::osl::MutexGuard aGuard(m_aMutex);
467 return new ::comphelper::OEnumerationByIndex(static_cast<XSection*>(this));
468}
469
470uno::Reference< beans::XPropertySetInfo > SAL_CALL OSection::getPropertySetInfo( )
471{
472 return SectionPropertySet::getPropertySetInfo();
473}
474
475void SAL_CALL OSection::setPropertyValue( const OUString& aPropertyName, const uno::Any& aValue )
476{
477 SectionPropertySet::setPropertyValue( aPropertyName, aValue );
478}
479
480uno::Any SAL_CALL OSection::getPropertyValue( const OUString& PropertyName )
481{
482 return SectionPropertySet::getPropertyValue( PropertyName);
483}
484
485void SAL_CALL OSection::addPropertyChangeListener( const OUString& aPropertyName, const uno::Reference< beans::XPropertyChangeListener >& xListener )
486{
487 SectionPropertySet::addPropertyChangeListener( aPropertyName, xListener );
488}
489
490void SAL_CALL OSection::removePropertyChangeListener( const OUString& aPropertyName, const uno::Reference< beans::XPropertyChangeListener >& aListener )
491{
492 SectionPropertySet::removePropertyChangeListener( aPropertyName, aListener );
493}
494
495void SAL_CALL OSection::addVetoableChangeListener( const OUString& PropertyName, const uno::Reference< beans::XVetoableChangeListener >& aListener )
496{
497 SectionPropertySet::addVetoableChangeListener( PropertyName, aListener );
498}
499
500void SAL_CALL OSection::removeVetoableChangeListener( const OUString& PropertyName, const uno::Reference< beans::XVetoableChangeListener >& aListener )
501{
502 SectionPropertySet::removeVetoableChangeListener( PropertyName, aListener );
503}
504
505void SAL_CALL OSection::add( const uno::Reference< drawing::XShape >& xShape )
506{
507 {
508 ::osl::MutexGuard aGuard(m_aMutex);
509 m_bInInsertNotify = true;
510 OSL_ENSURE(m_xDrawPage.is(),"No DrawPage!");
511 m_xDrawPage->add(xShape);
512 m_bInInsertNotify = false;
513 }
514 notifyElementAdded(xShape);
515}
516
517void SAL_CALL OSection::remove( const uno::Reference< drawing::XShape >& xShape )
518{
519 {
520 ::osl::MutexGuard aGuard(m_aMutex);
521 m_bInRemoveNotify = true;
522 OSL_ENSURE(m_xDrawPage.is(),"No DrawPage!");
523 m_xDrawPage->remove(xShape);
524 m_bInRemoveNotify = false;
525 }
526 notifyElementRemoved(xShape);
527}
528
529// XShapeGrouper
530uno::Reference< drawing::XShapeGroup > SAL_CALL
531OSection::group(uno::Reference< drawing::XShapes > const& xShapes)
532{
533 // no lock because m_xDrawPage_ShapeGrouper is const
534 return (m_xDrawPage_ShapeGrouper.is())
535 ? m_xDrawPage_ShapeGrouper->group(xShapes)
536 : nullptr;
537}
538void SAL_CALL
539OSection::ungroup(uno::Reference<drawing::XShapeGroup> const& xGroup)
540{
541 // no lock because m_xDrawPage_ShapeGrouper is const
542 if (m_xDrawPage_ShapeGrouper.is()) {
543 m_xDrawPage_ShapeGrouper->ungroup(xGroup);
544 }
545}
546
547// XFormsSupplier
548uno::Reference<container::XNameContainer> SAL_CALL OSection::getForms()
549{
550 // no lock because m_xDrawPage_FormSupplier is const
551 return (m_xDrawPage_FormSupplier.is())
552 ? m_xDrawPage_FormSupplier->getForms()
553 : nullptr;
554}
555// XFormsSupplier2
556sal_Bool SAL_CALL OSection::hasForms()
557{
558 // no lock because m_xDrawPage_FormSupplier is const
559 return (m_xDrawPage_FormSupplier.is())
560 && m_xDrawPage_FormSupplier->hasForms();
561}
562
563
564// css::lang::XUnoTunnel
565
566sal_Int64 OSection::getSomething( const uno::Sequence< sal_Int8 > & rId )
567{
568 if (comphelper::isUnoTunnelId<OSection>(rId) )
570 return (m_xDrawPage_Tunnel.is()) ? m_xDrawPage_Tunnel->getSomething(rId) : 0;
571}
572
573const uno::Sequence< sal_Int8 > & OSection::getUnoTunnelId()
574{
575 static const comphelper::UnoIdInit implId;
576 return implId.getSeq();
577}
578
579void OSection::notifyElementAdded(const uno::Reference< drawing::XShape >& xShape )
580{
581 if ( !m_bInInsertNotify )
582 {
583 container::ContainerEvent aEvent(static_cast<container::XContainer*>(this), uno::Any(), uno::Any(xShape), uno::Any());
584 m_aContainerListeners.notifyEach(&container::XContainerListener::elementInserted,aEvent);
585 }
586}
587
588void OSection::notifyElementRemoved(const uno::Reference< drawing::XShape >& xShape)
589{
590 if ( !m_bInRemoveNotify )
591 {
592 // notify our container listeners
593 container::ContainerEvent aEvent(static_cast<container::XContainer*>(this), uno::Any(), uno::Any(xShape), uno::Any());
594 m_aContainerListeners.notifyEach(&container::XContainerListener::elementRemoved,aEvent);
595 }
596}
597
598} // namespace reportdesign
599
600
601/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
struct _ADOIndex Index
AnyEventRef aEvent
css::uno::Reference< css::uno::XInterface > const & getUnoPage()
void SetUnoPage(css::uno::Reference< css::drawing::XDrawPage > const &)
const css::uno::Sequence< sal_Int8 > & getSeq() const
css::uno::Type const & get()
static css::uno::Reference< css::report::XSection > createOSection(const css::uno::Reference< css::report::XReportDefinition > &_xParent, const css::uno::Reference< css::uno::XComponentContext > &context, bool _bPageSection=false)
OSection(const OSection &)=delete
constexpr ::Color COL_TRANSPARENT(ColorTransparency, 0xFF, 0xFF, 0xFF, 0xFF)
ULONG m_refCount
OUString m_sName
float u
std::mutex m_aMutex
#define SAL_N_ELEMENTS(arr)
NONE
void set(css::uno::UnoInterfaceReference const &value)
sal_Int64 getSomething_cast(void *p)
bool CPPUHELPER_DLLPUBLIC supportsService(css::lang::XServiceInfo *implementation, rtl::OUString const &name)
static uno::Sequence< OUString > lcl_getAbsent(bool _bPageSection)
Definition: Section.cxx:52
void throwIllegallArgumentException(std::u16string_view _sTypeName, const uno::Reference< uno::XInterface > &ExceptionContext_, sal_Int16 ArgumentPosition_)
Definition: Tools.cxx:43
::cppu::PropertySetMixin< css::report::XSection > SectionPropertySet
Definition: Section.hxx:48
static uno::Sequence< OUString > lcl_getGroupAbsent()
Definition: Section.cxx:41
::cppu::WeakComponentImplHelper< css::report::XSection, css::lang::XServiceInfo, css::lang::XUnoTunnel, css::drawing::XDrawPage, css::drawing::XShapeGrouper, css::form::XFormsSupplier2 > SectionBase
Definition: Section.hxx:47
constexpr OUStringLiteral PROPERTY_NAME
Definition: strings.hxx:36
constexpr OUStringLiteral SERVICE_SECTION
Definition: strings.hxx:30
constexpr OUStringLiteral PROPERTY_VISIBLE
Definition: strings.hxx:35
constexpr OUStringLiteral PROPERTY_FORCENEWPAGE
Definition: strings.hxx:42
constexpr OUStringLiteral PROPERTY_CANGROW
Definition: strings.hxx:45
constexpr OUStringLiteral PROPERTY_HEIGHT
Definition: strings.hxx:37
constexpr OUStringLiteral PROPERTY_REPEATSECTION
Definition: strings.hxx:47
constexpr OUStringLiteral PROPERTY_CANSHRINK
Definition: strings.hxx:46
constexpr OUStringLiteral PROPERTY_BACKTRANSPARENT
Definition: strings.hxx:39
constexpr OUStringLiteral PROPERTY_NEWROWORCOL
Definition: strings.hxx:43
constexpr OUStringLiteral PROPERTY_KEEPTOGETHER
Definition: strings.hxx:44
constexpr OUStringLiteral PROPERTY_BACKCOLOR
Definition: strings.hxx:38
constexpr OUStringLiteral PROPERTY_CONDITIONALPRINTEXPRESSION
Definition: strings.hxx:108
bool hasValue()
unsigned char sal_Bool
#define IMPLEMENT_FORWARD_REFCOUNT(classname, refcountbase)