diff options
author | Jan Holesovsky <kendy@suse.cz> | 2011-03-23 17:00:12 +0100 |
---|---|---|
committer | Jan Holesovsky <kendy@suse.cz> | 2011-03-23 17:00:12 +0100 |
commit | 5630cca2031eeeaa20c916ea9542ccef2327349f (patch) | |
tree | e62a262b1d9e1fcbaee23cfefd0ac2cefbc2beb0 /sw/source/core/doc/doclay.cxx | |
parent | 0562ba185b5c4783b8f59aa3a3ae8d1ef68011d3 (diff) | |
parent | f6c764706cd411d3353666da91b334a899a12154 (diff) |
Merge commit 'ooo/DEV300_m103'
Conflicts:
sw/inc/calbck.hxx
sw/inc/crsrsh.hxx
sw/inc/dcontact.hxx
sw/inc/doc.hxx
sw/inc/docufld.hxx
sw/inc/editsh.hxx
sw/inc/expfld.hxx
sw/inc/fchrfmt.hxx
sw/inc/fmtcol.hxx
sw/inc/fmthdft.hxx
sw/inc/fmtpdsc.hxx
sw/inc/format.hxx
sw/inc/frmfmt.hxx
sw/inc/ndhints.hxx
sw/inc/ndtxt.hxx
sw/inc/node.hxx
sw/inc/numrule.hxx
sw/inc/paratr.hxx
sw/inc/swtable.hxx
sw/inc/unocrsr.hxx
sw/inc/unofield.hxx
sw/inc/unoframe.hxx
sw/inc/unoport.hxx
sw/inc/unostyle.hxx
sw/inc/usrfld.hxx
sw/inc/viewopt.hxx
sw/inc/viewsh.hxx
sw/source/core/access/accframebase.cxx
sw/source/core/access/accmap.cxx
sw/source/core/access/accnotextframe.cxx
sw/source/core/access/accpara.cxx
sw/source/core/access/accpara.hxx
sw/source/core/attr/calbck.cxx
sw/source/core/crsr/callnk.cxx
sw/source/core/crsr/crsrsh.cxx
sw/source/core/doc/acmplwrd.cxx
sw/source/core/doc/doc.cxx
sw/source/core/doc/docdesc.cxx
sw/source/core/doc/docdraw.cxx
sw/source/core/doc/docfly.cxx
sw/source/core/doc/docfmt.cxx
sw/source/core/doc/doclay.cxx
sw/source/core/doc/docnew.cxx
sw/source/core/doc/docnum.cxx
sw/source/core/doc/doctxm.cxx
sw/source/core/doc/fmtcol.cxx
sw/source/core/doc/htmltbl.cxx
sw/source/core/doc/number.cxx
sw/source/core/docnode/ndsect.cxx
sw/source/core/docnode/ndtbl.cxx
sw/source/core/docnode/node.cxx
sw/source/core/docnode/node2lay.cxx
sw/source/core/docnode/section.cxx
sw/source/core/docnode/swbaslnk.cxx
sw/source/core/draw/dcontact.cxx
sw/source/core/draw/dview.cxx
sw/source/core/edit/autofmt.cxx
sw/source/core/edit/editsh.cxx
sw/source/core/edit/edlingu.cxx
sw/source/core/fields/authfld.cxx
sw/source/core/fields/dbfld.cxx
sw/source/core/fields/docufld.cxx
sw/source/core/fields/expfld.cxx
sw/source/core/fields/reffld.cxx
sw/source/core/fields/tblcalc.cxx
sw/source/core/frmedt/fefly1.cxx
sw/source/core/frmedt/feshview.cxx
sw/source/core/frmedt/tblsel.cxx
sw/source/core/inc/flyfrm.hxx
sw/source/core/inc/prevwpage.hxx
sw/source/core/inc/rolbck.hxx
sw/source/core/inc/txtfrm.hxx
sw/source/core/layout/atrfrm.cxx
sw/source/core/layout/findfrm.cxx
sw/source/core/layout/flowfrm.cxx
sw/source/core/layout/fly.cxx
sw/source/core/layout/flycnt.cxx
sw/source/core/layout/flylay.cxx
sw/source/core/layout/frmtool.cxx
sw/source/core/layout/hffrm.cxx
sw/source/core/layout/pagechg.cxx
sw/source/core/layout/pagedesc.cxx
sw/source/core/layout/paintfrm.cxx
sw/source/core/layout/sectfrm.cxx
sw/source/core/layout/ssfrm.cxx
sw/source/core/layout/tabfrm.cxx
sw/source/core/layout/wsfrm.cxx
sw/source/core/objectpositioning/tocntntanchoredobjectposition.cxx
sw/source/core/table/swtable.cxx
sw/source/core/text/EnhancedPDFExportHelper.cxx
sw/source/core/text/inftxt.cxx
sw/source/core/text/porfld.cxx
sw/source/core/text/txtdrop.cxx
sw/source/core/text/txtfly.cxx
sw/source/core/text/txtfrm.cxx
sw/source/core/text/txtio.cxx
sw/source/core/text/txttab.cxx
sw/source/core/tox/tox.cxx
sw/source/core/txtnode/atrflyin.cxx
sw/source/core/txtnode/fmtatr2.cxx
sw/source/core/txtnode/ndtxt.cxx
sw/source/core/undo/SwUndoPageDesc.cxx
sw/source/core/undo/undraw.cxx
sw/source/core/unocore/unochart.cxx
sw/source/core/unocore/unocoll.cxx
sw/source/core/unocore/unodraw.cxx
sw/source/core/unocore/unofield.cxx
sw/source/core/unocore/unoframe.cxx
sw/source/core/unocore/unoftn.cxx
sw/source/core/unocore/unoidx.cxx
sw/source/core/unocore/unoobj2.cxx
sw/source/core/unocore/unoparagraph.cxx
sw/source/core/unocore/unoport.cxx
sw/source/core/unocore/unoportenum.cxx
sw/source/core/unocore/unoredline.cxx
sw/source/core/unocore/unoredlines.cxx
sw/source/core/unocore/unorefmk.cxx
sw/source/core/unocore/unosect.cxx
sw/source/core/unocore/unosett.cxx
sw/source/core/unocore/unostyle.cxx
sw/source/core/unocore/unotbl.cxx
sw/source/core/unocore/unotext.cxx
sw/source/core/view/viewimp.cxx
sw/source/core/view/viewpg.cxx
sw/source/core/view/viewsh.cxx
sw/source/core/view/vnew.cxx
sw/source/core/view/vprint.cxx
sw/source/filter/ww8/rtfexport.cxx
sw/source/filter/ww8/rtfexport.hxx
sw/source/filter/ww8/wrtw8nds.cxx
sw/source/filter/ww8/wrtww8gr.cxx
sw/source/filter/xml/XMLRedlineImportHelper.cxx
sw/source/ui/app/apphdl.cxx
sw/source/ui/app/docsh.cxx
sw/source/ui/app/docsh2.cxx
sw/source/ui/app/swmodul1.cxx
sw/source/ui/config/viewopt.cxx
sw/source/ui/fldui/fldpage.cxx
sw/source/ui/uiview/srcview.cxx
sw/source/ui/uiview/view.cxx
sw/source/ui/uno/unotxdoc.cxx
sw/source/ui/vba/wordvbahelper.cxx
sw/source/ui/wrtsh/wrtsh1.cxx
Diffstat (limited to 'sw/source/core/doc/doclay.cxx')
-rw-r--r-- | sw/source/core/doc/doclay.cxx | 147 |
1 files changed, 118 insertions, 29 deletions
diff --git a/sw/source/core/doc/doclay.cxx b/sw/source/core/doc/doclay.cxx index 631225ded54d..46dfe7ec0e2c 100644 --- a/sw/source/core/doc/doclay.cxx +++ b/sw/source/core/doc/doclay.cxx @@ -694,8 +694,8 @@ SwFlyFrmFmt* SwDoc::_MakeFlySection( const SwPosition& rAnchPos, } // Frames anlegen - if( GetRootFrm() ) - pFmt->MakeFrms(); // ??? + if( GetCurrentViewShell() ) + pFmt->MakeFrms(); // ??? //swmod 071108//swmod 071225 if (GetIDocumentUndoRedo().DoesUndo()) { @@ -965,7 +965,7 @@ SwDrawFrmFmt* SwDoc::Insert( const SwPaM &rRg, SwDrawContact* pContact = new SwDrawContact( pFmt, &rDrawObj ); // ggfs. Frames anlegen - if( GetRootFrm() ) + if( GetCurrentViewShell() ) { pFmt->MakeFrms(); // #i42319# - follow-up of #i35635# @@ -1058,11 +1058,11 @@ void SwDoc::GetAllFlyFmts( SwPosFlyFrms& rPosFlyFmts, // kein Layout oder nur ein Teil, dann wars das // Seitenbezogen Flys nur, wenn vollstaendig "gewuenscht" wird ! - if( !GetRootFrm() || pCmpRange ) + if( !GetCurrentViewShell() || pCmpRange ) //swmod 071108//swmod 071225 return; pFPos = 0; - SwPageFrm *pPage = (SwPageFrm*)GetRootFrm()->GetLower(); + SwPageFrm *pPage = (SwPageFrm*)GetCurrentLayout()->GetLower(); //swmod 080218 while( pPage ) { if( pPage->GetSortedObjs() ) @@ -1245,6 +1245,17 @@ lcl_InsertLabel(SwDoc & rDoc, SwTxtFmtColls *const pTxtFmtCollTbl, //Erstmal das Format zum Fly besorgen und das Layout entkoppeln. SwFrmFmt *pOldFmt = rDoc.GetNodes()[nNdIdx]->GetFlyFmt(); OSL_ENSURE( pOldFmt, "Format des Fly nicht gefunden." ); + // --> OD #i115719# + // <title> and <description> attributes are lost when calling <DelFrms()>. + // Thus, keep them and restore them after the calling <MakeFrms()> + const bool bIsSwFlyFrmFmtInstance( dynamic_cast<SwFlyFrmFmt*>(pOldFmt) != 0 ); + const String sTitle( bIsSwFlyFrmFmtInstance + ? static_cast<SwFlyFrmFmt*>(pOldFmt)->GetObjTitle() + : String() ); + const String sDescription( bIsSwFlyFrmFmtInstance + ? static_cast<SwFlyFrmFmt*>(pOldFmt)->GetObjDescription() + : String() ); + // <-- pOldFmt->DelFrms(); pNewFmt = rDoc.MakeFlyFrmFmt( rDoc.GetUniqueFrameName(), @@ -1382,6 +1393,13 @@ lcl_InsertLabel(SwDoc & rDoc, SwTxtFmtColls *const pTxtFmtCollTbl, //Nun nur noch die Flys erzeugen lassen. Das ueberlassen //wir vorhanden Methoden (insb. fuer InCntFlys etwas aufwendig). pNewFmt->MakeFrms(); + // --> OD #i115719# + if ( bIsSwFlyFrmFmtInstance ) + { + static_cast<SwFlyFrmFmt*>(pOldFmt)->SetObjTitle( sTitle ); + static_cast<SwFlyFrmFmt*>(pOldFmt)->SetObjDescription( sDescription ); + } + // <-- } break; @@ -1840,11 +1858,12 @@ IMPL_LINK( SwDoc, DoIdleJobs, Timer *, pTimer ) pModLogFile = new ::rtl::Logfile( "First DoIdleJobs" ); #endif - if( GetRootFrm() && GetRootFrm()->GetCurrShell() && + SwRootFrm* pTmpRoot = GetCurrentLayout();//swmod 080219 + if( pTmpRoot && !SfxProgress::GetActiveProgress( pDocShell ) ) { ViewShell *pSh, *pStartSh; - pSh = pStartSh = GetRootFrm()->GetCurrShell(); + pSh = pStartSh = GetCurrentViewShell(); do { if( pSh->ActionPend() ) { @@ -1855,10 +1874,9 @@ IMPL_LINK( SwDoc, DoIdleJobs, Timer *, pTimer ) pSh = (ViewShell*)pSh->GetNext(); } while( pSh != pStartSh ); - if (GetRootFrm()->IsNeedGrammarCheck()) + if( pTmpRoot->IsNeedGrammarCheck() ) { sal_Bool bIsOnlineSpell = pSh->GetViewOptions()->IsOnlineSpell(); - sal_Bool bIsAutoGrammar = sal_False; SvtLinguConfig().GetProperty( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( UPN_IS_GRAMMAR_AUTO )) ) >>= bIsAutoGrammar; @@ -1866,12 +1884,20 @@ IMPL_LINK( SwDoc, DoIdleJobs, Timer *, pTimer ) if (bIsOnlineSpell && bIsAutoGrammar) StartGrammarChecking( *this ); } - - sal_uInt16 nFldUpdFlag; - if( GetRootFrm()->IsIdleFormat() ) - GetRootFrm()->GetCurrShell()->LayoutIdle(); - else if( ( AUTOUPD_FIELD_ONLY == - ( nFldUpdFlag = static_cast<sal_uInt16>(getFieldUpdateFlags(true)) ) + SwFldUpdateFlags nFldUpdFlag; + std::set<SwRootFrm*> aAllLayouts = GetAllLayouts();//swmod 080320 + std::set<SwRootFrm*>::iterator pLayIter = aAllLayouts.begin(); + for ( ;pLayIter != aAllLayouts.end();pLayIter++ ) + { + if ((*pLayIter)->IsIdleFormat()) + { + (*pLayIter)->GetCurrShell()->LayoutIdle(); + break; + } + } + bool bAllValid = pLayIter == aAllLayouts.end() ? 1 : 0; + if( bAllValid && ( AUTOUPD_FIELD_ONLY == + ( nFldUpdFlag = getFieldUpdateFlags(true) ) || AUTOUPD_FIELD_AND_CHARTS == nFldUpdFlag ) && GetUpdtFlds().IsFieldsDirty() && !GetUpdtFlds().IsInUpdateFlds() && @@ -1883,25 +1909,25 @@ IMPL_LINK( SwDoc, DoIdleJobs, Timer *, pTimer ) // chaos::Action-Klammerung! GetUpdtFlds().SetInUpdateFlds( sal_True ); - GetRootFrm()->StartAllAction(); + pTmpRoot->StartAllAction(); // no jump on update of fields #i85168# const sal_Bool bOldLockView = pStartSh->IsViewLocked(); pStartSh->LockView( sal_True ); - GetSysFldType( RES_CHAPTERFLD )->Modify( 0, 0 ); // KapitelFld + GetSysFldType( RES_CHAPTERFLD )->ModifyNotification( 0, 0 ); // KapitelFld UpdateExpFlds( 0, sal_False ); // Expression-Felder Updaten UpdateTblFlds(NULL); // Tabellen UpdateRefFlds(NULL); // Referenzen - GetRootFrm()->EndAllAction(); + pTmpRoot->EndAllAction(); pStartSh->LockView( bOldLockView ); GetUpdtFlds().SetInUpdateFlds( sal_False ); GetUpdtFlds().SetFieldsDirty( sal_False ); } - } + } //swmod 080219 #ifdef TIMELOG if( pModLogFile && 1 != (long)pModLogFile ) delete pModLogFile, ((long&)pModLogFile) = 1; @@ -1914,7 +1940,7 @@ IMPL_LINK( SwDoc, DoIdleJobs, Timer *, pTimer ) IMPL_STATIC_LINK( SwDoc, BackgroundDone, SvxBrushItem*, EMPTYARG ) { ViewShell *pSh, *pStartSh; - pSh = pStartSh = pThis->GetRootFrm()->GetCurrShell(); + pSh = pStartSh = pThis->GetCurrentViewShell(); //swmod 071108//swmod 071225 if( pStartSh ) do { if( pSh->GetWin() ) @@ -2151,9 +2177,9 @@ sal_Bool SwDoc::IsInHeaderFooter( const SwNodeIndex& rIdx ) const // Redlines auch an Start- und Endnodes haengen, muss der Index nicht // unbedingt der eines Content-Nodes sein. SwNode* pNd = &rIdx.GetNode(); - if( pNd->IsCntntNode() && pLayout ) + if( pNd->IsCntntNode() && pCurrentView )//swmod 071029//swmod 071225 { - const SwFrm *pFrm = pNd->GetCntntNode()->GetFrm(); + const SwFrm *pFrm = pNd->GetCntntNode()->getLayoutFrm( GetCurrentLayout() ); if( pFrm ) { const SwFrm *pUp = pFrm->GetUpper(); @@ -2265,11 +2291,74 @@ sal_Bool SwDoc::IsInVerticalText( const SwPosition& rPos, const Point* pPt ) con return FRMDIR_VERT_TOP_RIGHT == nDir || FRMDIR_VERT_TOP_LEFT == nDir; } -const SwRootFrm* SwDoc::GetRootFrm() const { return pLayout; } -SwRootFrm* SwDoc::GetRootFrm() { return pLayout; } -void SwDoc::SetRootFrm( SwRootFrm* pNew ) { pLayout = pNew; } -SwLayouter* SwDoc::GetLayouter() { return pLayouter; } -const SwLayouter* SwDoc::GetLayouter() const { return pLayouter; } -void SwDoc::SetLayouter( SwLayouter* pNew ) { pLayouter = pNew; } +void SwDoc::SetCurrentViewShell( ViewShell* pNew ) +{ + pCurrentView = pNew; +} + +SwLayouter* SwDoc::GetLayouter() +{ + return pLayouter; +} + +const SwLayouter* SwDoc::GetLayouter() const +{ + return pLayouter; +} + +void SwDoc::SetLayouter( SwLayouter* pNew ) +{ + pLayouter = pNew; +} + +const ViewShell *SwDoc::GetCurrentViewShell() const +{ + return pCurrentView; +} + +ViewShell *SwDoc::GetCurrentViewShell() +{ + return pCurrentView; +} //swmod 080219 It must be able to communicate to a ViewShell.This is going to be removedd later. + +const SwRootFrm *SwDoc::GetCurrentLayout() const +{ + if(GetCurrentViewShell()) + return GetCurrentViewShell()->GetLayout(); + return 0; +} + +SwRootFrm *SwDoc::GetCurrentLayout() +{ + if(GetCurrentViewShell()) + return GetCurrentViewShell()->GetLayout(); + return 0; +} + +bool SwDoc::HasLayout() const +{ + // if there is a view, there is always a layout + return (pCurrentView != 0); +} + +std::set<SwRootFrm*> SwDoc::GetAllLayouts() +{ + std::set<SwRootFrm*> aAllLayouts; + ViewShell *pStart = GetCurrentViewShell(); + ViewShell *pTemp = pStart; + if ( pTemp ) + { + do + { + if (pTemp->GetLayout()) + { + aAllLayouts.insert(pTemp->GetLayout()); + pTemp = (ViewShell*)pTemp->GetNext(); + } + } while(pTemp!=pStart); + } + + return aAllLayouts; +}//swmod 070825 -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
\ No newline at end of file |