Author: orw
Date: Tue Feb 11 13:25:08 2014
New Revision: 1567110
URL: http://svn.apache.org/r1567110
Log:
124179: trigger update User Fields and related Input Fields when user directly
edits a User Field Input Field
- assure that no recursive updates occur
Modified:
openoffice/trunk/main/sw/inc/expfld.hxx
openoffice/trunk/main/sw/inc/txtfld.hxx
openoffice/trunk/main/sw/source/core/fields/expfld.cxx
openoffice/trunk/main/sw/source/core/fields/usrfld.cxx
openoffice/trunk/main/sw/source/core/txtnode/atrfld.cxx
Modified: openoffice/trunk/main/sw/inc/expfld.hxx
URL:
http://svn.apache.org/viewvc/openoffice/trunk/main/sw/inc/expfld.hxx?rev=1567110&r1=1567109&r2=1567110&view=diff
==============================================================================
--- openoffice/trunk/main/sw/inc/expfld.hxx (original)
+++ openoffice/trunk/main/sw/inc/expfld.hxx Tue Feb 11 13:25:08 2014
@@ -327,6 +327,9 @@ class SW_DLLPUBLIC SwInputField : public
// Accessing Input Field's content
const String& getContent() const;
+ void LockNotifyContentChange();
+ void UnlockNotifyContentChange();
+
public:
// Direkte Eingabe ueber Dialog alten Wert loeschen
SwInputField(
Modified: openoffice/trunk/main/sw/inc/txtfld.hxx
URL:
http://svn.apache.org/viewvc/openoffice/trunk/main/sw/inc/txtfld.hxx?rev=1567110&r1=1567109&r2=1567110&view=diff
==============================================================================
--- openoffice/trunk/main/sw/inc/txtfld.hxx (original)
+++ openoffice/trunk/main/sw/inc/txtfld.hxx Tue Feb 11 13:25:08 2014
@@ -86,6 +86,8 @@ public:
virtual xub_StrLen* GetEnd();
+ void LockNotifyContentChange();
+ void UnlockNotifyContentChange();
virtual void NotifyContentChange( SwFmtFld& rFmtFld );
void UpdateTextNodeContent( const String& rNewContent );
@@ -95,6 +97,8 @@ public:
private:
xub_StrLen m_nEnd;
+
+ bool m_bLockNotifyContentChange;
};
#endif
Modified: openoffice/trunk/main/sw/source/core/fields/expfld.cxx
URL:
http://svn.apache.org/viewvc/openoffice/trunk/main/sw/source/core/fields/expfld.cxx?rev=1567110&r1=1567109&r2=1567110&view=diff
==============================================================================
--- openoffice/trunk/main/sw/source/core/fields/expfld.cxx (original)
+++ openoffice/trunk/main/sw/source/core/fields/expfld.cxx Tue Feb 11 13:25:08
2014
@@ -1181,6 +1181,32 @@ const String& SwInputField::getContent()
return aContent;
}
+
+void SwInputField::LockNotifyContentChange()
+{
+ if ( GetFmtFld() != NULL )
+ {
+ SwTxtInputFld* pTxtInputFld = dynamic_cast< SwTxtInputFld*
>(GetFmtFld()->GetTxtFld());
+ if ( pTxtInputFld != NULL )
+ {
+ pTxtInputFld->LockNotifyContentChange();
+ }
+ }
+}
+
+
+void SwInputField::UnlockNotifyContentChange()
+{
+ if ( GetFmtFld() != NULL )
+ {
+ SwTxtInputFld* pTxtInputFld = dynamic_cast< SwTxtInputFld*
>(GetFmtFld()->GetTxtFld());
+ if ( pTxtInputFld != NULL )
+ {
+ pTxtInputFld->UnlockNotifyContentChange();
+ }
+ }
+}
+
void SwInputField::applyFieldContent( const String& rNewFieldContent )
{
if ( (nSubType & 0x00ff) == INP_TXT )
@@ -1194,6 +1220,13 @@ void SwInputField::applyFieldContent( co
if( pUserTyp )
{
pUserTyp->SetContent( rNewFieldContent );
+
+ // trigger update of the corresponding User Fields and other
related Input Fields
+ {
+ LockNotifyContentChange();
+ pUserTyp->UpdateFlds();
+ UnlockNotifyContentChange();
+ }
}
}
}
Modified: openoffice/trunk/main/sw/source/core/fields/usrfld.cxx
URL:
http://svn.apache.org/viewvc/openoffice/trunk/main/sw/source/core/fields/usrfld.cxx?rev=1567110&r1=1567109&r2=1567110&view=diff
==============================================================================
--- openoffice/trunk/main/sw/source/core/fields/usrfld.cxx (original)
+++ openoffice/trunk/main/sw/source/core/fields/usrfld.cxx Tue Feb 11 13:25:08
2014
@@ -230,12 +230,18 @@ const String& SwUserFieldType::GetName()
void SwUserFieldType::Modify( const SfxPoolItem* pOld, const SfxPoolItem* pNew
)
{
- if( !pOld && !pNew )
- ChgValid( sal_False );
+ if( !pOld && !pNew )
+ ChgValid( sal_False );
- NotifyClients( pOld, pNew );
- // und ggfs. am UserFeld haengende InputFelder updaten!
- GetDoc()->GetSysFldType( RES_INPUTFLD )->UpdateFlds();
+ NotifyClients( pOld, pNew );
+
+ // update Input Fields as there might be Input Fields depending on this
User Field
+ if ( !IsModifyLocked() )
+ {
+ LockModify();
+ GetDoc()->GetSysFldType( RES_INPUTFLD )->UpdateFlds();
+ UnlockModify();
+ }
}
double SwUserFieldType::GetValue( SwCalc& rCalc )
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=1567110&r1=1567109&r2=1567110&view=diff
==============================================================================
--- openoffice/trunk/main/sw/source/core/txtnode/atrfld.cxx (original)
+++ openoffice/trunk/main/sw/source/core/txtnode/atrfld.cxx Tue Feb 11 13:25:08
2014
@@ -457,6 +457,7 @@ SwTxtInputFld::SwTxtInputFld(
: SwTxtFld( rAttr, nStart )
, m_nEnd( nEnd )
+ , m_bLockNotifyContentChange( false )
{
SetHasDummyChar( false );
SetHasContent( true );
@@ -477,11 +478,30 @@ xub_StrLen* SwTxtInputFld::GetEnd()
return &m_nEnd;
}
+
+void SwTxtInputFld::LockNotifyContentChange()
+{
+ m_bLockNotifyContentChange = true;
+}
+
+
+void SwTxtInputFld::UnlockNotifyContentChange()
+{
+ m_bLockNotifyContentChange = false;
+}
+
+
void SwTxtInputFld::NotifyContentChange( SwFmtFld& rFmtFld )
{
- SwTxtFld::NotifyContentChange( rFmtFld );
+ if ( !m_bLockNotifyContentChange )
+ {
+ LockNotifyContentChange();
+
+ SwTxtFld::NotifyContentChange( rFmtFld );
+ UpdateTextNodeContent( GetFieldContent() );
- UpdateTextNodeContent( GetFieldContent() );
+ UnlockNotifyContentChange();
+ }
}
const String SwTxtInputFld::GetFieldContent() const