diff options
Diffstat (limited to 'sw/source/core/edit')
-rw-r--r-- | sw/source/core/edit/acorrect.cxx | 24 | ||||
-rw-r--r-- | sw/source/core/edit/autofmt.cxx | 61 | ||||
-rw-r--r-- | sw/source/core/edit/edatmisc.cxx | 26 | ||||
-rw-r--r-- | sw/source/core/edit/eddel.cxx | 18 | ||||
-rw-r--r-- | sw/source/core/edit/edfcol.cxx | 7 | ||||
-rw-r--r-- | sw/source/core/edit/edglbldc.cxx | 22 | ||||
-rw-r--r-- | sw/source/core/edit/editsh.cxx | 18 | ||||
-rw-r--r-- | sw/source/core/edit/edlingu.cxx | 9 | ||||
-rw-r--r-- | sw/source/core/edit/ednumber.cxx | 34 | ||||
-rw-r--r-- | sw/source/core/edit/edsect.cxx | 9 | ||||
-rw-r--r-- | sw/source/core/edit/edtab.cxx | 19 | ||||
-rw-r--r-- | sw/source/core/edit/edtox.cxx | 24 | ||||
-rw-r--r-- | sw/source/core/edit/edundo.cxx | 204 | ||||
-rw-r--r-- | sw/source/core/edit/edws.cxx | 56 |
14 files changed, 229 insertions, 302 deletions
diff --git a/sw/source/core/edit/acorrect.cxx b/sw/source/core/edit/acorrect.cxx index b7e92570df42..7601afc663b3 100644 --- a/sw/source/core/edit/acorrect.cxx +++ b/sw/source/core/edit/acorrect.cxx @@ -32,9 +32,7 @@ #define _STD_VAR_ARRAYS #include <hintids.hxx> -#ifndef _SVX_SVXIDS_HRC #include <svx/svxids.hrc> -#endif #include <editeng/langitem.hxx> #include <fmtinfmt.hxx> #include <txtatr.hxx> @@ -96,17 +94,19 @@ void _PaMIntoCrsrShellRing::RemoveFromRing( SwPaM& rPam, Ring* pPrev ) SwAutoCorrDoc::SwAutoCorrDoc( SwEditShell& rEditShell, SwPaM& rPam, sal_Unicode cIns ) - : rEditSh( rEditShell ), rCrsr( rPam ), pIdx( 0 ), - nUndoId( UNDO_EMPTY ), - bUndoIdInitialized( cIns ? false : true ) + : rEditSh( rEditShell ), rCrsr( rPam ), pIdx( 0 ) + , m_nEndUndoCounter(0) + , bUndoIdInitialized( cIns ? false : true ) { } SwAutoCorrDoc::~SwAutoCorrDoc() { - if( UNDO_EMPTY != nUndoId ) - rEditSh.EndUndo( nUndoId ); + for (int i = 0; i < m_nEndUndoCounter; ++i) + { + rEditSh.EndUndo(); + } delete pIdx; } @@ -146,7 +146,10 @@ BOOL SwAutoCorrDoc::Insert( xub_StrLen nPos, const String& rTxt ) { bUndoIdInitialized = true; if( 1 == rTxt.Len() ) - rEditSh.StartUndo( nUndoId = UNDO_AUTOCORRECT ); + { + rEditSh.StartUndo( UNDO_AUTOCORRECT ); + ++m_nEndUndoCounter; + } } return TRUE; } @@ -215,7 +218,10 @@ BOOL SwAutoCorrDoc::Replace( xub_StrLen nPos, const String& rTxt ) { bUndoIdInitialized = true; if( 1 == rTxt.Len() ) - rEditSh.StartUndo( nUndoId = UNDO_AUTOCORRECT ); + { + rEditSh.StartUndo( UNDO_AUTOCORRECT ); + ++m_nEndUndoCounter; + } } } diff --git a/sw/source/core/edit/autofmt.cxx b/sw/source/core/edit/autofmt.cxx index 639bab3c10c5..9029f57f75dc 100644 --- a/sw/source/core/edit/autofmt.cxx +++ b/sw/source/core/edit/autofmt.cxx @@ -36,7 +36,11 @@ #include <hintids.hxx> #include <svl/svstdarr.hxx> + #include <unotools/charclass.hxx> + +#include <vcl/msgbox.hxx> + #include <editeng/boxitem.hxx> #include <editeng/lrspitem.hxx> #include <editeng/brkitem.hxx> @@ -46,12 +50,13 @@ #include <editeng/langitem.hxx> #include <editeng/cscoitem.hxx> #include <editeng/unolingu.hxx> - #include <editeng/acorrcfg.hxx> + #include <swwait.hxx> #include <fmtpdsc.hxx> #include <fmtanchr.hxx> #include <doc.hxx> +#include <IDocumentUndoRedo.hxx> #include <docary.hxx> #include <editsh.hxx> #include <index.hxx> @@ -72,13 +77,8 @@ #include <frmatr.hxx> #include <charatr.hxx> #include <mdiexp.hxx> -#ifndef _STATSTR_HRC #include <statstr.hrc> -#endif -#ifndef _COMCORE_HRC #include <comcore.hrc> -#endif -#include <vcl/msgbox.hxx> #include <numrule.hxx> using namespace ::com::sun::star; @@ -2253,7 +2253,7 @@ SwAutoFormat::SwAutoFormat( SwEditShell* pEdShell, SvxSwAutoFmtFlags& rFlags, pDoc->SetRedlineMode( eRedlMode ); // save undo state (might be turned off) - sal_Bool bUndoState = pDoc->DoesUndo(); + bool const bUndoState = pDoc->GetIDocumentUndoRedo().DoesUndo(); // wenn mehrere Zeilen, dann erstmal nicht mit // dem nachfolgenden Absatz zusammenfassen. @@ -2271,51 +2271,6 @@ SwAutoFormat::SwAutoFormat( SwEditShell* pEdShell, SvxSwAutoFmtFlags& rFlags, eStat = READ_NEXT_PARA; while( !bEnde ) { - // #95884# limit redline array size to prevent overflow and to conserve - // memory - if( pDoc->HasTooManyUndos() ) - { - DBG_ASSERT( bUndoState, "undo overflow without undo?" ); - - //ask user - short nResult = m_nActionWhileAutoformatUndoBufferOverflow; // TODO: #102007# read the last decision of the user from configuration - if(m_bAskForCancelUndoWhileBufferOverflow) // #102007# TODO: read the last decision of the user from configuration - { - Window* pParent = pEditShell?pEditShell->GetWin():NULL; - WarningBox aWarning( pParent,SW_RES(MSG_DISABLE_UNDO_QUESTION)); - aWarning.SetDefaultCheckBoxText(); - USHORT nDefaultButton = nResult==RET_YES?BUTTONID_YES:(nResult==RET_NO?BUTTONID_NO:BUTTONID_CANCEL); - aWarning.SetFocusButton(nDefaultButton); - nResult = aWarning.Execute(); - m_bAskForCancelUndoWhileBufferOverflow = !aWarning.GetCheckBoxState(); - m_nActionWhileAutoformatUndoBufferOverflow = nResult; - // TODO: #102007# store m_bAskForCancelUndoWhileBufferOverflow in configuration - // TODO: #102007# store m_nActionWhileAutoformatUndoBufferOverflow in configuration - } - - DBG_ASSERT( (nResult == RET_YES) || (nResult == RET_CANCEL) || (nResult == RET_NO), - "unexpected result" ); - - if( nResult == RET_YES ) - { - // turn off undo and continue - pDoc->DoUndo( sal_False ); - pDoc->DelAllUndoObj(); - } - else if( nResult == RET_NO ) - { - //stop autoformatting and keep changes - eStat = IS_ENDE; - } - else if( nResult == RET_CANCEL ) - { - //cancel autoformatting and undo changes - eStat = IS_ENDE; - - // TODO: #102004# undo changes - } - } - switch( eStat ) { case READ_NEXT_PARA: @@ -2709,7 +2664,7 @@ SwAutoFormat::SwAutoFormat( SwEditShell* pEdShell, SvxSwAutoFmtFlags& rFlags, pDoc->SetRedlineMode( eOldMode ); // restore undo (in case it has been changed) - pDoc->DoUndo( bUndoState ); + pDoc->GetIDocumentUndoRedo().DoUndo(bUndoState); // Prozent-Anzeige wieder abschalten if( !aFlags.bAFmtByInput ) diff --git a/sw/source/core/edit/edatmisc.cxx b/sw/source/core/edit/edatmisc.cxx index 6fda3a164c32..ea923b77a54d 100644 --- a/sw/source/core/edit/edatmisc.cxx +++ b/sw/source/core/edit/edatmisc.cxx @@ -28,9 +28,9 @@ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sw.hxx" - #include <editsh.hxx> #include <doc.hxx> // fuer aNodes +#include <IDocumentUndoRedo.hxx> #include <pam.hxx> // fuer SwPaM #include <edimp.hxx> // fuer MACROS #include <swundo.hxx> // fuer die UndoIds @@ -49,7 +49,9 @@ void SwEditShell::ResetAttr( const SvUShortsSort* pAttrs ) StartAllAction(); BOOL bUndoGroup = GetCrsr()->GetNext() != GetCrsr(); if( bUndoGroup ) - GetDoc()->StartUndo(UNDO_RESETATTR, NULL); + { + GetDoc()->GetIDocumentUndoRedo().StartUndo(UNDO_RESETATTR, NULL); + } FOREACHPAM_START(this) // if ( PCURCRSR->HasMark() ) @@ -57,7 +59,9 @@ void SwEditShell::ResetAttr( const SvUShortsSort* pAttrs ) FOREACHPAM_END() if( bUndoGroup ) - GetDoc()->EndUndo(UNDO_RESETATTR, NULL); + { + GetDoc()->GetIDocumentUndoRedo().EndUndo(UNDO_RESETATTR, NULL); + } CallChgLnk(); EndAllAction(); } @@ -71,12 +75,14 @@ void SwEditShell::GCAttr() // Sonst Probleme im MouseBut.DownHdl - Bug 35562 // StartAllAction(); FOREACHPAM_START(this) - SwTxtNode *pTxtNode; if ( !PCURCRSR->HasMark() ) { - if( 0 != (pTxtNode = GetDoc()->GetNodes()[ - PCURCRSR->GetPoint()->nNode]->GetTxtNode())) + SwTxtNode *const pTxtNode = + PCURCRSR->GetPoint()->nNode.GetNode().GetTxtNode(); + if (pTxtNode) + { pTxtNode->GCAttr(); + } } else { @@ -133,7 +139,7 @@ void SwEditShell::SetAttr( const SfxPoolItem& rHint, USHORT nFlags ) if( pCrsr->GetNext() != pCrsr ) // Ring von Cursorn { BOOL bIsTblMode = IsTableMode(); - GetDoc()->StartUndo(UNDO_INSATTR, NULL); + GetDoc()->GetIDocumentUndoRedo().StartUndo(UNDO_INSATTR, NULL); FOREACHPAM_START(this) if( PCURCRSR->HasMark() && ( bIsTblMode || @@ -143,7 +149,7 @@ void SwEditShell::SetAttr( const SfxPoolItem& rHint, USHORT nFlags ) } FOREACHPAM_END() - GetDoc()->EndUndo(UNDO_INSATTR, NULL); + GetDoc()->GetIDocumentUndoRedo().EndUndo(UNDO_INSATTR, NULL); } else { @@ -163,7 +169,7 @@ void SwEditShell::SetAttr( const SfxItemSet& rSet, USHORT nFlags ) if( pCrsr->GetNext() != pCrsr ) // Ring von Cursorn { BOOL bIsTblMode = IsTableMode(); - GetDoc()->StartUndo(UNDO_INSATTR, NULL); + GetDoc()->GetIDocumentUndoRedo().StartUndo(UNDO_INSATTR, NULL); FOREACHPAM_START(this) if( PCURCRSR->HasMark() && ( bIsTblMode || @@ -173,7 +179,7 @@ void SwEditShell::SetAttr( const SfxItemSet& rSet, USHORT nFlags ) } FOREACHPAM_END() - GetDoc()->EndUndo(UNDO_INSATTR, NULL); + GetDoc()->GetIDocumentUndoRedo().EndUndo(UNDO_INSATTR, NULL); } else { diff --git a/sw/source/core/edit/eddel.cxx b/sw/source/core/edit/eddel.cxx index a996ed802a42..ef4362e2a9fd 100644 --- a/sw/source/core/edit/eddel.cxx +++ b/sw/source/core/edit/eddel.cxx @@ -31,6 +31,7 @@ #include <hintids.hxx> #include <doc.hxx> +#include <IDocumentUndoRedo.hxx> #include <editsh.hxx> #include <cntfrm.hxx> #include <pam.hxx> @@ -39,7 +40,6 @@ #include <IMark.hxx> #include <docary.hxx> #include <SwRewriter.hxx> -#include <undobj.hxx> #include <globals.hrc> #include <comcore.hrc> @@ -68,7 +68,7 @@ void SwEditShell::DeleteSel( SwPaM& rPam, BOOL* pUndo ) // in Tabellen das Undo gruppieren if( pUndo && !*pUndo ) { - GetDoc()->StartUndo( UNDO_START, NULL ); + GetDoc()->GetIDocumentUndoRedo().StartUndo( UNDO_START, NULL ); *pUndo = TRUE; } SwPaM aDelPam( *rPam.Start() ); @@ -129,7 +129,7 @@ long SwEditShell::Delete() SwRewriter aRewriter; aRewriter.AddRule(UNDO_ARG1, String(SW_RES(STR_MULTISEL))); - GetDoc()->StartUndo( UNDO_DELETE, &aRewriter ); + GetDoc()->GetIDocumentUndoRedo().StartUndo(UNDO_DELETE, &aRewriter); } FOREACHPAM_START(this) @@ -138,7 +138,9 @@ long SwEditShell::Delete() // falls eine Undo-Klammerung, dann hier beenden if( bUndo ) - GetDoc()->EndUndo( UNDO_DELETE, NULL ); + { + GetDoc()->GetIDocumentUndoRedo().EndUndo(UNDO_END, 0); + } EndAllAction(); nRet = 1; } @@ -207,7 +209,7 @@ long SwEditShell::Copy( SwEditShell* pDestShell ) // For block selection this list is filled with the insert positions std::list< boost::shared_ptr<SwPosition> >::iterator pNextInsert = aInsertList.begin(); - pDestShell->GetDoc()->StartUndo( UNDO_START, NULL ); + pDestShell->GetDoc()->GetIDocumentUndoRedo().StartUndo( UNDO_START, NULL ); FOREACHPAM_START(this) if( !pPos ) @@ -289,7 +291,7 @@ long SwEditShell::Copy( SwEditShell* pDestShell ) #endif // Undo-Klammerung hier beenden - pDestShell->GetDoc()->EndUndo( UNDO_END, NULL ); + pDestShell->GetDoc()->GetIDocumentUndoRedo().EndUndo( UNDO_END, NULL ); pDestShell->EndAllAction(); pDestShell->SaveTblBoxCntnt( pDestShell->GetCrsr()->GetPoint() ); @@ -312,7 +314,7 @@ BOOL SwEditShell::Replace( const String& rNewStr, BOOL bRegExpRplc ) if( !HasReadonlySel() ) { StartAllAction(); - GetDoc()->StartUndo(UNDO_EMPTY, NULL); + GetDoc()->GetIDocumentUndoRedo().StartUndo(UNDO_EMPTY, NULL); FOREACHPAM_START(this) if( PCURCRSR->HasMark() && *PCURCRSR->GetMark() != *PCURCRSR->GetPoint() ) @@ -324,7 +326,7 @@ BOOL SwEditShell::Replace( const String& rNewStr, BOOL bRegExpRplc ) FOREACHPAM_END() // Undo-Klammerung hier beenden - GetDoc()->EndUndo(UNDO_EMPTY, NULL); + GetDoc()->GetIDocumentUndoRedo().EndUndo(UNDO_EMPTY, NULL); EndAllAction(); } return bRet; diff --git a/sw/source/core/edit/edfcol.cxx b/sw/source/core/edit/edfcol.cxx index c3dc53f1ba26..fb430aa053ab 100644 --- a/sw/source/core/edit/edfcol.cxx +++ b/sw/source/core/edit/edfcol.cxx @@ -33,6 +33,7 @@ #include <editeng/brkitem.hxx> #include <editsh.hxx> #include <doc.hxx> // fuer SwTxtFmtColls +#include <IDocumentUndoRedo.hxx> #include <edimp.hxx> // fuer MACROS #include <ndtxt.hxx> #include <paratr.hxx> @@ -41,7 +42,7 @@ #include <viewopt.hxx> // <-- #include <SwRewriter.hxx> -#include <undobj.hxx> +#include <numrule.hxx> #include <swundo.hxx> /************************************* @@ -77,7 +78,7 @@ void SwEditShell::SetTxtFmtColl( SwTxtFmtColl *pFmt, SwRewriter aRewriter; aRewriter.AddRule(UNDO_ARG1, pLocal->GetName()); - GetDoc()->StartUndo(UNDO_SETFMTCOLL, &aRewriter); + GetDoc()->GetIDocumentUndoRedo().StartUndo(UNDO_SETFMTCOLL, &aRewriter); FOREACHPAM_START(this) if( !PCURCRSR->HasReadonlySel( @@ -87,7 +88,7 @@ void SwEditShell::SetTxtFmtColl( SwTxtFmtColl *pFmt, GetDoc()->SetTxtFmtColl( *PCURCRSR, pLocal, true, bResetListAttrs ); FOREACHPAM_END() - GetDoc()->EndUndo(UNDO_SETFMTCOLL, NULL); + GetDoc()->GetIDocumentUndoRedo().EndUndo(UNDO_SETFMTCOLL, &aRewriter); EndAllAction(); } // <-- diff --git a/sw/source/core/edit/edglbldc.cxx b/sw/source/core/edit/edglbldc.cxx index 6f884f244326..5edee9f0cb83 100644 --- a/sw/source/core/edit/edglbldc.cxx +++ b/sw/source/core/edit/edglbldc.cxx @@ -28,8 +28,8 @@ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sw.hxx" - #include <doc.hxx> +#include <IDocumentUndoRedo.hxx> #include <editsh.hxx> #include <pam.hxx> #include <ndtxt.hxx> @@ -52,7 +52,9 @@ void SwEditShell::SetGlblDocSaveLinks( BOOL bFlag ) { getIDocumentSettingAccess()->set(IDocumentSettingAccess::GLOBAL_DOCUMENT_SAVE_LINKS, bFlag); if( !GetDoc()->IsModified() ) // Bug 57028 - GetDoc()->SetUndoNoResetModified(); + { + GetDoc()->GetIDocumentUndoRedo().SetUndoNoResetModified(); + } GetDoc()->SetModified(); } @@ -163,13 +165,13 @@ BOOL SwEditShell::InsertGlobalDocContent( const SwGlblDocContent& rInsPos, BOOL bEndUndo = FALSE; SwDoc* pMyDoc = GetDoc(); - SwTxtNode* pTxtNd = pMyDoc->GetNodes()[ rPos.nNode ]->GetTxtNode(); + SwTxtNode *const pTxtNd = rPos.nNode.GetNode().GetTxtNode(); if( pTxtNd ) rPos.nContent.Assign( pTxtNd, 0 ); else { bEndUndo = TRUE; - pMyDoc->StartUndo( UNDO_START, NULL ); + pMyDoc->GetIDocumentUndoRedo().StartUndo( UNDO_START, NULL ); rPos.nNode--; pMyDoc->AppendTxtNode( rPos ); pCrsr->SetMark(); @@ -178,7 +180,9 @@ BOOL SwEditShell::InsertGlobalDocContent( const SwGlblDocContent& rInsPos, InsertSection( rNew ); if( bEndUndo ) - pMyDoc->EndUndo( UNDO_END, NULL ); + { + pMyDoc->GetIDocumentUndoRedo().EndUndo( UNDO_END, NULL ); + } EndAllAction(); return TRUE; @@ -209,7 +213,7 @@ BOOL SwEditShell::InsertGlobalDocContent( const SwGlblDocContent& rInsPos, else { bEndUndo = TRUE; - pMyDoc->StartUndo( UNDO_START, NULL ); + pMyDoc->GetIDocumentUndoRedo().StartUndo( UNDO_START, NULL ); rPos.nNode--; pMyDoc->AppendTxtNode( rPos ); } @@ -217,7 +221,9 @@ BOOL SwEditShell::InsertGlobalDocContent( const SwGlblDocContent& rInsPos, InsertTableOf( rTOX ); if( bEndUndo ) - pMyDoc->EndUndo( UNDO_END, NULL ); + { + pMyDoc->GetIDocumentUndoRedo().EndUndo( UNDO_END, NULL ); + } EndAllAction(); return TRUE; @@ -365,7 +371,7 @@ BOOL SwEditShell::GotoGlobalDocContent( const SwGlblDocContent& rPos ) rCrsrPos.nNode = rPos.GetDocPos(); SwDoc* pMyDoc = GetDoc(); - SwCntntNode* pCNd = pMyDoc->GetNodes()[ rCrsrPos.nNode ]->GetCntntNode(); + SwCntntNode * pCNd = rCrsrPos.nNode.GetNode().GetCntntNode(); if( !pCNd ) pCNd = pMyDoc->GetNodes().GoNext( &rCrsrPos.nNode ); diff --git a/sw/source/core/edit/editsh.cxx b/sw/source/core/edit/editsh.cxx index 7a143a2d29d9..4dbe56523482 100644 --- a/sw/source/core/edit/editsh.cxx +++ b/sw/source/core/edit/editsh.cxx @@ -27,6 +27,7 @@ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sw.hxx" + #include <hintids.hxx> #include <tools/list.hxx> #include <tools/urlobj.hxx> @@ -41,6 +42,7 @@ #include <frmfmt.hxx> #include <charfmt.hxx> #include <doc.hxx> +#include <IDocumentUndoRedo.hxx> #include <docary.hxx> #include <editsh.hxx> #include <frame.hxx> @@ -201,7 +203,7 @@ void SwEditShell::Overwrite(const String &rStr) long SwEditShell::SplitNode( BOOL bAutoFormat, BOOL bCheckTableStart ) { StartAllAction(); - GetDoc()->StartUndo(UNDO_EMPTY, NULL); + GetDoc()->GetIDocumentUndoRedo().StartUndo(UNDO_EMPTY, NULL); FOREACHPAM_START(this) // eine Tabellen Zelle wird jetzt zu einer normalen Textzelle! @@ -209,7 +211,7 @@ long SwEditShell::SplitNode( BOOL bAutoFormat, BOOL bCheckTableStart ) GetDoc()->SplitNode( *PCURCRSR->GetPoint(), bCheckTableStart ); FOREACHPAM_END() - GetDoc()->EndUndo(UNDO_EMPTY, NULL); + GetDoc()->GetIDocumentUndoRedo().EndUndo(UNDO_EMPTY, NULL); if( bAutoFormat ) AutoFmtBySplitNode(); @@ -227,14 +229,14 @@ sal_Bool SwEditShell::AppendTxtNode() { sal_Bool bRet = sal_False; StartAllAction(); - GetDoc()->StartUndo(UNDO_EMPTY, NULL); + GetDoc()->GetIDocumentUndoRedo().StartUndo(UNDO_EMPTY, NULL); FOREACHPAM_START(this) GetDoc()->ClearBoxNumAttrs( PCURCRSR->GetPoint()->nNode ); bRet = GetDoc()->AppendTxtNode( *PCURCRSR->GetPoint()) || bRet; FOREACHPAM_END() - GetDoc()->EndUndo(UNDO_EMPTY, NULL); + GetDoc()->GetIDocumentUndoRedo().EndUndo(UNDO_EMPTY, NULL); ClearTblBoxCntnt(); @@ -752,7 +754,7 @@ BOOL SwEditShell::InsertURL( const SwFmtINetFmt& rFmt, const String& rStr, BOOL if( !rFmt.GetValue().Len() || ( !rStr.Len() && !HasSelection() ) ) return FALSE; StartAllAction(); - GetDoc()->StartUndo( UNDO_UI_INSERT_URLTXT, NULL); + GetDoc()->GetIDocumentUndoRedo().StartUndo( UNDO_UI_INSERT_URLTXT, NULL); BOOL bInsTxt = TRUE; if( rStr.Len() ) @@ -796,7 +798,7 @@ BOOL SwEditShell::InsertURL( const SwFmtINetFmt& rFmt, const String& rStr, BOOL ClearMark(); if( bInsTxt ) DontExpandFmt(); - GetDoc()->EndUndo( UNDO_UI_INSERT_URLTXT, NULL ); + GetDoc()->GetIDocumentUndoRedo().EndUndo( UNDO_UI_INSERT_URLTXT, NULL ); EndAllAction(); return TRUE; } @@ -1169,14 +1171,14 @@ void SwEditShell::TransliterateText( sal_uInt32 nType ) SwPaM* pCrsr = GetCrsr(); if( pCrsr->GetNext() != pCrsr ) { - GetDoc()->StartUndo(UNDO_EMPTY, NULL); + GetDoc()->GetIDocumentUndoRedo().StartUndo(UNDO_EMPTY, NULL); FOREACHPAM_START( this ) if( PCURCRSR->HasMark() ) GetDoc()->TransliterateText( *PCURCRSR, aTrans ); FOREACHPAM_END() - GetDoc()->EndUndo(UNDO_EMPTY, NULL); + GetDoc()->GetIDocumentUndoRedo().EndUndo(UNDO_EMPTY, NULL); } else GetDoc()->TransliterateText( *pCrsr, aTrans ); diff --git a/sw/source/core/edit/edlingu.cxx b/sw/source/core/edit/edlingu.cxx index c9ab4a591383..24057039e1ef 100644 --- a/sw/source/core/edit/edlingu.cxx +++ b/sw/source/core/edit/edlingu.cxx @@ -35,9 +35,7 @@ #include <unoflatpara.hxx> -#ifndef _COMCORE_HRC #include <comcore.hrc> -#endif #include <hintids.hxx> #include <linguistic/lngprops.hxx> #include <vcl/msgbox.hxx> @@ -49,6 +47,7 @@ #include <charatr.hxx> #include <editsh.hxx> #include <doc.hxx> +#include <IDocumentUndoRedo.hxx> #include <rootfrm.hxx> // SwRootFrm #include <pam.hxx> #include <swundo.hxx> // fuer die UndoIds @@ -57,9 +56,7 @@ #include <viscrs.hxx> // SwShellCrsr #include <SwGrammarMarkUp.hxx> // SwWrongList #include <mdiexp.hxx> // Statusanzeige -#ifndef _STATSTR_HRC #include <statstr.hrc> // StatLine-String -#endif #include <cntfrm.hxx> #include <crsskip.hxx> #include <splargs.hxx> @@ -1334,7 +1331,7 @@ void SwEditShell::ApplyChangedSentence(const ::svx::SpellPortions& rNewPortions, // iterate over the new portions, beginning at the end to take advantage of the previously // saved content positions - pDoc->StartUndo( UNDO_OVERWRITE, NULL ); + pDoc->GetIDocumentUndoRedo().StartUndo( UNDO_OVERWRITE, NULL ); StartAction(); SwPaM *pCrsr = GetCrsr(); @@ -1463,7 +1460,7 @@ void SwEditShell::ApplyChangedSentence(const ::svx::SpellPortions& rNewPortions, // set continuation position for spell/grammar checking to the end of this sentence pSpellIter->SetCurr( new SwPosition( *pCrsr->Start() ) ); - pDoc->EndUndo( UNDO_OVERWRITE, NULL ); + pDoc->GetIDocumentUndoRedo().EndUndo( UNDO_OVERWRITE, NULL ); EndAction(); } } diff --git a/sw/source/core/edit/ednumber.cxx b/sw/source/core/edit/ednumber.cxx index ea1088f36f69..f5b2ef0fb2b9 100644 --- a/sw/source/core/edit/ednumber.cxx +++ b/sw/source/core/edit/ednumber.cxx @@ -33,6 +33,7 @@ #include <editsh.hxx> #include <edimp.hxx> #include <doc.hxx> +#include <IDocumentUndoRedo.hxx> #include <ndtxt.hxx> #include <paratr.hxx> #include <swundo.hxx> @@ -153,12 +154,12 @@ BOOL SwEditShell::NoNum() SwPaM* pCrsr = GetCrsr(); if( pCrsr->GetNext() != pCrsr ) // Mehrfachselektion ? { - GetDoc()->StartUndo( UNDO_START, NULL ); + GetDoc()->GetIDocumentUndoRedo().StartUndo( UNDO_START, NULL ); SwPamRanges aRangeArr( *pCrsr ); SwPaM aPam( *pCrsr->GetPoint() ); for( USHORT n = 0; n < aRangeArr.Count(); ++n ) bRet = bRet && GetDoc()->NoNum( aRangeArr.SetPam( n, aPam )); - GetDoc()->EndUndo( UNDO_END, NULL ); + GetDoc()->GetIDocumentUndoRedo().EndUndo( UNDO_END, NULL ); } else bRet = GetDoc()->NoNum( *pCrsr ); @@ -217,14 +218,14 @@ void SwEditShell::DelNumRules() SwPaM* pCrsr = GetCrsr(); if( pCrsr->GetNext() != pCrsr ) // Mehrfachselektion ? { - GetDoc()->StartUndo( UNDO_START, NULL ); + GetDoc()->GetIDocumentUndoRedo().StartUndo( UNDO_START, NULL ); SwPamRanges aRangeArr( *pCrsr ); SwPaM aPam( *pCrsr->GetPoint() ); for( USHORT n = 0; n < aRangeArr.Count(); ++n ) { GetDoc()->DelNumRules( aRangeArr.SetPam( n, aPam ) ); } - GetDoc()->EndUndo( UNDO_END, NULL ); + GetDoc()->GetIDocumentUndoRedo().EndUndo( UNDO_END, NULL ); } else GetDoc()->DelNumRules( *pCrsr ); @@ -255,12 +256,12 @@ BOOL SwEditShell::NumUpDown( BOOL bDown ) bRet = GetDoc()->NumUpDown( *pCrsr, bDown ); else { - GetDoc()->StartUndo( UNDO_START, NULL ); + GetDoc()->GetIDocumentUndoRedo().StartUndo( UNDO_START, NULL ); SwPamRanges aRangeArr( *pCrsr ); SwPaM aPam( *pCrsr->GetPoint() ); for( USHORT n = 0; n < aRangeArr.Count(); ++n ) bRet = bRet && GetDoc()->NumUpDown( aRangeArr.SetPam( n, aPam ), bDown ); - GetDoc()->EndUndo( UNDO_END, NULL ); + GetDoc()->GetIDocumentUndoRedo().EndUndo( UNDO_END, NULL ); } GetDoc()->SetModified(); @@ -517,13 +518,13 @@ BOOL SwEditShell::OutlineUpDown( short nOffset ) bRet = GetDoc()->OutlineUpDown( *pCrsr, nOffset ); else { - GetDoc()->StartUndo( UNDO_START, NULL ); + GetDoc()->GetIDocumentUndoRedo().StartUndo( UNDO_START, NULL ); SwPamRanges aRangeArr( *pCrsr ); SwPaM aPam( *pCrsr->GetPoint() ); for( USHORT n = 0; n < aRangeArr.Count(); ++n ) bRet = bRet && GetDoc()->OutlineUpDown( aRangeArr.SetPam( n, aPam ), nOffset ); - GetDoc()->EndUndo( UNDO_END, NULL ); + GetDoc()->GetIDocumentUndoRedo().EndUndo( UNDO_END, NULL ); } GetDoc()->SetModified(); EndAllAction(); @@ -698,10 +699,11 @@ void SwEditShell::SetCurNumRule( const SwNumRule& rRule, { StartAllAction(); + GetDoc()->GetIDocumentUndoRedo().StartUndo( UNDO_START, NULL ); + SwPaM* pCrsr = GetCrsr(); if( pCrsr->GetNext() != pCrsr ) // Mehrfachselektion ? { - GetDoc()->StartUndo( UNDO_START, NULL ); SwPamRanges aRangeArr( *pCrsr ); SwPaM aPam( *pCrsr->GetPoint() ); for( USHORT n = 0; n < aRangeArr.Count(); ++n ) @@ -715,21 +717,17 @@ void SwEditShell::SetCurNumRule( const SwNumRule& rRule, // <-- GetDoc()->SetCounted( aPam, true ); } - GetDoc()->EndUndo( UNDO_END, NULL ); } else { - GetDoc()->StartUndo( UNDO_START, NULL ); - // --> OD 2008-02-08 #newlistlevelattrs# // --> OD 2008-03-17 #refactorlists# GetDoc()->SetNumRule( *pCrsr, rRule, bCreateNewList, sContinuedListId, sal_True, bResetIndentAttrs ); GetDoc()->SetCounted( *pCrsr, true ); - - GetDoc()->EndUndo( UNDO_END, NULL ); } + GetDoc()->GetIDocumentUndoRedo().EndUndo( UNDO_END, NULL ); EndAllAction(); } @@ -761,12 +759,12 @@ void SwEditShell::SetNumRuleStart( BOOL bFlag ) SwPaM* pCrsr = GetCrsr(); if( pCrsr->GetNext() != pCrsr ) // Mehrfachselektion ? { - GetDoc()->StartUndo( UNDO_START, NULL ); + GetDoc()->GetIDocumentUndoRedo().StartUndo( UNDO_START, NULL ); SwPamRanges aRangeArr( *pCrsr ); SwPaM aPam( *pCrsr->GetPoint() ); for( USHORT n = 0; n < aRangeArr.Count(); ++n ) GetDoc()->SetNumRuleStart( *aRangeArr.SetPam( n, aPam ).GetPoint(), bFlag ); - GetDoc()->EndUndo( UNDO_END, NULL ); + GetDoc()->GetIDocumentUndoRedo().EndUndo( UNDO_END, NULL ); } else GetDoc()->SetNumRuleStart( *pCrsr->GetPoint(), bFlag ); @@ -790,12 +788,12 @@ void SwEditShell::SetNodeNumStart( USHORT nStt ) SwPaM* pCrsr = GetCrsr(); if( pCrsr->GetNext() != pCrsr ) // Mehrfachselektion ? { - GetDoc()->StartUndo( UNDO_START, NULL ); + GetDoc()->GetIDocumentUndoRedo().StartUndo( UNDO_START, NULL ); SwPamRanges aRangeArr( *pCrsr ); SwPaM aPam( *pCrsr->GetPoint() ); for( USHORT n = 0; n < aRangeArr.Count(); ++n ) GetDoc()->SetNodeNumStart( *aRangeArr.SetPam( n, aPam ).GetPoint(), nStt ); - GetDoc()->EndUndo( UNDO_END, NULL ); + GetDoc()->GetIDocumentUndoRedo().EndUndo( UNDO_END, NULL ); } else GetDoc()->SetNodeNumStart( *pCrsr->GetPoint(), nStt ); diff --git a/sw/source/core/edit/edsect.cxx b/sw/source/core/edit/edsect.cxx index a936002df9a2..4cdf271c50f0 100644 --- a/sw/source/core/edit/edsect.cxx +++ b/sw/source/core/edit/edsect.cxx @@ -28,9 +28,9 @@ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sw.hxx" - -#include <doc.hxx> #include <editsh.hxx> +#include <doc.hxx> +#include <IDocumentUndoRedo.hxx> #include <pam.hxx> #include <docary.hxx> #include <swundo.hxx> // fuer die UndoIds @@ -50,7 +50,7 @@ SwEditShell::InsertSection( if( !IsTableMode() ) { StartAllAction(); - GetDoc()->StartUndo( UNDO_INSSECTION, NULL ); + GetDoc()->GetIDocumentUndoRedo().StartUndo( UNDO_INSSECTION, NULL ); FOREACHPAM_START(this) SwSection const*const pNew = @@ -59,8 +59,7 @@ SwEditShell::InsertSection( pRet = pNew; FOREACHPAM_END() - // Undo-Klammerung hier beenden - GetDoc()->EndUndo( UNDO_INSSECTION, NULL ); + GetDoc()->GetIDocumentUndoRedo().EndUndo( UNDO_INSSECTION, NULL ); EndAllAction(); } return pRet; diff --git a/sw/source/core/edit/edtab.cxx b/sw/source/core/edit/edtab.cxx index 76a37e4e8627..d363b0ac845a 100644 --- a/sw/source/core/edit/edtab.cxx +++ b/sw/source/core/edit/edtab.cxx @@ -35,9 +35,7 @@ #define _SVSTDARR_ULONGS #include <svl/svstdarr.hxx> -#ifndef _APP_HXX //autogen #include <vcl/svapp.hxx> -#endif #include <vcl/window.hxx> #include <editeng/boxitem.hxx> #include <swwait.hxx> @@ -45,6 +43,7 @@ #include <frmatr.hxx> #include <editsh.hxx> #include <doc.hxx> +#include <IDocumentUndoRedo.hxx> #include <cntfrm.hxx> #include <pam.hxx> #include <ndtxt.hxx> @@ -259,7 +258,9 @@ void SwEditShell::SetTblChgMode( TblChgMode eMode ) { ((SwTable&)pTblNd->GetTable()).SetTblChgMode( eMode ); if( !GetDoc()->IsModified() ) // Bug 57028 - GetDoc()->SetUndoNoResetModified(); + { + GetDoc()->GetIDocumentUndoRedo().SetUndoNoResetModified(); + } GetDoc()->SetModified(); } } @@ -331,10 +332,10 @@ void SwEditShell::SetTblBoxFormulaAttrs( const SfxItemSet& rSet ) ClearTblBoxCntnt(); StartAllAction(); - GetDoc()->StartUndo( UNDO_START, NULL ); + GetDoc()->GetIDocumentUndoRedo().StartUndo( UNDO_START, NULL ); for( USHORT n = 0; n < aBoxes.Count(); ++n ) GetDoc()->SetTblBoxFormulaAttrs( *aBoxes[ n ], rSet ); - GetDoc()->EndUndo( UNDO_END, NULL ); + GetDoc()->GetIDocumentUndoRedo().EndUndo( UNDO_END, NULL ); EndAllAction(); } @@ -407,11 +408,11 @@ BOOL SwEditShell::SplitTable( USHORT eMode ) if( pCrsr->GetNode()->FindTableNode() ) { StartAllAction(); - GetDoc()->StartUndo(UNDO_EMPTY, NULL); + GetDoc()->GetIDocumentUndoRedo().StartUndo(UNDO_EMPTY, NULL); bRet = GetDoc()->SplitTable( *pCrsr->GetPoint(), eMode, TRUE ); - GetDoc()->EndUndo(UNDO_EMPTY, NULL); + GetDoc()->GetIDocumentUndoRedo().EndUndo(UNDO_EMPTY, NULL); ClearFEShellTabCols(); EndAllAction(); } @@ -425,11 +426,11 @@ BOOL SwEditShell::MergeTable( BOOL bWithPrev, USHORT nMode ) if( pCrsr->GetNode()->FindTableNode() ) { StartAllAction(); - GetDoc()->StartUndo(UNDO_EMPTY, NULL); + GetDoc()->GetIDocumentUndoRedo().StartUndo(UNDO_EMPTY, NULL); bRet = GetDoc()->MergeTable( *pCrsr->GetPoint(), bWithPrev, nMode ); - GetDoc()->EndUndo(UNDO_EMPTY, NULL); + GetDoc()->GetIDocumentUndoRedo().EndUndo(UNDO_EMPTY, NULL); ClearFEShellTabCols(); EndAllAction(); } diff --git a/sw/source/core/edit/edtox.cxx b/sw/source/core/edit/edtox.cxx index b1188588fe4d..93c4e0cd10aa 100644 --- a/sw/source/core/edit/edtox.cxx +++ b/sw/source/core/edit/edtox.cxx @@ -27,38 +27,40 @@ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sw.hxx" + #include <com/sun/star/util/SearchOptions.hpp> #include <com/sun/star/util/SearchFlags.hpp> #include <com/sun/star/i18n/TransliterationModules.hpp> - #include <tools/urlobj.hxx> -#include <svtools/txtcmp.hxx> -#ifndef SVTOOLS_FSTATHELPER_HXX + #include <svl/fstathelper.hxx> -#endif + +#include <svtools/txtcmp.hxx> + #include <sfx2/docfile.hxx> -#include "editeng/unolingu.hxx" + +#include <xmloff/odffields.hxx> + +#include <editeng/unolingu.hxx> + #include <swtypes.hxx> #include <editsh.hxx> #include <doc.hxx> +#include <IDocumentUndoRedo.hxx> #include <pam.hxx> #include <viewopt.hxx> #include <ndtxt.hxx> #include <errhdl.hxx> #include <swundo.hxx> -#include <undobj.hxx> #include <txttxmrk.hxx> #include <edimp.hxx> #include <tox.hxx> #include <doctxm.hxx> #include <docary.hxx> #include <mdiexp.hxx> -#ifndef _STATSTR_HRC #include <statstr.hrc> -#endif #include <bookmrk.hxx> -#include <xmloff/odffields.hxx> using namespace ::com::sun::star; @@ -211,7 +213,7 @@ BOOL SwEditShell::UpdateTableOf( const SwTOXBase& rTOX, const SfxItemSet* pSet ) ::StartProgress( STR_STATSTR_TOX_UPDATE, 0, 0, pDocSh ); ::SetProgressText( STR_STATSTR_TOX_UPDATE, pDocSh ); - pMyDoc->StartUndo(UNDO_TOXCHANGE, NULL); + pMyDoc->GetIDocumentUndoRedo().StartUndo(UNDO_TOXCHANGE, NULL); // Verzeichnisrumpf erzeugen pTOX->Update(pSet); @@ -226,7 +228,7 @@ BOOL SwEditShell::UpdateTableOf( const SwTOXBase& rTOX, const SfxItemSet* pSet ) // Seitennummern eintragen pTOX->UpdatePageNum(); - pMyDoc->EndUndo(UNDO_TOXCHANGE, NULL); + pMyDoc->GetIDocumentUndoRedo().EndUndo(UNDO_TOXCHANGE, NULL); ::EndProgress( pDocSh ); EndAllAction(); diff --git a/sw/source/core/edit/edundo.cxx b/sw/source/core/edit/edundo.cxx index a27b09f5d4ff..fb7a2103a5b1 100644 --- a/sw/source/core/edit/edundo.cxx +++ b/sw/source/core/edit/edundo.cxx @@ -28,18 +28,20 @@ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sw.hxx" - #include <svx/svdview.hxx> + #include <editsh.hxx> #include <fesh.hxx> #include <doc.hxx> +#include <IDocumentUndoRedo.hxx> #include <pam.hxx> -#include <undobj.hxx> +#include <UndoCore.hxx> #include <swundo.hxx> #include <dcontact.hxx> #include <flyfrm.hxx> #include <frmfmt.hxx> #include <viewimp.hxx> +#include <docsh.hxx> /** helper function to select all objects in an SdrMarkList; @@ -47,16 +49,64 @@ void lcl_SelectSdrMarkList( SwEditShell* pShell, const SdrMarkList* pSdrMarkList ); +bool SwEditShell::CursorsLocked() const +{ + + return GetDoc()->GetDocShell()->GetModel()->hasControllersLocked(); +} + +void +SwEditShell::HandleUndoRedoContext(::sw::UndoRedoContext & rContext) +{ + // do nothing if somebody has locked controllers! + if (CursorsLocked()) + { + return; + } + + SwFrmFmt * pSelFmt(0); + SdrMarkList * pMarkList(0); + rContext.GetSelections(pSelFmt, pMarkList); + + if (pSelFmt) // select frame + { + if (RES_DRAWFRMFMT == pSelFmt->Which()) + { + SdrObject* pSObj = pSelFmt->FindSdrObject(); + static_cast<SwFEShell*>(this)->SelectObj( + pSObj->GetCurrentBoundRect().Center() ); + } + else + { + Point aPt; + SwFlyFrm *const pFly = + static_cast<SwFlyFrmFmt*>(pSelFmt)->GetFrm(& aPt, false); + if (pFly) + { + static_cast<SwFEShell*>(this)->SelectFlyFrm(*pFly, true); + } + } + } + else if (pMarkList) + { + lcl_SelectSdrMarkList( this, pMarkList ); + } + else if (GetCrsr()->GetNext() != GetCrsr()) + { + // current cursor is the last one: + // go around the ring, to the first cursor + GoNextCrsr(); + } +} -BOOL SwEditShell::Undo( SwUndoId nUndoId, USHORT nCnt ) +bool SwEditShell::Undo(USHORT const nCount) { SET_CURR_SHELL( this ); // #105332# current undo state was not saved + ::sw::UndoGuard const undoGuard(GetDoc()->GetIDocumentUndoRedo()); BOOL bRet = FALSE; - BOOL bSaveDoesUndo = GetDoc()->DoesUndo(); - GetDoc()->DoUndo( FALSE ); StartAllAction(); { // eigentlich muesste ja nur der aktuelle Cursor berarbeitet @@ -69,8 +119,9 @@ BOOL SwEditShell::Undo( SwUndoId nUndoId, USHORT nCnt ) // JP 02.04.98: Cursor merken - beim Auto-Format/-Korrektur // soll dieser wieder an die Position - SwUndoId nLastUndoId = GetDoc()->GetUndoIds(NULL, NULL); - BOOL bRestoreCrsr = 1 == nCnt && ( UNDO_AUTOFORMAT == nLastUndoId || + SwUndoId nLastUndoId(UNDO_EMPTY); + GetDoc()->GetIDocumentUndoRedo().GetLastUndoInfo(0, & nLastUndoId); + bool bRestoreCrsr = 1 == nCount && (UNDO_AUTOFORMAT == nLastUndoId || UNDO_AUTOCORRECT == nLastUndoId ); Push(); @@ -80,51 +131,19 @@ BOOL SwEditShell::Undo( SwUndoId nUndoId, USHORT nCnt ) RedlineMode_t eOld = GetDoc()->GetRedlineMode(); - SwUndoIter aUndoIter( GetCrsr(), nUndoId ); - while( nCnt-- ) - { - do { - - bRet = GetDoc()->Undo( aUndoIter ) || bRet; - - if( !aUndoIter.IsNextUndo() ) - break; - - // es geht weiter, also erzeuge einen neuen Cursor wenn - // der alte schon eine Selection hat - // JP 02.04.98: aber nicht wenns ein Autoformat ist - if( !bRestoreCrsr && HasSelection() ) - { - CreateCrsr(); - aUndoIter.pAktPam = GetCrsr(); - } - } while( TRUE ); - } - - Pop( !bRestoreCrsr ); - - if( aUndoIter.pSelFmt ) // dann erzeuge eine Rahmen-Selection - { - if( RES_DRAWFRMFMT == aUndoIter.pSelFmt->Which() ) + try { + for (USHORT i = 0; i < nCount; ++i) { - SdrObject* pSObj = aUndoIter.pSelFmt->FindSdrObject(); - ((SwFEShell*)this)->SelectObj( pSObj->GetCurrentBoundRect().Center() ); + bRet = GetDoc()->GetIDocumentUndoRedo().Undo() + || bRet; } - else - { - Point aPt; - SwFlyFrm* pFly = ((SwFlyFrmFmt*)aUndoIter.pSelFmt)->GetFrm( - &aPt, FALSE ); - if( pFly ) - ((SwFEShell*)this)->SelectFlyFrm( *pFly, TRUE ); - } - } - else if( aUndoIter.pMarkList ) - { - lcl_SelectSdrMarkList( this, aUndoIter.pMarkList ); + } catch (::com::sun::star::uno::Exception & e) { + OSL_TRACE("SwEditShell::Undo(): exception caught:\n %s", + ::rtl::OUStringToOString(e.Message, RTL_TEXTENCODING_UTF8) + .getStr()); } - else if( GetCrsr()->GetNext() != GetCrsr() ) // gehe nach einem - GoNextCrsr(); // Undo zur alten Undo-Position !! + + Pop( !bRestoreCrsr ); GetDoc()->SetRedlineMode( eOld ); GetDoc()->CompressRedlines(); @@ -134,21 +153,18 @@ BOOL SwEditShell::Undo( SwUndoId nUndoId, USHORT nCnt ) } EndAllAction(); - // #105332# undo state was not restored but set to FALSE everytime - GetDoc()->DoUndo( bSaveDoesUndo ); return bRet; } -USHORT SwEditShell::Redo( USHORT nCnt ) +bool SwEditShell::Redo(USHORT const nCount) { SET_CURR_SHELL( this ); BOOL bRet = FALSE; // #105332# undo state was not saved - BOOL bSaveDoesUndo = GetDoc()->DoesUndo(); + ::sw::UndoGuard const undoGuard(GetDoc()->GetIDocumentUndoRedo()); - GetDoc()->DoUndo( FALSE ); StartAllAction(); { @@ -166,51 +182,17 @@ USHORT SwEditShell::Redo( USHORT nCnt ) RedlineMode_t eOld = GetDoc()->GetRedlineMode(); - SwUndoIter aUndoIter( GetCrsr(), UNDO_EMPTY ); - while( nCnt-- ) - { - do { - - bRet = GetDoc()->Redo( aUndoIter ) || bRet; - - if( !aUndoIter.IsNextUndo() ) - break; - - // es geht weiter, also erzeugen einen neuen Cursor wenn - // der alte schon eine SSelection hat - if( HasSelection() ) - { - CreateCrsr(); - aUndoIter.pAktPam = GetCrsr(); - } - } while( TRUE ); - } - - if( aUndoIter.IsUpdateAttr() ) - UpdateAttr(); - - if( aUndoIter.pSelFmt ) // dann erzeuge eine Rahmen-Selection - { - if( RES_DRAWFRMFMT == aUndoIter.pSelFmt->Which() ) + try { + for (USHORT i = 0; i < nCount; ++i) { - SdrObject* pSObj = aUndoIter.pSelFmt->FindSdrObject(); - ((SwFEShell*)this)->SelectObj( pSObj->GetCurrentBoundRect().Center() ); + bRet = GetDoc()->GetIDocumentUndoRedo().Redo() + || bRet; } - else - { - Point aPt; - SwFlyFrm* pFly = ((SwFlyFrmFmt*)aUndoIter.pSelFmt)->GetFrm( - &aPt, FALSE ); - if( pFly ) - ((SwFEShell*)this)->SelectFlyFrm( *pFly, TRUE ); - } - } - else if( aUndoIter.pMarkList ) - { - lcl_SelectSdrMarkList( this, aUndoIter.pMarkList ); + } catch (::com::sun::star::uno::Exception & e) { + OSL_TRACE("SwEditShell::Redo(): exception caught:\n %s", + ::rtl::OUStringToOString(e.Message, RTL_TEXTENCODING_UTF8) + .getStr()); } - else if( GetCrsr()->GetNext() != GetCrsr() ) // gehe nach einem - GoNextCrsr(); // Redo zur alten Undo-Position !! GetDoc()->SetRedlineMode( eOld ); GetDoc()->CompressRedlines(); @@ -221,41 +203,31 @@ USHORT SwEditShell::Redo( USHORT nCnt ) EndAllAction(); - // #105332# undo state was not restored but set FALSE everytime - GetDoc()->DoUndo( bSaveDoesUndo ); return bRet; } -USHORT SwEditShell::Repeat( USHORT nCount ) +bool SwEditShell::Repeat(USHORT const nCount) { SET_CURR_SHELL( this ); BOOL bRet = FALSE; StartAllAction(); - SwUndoIter aUndoIter( GetCrsr(), UNDO_EMPTY ); - bRet = GetDoc()->Repeat( aUndoIter, nCount ) || bRet; + try { + ::sw::RepeatContext context(*GetDoc(), *GetCrsr()); + bRet = GetDoc()->GetIDocumentUndoRedo().Repeat( context, nCount ) + || bRet; + } catch (::com::sun::star::uno::Exception & e) { + OSL_TRACE("SwEditShell::Repeat(): exception caught:\n %s", + ::rtl::OUStringToOString(e.Message, RTL_TEXTENCODING_UTF8) + .getStr()); + } EndAllAction(); return bRet; } - // abfragen/setzen der Anzahl von wiederherstellbaren Undo-Actions - -USHORT SwEditShell::GetUndoActionCount() -{ - return SwDoc::GetUndoActionCount(); -} - - -void SwEditShell::SetUndoActionCount( USHORT nNew ) -{ - SwDoc::SetUndoActionCount( nNew ); -} - - - void lcl_SelectSdrMarkList( SwEditShell* pShell, const SdrMarkList* pSdrMarkList ) diff --git a/sw/source/core/edit/edws.cxx b/sw/source/core/edit/edws.cxx index 81088bcc0e56..1a681ad2cf29 100644 --- a/sw/source/core/edit/edws.cxx +++ b/sw/source/core/edit/edws.cxx @@ -28,12 +28,11 @@ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sw.hxx" - - - #include <vcl/window.hxx> + #include <editsh.hxx> #include <doc.hxx> +#include <IDocumentUndoRedo.hxx> #include <pam.hxx> #include <docary.hxx> #include <acorrect.hxx> @@ -59,7 +58,7 @@ SwEditShell::SwEditShell( SwEditShell& rEdSH, Window *pWindow ) SwEditShell::SwEditShell( SwDoc& rDoc, Window *pWindow, const SwViewOption *pOptions ) : SwCrsrShell( rDoc, pWindow, pOptions ) { - GetDoc()->DoUndo(true); + GetDoc()->GetIDocumentUndoRedo().DoUndo(true); } @@ -98,7 +97,7 @@ void SwEditShell::ResetModified() void SwEditShell::SetUndoNoResetModified() { GetDoc()->SetModified(); - GetDoc()->SetUndoNoResetModified(); + GetDoc()->GetIDocumentUndoRedo().SetUndoNoResetModified(); } /****************************************************************************** @@ -261,24 +260,24 @@ void SwEditShell::InsertTOXType(const SwTOXType& rTyp) void SwEditShell::DoUndo( sal_Bool bOn ) -{ GetDoc()->DoUndo( bOn ); } +{ GetDoc()->GetIDocumentUndoRedo().DoUndo( bOn ); } sal_Bool SwEditShell::DoesUndo() const -{ return GetDoc()->DoesUndo(); } +{ return GetDoc()->GetIDocumentUndoRedo().DoesUndo(); } void SwEditShell::DoGroupUndo( sal_Bool bOn ) -{ GetDoc()->DoGroupUndo( bOn ); } +{ GetDoc()->GetIDocumentUndoRedo().DoGroupUndo( bOn ); } sal_Bool SwEditShell::DoesGroupUndo() const -{ return GetDoc()->DoesGroupUndo(); } +{ return GetDoc()->GetIDocumentUndoRedo().DoesGroupUndo(); } void SwEditShell::DelAllUndoObj() { - GetDoc()->DelAllUndoObj(); + GetDoc()->GetIDocumentUndoRedo().DelAllUndoObj(); } // Zusammenfassen von Kontinuierlichen Insert/Delete/Overwrite von @@ -289,44 +288,25 @@ void SwEditShell::DelAllUndoObj() SwUndoId SwEditShell::StartUndo( SwUndoId eUndoId, const SwRewriter *pRewriter ) -{ return GetDoc()->StartUndo( eUndoId, pRewriter ); } +{ return GetDoc()->GetIDocumentUndoRedo().StartUndo( eUndoId, pRewriter ); } // schliesst Klammerung der nUndoId, nicht vom UI benutzt SwUndoId SwEditShell::EndUndo(SwUndoId eUndoId, const SwRewriter *pRewriter) -{ return GetDoc()->EndUndo(eUndoId, pRewriter); } - -// liefert die Id der letzten undofaehigen Aktion zurueck -// fuellt ggf. VARARR mit sdbcx::User-UndoIds - - -SwUndoId SwEditShell::GetUndoIds(String* pStr,SwUndoIds *pUndoIds) const -{ return GetDoc()->GetUndoIds(pStr,pUndoIds); } - -String SwEditShell::GetUndoIdsStr(String* pStr,SwUndoIds *pUndoIds) const -{ return GetDoc()->GetUndoIdsStr(pStr,pUndoIds); } - -// liefert die Id der letzten Redofaehigen Aktion zurueck -// fuellt ggf. VARARR mit RedoIds - - -SwUndoId SwEditShell::GetRedoIds(String* pStr,SwUndoIds *pRedoIds) const -{ return GetDoc()->GetRedoIds(pStr,pRedoIds); } - -String SwEditShell::GetRedoIdsStr(String* pStr,SwUndoIds *pRedoIds) const -{ return GetDoc()->GetRedoIdsStr(pStr,pRedoIds); } +{ return GetDoc()->GetIDocumentUndoRedo().EndUndo(eUndoId, pRewriter); } -// liefert die Id der letzten Repeatfaehigen Aktion zurueck -// fuellt ggf. VARARR mit RedoIds +bool SwEditShell::GetLastUndoInfo(::rtl::OUString *const o_pStr, + SwUndoId *const o_pId) const +{ return GetDoc()->GetIDocumentUndoRedo().GetLastUndoInfo(o_pStr, o_pId); } -SwUndoId SwEditShell::GetRepeatIds(String* pStr, SwUndoIds *pRedoIds) const -{ return GetDoc()->GetRepeatIds(pStr,pRedoIds); } +bool SwEditShell::GetFirstRedoInfo(::rtl::OUString *const o_pStr) const +{ return GetDoc()->GetIDocumentUndoRedo().GetFirstRedoInfo(o_pStr); } -String SwEditShell::GetRepeatIdsStr(String* pStr, SwUndoIds *pRedoIds) const -{ return GetDoc()->GetRepeatIdsStr(pStr,pRedoIds); } +SwUndoId SwEditShell::GetRepeatInfo(::rtl::OUString *const o_pStr) const +{ return GetDoc()->GetIDocumentUndoRedo().GetRepeatInfo(o_pStr); } |