Author: orw
Date: Mon Jul 14 13:36:56 2014
New Revision: 1610411
URL: http://svn.apache.org/r1610411
Log:
125228: correct consideration of InputFields in table cells are part of table
formulas
Modified:
openoffice/trunk/main/sw/source/core/fields/cellfml.cxx
openoffice/trunk/main/sw/source/core/txtnode/atrfld.cxx
Modified: openoffice/trunk/main/sw/source/core/fields/cellfml.cxx
URL:
http://svn.apache.org/viewvc/openoffice/trunk/main/sw/source/core/fields/cellfml.cxx?rev=1610411&r1=1610410&r2=1610411&view=diff
==============================================================================
--- openoffice/trunk/main/sw/source/core/fields/cellfml.cxx (original)
+++ openoffice/trunk/main/sw/source/core/fields/cellfml.cxx Mon Jul 14 13:36:56
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/trunk/main/sw/source/core/txtnode/atrfld.cxx
URL:
http://svn.apache.org/viewvc/openoffice/trunk/main/sw/source/core/txtnode/atrfld.cxx?rev=1610411&r1=1610410&r2=1610411&view=diff
==============================================================================
--- openoffice/trunk/main/sw/source/core/txtnode/atrfld.cxx (original)
+++ openoffice/trunk/main/sw/source/core/txtnode/atrfld.cxx Mon Jul 14 13:36:56
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 );
}
}
}