[Libreoffice-commits] .: 2 commits - sw/inc sw/source
Libreoffice Gerrit user
logerrit at kemper.freedesktop.org
Tue Jan 8 16:25:01 PST 2013
sw/inc/docufld.hxx | 16 ++++++++---
sw/source/core/fields/docufld.cxx | 51 +++++++++++++++++++++++--------------
sw/source/core/text/txtfld.cxx | 5 ++-
sw/source/filter/ww8/rtfexport.cxx | 2 -
4 files changed, 49 insertions(+), 25 deletions(-)
New commits:
commit 741e8b7b9d8e1a8f758edfe1c017801aa3d51247
Author: Michael Stahl <mstahl at redhat.com>
Date: Wed Jan 9 01:17:26 2013 +0100
fdo#58074: store page number in SwPageNumberField
Should hopefully fix the problem, which is essentially that all
SwPageNumberFields share a single SwPageNumberFieldType, which is only
updated properly in SwTxtFormatter::NewFldPortion, hence all expansions
of a SwPageNumberField other than that return wrong values.
Does not fix the problem for fields in headers though, which appears
much harder...
Change-Id: Iecf363c8acbc2aaa418cc0c980e0b62c8e0e7d14
diff --git a/sw/inc/docufld.hxx b/sw/inc/docufld.hxx
index d1ae27f..0779b25 100644
--- a/sw/inc/docufld.hxx
+++ b/sw/inc/docufld.hxx
@@ -142,14 +142,14 @@ enum SwJumpEditFormat
class SwPageNumberFieldType : public SwFieldType
{
sal_Int16 nNumberingType;
- sal_uInt16 nNum, nMax;
bool bVirtuell;
public:
SwPageNumberFieldType();
- String& Expand( sal_uInt32 nFmt, short nOff, const String&, String& rRet ) const;
- void ChangeExpansion( SwDoc* pDoc, sal_uInt16 nNum, sal_uInt16 nMax,
+ String& Expand( sal_uInt32 nFmt, short nOff, sal_uInt16 const nPageNumber,
+ sal_uInt16 const nMaxPage, const String&, String& rRet ) const;
+ void ChangeExpansion( SwDoc* pDoc,
sal_Bool bVirtPageNum, const sal_Int16* pNumFmt = 0 );
virtual SwFieldType* Copy() const;
};
@@ -163,10 +163,18 @@ class SW_DLLPUBLIC SwPageNumberField : public SwField
String sUserStr;
sal_uInt16 nSubType;
short nOffset;
+ // fdo#58074 store page number in SwField, not SwFieldType
+ sal_uInt16 m_nPageNumber;
+ sal_uInt16 m_nMaxPage;
public:
SwPageNumberField(SwPageNumberFieldType*, sal_uInt16 nSub = PG_RANDOM,
- sal_uInt32 nFmt = 0, short nOff = 0);
+ sal_uInt32 nFmt = 0, short nOff = 0,
+ sal_uInt16 const nPageNumber = 0,
+ sal_uInt16 const nMaxPage = 0);
+
+ void ChangeExpansion(sal_uInt16 const nPageNumber,
+ sal_uInt16 const nMaxPage);
virtual String Expand() const;
virtual SwField* Copy() const;
diff --git a/sw/source/core/fields/docufld.cxx b/sw/source/core/fields/docufld.cxx
index cc0d853..de0d3a8 100644
--- a/sw/source/core/fields/docufld.cxx
+++ b/sw/source/core/fields/docufld.cxx
@@ -107,19 +107,18 @@ using namespace nsSwDocInfoSubType;
SwPageNumberFieldType::SwPageNumberFieldType()
: SwFieldType( RES_PAGENUMBERFLD ),
nNumberingType( SVX_NUM_ARABIC ),
- nNum( 0 ),
- nMax( USHRT_MAX ),
bVirtuell( false )
{
}
String& SwPageNumberFieldType::Expand( sal_uInt32 nFmt, short nOff,
+ sal_uInt16 const nPageNumber, sal_uInt16 const nMaxPage,
const String& rUserStr, String& rRet ) const
{
sal_uInt32 nTmpFmt = (SVX_NUM_PAGEDESC == nFmt) ? (sal_uInt32)nNumberingType : nFmt;
- long nTmp = nNum + nOff;
+ int const nTmp = nPageNumber + nOff;
- if( 0 >= nTmp || SVX_NUM_NUMBER_NONE == nTmpFmt || (!bVirtuell && nTmp > nMax) )
+ if (0 >= nTmp || SVX_NUM_NUMBER_NONE == nTmpFmt || (!bVirtuell && nTmp > nMaxPage))
rRet = aEmptyStr;
else if( SVX_NUM_CHAR_SPECIAL == nTmpFmt )
rRet = rUserStr;
@@ -132,8 +131,6 @@ SwFieldType* SwPageNumberFieldType::Copy() const
{
SwPageNumberFieldType *pTmp = new SwPageNumberFieldType();
- pTmp->nNum = nNum;
- pTmp->nMax = nMax;
pTmp->nNumberingType = nNumberingType;
pTmp->bVirtuell = bVirtuell;
@@ -144,12 +141,10 @@ SwFieldType* SwPageNumberFieldType::Copy() const
Beschreibung: Verschiedene Expandierung
--------------------------------------------------------------------*/
-void SwPageNumberFieldType::ChangeExpansion( SwDoc* pDoc, sal_uInt16 nPage,
- sal_uInt16 nNumPages, sal_Bool bVirt,
+void SwPageNumberFieldType::ChangeExpansion( SwDoc* pDoc,
+ sal_Bool bVirt,
const sal_Int16* pNumFmt )
{
- nNum = nPage;
- nMax = nNumPages;
if( pNumFmt )
nNumberingType = *pNumFmt;
@@ -186,11 +181,21 @@ void SwPageNumberFieldType::ChangeExpansion( SwDoc* pDoc, sal_uInt16 nPage,
--------------------------------------------------------------------*/
SwPageNumberField::SwPageNumberField(SwPageNumberFieldType* pTyp,
- sal_uInt16 nSub, sal_uInt32 nFmt, short nOff)
+ sal_uInt16 nSub, sal_uInt32 nFmt, short nOff,
+ sal_uInt16 const nPageNumber, sal_uInt16 const nMaxPage)
: SwField(pTyp, nFmt), nSubType(nSub), nOffset(nOff)
+ , m_nPageNumber(nPageNumber)
+ , m_nMaxPage(nMaxPage)
{
}
+void SwPageNumberField::ChangeExpansion(sal_uInt16 const nPageNumber,
+ sal_uInt16 const nMaxPage)
+{
+ m_nPageNumber = nPageNumber;
+ m_nMaxPage = nMaxPage;
+}
+
String SwPageNumberField::Expand() const
{
String sRet;
@@ -198,23 +203,33 @@ String SwPageNumberField::Expand() const
if( PG_NEXT == nSubType && 1 != nOffset )
{
- if( pFldType->Expand( GetFormat(), 1, sUserStr, sRet ).Len() )
- pFldType->Expand( GetFormat(), nOffset, sUserStr, sRet );
+ if (pFldType->Expand(GetFormat(), 1, m_nPageNumber, m_nMaxPage,
+ sUserStr, sRet).Len())
+ {
+ pFldType->Expand(GetFormat(), nOffset, m_nPageNumber, m_nMaxPage,
+ sUserStr, sRet);
+ }
}
else if( PG_PREV == nSubType && -1 != nOffset )
{
- if( pFldType->Expand( GetFormat(), -1, sUserStr, sRet ).Len() )
- pFldType->Expand( GetFormat(), nOffset, sUserStr, sRet );
+ if (pFldType->Expand(GetFormat(), -1, m_nPageNumber, m_nMaxPage,
+ sUserStr, sRet).Len())
+ {
+ pFldType->Expand(GetFormat(), nOffset, m_nPageNumber, m_nMaxPage,
+ sUserStr, sRet);
+ }
}
else
- pFldType->Expand( GetFormat(), nOffset, sUserStr, sRet );
+ pFldType->Expand(GetFormat(), nOffset, m_nPageNumber, m_nMaxPage,
+ sUserStr, sRet);
return sRet;
}
SwField* SwPageNumberField::Copy() const
{
- SwPageNumberField *pTmp =
- new SwPageNumberField((SwPageNumberFieldType*)GetTyp(), nSubType, GetFormat(), nOffset);
+ SwPageNumberField *pTmp = new SwPageNumberField(
+ static_cast<SwPageNumberFieldType*>(GetTyp()), nSubType,
+ GetFormat(), nOffset, m_nPageNumber, m_nMaxPage);
pTmp->SetLanguage( GetLanguage() );
pTmp->SetUserString( sUserStr );
return pTmp;
diff --git a/sw/source/core/text/txtfld.cxx b/sw/source/core/text/txtfld.cxx
index aaa7fe0..ce50b44 100644
--- a/sw/source/core/text/txtfld.cxx
+++ b/sw/source/core/text/txtfld.cxx
@@ -169,8 +169,9 @@ SwExpandPortion *SwTxtFormatter::NewFldPortion( SwTxtFormatInfo &rInf,
sal_Int16 nNumFmt = -1;
if(SVX_NUM_PAGEDESC == pFld->GetFormat())
nNumFmt = pFrame->FindPageFrm()->GetPageDesc()->GetNumType().GetNumberingType();
-
- pPageNr->ChangeExpansion( pDoc, nVirtNum, nNumPages,
+ static_cast<SwPageNumberField*>(pFld)
+ ->ChangeExpansion(nVirtNum, nNumPages);
+ pPageNr->ChangeExpansion(pDoc,
bVirt, nNumFmt > -1 ? &nNumFmt : 0);
}
{
commit 9669d2bdea00b86874831d0c2555e7f85f2ca209
Author: Michael Stahl <mstahl at redhat.com>
Date: Wed Jan 9 01:12:46 2013 +0100
that ExpandField looks like it wants cache only
Change-Id: I3991d2f40fab9795d7f1754665f2ebfa165c310c
diff --git a/sw/source/filter/ww8/rtfexport.cxx b/sw/source/filter/ww8/rtfexport.cxx
index a9e6c5d..9b01126 100644
--- a/sw/source/filter/ww8/rtfexport.cxx
+++ b/sw/source/filter/ww8/rtfexport.cxx
@@ -325,7 +325,7 @@ void RtfExport::DoFormText(const SwInputField* pFld )
{
SAL_INFO("sw.rtf", OSL_THIS_FUNC);
- ::rtl::OUString sResult = pFld->ExpandField(pDoc->IsClipBoard());
+ ::rtl::OUString sResult = pFld->ExpandField(true);
::rtl::OUString sHelp( pFld->GetHelp() );
::rtl::OUString sName = pFld->GetPar2();
::rtl::OUString sStatus = pFld->GetToolTip();
More information about the Libreoffice-commits
mailing list