[Libreoffice-commits] core.git: sw/source
Jan-Marek Glogowski
glogow at fbihome.de
Tue Aug 26 05:43:59 PDT 2014
sw/source/core/doc/DocumentContentOperationsManager.cxx | 162 +++++++---------
1 file changed, 73 insertions(+), 89 deletions(-)
New commits:
commit 2f5e266e978a6c9142e8a154ccddb2a07146ed42
Author: Jan-Marek Glogowski <glogow at fbihome.de>
Date: Tue Jul 1 13:02:58 2014 +0200
Refactor NumRule handling in CopyImpl
The bug fix for i#86492 added a lot of duplicated code. This moves
the code into their own functions and uses macros to make the
resulting code even more readable.
Change-Id: Ifa0ece26f3152f1f8d8c65173b459e8c14c5b43a
Reviewed-on: https://gerrit.libreoffice.org/10968
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
Tested-by: Caolán McNamara <caolanm at redhat.com>
diff --git a/sw/source/core/doc/DocumentContentOperationsManager.cxx b/sw/source/core/doc/DocumentContentOperationsManager.cxx
index da16b11..49bbef1 100644
--- a/sw/source/core/doc/DocumentContentOperationsManager.cxx
+++ b/sw/source/core/doc/DocumentContentOperationsManager.cxx
@@ -3987,6 +3987,69 @@ SwFlyFrmFmt* DocumentContentOperationsManager::_InsNoTxtNode( const SwPosition&
return pFmt;
}
+#define NUMRULE_STATE \
+ SfxItemState aNumRuleState = SFX_ITEM_UNKNOWN; \
+ SwNumRuleItem aNumRuleItem; \
+ SfxItemState aListIdState = SFX_ITEM_UNKNOWN; \
+ SfxStringItem aListIdItem( RES_PARATR_LIST_ID, OUString() ); \
+
+#define PUSH_NUMRULE_STATE \
+ lcl_PushNumruleState( aNumRuleState, aNumRuleItem, aListIdState, aListIdItem, pDestTxtNd );
+
+#define POP_NUMRULE_STATE \
+ lcl_PopNumruleState( aNumRuleState, aNumRuleItem, aListIdState, aListIdItem, pDestTxtNd, rPam );
+
+static void lcl_PushNumruleState( SfxItemState &aNumRuleState, SwNumRuleItem &aNumRuleItem,
+ SfxItemState &aListIdState, SfxStringItem &aListIdItem,
+ const SwTxtNode *pDestTxtNd )
+{
+ // Safe numrule item at destination.
+ // #i86492# - Safe also <ListId> item of destination.
+ const SfxItemSet * pAttrSet = pDestTxtNd->GetpSwAttrSet();
+ if (pAttrSet != NULL)
+ {
+ const SfxPoolItem * pItem = NULL;
+ aNumRuleState = pAttrSet->GetItemState(RES_PARATR_NUMRULE, false, &pItem);
+ if (SFX_ITEM_SET == aNumRuleState)
+ aNumRuleItem = *((SwNumRuleItem *) pItem);
+
+ aListIdState =
+ pAttrSet->GetItemState(RES_PARATR_LIST_ID, false, &pItem);
+ if (SFX_ITEM_SET == aListIdState)
+ {
+ aListIdItem.SetValue( static_cast<const SfxStringItem*>(pItem)->GetValue() );
+ }
+ }
+}
+
+static void lcl_PopNumruleState( int aNumRuleState, const SwNumRuleItem &aNumRuleItem,
+ int aListIdState, const SfxStringItem &aListIdItem,
+ SwTxtNode *pDestTxtNd, const SwPaM& rPam )
+{
+ /* If only a part of one paragraph is copied
+ restore the numrule at the destination. */
+ // #i86492# - restore also <ListId> item
+ if ( !lcl_MarksWholeNode(rPam) )
+ {
+ if (SFX_ITEM_SET == aNumRuleState)
+ {
+ pDestTxtNd->SetAttr(aNumRuleItem);
+ }
+ else
+ {
+ pDestTxtNd->ResetAttr(RES_PARATR_NUMRULE);
+ }
+ if (SFX_ITEM_SET == aListIdState)
+ {
+ pDestTxtNd->SetAttr(aListIdItem);
+ }
+ else
+ {
+ pDestTxtNd->ResetAttr(RES_PARATR_LIST_ID);
+ }
+ }
+}
+
bool DocumentContentOperationsManager::CopyImpl( SwPaM& rPam, SwPosition& rPos,
const bool bMakeNewFrms, const bool bCopyAll,
SwPaM *const pCpyRange ) const
@@ -4150,28 +4213,10 @@ bool DocumentContentOperationsManager::CopyImpl( SwPaM& rPam, SwPosition& rPos,
}
}
- // Safe numrule item at destination.
- // #i86492# - Safe also <ListId> item of destination.
- SfxItemState aNumRuleState = SFX_ITEM_UNKNOWN;
- SwNumRuleItem aNumRuleItem;
- SfxItemState aListIdState = SFX_ITEM_UNKNOWN;
- SfxStringItem aListIdItem( RES_PARATR_LIST_ID, OUString() );
+ NUMRULE_STATE
+ if( bCopyCollFmt && bOneNode )
{
- const SfxItemSet * pAttrSet = pDestTxtNd->GetpSwAttrSet();
- if (pAttrSet != NULL)
- {
- const SfxPoolItem * pItem = NULL;
- aNumRuleState = pAttrSet->GetItemState(RES_PARATR_NUMRULE, false, &pItem);
- if (SFX_ITEM_SET == aNumRuleState)
- aNumRuleItem = *((SwNumRuleItem *) pItem);
-
- aListIdState =
- pAttrSet->GetItemState(RES_PARATR_LIST_ID, false, &pItem);
- if (SFX_ITEM_SET == aListIdState)
- {
- aListIdItem.SetValue( static_cast<const SfxStringItem*>(pItem)->GetValue() );
- }
- }
+ PUSH_NUMRULE_STATE
}
if( !bCopyOk )
@@ -4191,29 +4236,7 @@ bool DocumentContentOperationsManager::CopyImpl( SwPaM& rPam, SwPosition& rPos,
if( bCopyCollFmt )
{
pSttTxtNd->CopyCollFmt( *pDestTxtNd );
-
- /* If only a part of one paragraph is copied
- restore the numrule at the destination. */
- // #i86492# - restore also <ListId> item
- if ( !lcl_MarksWholeNode(rPam) )
- {
- if (SFX_ITEM_SET == aNumRuleState)
- {
- pDestTxtNd->SetAttr(aNumRuleItem);
- }
- else
- {
- pDestTxtNd->ResetAttr(RES_PARATR_NUMRULE);
- }
- if (SFX_ITEM_SET == aListIdState)
- {
- pDestTxtNd->SetAttr(aListIdItem);
- }
- else
- {
- pDestTxtNd->ResetAttr(RES_PARATR_LIST_ID);
- }
- }
+ POP_NUMRULE_STATE
}
break;
@@ -4295,31 +4318,14 @@ bool DocumentContentOperationsManager::CopyImpl( SwPaM& rPam, SwPosition& rPos,
bStartIsTxtNode = true;
}
- // Save numrule at destination
- // #i86492# - Safe also <ListId> item of destination.
- SfxItemState aNumRuleState = SFX_ITEM_UNKNOWN;
- SwNumRuleItem aNumRuleItem;
- SfxItemState aListIdState = SFX_ITEM_UNKNOWN;
- SfxStringItem aListIdItem( RES_PARATR_LIST_ID, OUString() );
- {
- const SfxItemSet* pAttrSet = pDestTxtNd->GetpSwAttrSet();
- if (pAttrSet != NULL)
- {
- const SfxPoolItem * pItem = NULL;
-
- aNumRuleState =
- pAttrSet->GetItemState(RES_PARATR_NUMRULE, false, &pItem);
- if (SFX_ITEM_SET == aNumRuleState)
- aNumRuleItem = *((SwNumRuleItem *) pItem);
+ const bool bEmptyDestNd = pDestTxtNd->GetTxt().isEmpty();
- aListIdState =
- pAttrSet->GetItemState(RES_PARATR_LIST_ID, false, &pItem);
- if (SFX_ITEM_SET == aListIdState)
- aListIdItem.SetValue( static_cast<const SfxStringItem*>(pItem)->GetValue() );
- }
+ NUMRULE_STATE
+ if( bCopyCollFmt && ( bOneNode || bEmptyDestNd ))
+ {
+ PUSH_NUMRULE_STATE
}
- const bool bEmptyDestNd = pDestTxtNd->GetTxt().isEmpty();
pEndTxtNd->CopyText( pDestTxtNd, aDestIdx, SwIndex( pEndTxtNd ),
pEnd->nContent.GetIndex() );
@@ -4327,31 +4333,9 @@ bool DocumentContentOperationsManager::CopyImpl( SwPaM& rPam, SwPosition& rPos,
if( bCopyCollFmt && ( bOneNode || bEmptyDestNd ))
{
pEndTxtNd->CopyCollFmt( *pDestTxtNd );
-
if ( bOneNode )
{
- /* If only a part of one paragraph is copied
- restore the numrule at the destination. */
- // #i86492# - restore also <ListId> item
- if ( !lcl_MarksWholeNode(rPam) )
- {
- if (SFX_ITEM_SET == aNumRuleState)
- {
- pDestTxtNd->SetAttr(aNumRuleItem);
- }
- else
- {
- pDestTxtNd->ResetAttr(RES_PARATR_NUMRULE);
- }
- if (SFX_ITEM_SET == aListIdState)
- {
- pDestTxtNd->SetAttr(aListIdItem);
- }
- else
- {
- pDestTxtNd->ResetAttr(RES_PARATR_LIST_ID);
- }
- }
+ POP_NUMRULE_STATE
}
}
}
More information about the Libreoffice-commits
mailing list