You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by or...@apache.org on 2014/07/15 16:59:43 UTC
svn commit: r1610719 - in /openoffice/branches/AOO410: ./ main/ main/sw/
main/sw/source/core/fields/cellfml.cxx main/sw/source/core/txtnode/atrfld.cxx
Author: orw
Date: Tue Jul 15 14:59:43 2014
New Revision: 1610719
URL: http://svn.apache.org/r1610719
Log:
125228: correct consideration of InputFields in table cells are part of table formulas
cherry-picked from trunk
Modified:
openoffice/branches/AOO410/ (props changed)
openoffice/branches/AOO410/main/ (props changed)
openoffice/branches/AOO410/main/sw/ (props changed)
openoffice/branches/AOO410/main/sw/source/core/fields/cellfml.cxx
openoffice/branches/AOO410/main/sw/source/core/txtnode/atrfld.cxx
Propchange: openoffice/branches/AOO410/
------------------------------------------------------------------------------
Merged /openoffice/trunk:r1610411
Propchange: openoffice/branches/AOO410/main/
------------------------------------------------------------------------------
Merged /openoffice/trunk/main:r1610411
Propchange: openoffice/branches/AOO410/main/sw/
------------------------------------------------------------------------------
Merged /openoffice/trunk/main/sw:r1610411
Modified: openoffice/branches/AOO410/main/sw/source/core/fields/cellfml.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/AOO410/main/sw/source/core/fields/cellfml.cxx?rev=1610719&r1=1610718&r2=1610719&view=diff
==============================================================================
--- openoffice/branches/AOO410/main/sw/source/core/fields/cellfml.cxx (original)
+++ openoffice/branches/AOO410/main/sw/source/core/fields/cellfml.cxx Tue Jul 15 14:59:43 2014
@@ -156,53 +156,61 @@ double SwTableBox::GetValue( SwTblCalcPa
if ( nSttPos < rTxt.Len() &&
( CH_TXTATR_BREAKWORD == Char || CH_TXTATR_INWORD == Char ) )
{
- SwIndex aIdx( pTxtNd, nSttPos );
- SwTxtFld * const pTxtFld = static_cast<SwTxtFld*>(
- pTxtNd->GetTxtAttrForCharAt(aIdx.GetIndex(), RES_TXTATR_FIELD));
- if( !pTxtFld )
- break;
-
- rCalcPara.rCalc.SetCalcError( CALC_NOERR ); // wieder zuruecksetzen
-
- const SwField* pFld = pTxtFld->GetFmtFld().GetField();
- switch( pFld->GetTyp()->Which() )
- {
- case RES_SETEXPFLD:
- nRet = ((SwSetExpField*)pFld)->GetValue();
- break;
- case RES_USERFLD:
- nRet = ((SwUserFieldType*)pFld)->GetValue();
- break;
- case RES_TABLEFLD:
- {
- SwTblField* pTblFld = (SwTblField*)pFld;
- if( !pTblFld->IsValid() ) // ist der Wert gueltig ??
- {
- // die richtige Tabelle mitgeben!
- const SwTable* pTmp = rCalcPara.pTbl;
- rCalcPara.pTbl = &pTxtNd->FindTableNode()->GetTable();
- pTblFld->CalcField( rCalcPara );
- rCalcPara.pTbl = pTmp;
- }
- nRet = pTblFld->GetValue();
- }
- break;
-
- case RES_DATETIMEFLD:
- nRet = ((SwDateTimeField*)pFld)->GetValue();
- break;
+ SwTxtFld * const pTxtFld =
+ static_cast<SwTxtFld*>( pTxtNd->GetTxtAttrForCharAt( nSttPos, RES_TXTATR_FIELD ) );
+ if ( pTxtFld == NULL )
+ break;
- case RES_JUMPEDITFLD:
- //JP 14.09.98: Bug 56112 - der Platzhalter kann nie einen
- // gueltigen Inhalt haben!
- nRet = 0;
- break;
+ rCalcPara.rCalc.SetCalcError( CALC_NOERR ); // wieder zuruecksetzen
- default:
- String const value(pFld->ExpandField(true));
- nRet = rCalcPara.rCalc.Calculate(value).GetDouble();
- }
- }
+ const SwField* pFld = pTxtFld->GetFmtFld().GetField();
+ switch ( pFld->GetTyp()->Which() )
+ {
+ case RES_SETEXPFLD:
+ nRet = ( (SwSetExpField*) pFld )->GetValue();
+ break;
+ case RES_USERFLD:
+ nRet = ( (SwUserFieldType*) pFld )->GetValue();
+ break;
+ case RES_TABLEFLD:
+ {
+ SwTblField* pTblFld = (SwTblField*) pFld;
+ if ( !pTblFld->IsValid() ) // ist der Wert gueltig ??
+ {
+ // die richtige Tabelle mitgeben!
+ const SwTable* pTmp = rCalcPara.pTbl;
+ rCalcPara.pTbl = &pTxtNd->FindTableNode()->GetTable();
+ pTblFld->CalcField( rCalcPara );
+ rCalcPara.pTbl = pTmp;
+ }
+ nRet = pTblFld->GetValue();
+ }
+ break;
+
+ case RES_DATETIMEFLD:
+ nRet = ( (SwDateTimeField*) pFld )->GetValue();
+ break;
+
+ case RES_JUMPEDITFLD:
+ // placeholder does not have valid content
+ nRet = 0;
+ break;
+
+ default:
+ String const value( pFld->ExpandField( true ) );
+ nRet = rCalcPara.rCalc.Calculate( value ).GetDouble();
+ }
+ }
+ else if ( nSttPos < rTxt.Len()
+ && Char == CH_TXT_ATR_INPUTFIELDSTART )
+ {
+ const SwTxtInputFld * pTxtInputFld =
+ dynamic_cast< const SwTxtInputFld* >(
+ pTxtNd->GetTxtAttrAt( nSttPos, RES_TXTATR_INPUTFIELD, SwTxtNode::DEFAULT ) );
+ if ( pTxtInputFld == NULL )
+ break;
+ nRet = rCalcPara.rCalc.Calculate( pTxtInputFld->GetFieldContent() ).GetDouble();
+ }
else
{
// Ergebnis ist 0 und kein Fehler!
Modified: openoffice/branches/AOO410/main/sw/source/core/txtnode/atrfld.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/AOO410/main/sw/source/core/txtnode/atrfld.cxx?rev=1610719&r1=1610718&r2=1610719&view=diff
==============================================================================
--- openoffice/branches/AOO410/main/sw/source/core/txtnode/atrfld.cxx (original)
+++ openoffice/branches/AOO410/main/sw/source/core/txtnode/atrfld.cxx Tue Jul 15 14:59:43 2014
@@ -28,6 +28,7 @@
#include <fmtfld.hxx>
#include <txtfld.hxx>
#include <txtannotationfld.hxx>
+#include <docfld.hxx>
#include <docufld.hxx>
#include <doc.hxx>
@@ -573,6 +574,8 @@ void SwTxtInputFld::UpdateFieldContent()
if ( pInputFld != NULL )
{
const_cast<SwInputField*>(pInputFld)->applyFieldContent( aNewFieldContent );
+ // trigger update of fields for scenarios in which the Input Field's content is part of e.g. a table formula
+ GetTxtNode().GetDoc()->GetUpdtFlds().SetFieldsDirty( sal_True );
}
}
}