refactor reportdesign::OSection construction

Indended to solve a problem that turned out to be imaginary.

Change-Id: I185887f6e45869102ac600717a0bb7564ebdb7e5
This commit is contained in:
Michael Stahl
2012-08-09 23:52:35 +02:00
parent 8ec791316c
commit 0abceaaf62
4 changed files with 44 additions and 36 deletions

View File

@@ -661,7 +661,7 @@ OReportDefinition::OReportDefinition(uno::Reference< uno::XComponentContext > co
{ {
init(); init();
m_pImpl->m_xGroups = new OGroups(this,m_aProps->m_xContext); m_pImpl->m_xGroups = new OGroups(this,m_aProps->m_xContext);
m_pImpl->m_xDetail = new OSection(this,m_aProps->m_xContext); m_pImpl->m_xDetail = OSection::createOSection(this,m_aProps->m_xContext);
m_pImpl->m_xDetail->setName(RPT_RESSTRING(RID_STR_DETAIL,m_aProps->m_xContext->getServiceManager())); m_pImpl->m_xDetail->setName(RPT_RESSTRING(RID_STR_DETAIL,m_aProps->m_xContext->getServiceManager()));
} }
osl_decrementInterlockedCount( &m_refCount ); osl_decrementInterlockedCount( &m_refCount );
@@ -682,7 +682,7 @@ OReportDefinition::OReportDefinition(uno::Reference< uno::XComponentContext > co
m_aProps->setShape(_xShape,this,m_refCount); m_aProps->setShape(_xShape,this,m_refCount);
init(); init();
m_pImpl->m_xGroups = new OGroups(this,m_aProps->m_xContext); m_pImpl->m_xGroups = new OGroups(this,m_aProps->m_xContext);
m_pImpl->m_xDetail = new OSection(this,m_aProps->m_xContext); m_pImpl->m_xDetail = OSection::createOSection(this,m_aProps->m_xContext);
m_pImpl->m_xDetail->setName(RPT_RESSTRING(RID_STR_DETAIL,m_aProps->m_xContext->getServiceManager())); m_pImpl->m_xDetail->setName(RPT_RESSTRING(RID_STR_DETAIL,m_aProps->m_xContext->getServiceManager()));
} }
osl_decrementInterlockedCount( &m_refCount ); osl_decrementInterlockedCount( &m_refCount );
@@ -703,7 +703,7 @@ OReportDefinition::OReportDefinition(const OReportDefinition& _rCopy)
OGroups* pGroups = new OGroups(this,m_aProps->m_xContext); OGroups* pGroups = new OGroups(this,m_aProps->m_xContext);
m_pImpl->m_xGroups = pGroups; m_pImpl->m_xGroups = pGroups;
pGroups->copyGroups(_rCopy.m_pImpl->m_xGroups); pGroups->copyGroups(_rCopy.m_pImpl->m_xGroups);
m_pImpl->m_xDetail = new OSection(this,m_aProps->m_xContext); m_pImpl->m_xDetail = OSection::createOSection(this,m_aProps->m_xContext);
OSection::lcl_copySection(_rCopy.m_pImpl->m_xDetail,m_pImpl->m_xDetail); OSection::lcl_copySection(_rCopy.m_pImpl->m_xDetail,m_pImpl->m_xDetail);
setPageHeaderOn(_rCopy.m_pImpl->m_xPageHeader.is()); setPageHeaderOn(_rCopy.m_pImpl->m_xPageHeader.is());

View File

@@ -52,6 +52,7 @@ namespace reportdesign
using namespace com::sun::star; using namespace com::sun::star;
using namespace comphelper; using namespace comphelper;
DBG_NAME( rpt_OSection ) DBG_NAME( rpt_OSection )
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
uno::Sequence< ::rtl::OUString> lcl_getGroupAbsent() uno::Sequence< ::rtl::OUString> lcl_getGroupAbsent()
{ {
@@ -63,31 +64,6 @@ uno::Sequence< ::rtl::OUString> lcl_getGroupAbsent()
return uno::Sequence< ::rtl::OUString >(pProps,sizeof(pProps)/sizeof(pProps[0])); return uno::Sequence< ::rtl::OUString >(pProps,sizeof(pProps)/sizeof(pProps[0]));
} }
// -----------------------------------------------------------------------------
OSection::OSection( const uno::Reference< report::XGroup >& _xParent
,const uno::Reference< uno::XComponentContext >& context
,bool /*_bPageSection*/)
:SectionBase(m_aMutex)
,SectionPropertySet(context,static_cast< Implements >(IMPLEMENTS_PROPERTY_SET),lcl_getGroupAbsent())
,m_aContainerListeners(m_aMutex)
,m_xContext(context)
,m_xGroup(_xParent)
,m_nHeight(3000)
,m_nBackgroundColor(COL_TRANSPARENT)
,m_nForceNewPage(report::ForceNewPage::NONE)
,m_nNewRowOrCol(report::ForceNewPage::NONE)
,m_bKeepTogether(sal_False)
,m_bCanGrow(sal_False)
,m_bCanShrink(sal_False)
,m_bRepeatSection(sal_False)
,m_bVisible(sal_True)
,m_bBacktransparent(sal_True)
,m_bInRemoveNotify(false)
,m_bInInsertNotify(false)
{
DBG_CTOR( rpt_OSection,NULL);
init();
}
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
uno::Sequence< ::rtl::OUString> lcl_getAbsent(bool _bPageSection) uno::Sequence< ::rtl::OUString> lcl_getAbsent(bool _bPageSection)
{ {
@@ -112,15 +88,40 @@ uno::Sequence< ::rtl::OUString> lcl_getAbsent(bool _bPageSection)
return uno::Sequence< ::rtl::OUString >(pProps,sizeof(pProps)/sizeof(pProps[0])); return uno::Sequence< ::rtl::OUString >(pProps,sizeof(pProps)/sizeof(pProps[0]));
} }
uno::Reference<report::XSection> OSection::createOSection(
const uno::Reference< report::XReportDefinition >& xParentDef,
const uno::Reference< uno::XComponentContext >& context,
bool const bPageSection)
{
OSection *const pNew =
new OSection(xParentDef, 0, context, lcl_getAbsent(bPageSection));
pNew->init();
return pNew;
}
uno::Reference<report::XSection> OSection::createOSection(
const uno::Reference< report::XGroup >& xParentGroup,
const uno::Reference< uno::XComponentContext >& context,
bool const)
{
OSection *const pNew =
new OSection(0, xParentGroup, context, lcl_getGroupAbsent());
pNew->init();
return pNew;
}
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
OSection::OSection(const uno::Reference< report::XReportDefinition >& _xParent OSection::OSection(const uno::Reference< report::XReportDefinition >& xParentDef
,const uno::Reference< report::XGroup >& xParentGroup
,const uno::Reference< uno::XComponentContext >& context ,const uno::Reference< uno::XComponentContext >& context
,bool _bPageSection) ,uno::Sequence< ::rtl::OUString> const& rStrings)
:SectionBase(m_aMutex) :SectionBase(m_aMutex)
,SectionPropertySet(context,SectionPropertySet::IMPLEMENTS_PROPERTY_SET,lcl_getAbsent(_bPageSection)) ,SectionPropertySet(context,SectionPropertySet::IMPLEMENTS_PROPERTY_SET,rStrings)
,m_aContainerListeners(m_aMutex) ,m_aContainerListeners(m_aMutex)
,m_xContext(context) ,m_xContext(context)
,m_xReportDefinition(_xParent) ,m_xGroup(xParentGroup)
,m_xReportDefinition(xParentDef)
,m_nHeight(3000) ,m_nHeight(3000)
,m_nBackgroundColor(COL_TRANSPARENT) ,m_nBackgroundColor(COL_TRANSPARENT)
,m_nForceNewPage(report::ForceNewPage::NONE) ,m_nForceNewPage(report::ForceNewPage::NONE)
@@ -135,7 +136,6 @@ OSection::OSection(const uno::Reference< report::XReportDefinition >& _xParent
,m_bInInsertNotify(false) ,m_bInInsertNotify(false)
{ {
DBG_CTOR( rpt_OSection,NULL); DBG_CTOR( rpt_OSection,NULL);
init();
} }
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
// TODO: VirtualFunctionFinder: This is virtual function! // TODO: VirtualFunctionFinder: This is virtual function!

View File

@@ -115,9 +115,17 @@ namespace reportdesign
public: public:
typedef ::comphelper::ImplementationReference< OSection ,::com::sun::star::report::XSection,::com::sun::star::uno::XWeak > TSection; typedef ::comphelper::ImplementationReference< OSection ,::com::sun::star::report::XSection,::com::sun::star::uno::XWeak > TSection;
OSection(const ::com::sun::star::uno::Reference< ::com::sun::star::report::XReportDefinition >& _xParent private:
OSection(const ::com::sun::star::uno::Reference< ::com::sun::star::report::XReportDefinition >& xParentDef
,const ::com::sun::star::uno::Reference< ::com::sun::star::report::XGroup >& xParentGroup
,const com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext >& context,
::com::sun::star::uno::Sequence< ::rtl::OUString> const&);
public:
static ::com::sun::star::uno::Reference< ::com::sun::star::report::XSection>
createOSection(const ::com::sun::star::uno::Reference< ::com::sun::star::report::XReportDefinition >& _xParent
,const com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext >& context,bool _bPageSection=false); ,const com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext >& context,bool _bPageSection=false);
OSection(const ::com::sun::star::uno::Reference< ::com::sun::star::report::XGroup >& _xParent static ::com::sun::star::uno::Reference< ::com::sun::star::report::XSection>
createOSection(const ::com::sun::star::uno::Reference< ::com::sun::star::report::XGroup >& _xParent
,const com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext >& context,bool _bPageSection=false); ,const com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext >& context,bool _bPageSection=false);
DECLARE_XINTERFACE( ) DECLARE_XINTERFACE( )

View File

@@ -47,7 +47,7 @@ namespace reportdesign
template <class T> void lcl_createSectionIfNeeded(sal_Bool _bOn,const T& _xParent,::com::sun::star::uno::Reference< ::com::sun::star::report::XSection>& _xSection/*in/out*/,bool _bPageSection = false) template <class T> void lcl_createSectionIfNeeded(sal_Bool _bOn,const T& _xParent,::com::sun::star::uno::Reference< ::com::sun::star::report::XSection>& _xSection/*in/out*/,bool _bPageSection = false)
{ {
if ( _bOn && !_xSection.is() ) if ( _bOn && !_xSection.is() )
_xSection = new OSection(_xParent,_xParent->getContext(),_bPageSection); _xSection = OSection::createOSection(_xParent,_xParent->getContext(),_bPageSection);
else if ( !_bOn ) else if ( !_bOn )
::comphelper::disposeComponent(_xSection); ::comphelper::disposeComponent(_xSection);
} }