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 #pragma once 21 22 #include "undobase.hxx" 23 #include <tools/color.hxx> 24 #include <tabbgcolor.hxx> 25 26 #include <memory> 27 #include <vector> 28 29 class ScDocShell; 30 class SdrUndoAction; 31 class ScPrintRangeSaver; 32 class SdrObject; 33 class ScDocProtection; 34 class ScTableProtection; 35 class ScMarkData; 36 37 class ScUndoInsertTab : public ScSimpleUndo 38 { 39 public: 40 ScUndoInsertTab( 41 ScDocShell* pNewDocShell, 42 SCTAB nTabNum, 43 bool bApp, 44 const OUString& rNewName); 45 virtual ~ScUndoInsertTab() override; 46 47 virtual void Undo() override; 48 virtual void Redo() override; 49 virtual void Repeat(SfxRepeatTarget& rTarget) override; 50 virtual bool CanRepeat(SfxRepeatTarget& rTarget) const override; 51 52 virtual OUString GetComment() const override; 53 54 private: 55 OUString sNewName; 56 std::unique_ptr<SdrUndoAction> pDrawUndo; 57 sal_uLong nEndChangeAction; 58 SCTAB nTab; 59 bool bAppend; 60 61 void SetChangeTrack(); 62 }; 63 64 class ScUndoInsertTables : public ScSimpleUndo 65 { 66 public: 67 ScUndoInsertTables( 68 ScDocShell* pNewDocShell, 69 SCTAB nTabNum, 70 const std::vector<OUString>& newNameList); 71 virtual ~ScUndoInsertTables() override; 72 73 virtual void Undo() override; 74 virtual void Redo() override; 75 virtual void Repeat(SfxRepeatTarget& rTarget) override; 76 virtual bool CanRepeat(SfxRepeatTarget& rTarget) const override; 77 78 virtual OUString GetComment() const override; 79 80 private: 81 82 std::unique_ptr<SdrUndoAction> pDrawUndo; 83 std::vector<OUString> aNameList; 84 sal_uLong nStartChangeAction; 85 sal_uLong nEndChangeAction; 86 SCTAB nTab; 87 88 void SetChangeTrack(); 89 }; 90 91 class ScUndoDeleteTab: public ScMoveUndo 92 { 93 public: 94 ScUndoDeleteTab( 95 ScDocShell* pNewDocShell, 96 const std::vector<SCTAB> &theTabs, //SCTAB nNewTab, 97 ScDocumentUniquePtr pUndoDocument, 98 std::unique_ptr<ScRefUndoData> pRefData ); 99 virtual ~ScUndoDeleteTab() override; 100 101 virtual void Undo() override; 102 virtual void Redo() override; 103 virtual void Repeat(SfxRepeatTarget& rTarget) override; 104 virtual bool CanRepeat(SfxRepeatTarget& rTarget) const override; 105 106 virtual OUString GetComment() const override; 107 108 private: 109 std::vector<SCTAB> theTabs; 110 sal_uLong nStartChangeAction; 111 sal_uLong nEndChangeAction; 112 113 void SetChangeTrack(); 114 }; 115 116 class ScUndoRenameTab: public ScSimpleUndo 117 { 118 public: 119 ScUndoRenameTab( 120 ScDocShell* pNewDocShell, 121 SCTAB nT, 122 const OUString& rOldName, 123 const OUString& rNewName); 124 virtual ~ScUndoRenameTab() override; 125 126 virtual void Undo() override; 127 virtual void Redo() override; 128 virtual void Repeat(SfxRepeatTarget& rTarget) override; 129 virtual bool CanRepeat(SfxRepeatTarget& rTarget) const override; 130 131 virtual OUString GetComment() const override; 132 133 private: 134 SCTAB nTab; 135 OUString sOldName; 136 OUString sNewName; 137 138 void DoChange( SCTAB nTab, const OUString& rName ) const; 139 }; 140 141 class ScUndoMoveTab: public ScSimpleUndo 142 { 143 public: 144 ScUndoMoveTab( 145 ScDocShell* pNewDocShell, 146 std::unique_ptr<std::vector<SCTAB>> pOldTabs, 147 std::unique_ptr<std::vector<SCTAB>> pNewTabs, 148 std::unique_ptr<std::vector< OUString>> pOldNames = nullptr, 149 std::unique_ptr<std::vector< OUString>> pNewNames = nullptr ); 150 151 virtual ~ScUndoMoveTab() override; 152 153 virtual void Undo() override; 154 virtual void Redo() override; 155 virtual void Repeat(SfxRepeatTarget& rTarget) override; 156 virtual bool CanRepeat(SfxRepeatTarget& rTarget) const override; 157 158 virtual OUString GetComment() const override; 159 160 private: 161 std::unique_ptr< ::std::vector<SCTAB> > mpOldTabs; 162 std::unique_ptr< ::std::vector<SCTAB> > mpNewTabs; 163 std::unique_ptr< ::std::vector< OUString> > mpOldNames; 164 std::unique_ptr< ::std::vector< OUString> > mpNewNames; 165 166 void DoChange( bool bUndo ) const; 167 }; 168 169 class ScUndoCopyTab: public ScSimpleUndo 170 { 171 public: 172 ScUndoCopyTab( 173 ScDocShell* pNewDocShell, 174 std::unique_ptr<std::vector<SCTAB>> pOldTabs, 175 std::unique_ptr<std::vector<SCTAB>> pNewTabs, 176 std::unique_ptr<std::vector< OUString>> pNewNames = nullptr ); 177 178 virtual ~ScUndoCopyTab() override; 179 180 virtual void Undo() override; 181 virtual void Redo() override; 182 virtual void Repeat(SfxRepeatTarget& rTarget) override; 183 virtual bool CanRepeat(SfxRepeatTarget& rTarget) const override; 184 185 virtual OUString GetComment() const override; 186 187 private: 188 std::unique_ptr< ::std::vector<SCTAB> > mpOldTabs; 189 std::unique_ptr< ::std::vector<SCTAB> > mpNewTabs; 190 std::unique_ptr< ::std::vector< OUString> > mpNewNames; 191 std::unique_ptr<SdrUndoAction> pDrawUndo; 192 193 void DoChange() const; 194 }; 195 196 class ScUndoTabColor: public ScSimpleUndo 197 { 198 public: 199 ScUndoTabColor( 200 ScDocShell* pNewDocShell, 201 SCTAB nT, 202 const Color& aOTabBgColor, 203 const Color& aNTabBgColor); 204 ScUndoTabColor( 205 ScDocShell* pNewDocShell, 206 const ScUndoTabColorInfo::List& rUndoTabColorList); 207 virtual ~ScUndoTabColor() override; 208 209 virtual void Undo() override; 210 virtual void Redo() override; 211 virtual void Repeat(SfxRepeatTarget& rTarget) override; 212 virtual bool CanRepeat(SfxRepeatTarget& rTarget) const override; 213 214 virtual OUString GetComment() const override; 215 216 private: 217 ScUndoTabColorInfo::List aTabColorList; 218 219 void DoChange(bool bUndoType) const; 220 }; 221 222 class ScUndoMakeScenario: public ScSimpleUndo 223 { 224 public: 225 ScUndoMakeScenario( 226 ScDocShell* pNewDocShell, 227 SCTAB nSrc, SCTAB nDest, 228 const OUString& rN, const OUString& rC, 229 const Color& rCol, ScScenarioFlags nF, 230 const ScMarkData& rMark ); 231 virtual ~ScUndoMakeScenario() override; 232 233 virtual void Undo() override; 234 virtual void Redo() override; 235 virtual void Repeat(SfxRepeatTarget& rTarget) override; 236 virtual bool CanRepeat(SfxRepeatTarget& rTarget) const override; 237 238 virtual OUString GetComment() const override; 239 240 private: 241 std::unique_ptr<ScMarkData> mpMarkData; 242 SCTAB nSrcTab; 243 SCTAB nDestTab; 244 OUString aName; 245 OUString aComment; 246 Color aColor; 247 ScScenarioFlags nFlags; 248 std::unique_ptr<SdrUndoAction> pDrawUndo; 249 }; 250 251 class ScUndoImportTab : public ScSimpleUndo 252 { 253 public: 254 ScUndoImportTab( 255 ScDocShell* pShell, 256 SCTAB nNewTab, SCTAB nNewCount ); 257 virtual ~ScUndoImportTab() override; 258 259 virtual void Undo() override; 260 virtual void Redo() override; 261 virtual void Repeat(SfxRepeatTarget& rTarget) override; 262 virtual bool CanRepeat(SfxRepeatTarget& rTarget) const override; 263 264 virtual OUString GetComment() const override; 265 266 private: 267 SCTAB nTab; 268 SCTAB nCount; 269 ScDocumentUniquePtr xRedoDoc; 270 std::unique_ptr<SdrUndoAction> pDrawUndo; 271 272 void DoChange() const; 273 }; 274 275 class ScUndoRemoveLink : public ScSimpleUndo 276 { 277 public: 278 ScUndoRemoveLink( // Call before delete! 279 ScDocShell* pShell, 280 const OUString& rDoc ); 281 virtual ~ScUndoRemoveLink() override; 282 283 virtual void Undo() override; 284 virtual void Redo() override; 285 virtual void Repeat(SfxRepeatTarget& rTarget) override; 286 virtual bool CanRepeat(SfxRepeatTarget& rTarget) const override; 287 288 virtual OUString GetComment() const override; 289 290 private: 291 OUString aDocName; 292 OUString aFltName; 293 OUString aOptions; 294 sal_uLong nRefreshDelay; 295 sal_uInt16 nCount; 296 std::unique_ptr<SCTAB[]> 297 pTabs; 298 std::unique_ptr<ScLinkMode[]> 299 pModes; 300 std::unique_ptr<OUString[]> 301 pTabNames; 302 303 void DoChange( bool bLink ) const; 304 }; 305 306 class ScUndoShowHideTab : public ScSimpleUndo 307 { 308 public: 309 ScUndoShowHideTab( 310 ScDocShell* pShell, 311 const std::vector<SCTAB>& newUndoTabs, 312 bool bNewShow ); 313 virtual ~ScUndoShowHideTab() override; 314 315 virtual void Undo() override; 316 virtual void Redo() override; 317 virtual void Repeat(SfxRepeatTarget& rTarget) override; 318 virtual bool CanRepeat(SfxRepeatTarget& rTarget) const override; 319 320 virtual OUString GetComment() const override; 321 322 private: 323 std::vector<SCTAB> undoTabs; 324 bool bShow; 325 326 void DoChange( bool bShow ) const; 327 }; 328 329 /** This class implements undo & redo of document protect & unprotect 330 operations. */ 331 class ScUndoDocProtect : public ScSimpleUndo 332 { 333 public: 334 ScUndoDocProtect(ScDocShell* pShell, ::std::unique_ptr<ScDocProtection> && pProtectSettings); 335 virtual ~ScUndoDocProtect() override; 336 337 virtual void Undo() override; 338 virtual void Redo() override; 339 virtual void Repeat(SfxRepeatTarget& rTarget) override; 340 virtual bool CanRepeat(SfxRepeatTarget& rTarget) const override; 341 342 virtual OUString GetComment() const override; 343 344 private: 345 ::std::unique_ptr<ScDocProtection> mpProtectSettings; 346 347 void DoProtect(bool bProtect); 348 }; 349 350 /** This class implements undo & redo of both protect and unprotect of 351 sheet. */ 352 class ScUndoTabProtect : public ScSimpleUndo 353 { 354 public: 355 ScUndoTabProtect(ScDocShell* pShell, SCTAB nTab, 356 std::unique_ptr<ScTableProtection> && pProtectSettings); 357 virtual ~ScUndoTabProtect() override; 358 359 virtual void Undo() override; 360 virtual void Redo() override; 361 virtual void Repeat(SfxRepeatTarget& rTarget) override; 362 virtual bool CanRepeat(SfxRepeatTarget& rTarget) const override; 363 364 virtual OUString GetComment() const override; 365 366 private: 367 SCTAB mnTab; 368 ::std::unique_ptr<ScTableProtection> mpProtectSettings; 369 370 void DoProtect(bool bProtect); 371 }; 372 373 class ScUndoPrintRange : public ScSimpleUndo 374 { 375 public: 376 ScUndoPrintRange( ScDocShell* pShell, SCTAB nNewTab, 377 std::unique_ptr<ScPrintRangeSaver> pOld, 378 std::unique_ptr<ScPrintRangeSaver> pNew ); 379 virtual ~ScUndoPrintRange() override; 380 381 virtual void Undo() override; 382 virtual void Redo() override; 383 virtual void Repeat(SfxRepeatTarget& rTarget) override; 384 virtual bool CanRepeat(SfxRepeatTarget& rTarget) const override; 385 386 virtual OUString GetComment() const override; 387 388 private: 389 SCTAB nTab; 390 std::unique_ptr<ScPrintRangeSaver> pOldRanges; 391 std::unique_ptr<ScPrintRangeSaver> pNewRanges; 392 393 void DoChange( bool bUndo ); 394 }; 395 396 class ScUndoScenarioFlags: public ScSimpleUndo 397 { 398 public: 399 ScUndoScenarioFlags( 400 ScDocShell* pNewDocShell, SCTAB nT, 401 const OUString& rON, const OUString& rNN, 402 const OUString& rOC, const OUString& rNC, 403 const Color& rOCol, const Color& rNCol, 404 ScScenarioFlags nOF, ScScenarioFlags nNF); 405 406 virtual ~ScUndoScenarioFlags() override; 407 408 virtual void Undo() override; 409 virtual void Redo() override; 410 virtual void Repeat(SfxRepeatTarget& rTarget) override; 411 virtual bool CanRepeat(SfxRepeatTarget& rTarget) const override; 412 413 virtual OUString GetComment() const override; 414 415 private: 416 SCTAB nTab; 417 OUString aOldName; 418 OUString aNewName; 419 OUString aOldComment; 420 OUString aNewComment; 421 Color aOldColor; 422 Color aNewColor; 423 ScScenarioFlags nOldFlags; 424 ScScenarioFlags nNewFlags; 425 }; 426 427 class ScUndoRenameObject: public ScSimpleUndo 428 { 429 public: 430 ScUndoRenameObject( 431 ScDocShell* pNewDocShell, const OUString& rPN, 432 const OUString& rON, const OUString& rNN ); 433 434 virtual ~ScUndoRenameObject() override; 435 436 virtual void Undo() override; 437 virtual void Redo() override; 438 virtual void Repeat(SfxRepeatTarget& rTarget) override; 439 virtual bool CanRepeat(SfxRepeatTarget& rTarget) const override; 440 441 virtual OUString GetComment() const override; 442 443 private: 444 OUString aPersistName; // to find object (works only for OLE objects) 445 OUString aOldName; 446 OUString aNewName; 447 448 SdrObject* GetObject(); 449 }; 450 451 class ScUndoLayoutRTL : public ScSimpleUndo 452 { 453 public: 454 ScUndoLayoutRTL( ScDocShell* pShell, SCTAB nNewTab, bool bNewRTL ); 455 virtual ~ScUndoLayoutRTL() override; 456 457 virtual void Undo() override; 458 virtual void Redo() override; 459 virtual void Repeat(SfxRepeatTarget& rTarget) override; 460 virtual bool CanRepeat(SfxRepeatTarget& rTarget) const override; 461 462 virtual OUString GetComment() const override; 463 464 private: 465 SCTAB nTab; 466 bool bRTL; 467 468 void DoChange( bool bNew ); 469 }; 470 471 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 472