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 );
         }
     }
 }