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 10 #pragma once 11 12 #include "address.hxx" 13 #include "cellvalue.hxx" 14 #include "celltextattr.hxx" 15 16 #include <memory> 17 #include <vector> 18 19 class ScDocument; 20 class ScColumn; 21 class ScPatternAttr; 22 class ScPostIt; 23 class ScConditionalFormatList; 24 25 namespace sc { 26 27 struct ColumnBlockPosition; 28 class ColumnBlockPositionSet; 29 30 class ClipContextBase 31 { 32 std::unique_ptr<ColumnBlockPositionSet> mpSet; 33 34 public: 35 ClipContextBase() = delete; 36 ClipContextBase(const ClipContextBase&) = delete; 37 const ClipContextBase& operator=(const ClipContextBase&) = delete; 38 ClipContextBase(ScDocument& rDoc); 39 virtual ~ClipContextBase(); 40 41 ColumnBlockPosition* getBlockPosition(SCTAB nTab, SCCOL nCol); getBlockPositionSet()42 ColumnBlockPositionSet* getBlockPositionSet() { return mpSet.get(); } 43 }; 44 45 class SC_DLLPUBLIC CopyFromClipContext final : public ClipContextBase 46 { 47 SCCOL mnDestCol1; 48 SCCOL mnDestCol2; 49 SCROW mnDestRow1; 50 SCROW mnDestRow2; 51 SCTAB mnTabStart; 52 SCTAB mnTabEnd; 53 ScDocument& mrDestDoc; 54 ScDocument* mpRefUndoDoc; 55 ScDocument* mpClipDoc; 56 InsertDeleteFlags mnInsertFlag; 57 InsertDeleteFlags mnDeleteFlag; 58 59 std::vector<ScCellValue> maSingleCells; 60 std::vector<sc::CellTextAttr> maSingleCellAttrs; 61 std::vector<const ScPatternAttr*> maSinglePatterns; 62 std::vector<const ScPostIt*> maSingleNotes; 63 64 ScConditionalFormatList* mpCondFormatList; 65 bool mbAsLink:1; 66 bool mbSkipAttrForEmptyCells:1; 67 bool mbCloneNotes:1; 68 bool mbTableProtected:1; 69 70 public: 71 72 struct Range 73 { 74 SCCOL mnCol1; 75 SCCOL mnCol2; 76 SCROW mnRow1; 77 SCROW mnRow2; 78 }; 79 80 CopyFromClipContext() = delete; 81 CopyFromClipContext(ScDocument& rDoc, 82 ScDocument* pRefUndoDoc, ScDocument* pClipDoc, InsertDeleteFlags nInsertFlag, 83 bool bAsLink, bool bSkipAttrForEmptyCells); 84 85 virtual ~CopyFromClipContext() override; 86 87 void setTabRange(SCTAB nStart, SCTAB nEnd); 88 89 SCTAB getTabStart() const; 90 SCTAB getTabEnd() const; 91 92 void setDestRange( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2 ); 93 Range getDestRange() const; 94 95 ScDocument* getUndoDoc(); 96 ScDocument* getClipDoc(); getDestDoc()97 ScDocument* getDestDoc() { return &mrDestDoc; } 98 InsertDeleteFlags getInsertFlag() const; 99 100 void setDeleteFlag( InsertDeleteFlags nFlag ); 101 InsertDeleteFlags getDeleteFlag() const; 102 103 /** 104 * Set the column size of a "single cell" row, which is used when copying 105 * a single row of cells in a clip doc and pasting it into multiple 106 * rows by replicating it. 107 */ 108 void setSingleCellColumnSize( size_t nSize ); 109 110 ScCellValue& getSingleCell( size_t nColOffset ); 111 sc::CellTextAttr& getSingleCellAttr( size_t nColOffset ); 112 113 void setSingleCell( const ScAddress& rSrcPos, const ScColumn& rSrcCol ); 114 115 116 const ScPatternAttr* getSingleCellPattern( size_t nColOffset ) const; 117 void setSingleCellPattern( size_t nColOffset, const ScPatternAttr* pAttr ); 118 119 const ScPostIt* getSingleCellNote( size_t nColOffset ) const; 120 void setSingleCellNote( size_t nColOffset, const ScPostIt* pNote ); 121 122 void setCondFormatList( ScConditionalFormatList* pCondFormatList ); 123 ScConditionalFormatList* getCondFormatList(); 124 125 void setTableProtected( bool b ); 126 bool isTableProtected() const; 127 128 bool isAsLink() const; 129 bool isSkipAttrForEmptyCells() const; 130 bool isCloneNotes() const; 131 bool isDateCell( const ScColumn& rCol, SCROW nRow ) const; 132 }; 133 134 class CopyToClipContext final : public ClipContextBase 135 { 136 bool mbKeepScenarioFlags:1; 137 138 public: 139 CopyToClipContext(ScDocument& rDoc, bool bKeepScenarioFlags); 140 virtual ~CopyToClipContext() override; 141 142 bool isKeepScenarioFlags() const; 143 }; 144 145 class CopyToDocContext final : public ClipContextBase 146 { 147 bool mbStartListening; 148 149 public: 150 CopyToDocContext(ScDocument& rDoc); 151 virtual ~CopyToDocContext() override; 152 153 void setStartListening( bool b ); 154 bool isStartListening() const; 155 }; 156 157 class MixDocContext final : public ClipContextBase 158 { 159 public: 160 MixDocContext(ScDocument& rDoc); 161 virtual ~MixDocContext() override; 162 }; 163 164 } 165 166 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 167