tweat ExtMargins with same recurse protection as Margins

Change-Id: I24640971ea6ca89878043966293492a991f01008
This commit is contained in:
Caolán McNamara
2016-03-11 10:38:46 +00:00
parent 6aa5bdc371
commit bcecf9b13b
3 changed files with 16 additions and 5 deletions

Binary file not shown.

View File

@@ -78,6 +78,7 @@ LwpVirtualLayout::LwpVirtualLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm)
, m_bGettingHasProtection(false) , m_bGettingHasProtection(false)
, m_bGettingIsProtected(false) , m_bGettingIsProtected(false)
, m_bGettingMarginsValue(false) , m_bGettingMarginsValue(false)
, m_bGettingExtMarginsValue(false)
, m_nAttributes(0) , m_nAttributes(0)
, m_nAttributes2(0) , m_nAttributes2(0)
, m_nAttributes3(0) , m_nAttributes3(0)
@@ -750,7 +751,7 @@ double LwpMiddleLayout::MarginsValue(const sal_uInt8 &nWhichSide)
* @param: * @param:
* @return: * @return:
*/ */
double LwpMiddleLayout::GetExtMarginsValue(const sal_uInt8 &nWhichSide) double LwpMiddleLayout::ExtMarginsValue(const sal_uInt8 &nWhichSide)
{ {
double fValue = 0; double fValue = 0;
if(m_nOverrideFlag & OVER_MARGINS) if(m_nOverrideFlag & OVER_MARGINS)
@@ -768,7 +769,7 @@ double LwpMiddleLayout::GetExtMarginsValue(const sal_uInt8 &nWhichSide)
fValue = pStyle->GetExtMarginsValue(nWhichSide); fValue = pStyle->GetExtMarginsValue(nWhichSide);
return fValue; return fValue;
} }
return LwpVirtualLayout::GetExtMarginsValue(nWhichSide); return LwpVirtualLayout::ExtMarginsValue(nWhichSide);
} }
/** /**
* @descr: Get the LwpBorderStuff object according to m_LayBorderStuff id. * @descr: Get the LwpBorderStuff object according to m_LayBorderStuff id.

View File

@@ -99,7 +99,6 @@ public:
inline virtual sal_uInt16 GetNumCols(){return 1;} inline virtual sal_uInt16 GetNumCols(){return 1;}
virtual double GetColWidth(sal_uInt16 nIndex); virtual double GetColWidth(sal_uInt16 nIndex);
virtual double GetColGap(sal_uInt16 nIndex); virtual double GetColGap(sal_uInt16 nIndex);
virtual double GetExtMarginsValue(const sal_uInt8& /*nWhichSide*/){return 0;}
virtual bool IsAutoGrow(){ return false;} virtual bool IsAutoGrow(){ return false;}
virtual bool IsAutoGrowUp(){ return false;} virtual bool IsAutoGrowUp(){ return false;}
virtual bool IsAutoGrowDown(){ return false;} virtual bool IsAutoGrowDown(){ return false;}
@@ -154,6 +153,15 @@ public:
m_bGettingMarginsValue = false; m_bGettingMarginsValue = false;
return fRet; return fRet;
} }
double GetExtMarginsValue(const sal_uInt8& nWhichSide)
{
if (m_bGettingExtMarginsValue)
throw std::runtime_error("recursion in layout");
m_bGettingExtMarginsValue = true;
auto fRet = ExtMarginsValue(nWhichSide);
m_bGettingExtMarginsValue = false;
return fRet;
}
OUString GetStyleName(){ return m_StyleName;} OUString GetStyleName(){ return m_StyleName;}
bool IsComplex(); bool IsComplex();
virtual bool IsAnchorPage(){ return false;} virtual bool IsAnchorPage(){ return false;}
@@ -207,6 +215,7 @@ protected:
virtual bool HonorProtection(); virtual bool HonorProtection();
virtual bool IsProtected(); virtual bool IsProtected();
virtual double MarginsValue(const sal_uInt8& /*nWhichSide*/){return 0;} virtual double MarginsValue(const sal_uInt8& /*nWhichSide*/){return 0;}
virtual double ExtMarginsValue(const sal_uInt8& /*nWhichSide*/){return 0;}
virtual bool MarginsSameAsParent(); virtual bool MarginsSameAsParent();
protected: protected:
bool m_bGettingHonorProtection; bool m_bGettingHonorProtection;
@@ -214,6 +223,7 @@ protected:
bool m_bGettingHasProtection; bool m_bGettingHasProtection;
bool m_bGettingIsProtected; bool m_bGettingIsProtected;
bool m_bGettingMarginsValue; bool m_bGettingMarginsValue;
bool m_bGettingExtMarginsValue;
sal_uInt32 m_nAttributes; sal_uInt32 m_nAttributes;
sal_uInt32 m_nAttributes2; sal_uInt32 m_nAttributes2;
sal_uInt32 m_nAttributes3; sal_uInt32 m_nAttributes3;
@@ -323,8 +333,6 @@ class LwpMiddleLayout : public LwpVirtualLayout
public: public:
LwpMiddleLayout( LwpObjectHeader &objHdr, LwpSvStream* pStrm ); LwpMiddleLayout( LwpObjectHeader &objHdr, LwpSvStream* pStrm );
virtual ~LwpMiddleLayout(); virtual ~LwpMiddleLayout();
virtual double MarginsValue(const sal_uInt8& nWhichSide) override;
virtual double GetExtMarginsValue(const sal_uInt8& nWhichSide) override;
LwpLayoutGeometry* GetGeometry() LwpLayoutGeometry* GetGeometry()
{ {
if (m_bGettingGeometry) if (m_bGettingGeometry)
@@ -379,6 +387,8 @@ public:
protected: protected:
void Read() override; void Read() override;
virtual bool MarginsSameAsParent() override; virtual bool MarginsSameAsParent() override;
virtual double MarginsValue(const sal_uInt8& nWhichSide) override;
virtual double ExtMarginsValue(const sal_uInt8& nWhichSide) override;
private: private:
LwpObjectID m_BasedOnStyle; LwpObjectID m_BasedOnStyle;
LwpLayoutGeometry* Geometry(); LwpLayoutGeometry* Geometry();