Kaydet (Commit) da5e8ba3 authored tarafından Caolán McNamara's avatar Caolán McNamara

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

Change-Id: I093546793755f8a3a6e8a3c23fb8565ad27b75da
üst 80297dd0
...@@ -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());
...@@ -654,7 +654,7 @@ void LwpCellLayout::ApplyProtect(XFCell * pCell, LwpObjectID aTableID) ...@@ -654,7 +654,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;
......
...@@ -622,6 +622,17 @@ void LwpMiddleLayout::Read() ...@@ -622,6 +622,17 @@ void LwpMiddleLayout::Read()
} }
} }
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"
/** /**
...@@ -634,10 +645,9 @@ LwpLayoutGeometry* LwpMiddleLayout::GetGeometry() ...@@ -634,10 +645,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() : nullptr;
} }
return nullptr; return nullptr;
} }
...@@ -682,11 +692,9 @@ bool LwpMiddleLayout::MarginsSameAsParent() ...@@ -682,11 +692,9 @@ 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()); pLay->MarginsSameAsParent();
if (pLay)
pLay->MarginsSameAsParent();
} }
return LwpVirtualLayout::MarginsSameAsParent(); return LwpVirtualLayout::MarginsSameAsParent();
...@@ -721,7 +729,7 @@ double LwpMiddleLayout::GetMarginsValue(const sal_uInt8 &nWhichSide) ...@@ -721,7 +729,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);
...@@ -747,7 +755,7 @@ double LwpMiddleLayout::GetExtMarginsValue(const sal_uInt8 &nWhichSide) ...@@ -747,7 +755,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);
...@@ -765,10 +773,9 @@ LwpBorderStuff* LwpMiddleLayout::GetBorderStuff() ...@@ -765,10 +773,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() : nullptr; return pLayoutBorder ? &pLayoutBorder->GetBorderStuff() : nullptr;
} }
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() : nullptr;
} }
return nullptr; return nullptr;
} }
...@@ -783,10 +790,9 @@ LwpBackgroundStuff* LwpMiddleLayout::GetBackgroundStuff() ...@@ -783,10 +790,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() : nullptr; return pLayoutBackground ? &pLayoutBackground->GetBackgoudStuff() : nullptr;
} }
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() : nullptr;
} }
return nullptr; return nullptr;
} }
...@@ -881,10 +887,9 @@ LwpTabOverride* LwpMiddleLayout::GetTabOverride() ...@@ -881,10 +887,9 @@ LwpTabOverride* LwpMiddleLayout::GetTabOverride()
} }
return nullptr; return nullptr;
} }
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() : nullptr;
} }
return nullptr; return nullptr;
} }
...@@ -896,8 +901,9 @@ sal_uInt16 LwpMiddleLayout::GetScaleMode() ...@@ -896,8 +901,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);
} }
...@@ -907,8 +913,9 @@ sal_uInt16 LwpMiddleLayout::GetScaleTile() ...@@ -907,8 +913,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;
} }
...@@ -918,8 +925,9 @@ sal_uInt16 LwpMiddleLayout::GetScaleCenter() ...@@ -918,8 +925,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;
} }
...@@ -928,8 +936,9 @@ sal_uInt32 LwpMiddleLayout::GetScalePercentage() ...@@ -928,8 +936,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;
} }
...@@ -938,8 +947,9 @@ double LwpMiddleLayout::GetScaleWidth() ...@@ -938,8 +947,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;
} }
...@@ -948,8 +958,9 @@ double LwpMiddleLayout::GetScaleHeight() ...@@ -948,8 +958,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;
} }
...@@ -1004,9 +1015,10 @@ bool LwpMiddleLayout::IsSizeRightToContainer() ...@@ -1004,9 +1015,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
...@@ -1023,9 +1035,10 @@ bool LwpMiddleLayout::IsSizeRightToContent() ...@@ -1023,9 +1035,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
...@@ -1115,10 +1128,9 @@ bool LwpMiddleLayout::IsAutoGrow() ...@@ -1115,10 +1128,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();
} }
...@@ -1133,10 +1145,9 @@ bool LwpMiddleLayout::IsAutoGrowDown() ...@@ -1133,10 +1145,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();
} }
...@@ -1151,10 +1162,9 @@ bool LwpMiddleLayout::IsAutoGrowUp() ...@@ -1151,10 +1162,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();
} }
...@@ -1169,11 +1179,9 @@ bool LwpMiddleLayout::IsAutoGrowLeft() ...@@ -1169,11 +1179,9 @@ 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() ); return pLay->IsAutoGrowLeft();
if (pLay)
return pLay->IsAutoGrowLeft();
} }
return LwpVirtualLayout::IsAutoGrowLeft(); return LwpVirtualLayout::IsAutoGrowLeft();
} }
...@@ -1188,10 +1196,9 @@ bool LwpMiddleLayout::IsAutoGrowRight() ...@@ -1188,10 +1196,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();
} }
...@@ -1209,11 +1216,9 @@ sal_uInt8 LwpMiddleLayout::GetContentOrientation() ...@@ -1209,11 +1216,9 @@ 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() ); return pLay->GetContentOrientation();
if (pLay)
return pLay->GetContentOrientation();
} }
return LwpVirtualLayout::GetContentOrientation(); return LwpVirtualLayout::GetContentOrientation();
} }
...@@ -1244,11 +1249,9 @@ bool LwpMiddleLayout::HonorProtection() ...@@ -1244,11 +1249,9 @@ 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() ); return pLay->HonorProtection();
if (pLay)
return pLay->HonorProtection();
} }
return LwpVirtualLayout::HonorProtection(); return LwpVirtualLayout::HonorProtection();
...@@ -1265,10 +1268,9 @@ bool LwpMiddleLayout::IsProtected() ...@@ -1265,10 +1268,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();
...@@ -1391,10 +1393,9 @@ bool LwpMiddleLayout::GetUsePrinterSettings() ...@@ -1391,10 +1393,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;
} }
...@@ -1470,8 +1471,8 @@ sal_uInt16 LwpLayout::GetNumCols() ...@@ -1470,8 +1471,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();
} }
...@@ -1495,8 +1496,8 @@ double LwpLayout::GetColWidth(sal_uInt16 nIndex) ...@@ -1495,8 +1496,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);
} }
...@@ -1520,8 +1521,8 @@ double LwpLayout::GetColGap(sal_uInt16 nIndex) ...@@ -1520,8 +1521,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);
} }
...@@ -1663,10 +1664,9 @@ sal_uInt16 LwpLayout::GetUsePage() ...@@ -1663,10 +1664,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;
} }
...@@ -1681,10 +1681,9 @@ LwpUseWhen* LwpLayout::VirtualGetUseWhen() ...@@ -1681,10 +1681,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() : nullptr;
} }
return LwpVirtualLayout::VirtualGetUseWhen(); return LwpVirtualLayout::VirtualGetUseWhen();
} }
...@@ -1703,11 +1702,9 @@ bool LwpLayout::IsUseOnAllPages() ...@@ -1703,11 +1702,9 @@ 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() ); return pLay->IsUseOnAllPages();
if (pLay)
return pLay->IsUseOnAllPages();
} }
return LwpVirtualLayout::IsUseOnAllPages(); return LwpVirtualLayout::IsUseOnAllPages();
} }
...@@ -1726,11 +1723,9 @@ bool LwpLayout::IsUseOnAllEvenPages() ...@@ -1726,11 +1723,9 @@ 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() ); return pLay->IsUseOnAllEvenPages();
if (pLay)
return pLay->IsUseOnAllEvenPages();
} }
return LwpVirtualLayout::IsUseOnAllEvenPages(); return LwpVirtualLayout::IsUseOnAllEvenPages();
} }
...@@ -1749,11 +1744,9 @@ bool LwpLayout::IsUseOnAllOddPages() ...@@ -1749,11 +1744,9 @@ 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() ); return pLay->IsUseOnAllOddPages();
if (pLay)
return pLay->IsUseOnAllOddPages();
} }
return LwpVirtualLayout::IsUseOnAllOddPages(); return LwpVirtualLayout::IsUseOnAllOddPages();
} }
...@@ -1772,11 +1765,9 @@ bool LwpLayout::IsUseOnPage() ...@@ -1772,11 +1765,9 @@ 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() ); return pLay->IsUseOnPage();
if (pLay)
return pLay->IsUseOnPage();
} }
return LwpVirtualLayout::IsUseOnPage(); return LwpVirtualLayout::IsUseOnPage();
} }
...@@ -1791,10 +1782,9 @@ LwpShadow* LwpLayout::GetShadow() ...@@ -1791,10 +1782,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() : nullptr; return pLayoutShadow ? &pLayoutShadow->GetShadow() : nullptr;
} }
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() : nullptr;
} }
return nullptr; return nullptr;
} }
...@@ -1930,11 +1920,9 @@ sal_uInt8 LwpPlacableLayout::GetWrapType() ...@@ -1930,11 +1920,9 @@ 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() ); return pLay->GetWrapType();
if (pLay)
return pLay->GetWrapType();
} }
return LAY_WRAP_AROUND; return LAY_WRAP_AROUND;
} }
...@@ -1950,10 +1938,9 @@ LwpLayoutRelativity* LwpPlacableLayout::GetRelativityPiece() ...@@ -1950,10 +1938,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() : nullptr;
} }
return nullptr; return nullptr;
} }
...@@ -1992,10 +1979,9 @@ sal_Int32 LwpPlacableLayout::GetBaseLineOffset() ...@@ -1992,10 +1979,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;
......
...@@ -321,6 +321,8 @@ public: ...@@ -321,6 +321,8 @@ public:
protected: protected:
void Read() override; void Read() override;
private:
LwpObjectID m_BasedOnStyle;
protected: protected:
enum enum
{ {
...@@ -329,8 +331,7 @@ protected: ...@@ -329,8 +331,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;
......
...@@ -183,12 +183,12 @@ sal_uInt32 LwpObjectID::DiskSizeIndexed() const ...@@ -183,12 +183,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 nullptr; return nullptr;
} }
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