diff options
Diffstat (limited to 'sw/source/core/doc/docnew.cxx')
-rw-r--r-- | sw/source/core/doc/docnew.cxx | 1033 |
1 files changed, 0 insertions, 1033 deletions
diff --git a/sw/source/core/doc/docnew.cxx b/sw/source/core/doc/docnew.cxx index d3e1ad526c61..349a90452c40 100644 --- a/sw/source/core/doc/docnew.cxx +++ b/sw/source/core/doc/docnew.cxx @@ -133,28 +133,6 @@ SV_IMPL_PTRARR( SwGrfFmtColls, SwGrfFmtCollPtr) /* * global functions... */ - uno::Reference< linguistic2::XProofreadingIterator > SwDoc::GetGCIterator() const -{ - if (!m_xGCIterator.is() && SvtLinguConfig().HasGrammarChecker()) - { - uno::Reference< lang::XMultiServiceFactory > xMgr( comphelper::getProcessServiceFactory() ); - if (xMgr.is()) - { - try - { - rtl::OUString aServiceName(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.linguistic2.ProofreadingIterator")); - m_xGCIterator = uno::Reference< linguistic2::XProofreadingIterator > - ( xMgr->createInstance( aServiceName ), uno::UNO_QUERY_THROW ); - } - catch (uno::Exception &) - { - OSL_FAIL( "No GCIterator" ); - } - } - } - - return m_xGCIterator; -} void StartGrammarChecking( SwDoc &rDoc ) { @@ -202,704 +180,6 @@ sal_Bool lcl_DelFmtIndizes( const SwFrmFmtPtr& rpFmt, void* ) return sal_True; } -/* - * exported methods - */ -SwDoc::SwDoc() - : m_pNodes( new SwNodes(this) ) - , - mpAttrPool(new SwAttrPool(this)), - pMarkManager(new ::sw::mark::MarkManager(*this)), - m_pMetaFieldManager(new ::sw::MetaFieldManager()), - m_pUndoManager(new ::sw::UndoManager( - ::std::auto_ptr<SwNodes>(new SwNodes(this)), *this, *this, *this)), - pDfltFrmFmt( new SwFrmFmt( GetAttrPool(), sFrmFmtStr, 0 ) ), - pEmptyPageFmt( new SwFrmFmt( GetAttrPool(), sEmptyPageStr, pDfltFrmFmt ) ), - pColumnContFmt( new SwFrmFmt( GetAttrPool(), sColumnCntStr, pDfltFrmFmt ) ), - pDfltCharFmt( new SwCharFmt( GetAttrPool(), sCharFmtStr, 0 ) ), - pDfltTxtFmtColl( new SwTxtFmtColl( GetAttrPool(), sTxtCollStr ) ), - pDfltGrfFmtColl( new SwGrfFmtColl( GetAttrPool(), sGrfCollStr ) ), - pFrmFmtTbl( new SwFrmFmts() ), - pCharFmtTbl( new SwCharFmts() ), - pSpzFrmFmtTbl( new SwSpzFrmFmts() ), - pSectionFmtTbl( new SwSectionFmts() ), - pTblFrmFmtTbl( new SwFrmFmts() ), - pTxtFmtCollTbl( new SwTxtFmtColls() ), - pGrfFmtCollTbl( new SwGrfFmtColls() ), - pTOXTypes( new SwTOXTypes() ), - pDefTOXBases( new SwDefTOXBase_Impl() ), - pCurrentView( 0 ), //swmod 071225 - pDrawModel( 0 ), - pUpdtFlds( new SwDocUpdtFld() ), - pFldTypes( new SwFldTypes() ), - pVirDev( 0 ), - pPrt( 0 ), - pPrtData( 0 ), - pGlossaryDoc( 0 ), - pOutlineRule( 0 ), - pFtnInfo( new SwFtnInfo ), - pEndNoteInfo( new SwEndNoteInfo ), - pLineNumberInfo( new SwLineNumberInfo ), - pFtnIdxs( new SwFtnIdxs ), - pDocStat( new SwDocStat ), - pDocShell( 0 ), - pLinkMgr( new sfx2::LinkManager( 0 ) ), - pACEWord( 0 ), - pURLStateChgd( 0 ), - pNumberFormatter( 0 ), - pNumRuleTbl( new SwNumRuleTbl ), - maLists(), - maListStyleLists(), - pRedlineTbl( new SwRedlineTbl ), - pAutoFmtRedlnComment( 0 ), - pUnoCrsrTbl( new SwUnoCrsrTbl( 0 ) ), - pPgPViewPrtData( 0 ), - pExtInputRing( 0 ), - pLayouter( 0 ), - pStyleAccess( 0 ), - pLayoutCache( 0 ), - pUnoCallBack(new SwModify(0)), - mpGrammarContact( 0 ), - aChartDataProviderImplRef(), - pChartControllerHelper( 0 ), - mpListItemsList( new tImplSortedNodeNumList() ), // #i83479# - m_pXmlIdRegistry(), - nAutoFmtRedlnCommentNo( 0 ), - nLinkUpdMode( GLOBALSETTING ), - eFldUpdMode( AUTOUPD_GLOBALSETTING ), - eRedlineMode((RedlineMode_t)(nsRedlineMode_t::REDLINE_SHOW_INSERT | nsRedlineMode_t::REDLINE_SHOW_DELETE)), - eChrCmprType( CHARCOMPRESS_NONE ), - mReferenceCount(0), - mIdleBlockCount(0), - nLockExpFld( 0 ), - mbReadlineChecked(false), - mbLinksUpdated( sal_False ), //#i38810# - mbClipBoard( false ), - mbColumnSelection( false ), - mbProtectForm(false), // i#78591# - mbLastBrowseMode( false ), - n32DummyCompatabilityOptions1(0), - n32DummyCompatabilityOptions2(0), - mbStartIdleTimer(sal_False), - mbSetDrawDefaults(false) -{ - RTL_LOGFILE_CONTEXT_AUTHOR( aLog, "SW", "JP93722", "SwDoc::SwDoc" ); - - mbGlossDoc = - mbModified = - mbDtor = - mbPageNums = - mbLoaded = - mbUpdateExpFld = - mbNewDoc = - mbCopyIsMove = - mbInReading = - mbInXMLImport = - mbUpdateTOX = - mbInLoadAsynchron = - mbHTMLMode = - mbInCallModified = - mbIsGlobalDoc = - mbGlblDocSaveLinks = - mbIsLabelDoc = - mbIsAutoFmtRedline = - mbOLEPrtNotifyPending = - mbAllOLENotify = - mbIsRedlineMove = - mbInsOnlyTxtGlssry = - mbContains_MSVBasic = - mbKernAsianPunctuation = -#ifdef DBG_UTIL - mbXMLExport = -#endif - mbApplyWorkaroundForB6375613 = - false; - - mbNewFldLst = - mbVisibleLinks = - mbPurgeOLE = - true; - - // - // COMPATIBILITY FLAGS START - // - - // Note: Any non-hidden compatibility flag should obtain its default - // by asking SvtCompatibilityOptions, see below. - // - const SvtCompatibilityOptions aOptions; - mbParaSpaceMax = aOptions.IsAddSpacing(); - mbParaSpaceMaxAtPages = aOptions.IsAddSpacingAtPages(); - mbTabCompat = !aOptions.IsUseOurTabStops(); - mbUseVirtualDevice = !aOptions.IsUsePrtDevice(); - mbAddExternalLeading = !aOptions.IsNoExtLeading(); - mbOldLineSpacing = aOptions.IsUseLineSpacing(); - mbAddParaSpacingToTableCells = aOptions.IsAddTableSpacing(); - mbUseFormerObjectPos = aOptions.IsUseObjectPositioning(); - mbUseFormerTextWrapping = aOptions.IsUseOurTextWrapping(); - mbConsiderWrapOnObjPos = aOptions.IsConsiderWrappingStyle(); - mbMathBaselineAlignment = false; // default for *old* documents is 'off' - mbAddFlyOffsets = false; // hidden - mbOldNumbering = false; // hidden - mbUseHiResolutionVirtualDevice = true; // hidden - mbIgnoreFirstLineIndentInNumbering = false; // hidden - mbDoNotJustifyLinesWithManualBreak = !aOptions.IsExpandWordSpace(); - mbDoNotResetParaAttrsForNumFont = false; // hidden - mbOutlineLevelYieldsOutlineRule = false; // hidden - mbTableRowKeep = false; // hidden - mbIgnoreTabsAndBlanksForLineCalculation = false; // hidden - mbDoNotCaptureDrawObjsOnPage = false; // hidden - mbClipAsCharacterAnchoredWriterFlyFrames= false; // hidden - mbUnixForceZeroExtLeading = false; // hidden - mbOldPrinterMetrics = false; // hidden - mbTabRelativeToIndent = true; // hidden - mbTabAtLeftIndentForParagraphsInList = false; // hidden #i89181# - mbInvertBorderSpacing = false; // hidden - mbCollapseEmptyCellPara = true; // hidden - mbSmallCapsPercentage66 = false; // hidden - mbTabOverflow = true; - mbUnbreakableNumberings = false; - - // - // COMPATIBILITY FLAGS END - // - - pMacroTable = new SvxMacroTableDtor; - - mpGrammarContact = ::createGrammarContact(); - - /* - * DefaultFormats and DefaultFormatCollections (FmtColl) - * are inserted at position 0 at the respective array. - * The formats in the FmtColls are derived from the - * DefaultFormats and are also in the list. - */ - /* Formats */ - pFrmFmtTbl->Insert(pDfltFrmFmt, 0 ); - pCharFmtTbl->Insert(pDfltCharFmt, 0 ); - - /* FmtColls */ - // TXT - pTxtFmtCollTbl->Insert(pDfltTxtFmtColl, 0 ); - // GRF - pGrfFmtCollTbl->Insert(pDfltGrfFmtColl, 0 ); - - // Create PageDesc, EmptyPageFmt and ColumnFmt - if ( !aPageDescs.Count() ) - GetPageDescFromPool( RES_POOLPAGE_STANDARD ); - - // Set to "Empty Page" - pEmptyPageFmt->SetFmtAttr( SwFmtFrmSize( ATT_FIX_SIZE ) ); - // Set BodyFmt for columns - pColumnContFmt->SetFmtAttr( SwFmtFillOrder( ATT_LEFT_TO_RIGHT ) ); - - _InitFieldTypes(); - - // Create a default OutlineNumRule (for Filters) - pOutlineRule = new SwNumRule( String::CreateFromAscii( SwNumRule::GetOutlineRuleName() ), - // #i89178# - numfunc::GetDefaultPositionAndSpaceMode(), - OUTLINE_RULE ); - AddNumRule(pOutlineRule); - // Counting of phantoms depends on <IsOldNumbering()> - pOutlineRule->SetCountPhantoms( !get(IDocumentSettingAccess::OLD_NUMBERING) ); - - new SwTxtNode( - SwNodeIndex(GetUndoManager().GetUndoNodes().GetEndOfContent()), - pDfltTxtFmtColl ); - new SwTxtNode( SwNodeIndex( GetNodes().GetEndOfContent() ), - GetTxtCollFromPool( RES_POOLCOLL_STANDARD )); - - // set the own IdleTimer - aIdleTimer.SetTimeout( 600 ); - aIdleTimer.SetTimeoutHdl( LINK(this, SwDoc, DoIdleJobs) ); - - aOLEModifiedTimer.SetTimeout( 1000 ); - aOLEModifiedTimer.SetTimeoutHdl( LINK( this, SwDoc, DoUpdateModifiedOLE )); - - // Create DBMgr - pNewDBMgr = new SwNewDBMgr; - - // create TOXTypes - InitTOXTypes(); - - // pass empty item set containing the paragraph's list attributes - // as ignorable items to the stype manager. - { - SfxItemSet aIgnorableParagraphItems( GetAttrPool(), - RES_PARATR_LIST_BEGIN, RES_PARATR_LIST_END-1, - 0 ); - pStyleAccess = createStyleManager( &aIgnorableParagraphItems ); - } - - // Initialize the session id of the current document to a random number - // smaller than 2^21. - static rtlRandomPool aPool = rtl_random_createPool(); - rtl_random_getBytes( aPool, &nRsid, sizeof ( nRsid ) ); - nRsid &= ( 1<<21 ) - 1; - nRsid++; - nRsidRoot = nRsid; - - ResetModified(); -} - -/* - * Speciality: a member of the class SwDoc is located at - * position 0 in the array of the Format and GDI objects. - * This MUST not be destroyed using 'delete' in any case! - */ -SwDoc::~SwDoc() -{ - // nothing here should create Undo actions! - GetIDocumentUndoRedo().DoUndo(false); - - if (pDocShell) - { - pDocShell->SetUndoManager(0); - } - - - // #i83479# - delete mpListItemsList; - mpListItemsList = 0; - - // clean up chart related structures... - // Note: the chart data provider gets already diposed in ~SwDocShell - // since all UNO API related functionality requires an existing SwDocShell - // this assures that dipose gets called if there is need for it. - aChartDataProviderImplRef.reset(); - delete pChartControllerHelper; - - delete mpGrammarContact; - mpGrammarContact = 0; - - //!! needs to be done to destroy a possible SwFmtDrop format that may - //!! be connected to a char format which may not otherwise be removed - //!! and thus would leave a unremoved SwFmt object. (TL) - //!! (this is case is not possible via UI but via API...) - SwFmtDrop aDrop; - SetDefault(aDrop); - //!! same for SwFmtCharFmt - SwFmtCharFmt aCharFmt(NULL); - SetDefault(aCharFmt); - - StopIdling(); // stop idle timer - - delete pUnoCallBack, pUnoCallBack = 0; - delete pURLStateChgd; - - delete pLayouter; - pLayouter = 0L; - - // Deactivate Undo notification from the Draw - if( pDrawModel ) - { - DrawNotifyUndoHdl(); - ClrContourCache(); - } - - delete pPgPViewPrtData; - - mbDtor = sal_True; - - delete pRedlineTbl; - delete pUnoCrsrTbl; - delete pAutoFmtRedlnComment; - delete pUpdtFlds; - delete pACEWord; - - // Release the BaseLinks - { - for( sal_uInt16 n = pLinkMgr->GetServers().Count(); n; ) - pLinkMgr->GetServers()[ --n ]->Closed(); - - if( pLinkMgr->GetLinks().Count() ) - pLinkMgr->Remove( 0, pLinkMgr->GetLinks().Count() ); - } - - // The ChapterNumbers/Numbers need to be deleted before the Templates - // or we update all the time! - m_pNodes->pOutlineNds->Remove(sal_uInt16(0), m_pNodes->pOutlineNds->Count()); - SwNodes & rUndoNodes( GetUndoManager().GetUndoNodes() ); - rUndoNodes.pOutlineNds->Remove(sal_uInt16(0), rUndoNodes.pOutlineNds->Count()); - - pFtnIdxs->Remove( sal_uInt16(0), pFtnIdxs->Count() ); - - // indices could be registered in attributes - m_pUndoManager->DelAllUndoObj(); - - // The BookMarks contain indices to the Content. These must be deleted - // before deleting the Nodes. - pMarkManager->clearAllMarks(); - DELETEZ( pMacroTable ); - - if( pExtInputRing ) - { - Ring* pTmp = pExtInputRing; - pExtInputRing = 0; - while( pTmp->GetNext() != pTmp ) - delete pTmp->GetNext(); - delete pTmp; - } - - // Old - deletion without a Flag is expensive, because we send a Modify - // aTOXTypes.DeleteAndDestroy( 0, aTOXTypes.Count() ); - { - for( sal_uInt16 n = pTOXTypes->Count(); n; ) - { - (*pTOXTypes)[ --n ]->SetInDocDTOR(); - delete (*pTOXTypes)[ n ]; - } - pTOXTypes->Remove( 0, pTOXTypes->Count() ); - } - delete pDefTOXBases; - - // Any of the FrmFormats can still have indices registered. - // These need to be destroyed now at the latest. - pFrmFmtTbl->ForEach( &lcl_DelFmtIndizes, this ); - pSpzFrmFmtTbl->ForEach( &lcl_DelFmtIndizes, this ); - ((SwFrmFmts&)*pSectionFmtTbl).ForEach( &lcl_DelFmtIndizes, this ); - - // The formattings that come hereafter depend on the default formattings. - // [Destroy] these only after destroying the FmtIndices, because the content - // of headers/footers has to be deleted as well. If in the headers/footers - // there are still Flys registered at that point, we have a problem. - // (This comment might have been translated incorrectly. Blame the bad - // German original) - aPageDescs.DeleteAndDestroy( 0, aPageDescs.Count() ); - - // Delete content selections. - // Don't wait for the SwNodes dtor to destroy them; so that Formats - // do not have any dependencies anymore. - m_pNodes->DelNodes( SwNodeIndex(*m_pNodes), m_pNodes->Count() ); - rUndoNodes.DelNodes( SwNodeIndex( rUndoNodes ), rUndoNodes.Count() ); - - // Delete Formats, make it permanent some time in the future - - // Delete for Collections - // So that we get rid of the dependencies - pFtnInfo->ReleaseCollection(); - pEndNoteInfo->ReleaseCollection(); - - OSL_ENSURE( pDfltTxtFmtColl == (*pTxtFmtCollTbl)[0], - "Default-Text-Collection must always be at the start" ); - - // Optimization: Based on the fact that Standard is always 2nd in the - // array, we should delete it as the last. With this we avoid - // remangling the Formats all the time! - if( 2 < pTxtFmtCollTbl->Count() ) - pTxtFmtCollTbl->DeleteAndDestroy( 2, pTxtFmtCollTbl->Count()-2 ); - pTxtFmtCollTbl->DeleteAndDestroy( 1, pTxtFmtCollTbl->Count()-1 ); - delete pTxtFmtCollTbl; - - OSL_ENSURE( pDfltGrfFmtColl == (*pGrfFmtCollTbl)[0], - "DefaultGrfCollection must always be at the start" ); - - pGrfFmtCollTbl->DeleteAndDestroy( 1, pGrfFmtCollTbl->Count()-1 ); - // Is the result anyway - no _DEL array! - // pGrfFmtCollTbl->Remove( 0, n ); - delete pGrfFmtCollTbl; - - /* - * DefaultFormats and DefaultFormatCollections (FmtColl) - * are at position 0 of their respective arrays. - * In order to not be deleted by the array's dtor, we remove them - * now. - */ - pFrmFmtTbl->Remove( 0 ); - pCharFmtTbl->Remove( 0 ); - - // Delete for pPrt - DELETEZ( pPrt ); - DELETEZ( pNewDBMgr ); - - // All Flys need to be destroyed before the Drawing Model, - // because Flys can still contain DrawContacts, when no - // Layout could be constructed due to a read error. - pSpzFrmFmtTbl->DeleteAndDestroy( 0, pSpzFrmFmtTbl->Count() ); - - // Only now destroy the Model, the drawing objects - which are also - // contained in the Undo - need to remove their attributes from the - // Model. Also, DrawContacts could exist before that. - ReleaseDrawModel(); - // Destroy DrawModel before the LinkManager, because it's always set - // in the DrawModel. - DELETEZ( pLinkMgr ); - - // Clear the Tables before deleting them, or we crash due to - // definition dependencies. - // We also convert the arrays (due to includes) to pointers. - delete pFrmFmtTbl; - delete pSpzFrmFmtTbl; - - delete pStyleAccess; - - delete pCharFmtTbl; - delete pSectionFmtTbl; - delete pTblFrmFmtTbl; - delete pDfltTxtFmtColl; - delete pDfltGrfFmtColl; - delete pNumRuleTbl; - - { - for ( boost::unordered_map< String, SwList*, StringHash >::iterator - aListIter = maLists.begin(); - aListIter != maLists.end(); - ++aListIter ) - { - delete (*aListIter).second; - } - maLists.clear(); - } - maListStyleLists.clear(); - - delete pPrtData; - delete pNumberFormatter; - delete pFtnInfo; - delete pEndNoteInfo; - delete pLineNumberInfo; - delete pFtnIdxs; - delete pFldTypes; - delete pTOXTypes; - delete pDocStat; - delete pEmptyPageFmt; - delete pColumnContFmt; - delete pDfltCharFmt; - delete pDfltFrmFmt; - delete pLayoutCache; - delete pVirDev; - - SfxItemPool::Free(mpAttrPool); -} - -VirtualDevice& SwDoc::CreateVirtualDevice_() const -{ - VirtualDevice* pNewVir = new VirtualDevice( 1 ); - - pNewVir->SetReferenceDevice( VirtualDevice::REFDEV_MODE_MSO1 ); - - // #i60945# External leading compatibility for unix systems. - if ( get(IDocumentSettingAccess::UNIX_FORCE_ZERO_EXT_LEADING ) ) - pNewVir->Compat_ZeroExtleadBug(); - - MapMode aMapMode( pNewVir->GetMapMode() ); - aMapMode.SetMapUnit( MAP_TWIP ); - pNewVir->SetMapMode( aMapMode ); - - const_cast<SwDoc*>(this)->setVirtualDevice( pNewVir, true, true ); - return *pVirDev; -} - -SfxPrinter& SwDoc::CreatePrinter_() const -{ - OSL_ENSURE( ! pPrt, "Do not call CreatePrinter_(), call getPrinter() instead" ); - -#if OSL_DEBUG_LEVEL > 1 - OSL_FAIL( "Printer will be created!" ); -#endif - - // We create a default SfxPrinter. - // The ItemSet is deleted by Sfx! - SfxItemSet *pSet = new SfxItemSet( ((SwDoc*)this)->GetAttrPool(), - FN_PARAM_ADDPRINTER, FN_PARAM_ADDPRINTER, - SID_HTML_MODE, SID_HTML_MODE, - SID_PRINTER_NOTFOUND_WARN, SID_PRINTER_NOTFOUND_WARN, - SID_PRINTER_CHANGESTODOC, SID_PRINTER_CHANGESTODOC, - 0 ); - - SfxPrinter* pNewPrt = new SfxPrinter( pSet ); - const_cast<SwDoc*>(this)->setPrinter( pNewPrt, true, true ); - return *pPrt; -} - -void SwDoc::SetDocShell( SwDocShell* pDSh ) -{ - if( pDocShell != pDSh ) - { - if (pDocShell) - { - pDocShell->SetUndoManager(0); - } - pDocShell = pDSh; - if (pDocShell) - { - pDocShell->SetUndoManager(& GetUndoManager()); - } - - pLinkMgr->SetPersist( pDocShell ); - if( pDrawModel ) - { - ((SwDrawDocument*)pDrawModel)->SetObjectShell( pDocShell ); - pDrawModel->SetPersist( pDocShell ); - OSL_ENSURE( pDrawModel->GetPersist() == GetPersist(), - "draw model's persist is out of sync" ); - } - } -} - -// Convenience method; to avoid excessive includes from docsh.hxx -uno::Reference < embed::XStorage > SwDoc::GetDocStorage() -{ - if( pDocShell ) - return pDocShell->GetStorage(); - if( pLinkMgr->GetPersist() ) - return pLinkMgr->GetPersist()->GetStorage(); - return NULL; -} - -SfxObjectShell* SwDoc::GetPersist() const -{ - return pDocShell ? pDocShell : pLinkMgr->GetPersist(); -} - -void SwDoc::ClearDoc() -{ - GetIDocumentUndoRedo().DelAllUndoObj(); - ::sw::UndoGuard const undoGuard(GetIDocumentUndoRedo()); - - // Deactivate Undo notification from the Draw - if( pDrawModel ) - { - DrawNotifyUndoHdl(); - ClrContourCache(); - } - - // if there are still FlyFrames dangling around, delete them too - sal_uInt16 n; - while ( 0 != (n = GetSpzFrmFmts()->Count()) ) - DelLayoutFmt((*pSpzFrmFmtTbl)[n-1]); - OSL_ENSURE( !pDrawModel || !pDrawModel->GetPage(0)->GetObjCount(), - "not all DrawObjects removed from the page" ); - - pRedlineTbl->DeleteAndDestroy( 0, pRedlineTbl->Count() ); - - delete pACEWord; - - // The BookMarks contain indices to the Content. These must be deleted - // before deleting the Nodes. - pMarkManager->clearAllMarks(); - InitTOXTypes(); - - // create a dummy pagedesc for the layout - sal_uInt16 nDummyPgDsc = MakePageDesc( String::CreateFromAscii( "?DUMMY?" )); - SwPageDesc* pDummyPgDsc = aPageDescs[ nDummyPgDsc ]; - - SwNodeIndex aSttIdx( *GetNodes().GetEndOfContent().StartOfSectionNode(), 1 ); - // create the first one over and over again (without Attribute/Templates etc. - SwTxtNode* pFirstNd = GetNodes().MakeTxtNode( aSttIdx, pDfltTxtFmtColl ); - - if( pCurrentView ) //swmod 071029//swmod 071225 - { - // set the layout to the dummy pagedesc - pFirstNd->SetAttr( SwFmtPageDesc( pDummyPgDsc )); - - SwPosition aPos( *pFirstNd, SwIndex( pFirstNd )); - SwPaM const tmpPaM(aSttIdx, SwNodeIndex(GetNodes().GetEndOfContent())); - ::PaMCorrAbs(tmpPaM, aPos); - } - - GetNodes().Delete( aSttIdx, - GetNodes().GetEndOfContent().GetIndex() - aSttIdx.GetIndex() ); - - // #i62440# - // destruction of numbering rules and creation of new outline rule - // *after* the document nodes are deleted. - pOutlineRule = NULL; - pNumRuleTbl->DeleteAndDestroy( 0, pNumRuleTbl->Count() ); - // creation of new outline numbering rule - pOutlineRule = new SwNumRule( String::CreateFromAscii( SwNumRule::GetOutlineRuleName() ), - // #i89178# - numfunc::GetDefaultPositionAndSpaceMode(), - OUTLINE_RULE ); - AddNumRule(pOutlineRule); - // Counting of phantoms depends on <IsOldNumbering()> - pOutlineRule->SetCountPhantoms( !get(IDocumentSettingAccess::OLD_NUMBERING) ); - - // remove the dummy pagedec from the array and delete all the old ones - aPageDescs.Remove( nDummyPgDsc ); - aPageDescs.DeleteAndDestroy( 0, aPageDescs.Count() ); - - // Delete for Collections - // So that we get rid of the dependencies - pFtnInfo->ReleaseCollection(); - pEndNoteInfo->ReleaseCollection(); - - // Optimization: Based on the fact that Standard is always 2nd in the - // array, we should delete it as the last. With this we avoid - // remangling the Formats all the time! - if( 2 < pTxtFmtCollTbl->Count() ) - pTxtFmtCollTbl->DeleteAndDestroy( 2, pTxtFmtCollTbl->Count()-2 ); - pTxtFmtCollTbl->DeleteAndDestroy( 1, pTxtFmtCollTbl->Count()-1 ); - pGrfFmtCollTbl->DeleteAndDestroy( 1, pGrfFmtCollTbl->Count()-1 ); - pCharFmtTbl->DeleteAndDestroy( 1, pCharFmtTbl->Count()-1 ); - - if( pCurrentView ) - { - // search the FrameFormat of the root frm. This is not allowed to delete - pFrmFmtTbl->Remove( pFrmFmtTbl->GetPos( pCurrentView->GetLayout()->GetFmt() ) ); - pFrmFmtTbl->DeleteAndDestroy( 1, pFrmFmtTbl->Count()-1 ); - pFrmFmtTbl->Insert( pCurrentView->GetLayout()->GetFmt(), pFrmFmtTbl->Count() ); - } - else //swmod 071029//swmod 071225 - pFrmFmtTbl->DeleteAndDestroy( 1, pFrmFmtTbl->Count()-1 ); - - xForbiddenCharsTable.clear(); - - pFldTypes->DeleteAndDestroy( INIT_FLDTYPES, - pFldTypes->Count() - INIT_FLDTYPES ); - - delete pNumberFormatter, pNumberFormatter = 0; - - GetPageDescFromPool( RES_POOLPAGE_STANDARD ); - pFirstNd->ChgFmtColl( GetTxtCollFromPool( RES_POOLCOLL_STANDARD )); - nDummyPgDsc = aPageDescs.Count(); - aPageDescs.Insert( pDummyPgDsc, nDummyPgDsc ); - // set the layout back to the new standard pagedesc - pFirstNd->ResetAllAttr(); - // delete now the dummy pagedesc - DelPageDesc( nDummyPgDsc ); -} - -void SwDoc::SetPreViewPrtData( const SwPagePreViewPrtData* pNew ) -{ - if( pNew ) - { - if( pPgPViewPrtData ) - *pPgPViewPrtData = *pNew; - else - pPgPViewPrtData = new SwPagePreViewPrtData( *pNew ); - } - else if( pPgPViewPrtData ) - DELETEZ( pPgPViewPrtData ); - SetModified(); -} - -SwModify* SwDoc::GetUnoCallBack() const -{ - return pUnoCallBack; -} - - -/** SwDoc: - * Reading and writing of the layout cache. - *--------------------------------------------------*/ -void SwDoc::ReadLayoutCache( SvStream& rStream ) -{ - if( !pLayoutCache ) - pLayoutCache = new SwLayoutCache(); - if( !pLayoutCache->IsLocked() ) - { - pLayoutCache->GetLockCount() |= 0x8000; - pLayoutCache->Read( rStream ); - pLayoutCache->GetLockCount() &= 0x7fff; - } -} - -void SwDoc::WriteLayoutCache( SvStream& rStream ) -{ - pLayoutCache->Write( rStream, *this ); -} - IGrammarContact* getGrammarContact( const SwTxtNode& rTxtNode ) { const SwDoc* pDoc = rTxtNode.GetDoc(); @@ -910,318 +190,5 @@ IGrammarContact* getGrammarContact( const SwTxtNode& rTxtNode ) // #i42634# Moved common code of SwReader::Read() and SwDocShell::UpdateLinks() // to new SwDoc::UpdateLinks(): -void SwDoc::UpdateLinks( sal_Bool bUI ) -{ - SfxObjectCreateMode eMode; - sal_uInt16 nLinkMode = getLinkUpdateMode( true ); - if ( GetDocShell()) { - sal_uInt16 nUpdateDocMode = GetDocShell()->GetUpdateDocMode(); - if( (nLinkMode != NEVER || document::UpdateDocMode::FULL_UPDATE == nUpdateDocMode) && - GetLinkManager().GetLinks().Count() && - SFX_CREATE_MODE_INTERNAL != - ( eMode = GetDocShell()->GetCreateMode()) && - SFX_CREATE_MODE_ORGANIZER != eMode && - SFX_CREATE_MODE_PREVIEW != eMode && - !GetDocShell()->IsPreview() ) - { - ViewShell* pVSh = 0; - sal_Bool bAskUpdate = nLinkMode == MANUAL; - sal_Bool bUpdate = sal_True; - switch(nUpdateDocMode) - { - case document::UpdateDocMode::NO_UPDATE: bUpdate = sal_False;break; - case document::UpdateDocMode::QUIET_UPDATE:bAskUpdate = sal_False; break; - case document::UpdateDocMode::FULL_UPDATE: bAskUpdate = sal_True; break; - } - if( bUpdate && (bUI || !bAskUpdate) ) - { - SfxMedium* pMedium = GetDocShell()->GetMedium(); - SfxFrame* pFrm = pMedium ? pMedium->GetLoadTargetFrame() : 0; - Window* pDlgParent = pFrm ? &pFrm->GetWindow() : 0; - if( GetCurrentViewShell() && !GetEditShell( &pVSh ) && !pVSh ) //swmod 071108//swmod 071225 - { - ViewShell aVSh( *this, 0, 0 ); - - SET_CURR_SHELL( &aVSh ); - GetLinkManager().UpdateAllLinks( bAskUpdate , sal_True, sal_False, pDlgParent ); - } - else - GetLinkManager().UpdateAllLinks( bAskUpdate, sal_True, sal_False, pDlgParent ); - } - } - } - -} - -void SwDoc::SetApplyWorkaroundForB6375613( bool p_bApplyWorkaroundForB6375613 ) -{ - if ( mbApplyWorkaroundForB6375613 != p_bApplyWorkaroundForB6375613 ) - { - mbApplyWorkaroundForB6375613 = p_bApplyWorkaroundForB6375613; - - uno::Reference< document::XDocumentInfoSupplier > xDoc( - GetDocShell()->GetBaseModel(), - uno::UNO_QUERY); - if ( xDoc.is() ) - { - uno::Reference< beans::XPropertyContainer > xDocInfo( - xDoc->getDocumentInfo(), - uno::UNO_QUERY ); - if ( xDocInfo.is() ) - { - try - { - if ( mbApplyWorkaroundForB6375613 ) - { - xDocInfo->addProperty( - rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("WorkaroundForB6375613Applied")), - beans::PropertyAttribute::TRANSIENT | beans::PropertyAttribute::REMOVABLE, - uno::makeAny( false ) ); - } - else - { - xDocInfo->removeProperty( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("WorkaroundForB6375613Applied")) ); - } - } - catch( uno::Exception& ) - { - } - } - } - } -} - -::sfx2::IXmlIdRegistry& -SwDoc::GetXmlIdRegistry() -{ - // UGLY: this relies on SetClipBoard being called before GetXmlIdRegistry! - if (!m_pXmlIdRegistry.get()) - { - m_pXmlIdRegistry.reset( ::sfx2::createXmlIdRegistry( IsClipBoard() ) ); - } - return *m_pXmlIdRegistry; -} - -::sw::MetaFieldManager & -SwDoc::GetMetaFieldManager() -{ - return *m_pMetaFieldManager; -} - -::sw::UndoManager & -SwDoc::GetUndoManager() -{ - return *m_pUndoManager; -} - -::sw::UndoManager const& -SwDoc::GetUndoManager() const -{ - return *m_pUndoManager; -} - -IDocumentUndoRedo & -SwDoc::GetIDocumentUndoRedo() -{ - return *m_pUndoManager; -} - -IDocumentUndoRedo const& -SwDoc::GetIDocumentUndoRedo() const -{ - return *m_pUndoManager; -} - -void SwDoc::InitTOXTypes() -{ - ShellResource* pShellRes = ViewShell::GetShellRes(); - SwTOXType * pNew = new SwTOXType(TOX_CONTENT, pShellRes->aTOXContentName ); - pTOXTypes->Insert( pNew, pTOXTypes->Count() ); - pNew = new SwTOXType(TOX_INDEX, pShellRes->aTOXIndexName ); - pTOXTypes->Insert( pNew, pTOXTypes->Count() ); - pNew = new SwTOXType(TOX_USER, pShellRes->aTOXUserName ); - pTOXTypes->Insert( pNew, pTOXTypes->Count() ); - pNew = new SwTOXType(TOX_ILLUSTRATIONS, pShellRes->aTOXIllustrationsName ); - pTOXTypes->Insert( pNew, pTOXTypes->Count() ); - pNew = new SwTOXType(TOX_OBJECTS, pShellRes->aTOXObjectsName ); - pTOXTypes->Insert( pNew, pTOXTypes->Count() ); - pNew = new SwTOXType(TOX_TABLES, pShellRes->aTOXTablesName ); - pTOXTypes->Insert( pNew, pTOXTypes->Count() ); - pNew = new SwTOXType(TOX_AUTHORITIES, pShellRes->aTOXAuthoritiesName ); - pTOXTypes->Insert( pNew, pTOXTypes->Count() ); -} - -void SwDoc::ReplaceDefaults(const SwDoc& rSource) -{ - // copy property defaults - const sal_uInt16 aRangeOfDefaults[] = - { - RES_FRMATR_BEGIN, RES_FRMATR_END-1, - RES_CHRATR_BEGIN, RES_CHRATR_END-1, - RES_PARATR_BEGIN, RES_PARATR_END-1, - RES_PARATR_LIST_BEGIN, RES_PARATR_LIST_END-1, - RES_UNKNOWNATR_BEGIN, RES_UNKNOWNATR_END-1, - 0 - }; - - SfxItemSet aNewDefaults(GetAttrPool(), aRangeOfDefaults); - - sal_uInt16 nRange = 0; - while (aRangeOfDefaults[nRange] != 0) - { - for (sal_uInt16 nWhich = aRangeOfDefaults[nRange]; - nWhich < aRangeOfDefaults[nRange + 1]; ++nWhich) - { - const SfxPoolItem& rSourceAttr = - rSource.mpAttrPool->GetDefaultItem(nWhich); - if (rSourceAttr != mpAttrPool->GetDefaultItem(nWhich)) - aNewDefaults.Put(rSourceAttr); - } - nRange += 2; - } - - if (aNewDefaults.Count()) - SetDefault(aNewDefaults); -} - -void SwDoc::ReplaceCompatabilityOptions(const SwDoc& rSource) -{ - n32DummyCompatabilityOptions1 = rSource.n32DummyCompatabilityOptions1; - n32DummyCompatabilityOptions2 = rSource.n32DummyCompatabilityOptions2; - mbParaSpaceMax = rSource.mbParaSpaceMax; - mbParaSpaceMaxAtPages = rSource.mbParaSpaceMaxAtPages; - mbTabCompat = rSource.mbTabCompat; - mbUseVirtualDevice = rSource.mbUseVirtualDevice; - mbAddExternalLeading = rSource.mbAddExternalLeading; - mbOldLineSpacing = rSource.mbOldLineSpacing; - mbAddParaSpacingToTableCells = rSource.mbAddParaSpacingToTableCells; - mbUseFormerObjectPos = rSource.mbUseFormerObjectPos; - mbUseFormerTextWrapping = rSource.mbUseFormerTextWrapping; - mbConsiderWrapOnObjPos = rSource.mbConsiderWrapOnObjPos; - mbAddFlyOffsets = rSource.mbAddFlyOffsets; - mbOldNumbering = rSource.mbOldNumbering; - mbUseHiResolutionVirtualDevice = rSource.mbUseHiResolutionVirtualDevice; - mbIgnoreFirstLineIndentInNumbering = rSource.mbIgnoreFirstLineIndentInNumbering; - mbDoNotJustifyLinesWithManualBreak = rSource.mbDoNotJustifyLinesWithManualBreak; - mbDoNotResetParaAttrsForNumFont = rSource.mbDoNotResetParaAttrsForNumFont; - mbOutlineLevelYieldsOutlineRule = rSource.mbOutlineLevelYieldsOutlineRule; - mbTableRowKeep = rSource.mbTableRowKeep; - mbIgnoreTabsAndBlanksForLineCalculation = rSource.mbIgnoreTabsAndBlanksForLineCalculation; - mbDoNotCaptureDrawObjsOnPage = rSource.mbDoNotCaptureDrawObjsOnPage; - mbClipAsCharacterAnchoredWriterFlyFrames = rSource.mbClipAsCharacterAnchoredWriterFlyFrames; - mbUnixForceZeroExtLeading = rSource.mbUnixForceZeroExtLeading; - mbOldPrinterMetrics = rSource.mbOldPrinterMetrics; - mbTabRelativeToIndent = rSource.mbTabRelativeToIndent; - mbTabAtLeftIndentForParagraphsInList = rSource.mbTabAtLeftIndentForParagraphsInList; -} - -SfxObjectShell* SwDoc::CreateCopy(bool bCallInitNew ) const -{ - SwDoc* pRet = new SwDoc; - - // we have to use pointer here, since the callee has to decide whether - // SfxObjectShellLock or SfxObjectShellRef should be used sometimes the - // object will be returned with refcount set to 0 ( if no DoInitNew is done ) - SfxObjectShell* pRetShell = new SwDocShell( pRet, SFX_CREATE_MODE_STANDARD ); - if( bCallInitNew ) - { - // it could happen that DoInitNew creates model, that increases the refcount of the object - pRetShell->DoInitNew(); - } - - pRet->acquire(); - - pRet->ReplaceDefaults(*this); - - pRet->ReplaceCompatabilityOptions(*this); - - pRet->ReplaceStyles(*this); - - // copy content - pRet->Paste( *this ); - - // remove the temporary shell if it is there as it was done before - pRet->SetTmpDocShell( (SfxObjectShell*)NULL ); - - pRet->release(); - - return pRetShell; -} - -/*------------------------------------------------------------------------- - copy document content - code from SwFEShell::Paste( SwDoc* , sal_Bool ) - -----------------------------------------------------------------------*/ -void SwDoc::Paste( const SwDoc& rSource ) -{ - // this has to be empty const sal_uInt16 nStartPageNumber = GetPhyPageNum(); - // until the end of the NodesArray - SwNodeIndex aSourceIdx( rSource.GetNodes().GetEndOfExtras(), 2 ); - SwPaM aCpyPam( aSourceIdx ); //DocStart - SwNodeIndex aTargetIdx( GetNodes().GetEndOfExtras(), 2 ); - SwPaM aInsertPam( aTargetIdx ); //replaces PCURCRSR from SwFEShell::Paste() - - - aCpyPam.SetMark(); - aCpyPam.Move( fnMoveForward, fnGoDoc ); - - this->GetIDocumentUndoRedo().StartUndo( UNDO_INSGLOSSARY, NULL ); - this->LockExpFlds(); - - { - SwPosition& rInsPos = *aInsertPam.GetPoint(); - //find out if the clipboard document starts with a table - bool bStartWithTable = 0 != aCpyPam.Start()->nNode.GetNode().FindTableNode(); - SwPosition aInsertPosition( rInsPos ); - - { - SwNodeIndex aIndexBefore(rInsPos.nNode); - - aIndexBefore--; - - rSource.CopyRange( aCpyPam, rInsPos, true ); - - { - aIndexBefore++; - SwPaM aPaM(SwPosition(aIndexBefore), - SwPosition(rInsPos.nNode)); - - MakeUniqueNumRules(aPaM); - } - } - - //TODO: Is this necessary here? SaveTblBoxCntnt( &rInsPos ); - if(/*bIncludingPageFrames && */bStartWithTable) - { - //remove the paragraph in front of the table - SwPaM aPara(aInsertPosition); - this->DelFullPara(aPara); - } - //additionally copy page bound frames - if( /*bIncludingPageFrames && */rSource.GetSpzFrmFmts()->Count() ) - { - for ( sal_uInt16 i = 0; i < rSource.GetSpzFrmFmts()->Count(); ++i ) - { - sal_Bool bInsWithFmt = sal_True; - const SwFrmFmt& rCpyFmt = *(*rSource.GetSpzFrmFmts())[i]; - if( bInsWithFmt ) - { - SwFmtAnchor aAnchor( rCpyFmt.GetAnchor() ); - if (FLY_AT_PAGE == aAnchor.GetAnchorId()) - { - aAnchor.SetPageNum( aAnchor.GetPageNum() /*+ nStartPageNumber - */); - } - else - continue; - this->CopyLayoutFmt( rCpyFmt, aAnchor, true, true ); - } - } - } - } - - this->GetIDocumentUndoRedo().EndUndo( UNDO_INSGLOSSARY, NULL ); - - UnlockExpFlds(); - UpdateFlds(NULL, false); -} /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |