summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoros <os@openoffice.org>2010-10-05 09:39:37 +0200
committeros <os@openoffice.org>2010-10-05 09:39:37 +0200
commitc7ecdf195bd546b08191de4aeef94820183c4227 (patch)
tree7285082e189b4499ccbc5603e4dd9d314637d520
parente98c2f526d1a05bed27bc1a82717c9e349d2bf43 (diff)
new: HasInvisibleContent; fixed: EmbedAllLinks
-rw-r--r--sw/inc/doc.hxx1
-rwxr-xr-xsw/source/core/doc/doc.cxx110
2 files changed, 83 insertions, 28 deletions
diff --git a/sw/inc/doc.hxx b/sw/inc/doc.hxx
index 10befb703b96..c228e57885c1 100644
--- a/sw/inc/doc.hxx
+++ b/sw/inc/doc.hxx
@@ -1897,6 +1897,7 @@ public:
// loesche den nicht sichtbaren ::com::sun::star::ucb::Content aus dem Document, wie z.B.:
// versteckte Bereiche, versteckte Absaetze
sal_Bool RemoveInvisibleContent();
+ sal_Bool HasInvisibleContent() const;
//restore the invisible content if it's available on the undo stack
sal_Bool RestoreInvisibleContent();
// replace fields by text - mailmerge support
diff --git a/sw/source/core/doc/doc.cxx b/sw/source/core/doc/doc.cxx
index f1ae3e241b1b..147d052ad9aa 100755
--- a/sw/source/core/doc/doc.cxx
+++ b/sw/source/core/doc/doc.cxx
@@ -2387,6 +2387,56 @@ BOOL SwDoc::RemoveInvisibleContent()
EndUndo( UNDO_UI_DELETE_INVISIBLECNTNT, NULL );
return bRet;
}
+/*-- 25.08.2010 14:18:12---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+BOOL SwDoc::HasInvisibleContent() const
+{
+ BOOL bRet = sal_False;
+
+ SwClientIter aIter( *GetSysFldType( RES_HIDDENPARAFLD ) );
+ if( aIter.First( TYPE( SwFmtFld ) ) )
+ bRet = sal_True;
+
+ //
+ // Search for any hidden paragraph (hidden text attribute)
+ //
+ if( ! bRet )
+ {
+ SwTxtNode* pTxtNd;
+ for( ULONG n = GetNodes().Count(); !bRet && (n > 0); )
+ {
+ SwTxtNode* pTxtNd = GetNodes()[ --n ]->GetTxtNode();
+ if ( pTxtNd )
+ {
+ bool bRemoved = false;
+ SwPaM aPam( *pTxtNd, 0, *pTxtNd, pTxtNd->GetTxt().Len() );
+ if( pTxtNd->HasHiddenCharAttribute( true ) || ( pTxtNd->HasHiddenCharAttribute( false ) ) )
+ {
+ bRet = sal_True;
+ }
+ }
+ }
+ }
+
+ if( ! bRet )
+ {
+ const SwSectionFmts& rSectFmts = GetSections();
+ USHORT n;
+
+ for( n = rSectFmts.Count(); !bRet && (n > 0); )
+ {
+ SwSectionFmt* pSectFmt = rSectFmts[ --n ];
+ // don't add sections in Undo/Redo
+ if( !pSectFmt->IsInNodesArr())
+ continue;
+ SwSection* pSect = pSectFmt->GetSection();
+ if( pSect->IsHidden() )
+ bRet = sal_True;
+ }
+ }
+ return bRet;
+}
/*-- 11.06.2004 08:34:04---------------------------------------------------
-----------------------------------------------------------------------*/
@@ -2501,26 +2551,17 @@ bool SwDoc::LinksUpdated() const
}
// embedded alle lokalen Links (Bereiche/Grafiken)
-bool SwDoc::EmbedAllLinks()
+::sfx2::SvBaseLink* lcl_FindNextRemovableLink( const ::sfx2::SvBaseLinks& rLinks, sfx2::LinkManager& rLnkMgr )
{
- BOOL bRet = FALSE;
- sfx2::LinkManager& rLnkMgr = GetLinkManager();
- const ::sfx2::SvBaseLinks& rLnks = rLnkMgr.GetLinks();
- if( rLnks.Count() )
+ for( USHORT n = 0; n < rLinks.Count(); ++n )
{
- BOOL bDoesUndo = DoesUndo();
- DoUndo( FALSE );
-
- for( USHORT n = 0; n < rLnks.Count(); ++n )
+ ::sfx2::SvBaseLink* pLnk = &(*rLinks[ n ]);
+ if( pLnk &&
+ ( OBJECT_CLIENT_GRF == pLnk->GetObjType() ||
+ OBJECT_CLIENT_FILE == pLnk->GetObjType() ) &&
+ pLnk->ISA( SwBaseLink ) )
{
- ::sfx2::SvBaseLink* pLnk = &(*rLnks[ n ]);
- if( pLnk &&
- ( OBJECT_CLIENT_GRF == pLnk->GetObjType() ||
- OBJECT_CLIENT_FILE == pLnk->GetObjType() ) &&
- pLnk->ISA( SwBaseLink ) )
- {
::sfx2::SvBaseLinkRef xLink = pLnk;
- USHORT nCount = rLnks.Count();
String sFName;
rLnkMgr.GetDisplayNames( xLink, 0, &sFName, 0, 0 );
@@ -2528,20 +2569,33 @@ bool SwDoc::EmbedAllLinks()
INetURLObject aURL( sFName );
if( INET_PROT_FILE == aURL.GetProtocol() ||
INET_PROT_CID == aURL.GetProtocol() )
- {
- // dem Link sagen, das er aufgeloest wird!
- xLink->Closed();
+ return pLnk;
+ }
+ }
+ return 0;
+}
+bool SwDoc::EmbedAllLinks()
+{
+ BOOL bRet = FALSE;
+ sfx2::LinkManager& rLnkMgr = GetLinkManager();
+ const ::sfx2::SvBaseLinks& rLinks = rLnkMgr.GetLinks();
+ if( rLinks.Count() )
+ {
+ BOOL bDoesUndo = DoesUndo();
+ DoUndo( FALSE );
- // falls einer vergessen hat sich auszutragen
- if( xLink.Is() )
- rLnkMgr.Remove( xLink );
+ ::sfx2::SvBaseLink* pLnk = 0;
+ while( 0 != (pLnk = lcl_FindNextRemovableLink( rLinks, rLnkMgr ) ) )
+ {
+ ::sfx2::SvBaseLinkRef xLink = pLnk;
+ // dem Link sagen, das er aufgeloest wird!
+ xLink->Closed();
- if( nCount != rLnks.Count() + 1 )
- n = 0; // wieder von vorne anfangen, es wurden
- // mehrere Links entfernt
- bRet = TRUE;
- }
- }
+ // falls einer vergessen hat sich auszutragen
+ if( xLink.Is() )
+ rLnkMgr.Remove( xLink );
+
+ bRet = TRUE;
}
DelAllUndoObj();