LCOV - code coverage report
Current view: top level - sc/source/ui/undo - undocell.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 95 541 17.6 %
Date: 2014-11-03 Functions: 37 162 22.8 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include "undocell.hxx"
      21             : 
      22             : #include "scitems.hxx"
      23             : #include <editeng/eeitem.hxx>
      24             : #include <editeng/editobj.hxx>
      25             : #include <svl/zforlist.hxx>
      26             : #include <svl/sharedstringpool.hxx>
      27             : #include <sfx2/app.hxx>
      28             : 
      29             : #include "document.hxx"
      30             : #include "docpool.hxx"
      31             : #include "patattr.hxx"
      32             : #include "docsh.hxx"
      33             : #include "tabvwsh.hxx"
      34             : #include "globstr.hrc"
      35             : #include "global.hxx"
      36             : #include "formulacell.hxx"
      37             : #include "target.hxx"
      38             : #include "undoolk.hxx"
      39             : #include "detdata.hxx"
      40             : #include "stlpool.hxx"
      41             : #include "printfun.hxx"
      42             : #include "rangenam.hxx"
      43             : #include "chgtrack.hxx"
      44             : #include "sc.hrc"
      45             : #include "docuno.hxx"
      46             : #include "stringutil.hxx"
      47             : 
      48             : using ::boost::shared_ptr;
      49             : 
      50             : namespace HelperNotifyChanges
      51             : {
      52           0 :     void NotifyIfChangesListeners(ScDocShell& rDocShell, const ScAddress &rPos,
      53             :         const ScUndoEnterData::ValuesType &rOldValues, const OUString &rType = OUString("cell-change"))
      54             :     {
      55           0 :         if (ScModelObj* pModelObj = getMustPropagateChangesModel(rDocShell))
      56             :         {
      57           0 :             ScRangeList aChangeRanges;
      58             : 
      59           0 :             for (size_t i = 0, n = rOldValues.size(); i < n; ++i)
      60             :             {
      61           0 :                 aChangeRanges.Append( ScRange(rPos.Col(), rPos.Row(), rOldValues[i].mnTab));
      62             :             }
      63             : 
      64           0 :             Notify(*pModelObj, aChangeRanges, rType);
      65             :         }
      66           0 :     }
      67             : }
      68             : 
      69           0 : TYPEINIT1(ScUndoCursorAttr, ScSimpleUndo);
      70           0 : TYPEINIT1(ScUndoEnterData, ScSimpleUndo);
      71           0 : TYPEINIT1(ScUndoEnterValue, ScSimpleUndo);
      72           0 : TYPEINIT1(ScUndoSetCell, ScSimpleUndo);
      73           0 : TYPEINIT1(ScUndoPageBreak, ScSimpleUndo);
      74           0 : TYPEINIT1(ScUndoPrintZoom, ScSimpleUndo);
      75           0 : TYPEINIT1(ScUndoThesaurus, ScSimpleUndo);
      76           0 : TYPEINIT1(ScUndoReplaceNote, ScSimpleUndo);
      77           0 : TYPEINIT1(ScUndoShowHideNote, ScSimpleUndo);
      78           0 : TYPEINIT1(ScUndoDetective, ScSimpleUndo);
      79           0 : TYPEINIT1(ScUndoRangeNames, ScSimpleUndo);
      80             : 
      81           0 : ScUndoCursorAttr::ScUndoCursorAttr( ScDocShell* pNewDocShell,
      82             :             SCCOL nNewCol, SCROW nNewRow, SCTAB nNewTab,
      83             :             const ScPatternAttr* pOldPat, const ScPatternAttr* pNewPat,
      84             :             const ScPatternAttr* pApplyPat, bool bAutomatic ) :
      85             :     ScSimpleUndo( pNewDocShell ),
      86             :     nCol( nNewCol ),
      87             :     nRow( nNewRow ),
      88             :     nTab( nNewTab ),
      89             :     pOldEditData( static_cast<EditTextObject*>(NULL) ),
      90             :     pNewEditData( static_cast<EditTextObject*>(NULL) ),
      91           0 :     bIsAutomatic( bAutomatic )
      92             : {
      93           0 :     ScDocumentPool* pPool = pDocShell->GetDocument().GetPool();
      94           0 :     pNewPattern = const_cast<ScPatternAttr*>(static_cast<const ScPatternAttr*>( &pPool->Put( *pNewPat ) ));
      95           0 :     pOldPattern = const_cast<ScPatternAttr*>(static_cast<const ScPatternAttr*>( &pPool->Put( *pOldPat ) ));
      96           0 :     pApplyPattern = const_cast<ScPatternAttr*>(static_cast<const ScPatternAttr*>( &pPool->Put( *pApplyPat ) ));
      97           0 : }
      98             : 
      99           0 : ScUndoCursorAttr::~ScUndoCursorAttr()
     100             : {
     101           0 :     ScDocumentPool* pPool = pDocShell->GetDocument().GetPool();
     102           0 :     pPool->Remove(*pNewPattern);
     103           0 :     pPool->Remove(*pOldPattern);
     104           0 :     pPool->Remove(*pApplyPattern);
     105           0 : }
     106             : 
     107           0 : OUString ScUndoCursorAttr::GetComment() const
     108             : {
     109             :     //! own text for automatic attribution
     110             : 
     111           0 :     sal_uInt16 nId = STR_UNDO_CURSORATTR;        // "Attribute"
     112           0 :     return ScGlobal::GetRscString( nId );
     113             : }
     114             : 
     115           0 : void ScUndoCursorAttr::SetEditData( EditTextObject* pOld, EditTextObject* pNew )
     116             : {
     117           0 :     pOldEditData.reset(pOld);
     118           0 :     pNewEditData.reset(pNew);
     119           0 : }
     120             : 
     121           0 : void ScUndoCursorAttr::DoChange( const ScPatternAttr* pWhichPattern, const shared_ptr<EditTextObject>& pEditData ) const
     122             : {
     123           0 :     ScDocument& rDoc = pDocShell->GetDocument();
     124           0 :     ScAddress aPos(nCol, nRow, nTab);
     125           0 :     rDoc.SetPattern( nCol, nRow, nTab, *pWhichPattern, true );
     126             : 
     127           0 :     if (rDoc.GetCellType(aPos) == CELLTYPE_EDIT && pEditData)
     128           0 :         rDoc.SetEditText(aPos, *pEditData, NULL);
     129             : 
     130           0 :     ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
     131           0 :     if (pViewShell)
     132             :     {
     133           0 :         pViewShell->SetTabNo( nTab );
     134           0 :         pViewShell->MoveCursorAbs( nCol, nRow, SC_FOLLOW_JUMP, false, false );
     135           0 :         pViewShell->AdjustBlockHeight();
     136             :     }
     137             : 
     138           0 :     const SfxItemSet& rApplySet = pApplyPattern->GetItemSet();
     139           0 :     bool bPaintExt = ( rApplySet.GetItemState( ATTR_SHADOW, true ) != SfxItemState::DEFAULT ||
     140           0 :                        rApplySet.GetItemState( ATTR_CONDITIONAL, true ) != SfxItemState::DEFAULT );
     141           0 :     bool bPaintRows = ( rApplySet.GetItemState( ATTR_HOR_JUSTIFY, true ) != SfxItemState::DEFAULT );
     142             : 
     143           0 :     sal_uInt16 nFlags = SC_PF_TESTMERGE;
     144           0 :     if (bPaintExt)
     145           0 :         nFlags |= SC_PF_LINES;
     146           0 :     if (bPaintRows)
     147           0 :         nFlags |= SC_PF_WHOLEROWS;
     148           0 :     pDocShell->PostPaint( nCol,nRow,nTab, nCol,nRow,nTab, PAINT_GRID, nFlags );
     149           0 : }
     150             : 
     151           0 : void ScUndoCursorAttr::Undo()
     152             : {
     153           0 :     BeginUndo();
     154           0 :     DoChange(pOldPattern, pOldEditData);
     155             : 
     156           0 :     if ( bIsAutomatic )
     157             :     {
     158             :         // if automatic formatting is reversed, then
     159             :         // automatic formatting should also not continue to be done
     160             : 
     161           0 :         ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
     162           0 :         if (pViewShell)
     163           0 :             pViewShell->ForgetFormatArea();
     164             :     }
     165             : 
     166           0 :     EndUndo();
     167           0 : }
     168             : 
     169           0 : void ScUndoCursorAttr::Redo()
     170             : {
     171           0 :     BeginRedo();
     172           0 :     DoChange(pNewPattern, pNewEditData);
     173           0 :     EndRedo();
     174           0 : }
     175             : 
     176           0 : void ScUndoCursorAttr::Repeat(SfxRepeatTarget& rTarget)
     177             : {
     178           0 :     if (rTarget.ISA(ScTabViewTarget))
     179           0 :         static_cast<ScTabViewTarget&>(rTarget).GetViewShell()->ApplySelectionPattern( *pApplyPattern );
     180           0 : }
     181             : 
     182           0 : bool ScUndoCursorAttr::CanRepeat(SfxRepeatTarget& rTarget) const
     183             : {
     184           0 :     return rTarget.ISA(ScTabViewTarget);
     185             : }
     186             : 
     187        2330 : ScUndoEnterData::Value::Value() : mnTab(-1), mbHasFormat(false), mnFormat(0) {}
     188             : 
     189        2330 : ScUndoEnterData::ScUndoEnterData(
     190             :     ScDocShell* pNewDocShell, const ScAddress& rPos, ValuesType& rOldValues,
     191             :     const OUString& rNewStr, EditTextObject* pObj ) :
     192             :     ScSimpleUndo( pNewDocShell ),
     193             :     maNewString(rNewStr),
     194             :     mpNewEditData(pObj),
     195             :     mnEndChangeAction(0),
     196        2330 :     maPos(rPos)
     197             : {
     198        2330 :     maOldValues.swap(rOldValues);
     199             : 
     200        2330 :     SetChangeTrack();
     201        2330 : }
     202             : 
     203        4660 : ScUndoEnterData::~ScUndoEnterData() {}
     204             : 
     205        2338 : OUString ScUndoEnterData::GetComment() const
     206             : {
     207        2338 :     return ScGlobal::GetRscString( STR_UNDO_ENTERDATA ); // "Input"
     208             : }
     209             : 
     210           0 : void ScUndoEnterData::DoChange() const
     211             : {
     212             :     // only when needed (old or new Edit cell, or Attribute)?
     213           0 :     for (size_t i = 0, n = maOldValues.size(); i < n; ++i)
     214           0 :         pDocShell->AdjustRowHeight(maPos.Row(), maPos.Row(), maOldValues[i].mnTab);
     215             : 
     216           0 :     ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
     217           0 :     if (pViewShell)
     218             :     {
     219           0 :         pViewShell->SetTabNo(maPos.Tab());
     220           0 :         pViewShell->MoveCursorAbs(maPos.Col(), maPos.Row(), SC_FOLLOW_JUMP, false, false);
     221             :     }
     222             : 
     223           0 :     pDocShell->PostDataChanged();
     224           0 : }
     225             : 
     226        2330 : void ScUndoEnterData::SetChangeTrack()
     227             : {
     228        2330 :     ScChangeTrack* pChangeTrack = pDocShell->GetDocument().GetChangeTrack();
     229        2330 :     if ( pChangeTrack )
     230             :     {
     231           0 :         mnEndChangeAction = pChangeTrack->GetActionMax() + 1;
     232           0 :         ScAddress aPos(maPos);
     233           0 :         for (size_t i = 0, n = maOldValues.size(); i < n; ++i)
     234             :         {
     235           0 :             aPos.SetTab(maOldValues[i].mnTab);
     236           0 :             sal_uLong nFormat = 0;
     237           0 :             if (maOldValues[i].mbHasFormat)
     238           0 :                 nFormat = maOldValues[i].mnFormat;
     239           0 :             pChangeTrack->AppendContent(aPos, maOldValues[i].maCell, nFormat);
     240             :         }
     241           0 :         if ( mnEndChangeAction > pChangeTrack->GetActionMax() )
     242           0 :             mnEndChangeAction = 0;       // nothing is appended
     243             :     }
     244             :     else
     245        2330 :         mnEndChangeAction = 0;
     246        2330 : }
     247             : 
     248           0 : void ScUndoEnterData::Undo()
     249             : {
     250           0 :     BeginUndo();
     251             : 
     252           0 :     ScDocument& rDoc = pDocShell->GetDocument();
     253           0 :     for (size_t i = 0, n = maOldValues.size(); i < n; ++i)
     254             :     {
     255           0 :         Value& rVal = maOldValues[i];
     256           0 :         ScCellValue aNewCell;
     257           0 :         aNewCell.assign(rVal.maCell, rDoc, SC_CLONECELL_STARTLISTENING);
     258           0 :         ScAddress aPos = maPos;
     259           0 :         aPos.SetTab(rVal.mnTab);
     260           0 :         aNewCell.release(rDoc, aPos);
     261             : 
     262           0 :         if (rVal.mbHasFormat)
     263           0 :             rDoc.ApplyAttr(maPos.Col(), maPos.Row(), rVal.mnTab,
     264           0 :                             SfxUInt32Item(ATTR_VALUE_FORMAT, rVal.mnFormat));
     265             :         else
     266             :         {
     267           0 :             ScPatternAttr aPattern(*rDoc.GetPattern(maPos.Col(), maPos.Row(), rVal.mnTab));
     268           0 :             aPattern.GetItemSet().ClearItem( ATTR_VALUE_FORMAT );
     269           0 :             rDoc.SetPattern(maPos.Col(), maPos.Row(), rVal.mnTab, aPattern, true);
     270             :         }
     271           0 :         pDocShell->PostPaintCell(maPos.Col(), maPos.Row(), rVal.mnTab);
     272           0 :     }
     273             : 
     274           0 :     ScChangeTrack* pChangeTrack = rDoc.GetChangeTrack();
     275           0 :     size_t nCount = maOldValues.size();
     276           0 :     if ( pChangeTrack && mnEndChangeAction >= sal::static_int_cast<sal_uLong>(nCount) )
     277           0 :         pChangeTrack->Undo( mnEndChangeAction - nCount + 1, mnEndChangeAction );
     278             : 
     279           0 :     DoChange();
     280           0 :     EndUndo();
     281             : 
     282           0 :     HelperNotifyChanges::NotifyIfChangesListeners(*pDocShell, maPos, maOldValues);
     283           0 : }
     284             : 
     285           0 : void ScUndoEnterData::Redo()
     286             : {
     287           0 :     BeginRedo();
     288             : 
     289           0 :     ScDocument& rDoc = pDocShell->GetDocument();
     290           0 :     for (size_t i = 0, n = maOldValues.size(); i < n; ++i)
     291             :     {
     292           0 :         SCTAB nTab = maOldValues[i].mnTab;
     293           0 :         if (mpNewEditData)
     294             :         {
     295           0 :             ScAddress aPos = maPos;
     296           0 :             aPos.SetTab(nTab);
     297             :             // edit text wil be cloned.
     298           0 :             rDoc.SetEditText(aPos, *mpNewEditData, NULL);
     299             :         }
     300             :         else
     301           0 :             rDoc.SetString(maPos.Col(), maPos.Row(), nTab, maNewString);
     302             : 
     303           0 :         pDocShell->PostPaintCell(maPos.Col(), maPos.Row(), nTab);
     304             :     }
     305             : 
     306           0 :     SetChangeTrack();
     307             : 
     308           0 :     DoChange();
     309           0 :     EndRedo();
     310             : 
     311           0 :     HelperNotifyChanges::NotifyIfChangesListeners(*pDocShell, maPos, maOldValues);
     312           0 : }
     313             : 
     314           0 : void ScUndoEnterData::Repeat(SfxRepeatTarget& rTarget)
     315             : {
     316           0 :     if (rTarget.ISA(ScTabViewTarget))
     317             :     {
     318           0 :         OUString aTemp = maNewString;
     319           0 :         static_cast<ScTabViewTarget&>(rTarget).GetViewShell()->EnterDataAtCursor( aTemp );
     320             :     }
     321           0 : }
     322             : 
     323           4 : bool ScUndoEnterData::CanRepeat(SfxRepeatTarget& rTarget) const
     324             : {
     325           4 :     return rTarget.ISA(ScTabViewTarget);
     326             : }
     327             : 
     328           0 : ScUndoEnterValue::ScUndoEnterValue(
     329             :     ScDocShell* pNewDocShell, const ScAddress& rNewPos,
     330             :     const ScCellValue& rUndoCell, double nVal ) :
     331             :     ScSimpleUndo( pNewDocShell ),
     332             :     aPos        ( rNewPos ),
     333             :     maOldCell(rUndoCell),
     334           0 :     nValue      ( nVal )
     335             : {
     336           0 :     SetChangeTrack();
     337           0 : }
     338             : 
     339           0 : ScUndoEnterValue::~ScUndoEnterValue()
     340             : {
     341           0 : }
     342             : 
     343           0 : OUString ScUndoEnterValue::GetComment() const
     344             : {
     345           0 :     return ScGlobal::GetRscString( STR_UNDO_ENTERDATA ); // "Input"
     346             : }
     347             : 
     348           0 : void ScUndoEnterValue::SetChangeTrack()
     349             : {
     350           0 :     ScDocument& rDoc = pDocShell->GetDocument();
     351           0 :     ScChangeTrack* pChangeTrack = rDoc.GetChangeTrack();
     352           0 :     if ( pChangeTrack )
     353             :     {
     354           0 :         nEndChangeAction = pChangeTrack->GetActionMax() + 1;
     355           0 :         pChangeTrack->AppendContent(aPos, maOldCell);
     356           0 :         if ( nEndChangeAction > pChangeTrack->GetActionMax() )
     357           0 :             nEndChangeAction = 0;       // nothing is appended
     358             :     }
     359             :     else
     360           0 :         nEndChangeAction = 0;
     361           0 : }
     362             : 
     363           0 : void ScUndoEnterValue::Undo()
     364             : {
     365           0 :     BeginUndo();
     366             : 
     367           0 :     ScDocument& rDoc = pDocShell->GetDocument();
     368           0 :     ScCellValue aNewCell;
     369           0 :     aNewCell.assign(maOldCell, rDoc, SC_CLONECELL_STARTLISTENING);
     370           0 :     aNewCell.release(rDoc, aPos);
     371             : 
     372           0 :     pDocShell->PostPaintCell( aPos );
     373             : 
     374           0 :     ScChangeTrack* pChangeTrack = rDoc.GetChangeTrack();
     375           0 :     if ( pChangeTrack )
     376           0 :         pChangeTrack->Undo( nEndChangeAction, nEndChangeAction );
     377             : 
     378           0 :     EndUndo();
     379           0 : }
     380             : 
     381           0 : void ScUndoEnterValue::Redo()
     382             : {
     383           0 :     BeginRedo();
     384             : 
     385           0 :     ScDocument& rDoc = pDocShell->GetDocument();
     386           0 :     rDoc.SetValue( aPos.Col(), aPos.Row(), aPos.Tab(), nValue );
     387           0 :     pDocShell->PostPaintCell( aPos );
     388             : 
     389           0 :     SetChangeTrack();
     390             : 
     391           0 :     EndRedo();
     392           0 : }
     393             : 
     394           0 : void ScUndoEnterValue::Repeat(SfxRepeatTarget& /* rTarget */)
     395             : {
     396             :     // makes no sense
     397           0 : }
     398             : 
     399           0 : bool ScUndoEnterValue::CanRepeat(SfxRepeatTarget& /* rTarget */) const
     400             : {
     401           0 :     return false;
     402             : }
     403             : 
     404       10072 : ScUndoSetCell::ScUndoSetCell( ScDocShell* pDocSh, const ScAddress& rPos, const ScCellValue& rOldVal, const ScCellValue& rNewVal ) :
     405       10072 :     ScSimpleUndo(pDocSh), maPos(rPos), maOldValue(rOldVal), maNewValue(rNewVal), mnEndChangeAction(0)
     406             : {
     407       10072 :     SetChangeTrack();
     408       10072 : }
     409             : 
     410       20144 : ScUndoSetCell::~ScUndoSetCell() {}
     411             : 
     412           2 : void ScUndoSetCell::Undo()
     413             : {
     414           2 :     BeginUndo();
     415           2 :     SetValue(maOldValue);
     416           2 :     pDocShell->PostPaintCell(maPos);
     417             : 
     418           2 :     ScDocument& rDoc = pDocShell->GetDocument();
     419           2 :     ScChangeTrack* pChangeTrack = rDoc.GetChangeTrack();
     420           2 :     if (pChangeTrack)
     421           0 :         pChangeTrack->Undo(mnEndChangeAction, mnEndChangeAction);
     422             : 
     423           2 :     EndUndo();
     424           2 : }
     425             : 
     426           0 : void ScUndoSetCell::Redo()
     427             : {
     428           0 :     BeginRedo();
     429           0 :     SetValue(maNewValue);
     430           0 :     pDocShell->PostPaintCell(maPos);
     431           0 :     SetChangeTrack();
     432           0 :     EndRedo();
     433           0 : }
     434             : 
     435           0 : void ScUndoSetCell::Repeat( SfxRepeatTarget& /*rTarget*/ )
     436             : {
     437             :     // Makes no sense.
     438           0 : }
     439             : 
     440         166 : bool ScUndoSetCell::CanRepeat( SfxRepeatTarget& /*rTarget*/ ) const
     441             : {
     442         166 :     return false;
     443             : }
     444             : 
     445       10240 : OUString ScUndoSetCell::GetComment() const
     446             : {
     447       10240 :     return ScGlobal::GetRscString(STR_UNDO_ENTERDATA); // "Input"
     448             : }
     449             : 
     450       10072 : void ScUndoSetCell::SetChangeTrack()
     451             : {
     452       10072 :     ScDocument& rDoc = pDocShell->GetDocument();
     453       10072 :     ScChangeTrack* pChangeTrack = rDoc.GetChangeTrack();
     454       10072 :     if (pChangeTrack)
     455             :     {
     456           0 :         mnEndChangeAction = pChangeTrack->GetActionMax() + 1;
     457             : 
     458           0 :         pChangeTrack->AppendContent(maPos, maOldValue);
     459             : 
     460           0 :         if (mnEndChangeAction > pChangeTrack->GetActionMax())
     461           0 :             mnEndChangeAction = 0;       // Nothing is appended
     462             :     }
     463             :     else
     464       10072 :         mnEndChangeAction = 0;
     465       10072 : }
     466             : 
     467           2 : void ScUndoSetCell::SetValue( const ScCellValue& rVal )
     468             : {
     469           2 :     ScDocument& rDoc = pDocShell->GetDocument();
     470             : 
     471           2 :     switch (rVal.meType)
     472             :     {
     473             :         case CELLTYPE_NONE:
     474             :             // empty cell
     475           0 :             rDoc.SetEmptyCell(maPos);
     476           0 :         break;
     477             :         case CELLTYPE_VALUE:
     478           2 :             rDoc.SetValue(maPos, rVal.mfValue);
     479           2 :         break;
     480             :         case CELLTYPE_STRING:
     481             :         {
     482           0 :             ScSetStringParam aParam;
     483           0 :             aParam.setTextInput();
     484           0 :             rDoc.SetString(maPos, rVal.mpString->getString());
     485             :         }
     486           0 :         break;
     487             :         case CELLTYPE_EDIT:
     488           0 :             rDoc.SetEditText(maPos, rVal.mpEditText->Clone());
     489           0 :         break;
     490             :         case CELLTYPE_FORMULA:
     491           0 :             rDoc.SetFormulaCell(maPos, rVal.mpFormula->Clone());
     492           0 :         break;
     493             :         default:
     494             :             ;
     495             :     }
     496           2 : }
     497             : 
     498           8 : ScUndoPageBreak::ScUndoPageBreak( ScDocShell* pNewDocShell,
     499             :             SCCOL nNewCol, SCROW nNewRow, SCTAB nNewTab,
     500             :             bool bNewColumn, bool bNewInsert ) :
     501             :     ScSimpleUndo( pNewDocShell ),
     502             :     nCol( nNewCol ),
     503             :     nRow( nNewRow ),
     504             :     nTab( nNewTab ),
     505             :     bColumn( bNewColumn ),
     506           8 :     bInsert( bNewInsert )
     507             : {
     508           8 : }
     509             : 
     510          16 : ScUndoPageBreak::~ScUndoPageBreak()
     511             : {
     512          16 : }
     513             : 
     514           8 : OUString ScUndoPageBreak::GetComment() const
     515             : {
     516             :     //"Column break" | "Row break"  "insert" | "delete"
     517             :     return OUString ( bColumn ?
     518             :         ( bInsert ?
     519             :             ScGlobal::GetRscString( STR_UNDO_INSCOLBREAK ) :
     520             :             ScGlobal::GetRscString( STR_UNDO_DELCOLBREAK )
     521             :         ) :
     522             :         ( bInsert ?
     523             :             ScGlobal::GetRscString( STR_UNDO_INSROWBREAK ) :
     524             :             ScGlobal::GetRscString( STR_UNDO_DELROWBREAK )
     525           8 :         ) );
     526             : }
     527             : 
     528           0 : void ScUndoPageBreak::DoChange( bool bInsertP ) const
     529             : {
     530           0 :     ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
     531             : 
     532           0 :     if (pViewShell)
     533             :     {
     534           0 :         pViewShell->SetTabNo( nTab );
     535           0 :         pViewShell->MoveCursorAbs( nCol, nRow, SC_FOLLOW_JUMP, false, false );
     536             : 
     537           0 :         if (bInsertP)
     538           0 :             pViewShell->InsertPageBreak(bColumn, false);
     539             :         else
     540           0 :             pViewShell->DeletePageBreak(bColumn, false);
     541             : 
     542           0 :         pDocShell->GetDocument().InvalidatePageBreaks(nTab);
     543             :     }
     544           0 : }
     545             : 
     546           0 : void ScUndoPageBreak::Undo()
     547             : {
     548           0 :     BeginUndo();
     549           0 :     DoChange(!bInsert);
     550           0 :     EndUndo();
     551           0 : }
     552             : 
     553           0 : void ScUndoPageBreak::Redo()
     554             : {
     555           0 :     BeginRedo();
     556           0 :     DoChange(bInsert);
     557           0 :     EndRedo();
     558           0 : }
     559             : 
     560           0 : void ScUndoPageBreak::Repeat(SfxRepeatTarget& rTarget)
     561             : {
     562           0 :     if (rTarget.ISA(ScTabViewTarget))
     563             :     {
     564           0 :         ScTabViewShell& rViewShell = *static_cast<ScTabViewTarget&>(rTarget).GetViewShell();
     565             : 
     566           0 :         if (bInsert)
     567           0 :             rViewShell.InsertPageBreak(bColumn, true);
     568             :         else
     569           0 :             rViewShell.DeletePageBreak(bColumn, true);
     570             :     }
     571           0 : }
     572             : 
     573           0 : bool ScUndoPageBreak::CanRepeat(SfxRepeatTarget& rTarget) const
     574             : {
     575           0 :     return rTarget.ISA(ScTabViewTarget);
     576             : }
     577             : 
     578           0 : ScUndoPrintZoom::ScUndoPrintZoom( ScDocShell* pNewDocShell,
     579             :             SCTAB nT, sal_uInt16 nOS, sal_uInt16 nOP, sal_uInt16 nNS, sal_uInt16 nNP ) :
     580             :     ScSimpleUndo( pNewDocShell ),
     581             :     nTab( nT ),
     582             :     nOldScale( nOS ),
     583             :     nOldPages( nOP ),
     584             :     nNewScale( nNS ),
     585           0 :     nNewPages( nNP )
     586             : {
     587           0 : }
     588             : 
     589           0 : ScUndoPrintZoom::~ScUndoPrintZoom()
     590             : {
     591           0 : }
     592             : 
     593           0 : OUString ScUndoPrintZoom::GetComment() const
     594             : {
     595           0 :     return ScGlobal::GetRscString( STR_UNDO_PRINTSCALE );
     596             : }
     597             : 
     598           0 : void ScUndoPrintZoom::DoChange( bool bUndo )
     599             : {
     600           0 :     sal_uInt16 nScale = bUndo ? nOldScale : nNewScale;
     601           0 :     sal_uInt16 nPages = bUndo ? nOldPages : nNewPages;
     602             : 
     603           0 :     ScDocument& rDoc = pDocShell->GetDocument();
     604           0 :     OUString aStyleName = rDoc.GetPageStyle( nTab );
     605           0 :     ScStyleSheetPool* pStylePool = rDoc.GetStyleSheetPool();
     606           0 :     SfxStyleSheetBase* pStyleSheet = pStylePool->Find( aStyleName, SFX_STYLE_FAMILY_PAGE );
     607             :     OSL_ENSURE( pStyleSheet, "PageStyle not found" );
     608           0 :     if ( pStyleSheet )
     609             :     {
     610           0 :         SfxItemSet& rSet = pStyleSheet->GetItemSet();
     611           0 :         rSet.Put( SfxUInt16Item( ATTR_PAGE_SCALE, nScale ) );
     612           0 :         rSet.Put( SfxUInt16Item( ATTR_PAGE_SCALETOPAGES, nPages ) );
     613             : 
     614           0 :         ScPrintFunc aPrintFunc( pDocShell, pDocShell->GetPrinter(), nTab );
     615           0 :         aPrintFunc.UpdatePages();
     616           0 :     }
     617           0 : }
     618             : 
     619           0 : void ScUndoPrintZoom::Undo()
     620             : {
     621           0 :     BeginUndo();
     622           0 :     DoChange(true);
     623           0 :     EndUndo();
     624           0 : }
     625             : 
     626           0 : void ScUndoPrintZoom::Redo()
     627             : {
     628           0 :     BeginRedo();
     629           0 :     DoChange(false);
     630           0 :     EndRedo();
     631           0 : }
     632             : 
     633           0 : void ScUndoPrintZoom::Repeat(SfxRepeatTarget& rTarget)
     634             : {
     635           0 :     if (rTarget.ISA(ScTabViewTarget))
     636             :     {
     637           0 :         ScTabViewShell& rViewShell = *static_cast<ScTabViewTarget&>(rTarget).GetViewShell();
     638           0 :         ScViewData& rViewData = rViewShell.GetViewData();
     639           0 :         rViewData.GetDocShell()->SetPrintZoom( rViewData.GetTabNo(), nNewScale, nNewPages );
     640             :     }
     641           0 : }
     642             : 
     643           0 : bool ScUndoPrintZoom::CanRepeat(SfxRepeatTarget& rTarget) const
     644             : {
     645           0 :     return rTarget.ISA(ScTabViewTarget);
     646             : }
     647             : 
     648           0 : ScUndoThesaurus::ScUndoThesaurus(
     649             :     ScDocShell* pNewDocShell, SCCOL nNewCol, SCROW nNewRow, SCTAB nNewTab,
     650             :     const ScCellValue& rOldText, const ScCellValue& rNewText ) :
     651             :     ScSimpleUndo( pNewDocShell ),
     652             :     nCol( nNewCol ),
     653             :     nRow( nNewRow ),
     654             :     nTab( nNewTab ),
     655             :     maOldText(rOldText),
     656           0 :     maNewText(rNewText)
     657             : {
     658           0 :     SetChangeTrack(maOldText);
     659           0 : }
     660             : 
     661           0 : ScUndoThesaurus::~ScUndoThesaurus() {}
     662             : 
     663           0 : OUString ScUndoThesaurus::GetComment() const
     664             : {
     665           0 :     return ScGlobal::GetRscString( STR_UNDO_THESAURUS );    // "Thesaurus"
     666             : }
     667             : 
     668           0 : void ScUndoThesaurus::SetChangeTrack( const ScCellValue& rOldCell )
     669             : {
     670           0 :     ScChangeTrack* pChangeTrack = pDocShell->GetDocument().GetChangeTrack();
     671           0 :     if ( pChangeTrack )
     672             :     {
     673           0 :         nEndChangeAction = pChangeTrack->GetActionMax() + 1;
     674           0 :         pChangeTrack->AppendContent(ScAddress(nCol, nRow, nTab), rOldCell);
     675           0 :         if ( nEndChangeAction > pChangeTrack->GetActionMax() )
     676           0 :             nEndChangeAction = 0;       // nothing is appended
     677             :     }
     678             :     else
     679           0 :         nEndChangeAction = 0;
     680           0 : }
     681             : 
     682           0 : void ScUndoThesaurus::DoChange( bool bUndo, const ScCellValue& rText )
     683             : {
     684           0 :     ScDocument& rDoc = pDocShell->GetDocument();
     685             : 
     686           0 :     ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
     687           0 :     if (pViewShell)
     688             :     {
     689           0 :         pViewShell->SetTabNo( nTab );
     690           0 :         pViewShell->MoveCursorAbs( nCol, nRow, SC_FOLLOW_JUMP, false, false );
     691             :     }
     692             : 
     693           0 :     ScAddress aPos(nCol, nRow, nTab);
     694           0 :     rText.commit(rDoc, aPos);
     695           0 :     if (!bUndo)
     696           0 :         SetChangeTrack(maOldText);
     697             : 
     698           0 :     pDocShell->PostPaintCell( nCol, nRow, nTab );
     699           0 : }
     700             : 
     701           0 : void ScUndoThesaurus::Undo()
     702             : {
     703           0 :     BeginUndo();
     704           0 :     DoChange(true, maOldText);
     705           0 :     ScChangeTrack* pChangeTrack = pDocShell->GetDocument().GetChangeTrack();
     706           0 :     if ( pChangeTrack )
     707           0 :         pChangeTrack->Undo( nEndChangeAction, nEndChangeAction );
     708           0 :     EndUndo();
     709           0 : }
     710             : 
     711           0 : void ScUndoThesaurus::Redo()
     712             : {
     713           0 :     BeginRedo();
     714           0 :     DoChange(false, maNewText);
     715           0 :     EndRedo();
     716           0 : }
     717             : 
     718           0 : void ScUndoThesaurus::Repeat(SfxRepeatTarget& rTarget)
     719             : {
     720           0 :     if (rTarget.ISA(ScTabViewTarget))
     721           0 :         static_cast<ScTabViewTarget&>(rTarget).GetViewShell()->DoThesaurus( true );
     722           0 : }
     723             : 
     724           0 : bool ScUndoThesaurus::CanRepeat(SfxRepeatTarget& rTarget) const
     725             : {
     726           0 :     return rTarget.ISA(ScTabViewTarget);
     727             : }
     728             : 
     729           0 : ScUndoReplaceNote::ScUndoReplaceNote( ScDocShell& rDocShell, const ScAddress& rPos,
     730             :         const ScNoteData& rNoteData, bool bInsert, SdrUndoAction* pDrawUndo ) :
     731             :     ScSimpleUndo( &rDocShell ),
     732             :     maPos( rPos ),
     733           0 :     mpDrawUndo( pDrawUndo )
     734             : {
     735             :     OSL_ENSURE( rNoteData.mpCaption, "ScUndoReplaceNote::ScUndoReplaceNote - missing note caption" );
     736           0 :     (bInsert ? maNewData : maOldData) = rNoteData;
     737           0 : }
     738             : 
     739          26 : ScUndoReplaceNote::ScUndoReplaceNote( ScDocShell& rDocShell, const ScAddress& rPos,
     740             :         const ScNoteData& rOldData, const ScNoteData& rNewData, SdrUndoAction* pDrawUndo ) :
     741             :     ScSimpleUndo( &rDocShell ),
     742             :     maPos( rPos ),
     743             :     maOldData( rOldData ),
     744             :     maNewData( rNewData ),
     745          26 :     mpDrawUndo( pDrawUndo )
     746             : {
     747             :     OSL_ENSURE( maOldData.mpCaption || maNewData.mpCaption, "ScUndoReplaceNote::ScUndoReplaceNote - missing note captions" );
     748             :     OSL_ENSURE( !maOldData.mxInitData.get() && !maNewData.mxInitData.get(), "ScUndoReplaceNote::ScUndoReplaceNote - unexpected unitialized note" );
     749          26 : }
     750             : 
     751          78 : ScUndoReplaceNote::~ScUndoReplaceNote()
     752             : {
     753          26 :     DeleteSdrUndoAction( mpDrawUndo );
     754          52 : }
     755             : 
     756           0 : void ScUndoReplaceNote::Undo()
     757             : {
     758           0 :     BeginUndo();
     759           0 :     DoSdrUndoAction( mpDrawUndo, &pDocShell->GetDocument() );
     760             :     /*  Undo insert -> remove new note.
     761             :         Undo remove -> insert old note.
     762             :         Undo replace -> remove new note, insert old note. */
     763           0 :     DoRemoveNote( maNewData );
     764           0 :     DoInsertNote( maOldData );
     765           0 :     pDocShell->PostPaintCell( maPos );
     766           0 :     EndUndo();
     767           0 : }
     768             : 
     769           0 : void ScUndoReplaceNote::Redo()
     770             : {
     771           0 :     BeginRedo();
     772           0 :     RedoSdrUndoAction( mpDrawUndo );
     773             :     /*  Redo insert -> insert new note.
     774             :         Redo remove -> remove old note.
     775             :         Redo replace -> remove old note, insert new note. */
     776           0 :     DoRemoveNote( maOldData );
     777           0 :     DoInsertNote( maNewData );
     778           0 :     pDocShell->PostPaintCell( maPos );
     779           0 :     EndRedo();
     780           0 : }
     781             : 
     782           0 : void ScUndoReplaceNote::Repeat( SfxRepeatTarget& /*rTarget*/ )
     783             : {
     784           0 : }
     785             : 
     786           0 : bool ScUndoReplaceNote::CanRepeat( SfxRepeatTarget& /*rTarget*/ ) const
     787             : {
     788           0 :     return false;
     789             : }
     790             : 
     791          26 : OUString ScUndoReplaceNote::GetComment() const
     792             : {
     793             :     return ScGlobal::GetRscString( maNewData.mpCaption ?
     794          26 :         (maOldData.mpCaption ? STR_UNDO_EDITNOTE : STR_UNDO_INSERTNOTE) : STR_UNDO_DELETENOTE );
     795             : }
     796             : 
     797           0 : void ScUndoReplaceNote::DoInsertNote( const ScNoteData& rNoteData )
     798             : {
     799           0 :     if( rNoteData.mpCaption )
     800             :     {
     801           0 :         ScDocument& rDoc = pDocShell->GetDocument();
     802             :         OSL_ENSURE( !rDoc.GetNote(maPos), "ScUndoReplaceNote::DoInsertNote - unexpected cell note" );
     803           0 :         ScPostIt* pNote = new ScPostIt( rDoc, maPos, rNoteData, false );
     804           0 :         rDoc.SetNote( maPos, pNote );
     805             :     }
     806           0 : }
     807             : 
     808           0 : void ScUndoReplaceNote::DoRemoveNote( const ScNoteData& rNoteData )
     809             : {
     810           0 :     if( rNoteData.mpCaption )
     811             :     {
     812           0 :         ScDocument& rDoc = pDocShell->GetDocument();
     813             :         OSL_ENSURE( rDoc.GetNote(maPos), "ScUndoReplaceNote::DoRemoveNote - missing cell note" );
     814           0 :         if( ScPostIt* pNote = rDoc.ReleaseNote( maPos ) )
     815             :         {
     816             :             /*  Forget pointer to caption object to suppress removing the
     817             :                 caption object from the drawing layer while deleting pNote
     818             :                 (removing the caption is done by a drawing undo action). */
     819           0 :             pNote->ForgetCaption();
     820           0 :             delete pNote;
     821             :         }
     822             :     }
     823           0 : }
     824             : 
     825           2 : ScUndoShowHideNote::ScUndoShowHideNote( ScDocShell& rDocShell, const ScAddress& rPos, bool bShow ) :
     826             :     ScSimpleUndo( &rDocShell ),
     827             :     maPos( rPos ),
     828           2 :     mbShown( bShow )
     829             : {
     830           2 : }
     831             : 
     832           4 : ScUndoShowHideNote::~ScUndoShowHideNote()
     833             : {
     834           4 : }
     835             : 
     836           0 : void ScUndoShowHideNote::Undo()
     837             : {
     838           0 :     BeginUndo();
     839           0 :     if( ScPostIt* pNote = pDocShell->GetDocument().GetNote(maPos) )
     840           0 :         pNote->ShowCaption( maPos, !mbShown );
     841           0 :     EndUndo();
     842           0 : }
     843             : 
     844           0 : void ScUndoShowHideNote::Redo()
     845             : {
     846           0 :     BeginRedo();
     847           0 :     if( ScPostIt* pNote = pDocShell->GetDocument().GetNote(maPos) )
     848           0 :         pNote->ShowCaption( maPos, mbShown );
     849           0 :     EndRedo();
     850           0 : }
     851             : 
     852           0 : void ScUndoShowHideNote::Repeat( SfxRepeatTarget& /*rTarget*/ )
     853             : {
     854           0 : }
     855             : 
     856           0 : bool ScUndoShowHideNote::CanRepeat( SfxRepeatTarget& /*rTarget*/ ) const
     857             : {
     858           0 :     return false;
     859             : }
     860             : 
     861           2 : OUString ScUndoShowHideNote::GetComment() const
     862             : {
     863           2 :     return ScGlobal::GetRscString( mbShown ? STR_UNDO_SHOWNOTE : STR_UNDO_HIDENOTE );
     864             : }
     865             : 
     866           2 : ScUndoDetective::ScUndoDetective( ScDocShell* pNewDocShell,
     867             :                                     SdrUndoAction* pDraw, const ScDetOpData* pOperation,
     868             :                                     ScDetOpList* pUndoList ) :
     869             :     ScSimpleUndo( pNewDocShell ),
     870             :     pOldList    ( pUndoList ),
     871             :     nAction     ( 0 ),
     872           2 :     pDrawUndo   ( pDraw )
     873             : {
     874           2 :     bIsDelete = ( pOperation == NULL );
     875           2 :     if (!bIsDelete)
     876             :     {
     877           2 :         nAction = (sal_uInt16) pOperation->GetOperation();
     878           2 :         aPos = pOperation->GetPos();
     879             :     }
     880           2 : }
     881             : 
     882           6 : ScUndoDetective::~ScUndoDetective()
     883             : {
     884           2 :     DeleteSdrUndoAction( pDrawUndo );
     885           2 :     delete pOldList;
     886           4 : }
     887             : 
     888           2 : OUString ScUndoDetective::GetComment() const
     889             : {
     890           2 :     sal_uInt16 nId = STR_UNDO_DETDELALL;
     891           2 :     if ( !bIsDelete )
     892           2 :         switch ( (ScDetOpType) nAction )
     893             :         {
     894           0 :             case SCDETOP_ADDSUCC:   nId = STR_UNDO_DETADDSUCC;  break;
     895           0 :             case SCDETOP_DELSUCC:   nId = STR_UNDO_DETDELSUCC;  break;
     896           2 :             case SCDETOP_ADDPRED:   nId = STR_UNDO_DETADDPRED;  break;
     897           0 :             case SCDETOP_DELPRED:   nId = STR_UNDO_DETDELPRED;  break;
     898           0 :             case SCDETOP_ADDERROR:  nId = STR_UNDO_DETADDERROR; break;
     899             :         }
     900             : 
     901           2 :     return ScGlobal::GetRscString( nId );
     902             : }
     903             : 
     904           0 : void ScUndoDetective::Undo()
     905             : {
     906           0 :     BeginUndo();
     907             : 
     908           0 :     ScDocument& rDoc = pDocShell->GetDocument();
     909           0 :     DoSdrUndoAction(pDrawUndo, &rDoc);
     910             : 
     911           0 :     if (bIsDelete)
     912             :     {
     913           0 :         if ( pOldList )
     914           0 :             rDoc.SetDetOpList( new ScDetOpList(*pOldList) );
     915             :     }
     916             :     else
     917             :     {
     918             :         // Remove entry from list
     919             : 
     920           0 :         ScDetOpList* pList = rDoc.GetDetOpList();
     921           0 :         if (pList && pList->Count())
     922             :         {
     923           0 :             ScDetOpDataVector& rVec = pList->GetDataVector();
     924           0 :             ScDetOpDataVector::iterator it = rVec.begin() + rVec.size() - 1;
     925           0 :             if ( it->GetOperation() == (ScDetOpType) nAction && it->GetPos() == aPos )
     926           0 :                 rVec.erase( it);
     927             :             else
     928             :             {
     929             :                 OSL_FAIL("Detective entry could not be found in list");
     930             :             }
     931             :         }
     932             :     }
     933             : 
     934           0 :     ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
     935           0 :     if (pViewShell)
     936           0 :         pViewShell->RecalcPPT();    //! use broadcast instead?
     937             : 
     938           0 :     EndUndo();
     939           0 : }
     940             : 
     941           0 : void ScUndoDetective::Redo()
     942             : {
     943           0 :     BeginRedo();
     944             : 
     945           0 :     RedoSdrUndoAction(pDrawUndo);
     946             : 
     947           0 :     ScDocument& rDoc = pDocShell->GetDocument();
     948             : 
     949           0 :     if (bIsDelete)
     950           0 :         rDoc.ClearDetectiveOperations();
     951             :     else
     952           0 :         rDoc.AddDetectiveOperation( ScDetOpData( aPos, (ScDetOpType) nAction ) );
     953             : 
     954           0 :     ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
     955           0 :     if (pViewShell)
     956           0 :         pViewShell->RecalcPPT();    //! use broadcast instead?
     957             : 
     958           0 :     EndRedo();
     959           0 : }
     960             : 
     961           0 : void ScUndoDetective::Repeat(SfxRepeatTarget& /* rTarget */)
     962             : {
     963             :     // makes no sense
     964           0 : }
     965             : 
     966           0 : bool ScUndoDetective::CanRepeat(SfxRepeatTarget& /* rTarget */) const
     967             : {
     968           0 :     return false;
     969             : }
     970             : 
     971          62 : ScUndoRangeNames::ScUndoRangeNames( ScDocShell* pNewDocShell,
     972             :                                     ScRangeName* pOld, ScRangeName* pNew, SCTAB nTab ) :
     973             :     ScSimpleUndo( pNewDocShell ),
     974             :     pOldRanges  ( pOld ),
     975             :     pNewRanges  ( pNew ),
     976          62 :     mnTab       ( nTab )
     977             : {
     978          62 : }
     979             : 
     980         186 : ScUndoRangeNames::~ScUndoRangeNames()
     981             : {
     982          62 :     delete pOldRanges;
     983          62 :     delete pNewRanges;
     984         124 : }
     985             : 
     986          62 : OUString ScUndoRangeNames::GetComment() const
     987             : {
     988          62 :     return ScGlobal::GetRscString( STR_UNDO_RANGENAMES );
     989             : }
     990             : 
     991           0 : void ScUndoRangeNames::DoChange( bool bUndo )
     992             : {
     993           0 :     ScDocument& rDoc = pDocShell->GetDocument();
     994           0 :     rDoc.PreprocessRangeNameUpdate();
     995             : 
     996           0 :     if ( bUndo )
     997             :     {
     998           0 :         if (mnTab >= 0)
     999           0 :             rDoc.SetRangeName( mnTab, new ScRangeName( *pOldRanges ) );
    1000             :         else
    1001           0 :             rDoc.SetRangeName( new ScRangeName( *pOldRanges ) );
    1002             :     }
    1003             :     else
    1004             :     {
    1005           0 :         if (mnTab >= 0)
    1006           0 :             rDoc.SetRangeName( mnTab, new ScRangeName( *pNewRanges ) );
    1007             :         else
    1008           0 :             rDoc.SetRangeName( new ScRangeName( *pNewRanges ) );
    1009             :     }
    1010             : 
    1011           0 :     rDoc.CompileHybridFormula();
    1012             : 
    1013           0 :     SfxGetpApp()->Broadcast( SfxSimpleHint( SC_HINT_AREAS_CHANGED ) );
    1014           0 : }
    1015             : 
    1016           0 : void ScUndoRangeNames::Undo()
    1017             : {
    1018           0 :     BeginUndo();
    1019           0 :     DoChange( true );
    1020           0 :     EndUndo();
    1021           0 : }
    1022             : 
    1023           0 : void ScUndoRangeNames::Redo()
    1024             : {
    1025           0 :     BeginRedo();
    1026           0 :     DoChange( false );
    1027           0 :     EndRedo();
    1028           0 : }
    1029             : 
    1030           0 : void ScUndoRangeNames::Repeat(SfxRepeatTarget& /* rTarget */)
    1031             : {
    1032             :     // makes no sense
    1033           0 : }
    1034             : 
    1035           0 : bool ScUndoRangeNames::CanRepeat(SfxRepeatTarget& /* rTarget */) const
    1036             : {
    1037           0 :     return false;
    1038         228 : }
    1039             : 
    1040             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10