Kaydet (Commit) b3d4db86 authored tarafından Caolán McNamara's avatar Caolán McNamara Kaydeden (comit) Andras Timar

guard against styles based on themselves

which leads to stack exhaustion when queries,

make m_BasedOnStyle private and replace it with
a call to GetBasedOnStyle which checks that
the base style is not itself

(cherry picked from commit da5e8ba3)
Reviewed-on: https://gerrit.libreoffice.org/20531Reviewed-by: 's avatarCaolán McNamara <caolanm@redhat.com>
Tested-by: 's avatarCaolán McNamara <caolanm@redhat.com>
(cherry picked from commit 7e5b93bf)

Change-Id: I093546793755f8a3a6e8a3c23fb8565ad27b75da
Reviewed-on: https://gerrit.libreoffice.org/20532Reviewed-by: 's avatarDavid Tardon <dtardon@redhat.com>
Tested-by: 's avatarDavid Tardon <dtardon@redhat.com>
(cherry picked from commit 1ff36e14)
üst 54b97c69
...@@ -269,7 +269,7 @@ void LwpCellLayout::ApplyFmtStyle(XFCellStyle *pCellStyle) ...@@ -269,7 +269,7 @@ void LwpCellLayout::ApplyFmtStyle(XFCellStyle *pCellStyle)
if (!pLayoutNumerics) if (!pLayoutNumerics)
{ {
// if current layout doesn't have format, go to based on layout // if current layout doesn't have format, go to based on layout
LwpCellLayout* pCellLayout = dynamic_cast<LwpCellLayout*>(m_BasedOnStyle.obj().get()); LwpCellLayout* pCellLayout = dynamic_cast<LwpCellLayout*>(GetBasedOnStyle().get());
if (pCellLayout) if (pCellLayout)
{ {
pLayoutNumerics = dynamic_cast<LwpLayoutNumerics*>(pCellLayout->GetNumericsObject().obj().get()); pLayoutNumerics = dynamic_cast<LwpLayoutNumerics*>(pCellLayout->GetNumericsObject().obj().get());
...@@ -656,7 +656,7 @@ void LwpCellLayout::ApplyProtect(XFCell * pCell, LwpObjectID aTableID) ...@@ -656,7 +656,7 @@ void LwpCellLayout::ApplyProtect(XFCell * pCell, LwpObjectID aTableID)
else else
{ {
// judge base on // judge base on
LwpCellLayout * pBase = dynamic_cast<LwpCellLayout *>(m_BasedOnStyle.obj().get()); LwpCellLayout * pBase = dynamic_cast<LwpCellLayout *>(GetBasedOnStyle().get());
if (pBase && pBase->IsProtected()) if (pBase && pBase->IsProtected())
{ {
bProtected = true; bProtected = true;
......
...@@ -648,6 +648,17 @@ void LwpMiddleLayout::Read() ...@@ -648,6 +648,17 @@ void LwpMiddleLayout::Read()
//end //end
} }
rtl::Reference<LwpObject> LwpMiddleLayout::GetBasedOnStyle()
{
rtl::Reference<LwpObject> xRet(m_BasedOnStyle.obj());
if (xRet.get() == this)
{
SAL_WARN("lwp", "style based on itself");
return rtl::Reference<LwpObject>();
}
return xRet;
}
#include "lwplaypiece.hxx" #include "lwplaypiece.hxx"
/** /**
...@@ -660,10 +671,9 @@ LwpLayoutGeometry* LwpMiddleLayout::GetGeometry() ...@@ -660,10 +671,9 @@ LwpLayoutGeometry* LwpMiddleLayout::GetGeometry()
{ {
return ( dynamic_cast<LwpLayoutGeometry*> (m_LayGeometry.obj().get()) ); return ( dynamic_cast<LwpLayoutGeometry*> (m_LayGeometry.obj().get()) );
} }
else if( !m_BasedOnStyle.IsNull() ) else if (LwpMiddleLayout* pLay = dynamic_cast<LwpMiddleLayout*>(GetBasedOnStyle().get()))
{ {
LwpMiddleLayout* pLay = dynamic_cast<LwpMiddleLayout*> ( m_BasedOnStyle.obj().get() ); return pLay->GetGeometry();
return pLay ? pLay->GetGeometry() : NULL;
} }
return NULL; return NULL;
} }
...@@ -708,10 +718,8 @@ bool LwpMiddleLayout::MarginsSameAsParent() ...@@ -708,10 +718,8 @@ bool LwpMiddleLayout::MarginsSameAsParent()
{ {
return LwpVirtualLayout::MarginsSameAsParent(); return LwpVirtualLayout::MarginsSameAsParent();
} }
if(!m_BasedOnStyle.IsNull()) if (LwpVirtualLayout* pLay = dynamic_cast<LwpVirtualLayout*> (GetBasedOnStyle().get()))
{ {
LwpVirtualLayout* pLay = dynamic_cast<LwpVirtualLayout*> (m_BasedOnStyle.obj().get());
if (pLay)
pLay->MarginsSameAsParent(); pLay->MarginsSameAsParent();
} }
return LwpVirtualLayout::MarginsSameAsParent(); return LwpVirtualLayout::MarginsSameAsParent();
...@@ -747,7 +755,7 @@ double LwpMiddleLayout::GetMarginsValue(const sal_uInt8 &nWhichSide) ...@@ -747,7 +755,7 @@ double LwpMiddleLayout::GetMarginsValue(const sal_uInt8 &nWhichSide)
return fValue; return fValue;
} }
} }
LwpVirtualLayout* pStyle = dynamic_cast<LwpVirtualLayout*> (m_BasedOnStyle.obj().get()); LwpVirtualLayout* pStyle = dynamic_cast<LwpVirtualLayout*>(GetBasedOnStyle().get());
if(pStyle) if(pStyle)
{ {
fValue = pStyle->GetMarginsValue(nWhichSide); fValue = pStyle->GetMarginsValue(nWhichSide);
...@@ -773,7 +781,7 @@ double LwpMiddleLayout::GetExtMarginsValue(const sal_uInt8 &nWhichSide) ...@@ -773,7 +781,7 @@ double LwpMiddleLayout::GetExtMarginsValue(const sal_uInt8 &nWhichSide)
return fValue; return fValue;
} }
} }
LwpVirtualLayout* pStyle = dynamic_cast<LwpVirtualLayout*> (m_BasedOnStyle.obj().get()); LwpVirtualLayout* pStyle = dynamic_cast<LwpVirtualLayout*>(GetBasedOnStyle().get());
if(pStyle) if(pStyle)
{ {
fValue = pStyle->GetExtMarginsValue(nWhichSide); fValue = pStyle->GetExtMarginsValue(nWhichSide);
...@@ -794,10 +802,9 @@ LwpBorderStuff* LwpMiddleLayout::GetBorderStuff() ...@@ -794,10 +802,9 @@ LwpBorderStuff* LwpMiddleLayout::GetBorderStuff()
LwpLayoutBorder* pLayoutBorder = dynamic_cast<LwpLayoutBorder*>(m_LayBorderStuff.obj().get()); LwpLayoutBorder* pLayoutBorder = dynamic_cast<LwpLayoutBorder*>(m_LayBorderStuff.obj().get());
return pLayoutBorder ? &pLayoutBorder->GetBorderStuff() : NULL; return pLayoutBorder ? &pLayoutBorder->GetBorderStuff() : NULL;
} }
else if( !m_BasedOnStyle.IsNull() ) else if (LwpMiddleLayout* pLay = dynamic_cast<LwpMiddleLayout*>(GetBasedOnStyle().get()))
{ {
LwpMiddleLayout* pLay = dynamic_cast<LwpMiddleLayout*> ( m_BasedOnStyle.obj().get() ); return pLay->GetBorderStuff();
return pLay ? pLay->GetBorderStuff() : NULL;
} }
return NULL; return NULL;
} }
...@@ -815,10 +822,9 @@ LwpBackgroundStuff* LwpMiddleLayout::GetBackgroundStuff() ...@@ -815,10 +822,9 @@ LwpBackgroundStuff* LwpMiddleLayout::GetBackgroundStuff()
LwpLayoutBackground* pLayoutBackground = dynamic_cast<LwpLayoutBackground*>(m_LayBackgroundStuff.obj().get()); LwpLayoutBackground* pLayoutBackground = dynamic_cast<LwpLayoutBackground*>(m_LayBackgroundStuff.obj().get());
return pLayoutBackground ? &pLayoutBackground->GetBackgoudStuff() : NULL; return pLayoutBackground ? &pLayoutBackground->GetBackgoudStuff() : NULL;
} }
else if( !m_BasedOnStyle.IsNull() ) else if (LwpMiddleLayout* pLay = dynamic_cast<LwpMiddleLayout*>(GetBasedOnStyle().get()))
{ {
LwpMiddleLayout* pLay = dynamic_cast<LwpMiddleLayout*> ( m_BasedOnStyle.obj().get() ); return pLay->GetBackgroundStuff();
return pLay ? pLay->GetBackgroundStuff() : NULL;
} }
return NULL; return NULL;
} }
...@@ -925,10 +931,9 @@ LwpTabOverride* LwpMiddleLayout::GetTabOverride() ...@@ -925,10 +931,9 @@ LwpTabOverride* LwpMiddleLayout::GetTabOverride()
} }
return NULL; return NULL;
} }
else if( !m_BasedOnStyle.IsNull() ) else if (LwpMiddleLayout* pLay = dynamic_cast<LwpMiddleLayout*> ( GetBasedOnStyle().get() ))
{ {
LwpMiddleLayout* pLay = dynamic_cast<LwpMiddleLayout*> ( m_BasedOnStyle.obj().get() ); return pLay->GetTabOverride();
return pLay ? pLay->GetTabOverride() : NULL;
} }
return NULL; return NULL;
} }
...@@ -943,8 +948,9 @@ sal_uInt16 LwpMiddleLayout::GetScaleMode() ...@@ -943,8 +948,9 @@ sal_uInt16 LwpMiddleLayout::GetScaleMode()
{ {
if ((m_nOverrideFlag & OVER_SCALING) && m_LayScale.obj().is()) if ((m_nOverrideFlag & OVER_SCALING) && m_LayScale.obj().is())
return GetLayoutScale()->GetScaleMode(); return GetLayoutScale()->GetScaleMode();
else if (m_BasedOnStyle.obj().is()) rtl::Reference<LwpObject> xBase(GetBasedOnStyle());
return dynamic_cast<LwpMiddleLayout*>(m_BasedOnStyle.obj().get())->GetScaleMode(); if (xBase.is())
return dynamic_cast<LwpMiddleLayout*>(xBase.get())->GetScaleMode();
else else
return (LwpLayoutScale::FIT_IN_FRAME | LwpLayoutScale::MAINTAIN_ASPECT_RATIO); return (LwpLayoutScale::FIT_IN_FRAME | LwpLayoutScale::MAINTAIN_ASPECT_RATIO);
} }
...@@ -954,8 +960,9 @@ sal_uInt16 LwpMiddleLayout::GetScaleTile() ...@@ -954,8 +960,9 @@ sal_uInt16 LwpMiddleLayout::GetScaleTile()
if ((m_nOverrideFlag & OVER_SCALING) && m_LayScale.obj().is()) if ((m_nOverrideFlag & OVER_SCALING) && m_LayScale.obj().is())
return (GetLayoutScale()->GetPlacement() & LwpLayoutScale::TILED) return (GetLayoutScale()->GetPlacement() & LwpLayoutScale::TILED)
? 1 : 0; ? 1 : 0;
else if (m_BasedOnStyle.obj().is()) rtl::Reference<LwpObject> xBase(GetBasedOnStyle());
return dynamic_cast<LwpMiddleLayout*>(m_BasedOnStyle.obj().get())->GetScaleTile(); if (xBase.is())
return dynamic_cast<LwpMiddleLayout*>(xBase.get())->GetScaleTile();
else else
return 0; return 0;
} }
...@@ -965,8 +972,9 @@ sal_uInt16 LwpMiddleLayout::GetScaleCenter() ...@@ -965,8 +972,9 @@ sal_uInt16 LwpMiddleLayout::GetScaleCenter()
if ((m_nOverrideFlag & OVER_SCALING) && m_LayScale.obj().is()) if ((m_nOverrideFlag & OVER_SCALING) && m_LayScale.obj().is())
return (GetLayoutScale()->GetPlacement() & LwpLayoutScale::CENTERED) return (GetLayoutScale()->GetPlacement() & LwpLayoutScale::CENTERED)
? 1 : 0; ? 1 : 0;
else if (m_BasedOnStyle.obj().is()) rtl::Reference<LwpObject> xBase(GetBasedOnStyle());
return dynamic_cast<LwpMiddleLayout*>(m_BasedOnStyle.obj().get())->GetScaleCenter(); if (xBase.is())
return dynamic_cast<LwpMiddleLayout*>(xBase.get())->GetScaleCenter();
else else
return 0; return 0;
} }
...@@ -975,8 +983,9 @@ sal_uInt32 LwpMiddleLayout::GetScalePercentage() ...@@ -975,8 +983,9 @@ sal_uInt32 LwpMiddleLayout::GetScalePercentage()
{ {
if ((m_nOverrideFlag & OVER_SCALING) && m_LayScale.obj().is()) if ((m_nOverrideFlag & OVER_SCALING) && m_LayScale.obj().is())
return GetLayoutScale()->GetScalePercentage()/10;//m_nScalePercentage 1000 = 100% return GetLayoutScale()->GetScalePercentage()/10;//m_nScalePercentage 1000 = 100%
else if (m_BasedOnStyle.obj().is()) rtl::Reference<LwpObject> xBase(GetBasedOnStyle());
return dynamic_cast<LwpMiddleLayout*>(m_BasedOnStyle.obj().get())->GetScalePercentage(); if (xBase.is())
return dynamic_cast<LwpMiddleLayout*>(xBase.get())->GetScalePercentage();
else else
return 100; return 100;
} }
...@@ -985,8 +994,9 @@ double LwpMiddleLayout::GetScaleWidth() ...@@ -985,8 +994,9 @@ double LwpMiddleLayout::GetScaleWidth()
{ {
if ((m_nOverrideFlag & OVER_SCALING) && m_LayScale.obj().is()) if ((m_nOverrideFlag & OVER_SCALING) && m_LayScale.obj().is())
return LwpTools::ConvertFromUnits(GetLayoutScale()->GetScaleWidth()); return LwpTools::ConvertFromUnits(GetLayoutScale()->GetScaleWidth());
else if (m_BasedOnStyle.obj().is()) rtl::Reference<LwpObject> xBase(GetBasedOnStyle());
return dynamic_cast<LwpMiddleLayout*>(m_BasedOnStyle.obj().get())->GetScaleWidth(); if (xBase.is())
return dynamic_cast<LwpMiddleLayout*>(xBase.get())->GetScaleWidth();
else else
return 0; return 0;
} }
...@@ -995,8 +1005,9 @@ double LwpMiddleLayout::GetScaleHeight() ...@@ -995,8 +1005,9 @@ double LwpMiddleLayout::GetScaleHeight()
{ {
if ((m_nOverrideFlag & OVER_SCALING) && m_LayScale.obj().is()) if ((m_nOverrideFlag & OVER_SCALING) && m_LayScale.obj().is())
return LwpTools::ConvertFromUnits(GetLayoutScale()->GetScaleHeight()); return LwpTools::ConvertFromUnits(GetLayoutScale()->GetScaleHeight());
else if (m_BasedOnStyle.obj().is()) rtl::Reference<LwpObject> xBase(GetBasedOnStyle());
return dynamic_cast<LwpMiddleLayout*>(m_BasedOnStyle.obj().get())->GetScaleHeight(); if (xBase.is())
return dynamic_cast<LwpMiddleLayout*>(xBase.get())->GetScaleHeight();
else else
return 0; return 0;
} }
...@@ -1051,9 +1062,10 @@ bool LwpMiddleLayout::IsSizeRightToContainer() ...@@ -1051,9 +1062,10 @@ bool LwpMiddleLayout::IsSizeRightToContainer()
<< SHIFT_RIGHT)) << SHIFT_RIGHT))
== ((LAY_USEDIRECTION | LAY_TOCONTAINER | LAY_AUTOSIZE) << SHIFT_RIGHT); == ((LAY_USEDIRECTION | LAY_TOCONTAINER | LAY_AUTOSIZE) << SHIFT_RIGHT);
} }
else if (m_BasedOnStyle.obj().is()) rtl::Reference<LwpObject> xBase(GetBasedOnStyle());
if (xBase.is())
{ {
LwpMiddleLayout * pLayout = dynamic_cast<LwpMiddleLayout *>(m_BasedOnStyle.obj().get()); LwpMiddleLayout * pLayout = dynamic_cast<LwpMiddleLayout *>(xBase.get());
return pLayout && pLayout->IsSizeRightToContainer(); return pLayout && pLayout->IsSizeRightToContainer();
} }
else else
...@@ -1070,9 +1082,10 @@ bool LwpMiddleLayout::IsSizeRightToContent() ...@@ -1070,9 +1082,10 @@ bool LwpMiddleLayout::IsSizeRightToContent()
<< SHIFT_RIGHT)) << SHIFT_RIGHT))
== ((LAY_USEDIRECTION | LAY_AUTOSIZE) << SHIFT_RIGHT); == ((LAY_USEDIRECTION | LAY_AUTOSIZE) << SHIFT_RIGHT);
} }
else if (m_BasedOnStyle.obj().is()) rtl::Reference<LwpObject> xBase(GetBasedOnStyle());
if (xBase.is())
{ {
LwpMiddleLayout * pLayout = dynamic_cast<LwpMiddleLayout *>(m_BasedOnStyle.obj().get()); LwpMiddleLayout * pLayout = dynamic_cast<LwpMiddleLayout *>(xBase.get());
return pLayout && pLayout->IsSizeRightToContent(); return pLayout && pLayout->IsSizeRightToContent();
} }
else else
...@@ -1162,10 +1175,9 @@ bool LwpMiddleLayout::IsAutoGrow() ...@@ -1162,10 +1175,9 @@ bool LwpMiddleLayout::IsAutoGrow()
((LAY_AUTOGROW << SHIFT_UP) | (LAY_AUTOGROW << SHIFT_DOWN) | ((LAY_AUTOGROW << SHIFT_UP) | (LAY_AUTOGROW << SHIFT_DOWN) |
(LAY_AUTOGROW << SHIFT_RIGHT) | (LAY_AUTOGROW << SHIFT_LEFT))) != 0; (LAY_AUTOGROW << SHIFT_RIGHT) | (LAY_AUTOGROW << SHIFT_LEFT))) != 0;
} }
else if( !m_BasedOnStyle.IsNull() ) else if (LwpMiddleLayout* pLay = dynamic_cast<LwpMiddleLayout*>(GetBasedOnStyle().get()))
{ {
LwpMiddleLayout* pLay = dynamic_cast<LwpMiddleLayout*> ( m_BasedOnStyle.obj().get() ); return pLay->IsAutoGrow();
return pLay && pLay->IsAutoGrow();
} }
return LwpVirtualLayout::IsAutoGrow(); return LwpVirtualLayout::IsAutoGrow();
} }
...@@ -1180,10 +1192,9 @@ bool LwpMiddleLayout::IsAutoGrowDown() ...@@ -1180,10 +1192,9 @@ bool LwpMiddleLayout::IsAutoGrowDown()
{ {
return (m_nDirection & (LAY_AUTOGROW << SHIFT_DOWN)) != 0; return (m_nDirection & (LAY_AUTOGROW << SHIFT_DOWN)) != 0;
} }
else if( !m_BasedOnStyle.IsNull() ) else if (LwpMiddleLayout* pLay = dynamic_cast<LwpMiddleLayout*>(GetBasedOnStyle().get()))
{ {
LwpMiddleLayout* pLay = dynamic_cast<LwpMiddleLayout*> ( m_BasedOnStyle.obj().get() ); return pLay->IsAutoGrowDown();
return pLay && pLay->IsAutoGrowDown();
} }
return LwpVirtualLayout::IsAutoGrowDown(); return LwpVirtualLayout::IsAutoGrowDown();
} }
...@@ -1198,10 +1209,9 @@ bool LwpMiddleLayout::IsAutoGrowUp() ...@@ -1198,10 +1209,9 @@ bool LwpMiddleLayout::IsAutoGrowUp()
{ {
return (m_nDirection & (LAY_AUTOGROW << SHIFT_UP)) != 0; return (m_nDirection & (LAY_AUTOGROW << SHIFT_UP)) != 0;
} }
else if( !m_BasedOnStyle.IsNull() ) else if (LwpMiddleLayout* pLay = dynamic_cast<LwpMiddleLayout*>(GetBasedOnStyle().get()))
{ {
LwpMiddleLayout* pLay = dynamic_cast<LwpMiddleLayout*> ( m_BasedOnStyle.obj().get() ); return pLay->IsAutoGrowUp();
return pLay && pLay->IsAutoGrowUp();
} }
return LwpVirtualLayout::IsAutoGrowUp(); return LwpVirtualLayout::IsAutoGrowUp();
} }
...@@ -1216,10 +1226,8 @@ bool LwpMiddleLayout::IsAutoGrowLeft() ...@@ -1216,10 +1226,8 @@ bool LwpMiddleLayout::IsAutoGrowLeft()
{ {
return (m_nDirection & (LAY_AUTOGROW << SHIFT_LEFT)) != 0; return (m_nDirection & (LAY_AUTOGROW << SHIFT_LEFT)) != 0;
} }
else if( !m_BasedOnStyle.IsNull() ) else if (LwpMiddleLayout* pLay = dynamic_cast<LwpMiddleLayout*>(GetBasedOnStyle().get()))
{ {
LwpMiddleLayout* pLay = dynamic_cast<LwpMiddleLayout*> ( m_BasedOnStyle.obj().get() );
if (pLay)
return pLay->IsAutoGrowLeft(); return pLay->IsAutoGrowLeft();
} }
return LwpVirtualLayout::IsAutoGrowLeft(); return LwpVirtualLayout::IsAutoGrowLeft();
...@@ -1235,10 +1243,9 @@ bool LwpMiddleLayout::IsAutoGrowRight() ...@@ -1235,10 +1243,9 @@ bool LwpMiddleLayout::IsAutoGrowRight()
{ {
return (m_nDirection & (LAY_AUTOGROW << SHIFT_RIGHT)) != 0; return (m_nDirection & (LAY_AUTOGROW << SHIFT_RIGHT)) != 0;
} }
else if( !m_BasedOnStyle.IsNull() ) else if (LwpMiddleLayout* pLay = dynamic_cast<LwpMiddleLayout*> (GetBasedOnStyle().get()))
{ {
LwpMiddleLayout* pLay = dynamic_cast<LwpMiddleLayout*> ( m_BasedOnStyle.obj().get() ); return pLay->IsAutoGrowRight();
return pLay && pLay->IsAutoGrowRight();
} }
return LwpVirtualLayout::IsAutoGrowRight(); return LwpVirtualLayout::IsAutoGrowRight();
} }
...@@ -1256,10 +1263,8 @@ sal_uInt8 LwpMiddleLayout::GetContentOrientation() ...@@ -1256,10 +1263,8 @@ sal_uInt8 LwpMiddleLayout::GetContentOrientation()
if (pLayGeometry) if (pLayGeometry)
return pLayGeometry->GetContentOrientation(); return pLayGeometry->GetContentOrientation();
} }
else if( !m_BasedOnStyle.IsNull() ) else if (LwpMiddleLayout* pLay = dynamic_cast<LwpMiddleLayout*>(GetBasedOnStyle().get()))
{ {
LwpMiddleLayout* pLay = dynamic_cast<LwpMiddleLayout*> ( m_BasedOnStyle.obj().get() );
if (pLay)
return pLay->GetContentOrientation(); return pLay->GetContentOrientation();
} }
return LwpVirtualLayout::GetContentOrientation(); return LwpVirtualLayout::GetContentOrientation();
...@@ -1291,10 +1296,8 @@ bool LwpMiddleLayout::HonorProtection() ...@@ -1291,10 +1296,8 @@ bool LwpMiddleLayout::HonorProtection()
} }
} }
} }
else if( !m_BasedOnStyle.IsNull() ) else if (LwpMiddleLayout* pLay = dynamic_cast<LwpMiddleLayout*> (GetBasedOnStyle().get()))
{ {
LwpMiddleLayout* pLay = dynamic_cast<LwpMiddleLayout*> ( m_BasedOnStyle.obj().get() );
if (pLay)
return pLay->HonorProtection(); return pLay->HonorProtection();
} }
...@@ -1312,10 +1315,9 @@ bool LwpMiddleLayout::IsProtected() ...@@ -1312,10 +1315,9 @@ bool LwpMiddleLayout::IsProtected()
{ {
bProtected = (m_nAttributes & STYLE_PROTECTED)!=0; bProtected = (m_nAttributes & STYLE_PROTECTED)!=0;
} }
else if( !m_BasedOnStyle.IsNull() ) else if (LwpMiddleLayout* pLay = dynamic_cast<LwpMiddleLayout*> (GetBasedOnStyle().get()))
{ {
LwpMiddleLayout* pLay = dynamic_cast<LwpMiddleLayout*> ( m_BasedOnStyle.obj().get() ); bProtected = pLay->IsProtected();
bProtected = pLay && pLay->IsProtected();
} }
else else
bProtected = LwpVirtualLayout::IsProtected(); bProtected = LwpVirtualLayout::IsProtected();
...@@ -1438,10 +1440,9 @@ bool LwpMiddleLayout::GetUsePrinterSettings() ...@@ -1438,10 +1440,9 @@ bool LwpMiddleLayout::GetUsePrinterSettings()
{ {
return (m_nAttributes3 & STYLE3_USEPRINTERSETTINGS) != 0; return (m_nAttributes3 & STYLE3_USEPRINTERSETTINGS) != 0;
} }
else if( !m_BasedOnStyle.IsNull() ) else if (LwpMiddleLayout* pLay = dynamic_cast<LwpMiddleLayout*> (GetBasedOnStyle().get()))
{ {
LwpMiddleLayout* pLay = dynamic_cast<LwpMiddleLayout*> ( m_BasedOnStyle.obj().get() ); return pLay->GetUsePrinterSettings();
return pLay && pLay->GetUsePrinterSettings();
} }
return false; return false;
} }
...@@ -1518,8 +1519,8 @@ sal_uInt16 LwpLayout::GetNumCols() ...@@ -1518,8 +1519,8 @@ sal_uInt16 LwpLayout::GetNumCols()
} }
} }
LwpVirtualLayout* pStyle = dynamic_cast<LwpVirtualLayout*> (m_BasedOnStyle.obj().get()); LwpVirtualLayout* pStyle = dynamic_cast<LwpVirtualLayout*> (GetBasedOnStyle().get());
if(pStyle) if (pStyle)
{ {
return pStyle->GetNumCols(); return pStyle->GetNumCols();
} }
...@@ -1543,8 +1544,8 @@ double LwpLayout::GetColWidth(sal_uInt16 nIndex) ...@@ -1543,8 +1544,8 @@ double LwpLayout::GetColWidth(sal_uInt16 nIndex)
} }
} }
LwpVirtualLayout* pStyle = dynamic_cast<LwpVirtualLayout*> (m_BasedOnStyle.obj().get()); LwpVirtualLayout* pStyle = dynamic_cast<LwpVirtualLayout*>(GetBasedOnStyle().get());
if(pStyle) if (pStyle)
{ {
return pStyle->GetColWidth(nIndex); return pStyle->GetColWidth(nIndex);
} }
...@@ -1568,8 +1569,8 @@ double LwpLayout::GetColGap(sal_uInt16 nIndex) ...@@ -1568,8 +1569,8 @@ double LwpLayout::GetColGap(sal_uInt16 nIndex)
} }
} }
LwpVirtualLayout* pStyle = dynamic_cast<LwpVirtualLayout*> (m_BasedOnStyle.obj().get()); LwpVirtualLayout* pStyle = dynamic_cast<LwpVirtualLayout*>(GetBasedOnStyle().get());
if(pStyle) if (pStyle)
{ {
return pStyle->GetColGap(nIndex); return pStyle->GetColGap(nIndex);
} }
...@@ -1713,10 +1714,9 @@ sal_uInt16 LwpLayout::GetUsePage() ...@@ -1713,10 +1714,9 @@ sal_uInt16 LwpLayout::GetUsePage()
else else
return 0; return 0;
} }
else if( !m_BasedOnStyle.IsNull() ) else if (LwpLayout* pLay = dynamic_cast<LwpLayout*>(GetBasedOnStyle().get()))
{ {
LwpLayout* pLay = dynamic_cast<LwpLayout*> ( m_BasedOnStyle.obj().get() ); return pLay->GetUsePage();
return pLay ? pLay->GetUsePage() : 0;
} }
return 0; return 0;
} }
...@@ -1731,10 +1731,9 @@ LwpUseWhen* LwpLayout::VirtualGetUseWhen() ...@@ -1731,10 +1731,9 @@ LwpUseWhen* LwpLayout::VirtualGetUseWhen()
{ {
return m_pUseWhen; return m_pUseWhen;
} }
else if( !m_BasedOnStyle.IsNull() ) else if (LwpLayout* pLay = dynamic_cast<LwpLayout*>(GetBasedOnStyle().get()))
{ {
LwpLayout* pLay = dynamic_cast<LwpLayout*> ( m_BasedOnStyle.obj().get() ); return pLay->VirtualGetUseWhen();
return pLay ? pLay->VirtualGetUseWhen() : NULL;
} }
return LwpVirtualLayout::VirtualGetUseWhen(); return LwpVirtualLayout::VirtualGetUseWhen();
} }
...@@ -1753,10 +1752,8 @@ bool LwpLayout::IsUseOnAllPages() ...@@ -1753,10 +1752,8 @@ bool LwpLayout::IsUseOnAllPages()
else else
return false; return false;
} }
else if( !m_BasedOnStyle.IsNull() ) else if (LwpLayout* pLay = dynamic_cast<LwpLayout*>(GetBasedOnStyle().get()))
{ {
LwpLayout* pLay = dynamic_cast<LwpLayout*> ( m_BasedOnStyle.obj().get() );
if (pLay)
return pLay->IsUseOnAllPages(); return pLay->IsUseOnAllPages();
} }
return LwpVirtualLayout::IsUseOnAllPages(); return LwpVirtualLayout::IsUseOnAllPages();
...@@ -1776,10 +1773,8 @@ bool LwpLayout::IsUseOnAllEvenPages() ...@@ -1776,10 +1773,8 @@ bool LwpLayout::IsUseOnAllEvenPages()
else else
return false; return false;
} }
else if( !m_BasedOnStyle.IsNull() ) else if (LwpLayout* pLay = dynamic_cast<LwpLayout*>(GetBasedOnStyle().get()))
{ {
LwpLayout* pLay = dynamic_cast<LwpLayout*> ( m_BasedOnStyle.obj().get() );
if (pLay)
return pLay->IsUseOnAllEvenPages(); return pLay->IsUseOnAllEvenPages();
} }
return LwpVirtualLayout::IsUseOnAllEvenPages(); return LwpVirtualLayout::IsUseOnAllEvenPages();
...@@ -1799,10 +1794,8 @@ bool LwpLayout::IsUseOnAllOddPages() ...@@ -1799,10 +1794,8 @@ bool LwpLayout::IsUseOnAllOddPages()
else else
return false; return false;
} }
else if( !m_BasedOnStyle.IsNull() ) else if (LwpLayout* pLay = dynamic_cast<LwpLayout*>(GetBasedOnStyle().get()))
{ {
LwpLayout* pLay = dynamic_cast<LwpLayout*> ( m_BasedOnStyle.obj().get() );
if (pLay)
return pLay->IsUseOnAllOddPages(); return pLay->IsUseOnAllOddPages();
} }
return LwpVirtualLayout::IsUseOnAllOddPages(); return LwpVirtualLayout::IsUseOnAllOddPages();
...@@ -1822,10 +1815,8 @@ bool LwpLayout::IsUseOnPage() ...@@ -1822,10 +1815,8 @@ bool LwpLayout::IsUseOnPage()
else else
return false; return false;
} }
else if( !m_BasedOnStyle.IsNull() ) else if (LwpLayout* pLay = dynamic_cast<LwpLayout*>(GetBasedOnStyle().get()))
{ {
LwpLayout* pLay = dynamic_cast<LwpLayout*> ( m_BasedOnStyle.obj().get() );
if (pLay)
return pLay->IsUseOnPage(); return pLay->IsUseOnPage();
} }
return LwpVirtualLayout::IsUseOnPage(); return LwpVirtualLayout::IsUseOnPage();
...@@ -1844,10 +1835,9 @@ LwpShadow* LwpLayout::GetShadow() ...@@ -1844,10 +1835,9 @@ LwpShadow* LwpLayout::GetShadow()
LwpLayoutShadow* pLayoutShadow = dynamic_cast<LwpLayoutShadow*>(m_LayShadow.obj().get()); LwpLayoutShadow* pLayoutShadow = dynamic_cast<LwpLayoutShadow*>(m_LayShadow.obj().get());
return pLayoutShadow ? &pLayoutShadow->GetShadow() : NULL; return pLayoutShadow ? &pLayoutShadow->GetShadow() : NULL;
} }
else if( !m_BasedOnStyle.IsNull() ) else if (LwpLayout* pLay = dynamic_cast<LwpLayout*>(GetBasedOnStyle().get()))
{ {
LwpLayout* pLay = dynamic_cast<LwpLayout*> ( m_BasedOnStyle.obj().get() ); return pLay->GetShadow();
return pLay ? pLay->GetShadow() : NULL;
} }
return NULL; return NULL;
} }
...@@ -1991,10 +1981,8 @@ sal_uInt8 LwpPlacableLayout::GetWrapType() ...@@ -1991,10 +1981,8 @@ sal_uInt8 LwpPlacableLayout::GetWrapType()
{ {
return m_nWrapType; return m_nWrapType;
} }
else if( !m_BasedOnStyle.IsNull() ) else if (LwpPlacableLayout* pLay = dynamic_cast<LwpPlacableLayout*>(GetBasedOnStyle().get()))
{ {
LwpPlacableLayout* pLay = dynamic_cast<LwpPlacableLayout*> ( m_BasedOnStyle.obj().get() );
if (pLay)
return pLay->GetWrapType(); return pLay->GetWrapType();
} }
return LAY_WRAP_AROUND; return LAY_WRAP_AROUND;
...@@ -2014,10 +2002,9 @@ LwpLayoutRelativity* LwpPlacableLayout::GetRelativityPiece() ...@@ -2014,10 +2002,9 @@ LwpLayoutRelativity* LwpPlacableLayout::GetRelativityPiece()
return dynamic_cast<LwpLayoutRelativity*>(m_LayRelativity.obj().get()); return dynamic_cast<LwpLayoutRelativity*>(m_LayRelativity.obj().get());
} }
} }
else if( !m_BasedOnStyle.IsNull() ) else if (LwpPlacableLayout* pLay = dynamic_cast<LwpPlacableLayout*>(GetBasedOnStyle().get()))
{ {
LwpPlacableLayout* pLay = dynamic_cast<LwpPlacableLayout*> ( m_BasedOnStyle.obj().get() ); return pLay->GetRelativityPiece();
return pLay ? pLay->GetRelativityPiece() : NULL;
} }
return NULL; return NULL;
} }
...@@ -2056,10 +2043,9 @@ sal_Int32 LwpPlacableLayout::GetBaseLineOffset() ...@@ -2056,10 +2043,9 @@ sal_Int32 LwpPlacableLayout::GetBaseLineOffset()
{ {
return m_nBaseLineOffset; return m_nBaseLineOffset;
} }
else if( !m_BasedOnStyle.IsNull() ) else if (LwpPlacableLayout* pLay = dynamic_cast<LwpPlacableLayout*>(GetBasedOnStyle().get()))
{ {
LwpPlacableLayout* pLay = dynamic_cast<LwpPlacableLayout*> ( m_BasedOnStyle.obj().get() ); return pLay->GetBaseLineOffset();
return pLay ? pLay->GetBaseLineOffset() : 0;
} }
return 0; return 0;
......
...@@ -328,6 +328,8 @@ public: ...@@ -328,6 +328,8 @@ public:
protected: protected:
void Read() SAL_OVERRIDE; void Read() SAL_OVERRIDE;
private:
LwpObjectID m_BasedOnStyle;
protected: protected:
enum enum
{ {
...@@ -336,8 +338,7 @@ protected: ...@@ -336,8 +338,7 @@ protected:
}; };
LwpObjectID m_Content; LwpObjectID m_Content;
LwpObjectID m_BasedOnStyle; rtl::Reference<LwpObject> GetBasedOnStyle();
LwpObjectID m_TabPiece; LwpObjectID m_TabPiece;
LwpLayoutStyle* m_pStyleStuff; LwpLayoutStyle* m_pStyleStuff;
LwpLayoutMisc* m_pMiscStuff; LwpLayoutMisc* m_pMiscStuff;
......
...@@ -187,12 +187,12 @@ sal_uInt32 LwpObjectID::DiskSizeIndexed() const ...@@ -187,12 +187,12 @@ sal_uInt32 LwpObjectID::DiskSizeIndexed() const
*/ */
rtl::Reference<LwpObject> LwpObjectID::obj(VO_TYPE tag) const rtl::Reference<LwpObject> LwpObjectID::obj(VO_TYPE tag) const
{ {
LwpGlobalMgr* pGlobal = LwpGlobalMgr::GetInstance(); if (IsNull())
LwpObjectFactory* pObjMgr = pGlobal->GetLwpObjFactory();
if(IsNull())
{ {
return NULL; return NULL;
} }
LwpGlobalMgr* pGlobal = LwpGlobalMgr::GetInstance();
LwpObjectFactory* pObjMgr = pGlobal->GetLwpObjFactory();
rtl::Reference<LwpObject> pObj = pObjMgr->QueryObject(*this); rtl::Reference<LwpObject> pObj = pObjMgr->QueryObject(*this);
if( tag!=VO_INVALID && (pObj.is()) ) if( tag!=VO_INVALID && (pObj.is()) )
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment